通过Nginx、Consul、Upsync实现动态负载均衡和服务平滑发布 (2)

新建一个集群启动脚本:

cd /data/consul touch service.sh # /data/consul/service.sh内容如下: nohup /data/consul/consul agent -config-file=http://www.likecs.com/data/consul/node1/consul_conf.json > /dev/null 2>&1 & sleep 10 nohup /data/consul/consul agent -config-file=http://www.likecs.com/data/consul/node2/consul_conf.json -retry-join=192.168.56.200:8311 > /dev/null 2>&1 & sleep 10 nohup /data/consul/consul agent -config-file=http://www.likecs.com/data/consul/node3/consul_conf.json -retry-join=192.168.56.200:8311 > /dev/null 2>&1 &

如果集群启动成功,观察节点1中的日志如下:

通过Nginx、Consul、Upsync实现动态负载均衡和服务平滑发布

通过节点1的HTTP端点访问后台管理页面如下(可见当前的节点1被标记了一颗红色的星星,说明当前节点1是Leader节点):

通过Nginx、Consul、Upsync实现动态负载均衡和服务平滑发布

至此,Consul单机伪集群搭建完成(其实分布式集群的搭建大同小异,注意集群节点所在的机器需要开放使用到的端口的访问权限),由于Consul使用Raft作为共识算法,该算法是强领导者模型,也就是只有Leader节点可以进行写操作,因此接下来的操作都需要使用节点1的HTTP端点,就是192.168.56.200:8510。

重点笔记:如果Consul集群重启或者重新选举,Leader节点有可能发生更变,外部使用的时候建议把Leader节点的HTTP端点抽离到可动态更新的配置项中或者动态获取Leader节点的IP和端口。

Nginx编译安装

直接从官网下载二级制的安装包并且解压:

mkdir /data/nginx cd /data/nginx wget tar -zxvf nginx-1.18.0.tar.gz

解压后的所有源文件在/data/nginx/nginx-1.18.0目录下,编译之前需要安装pcre-devel、zlib-devel依赖:

yum -y install pcre-devel yum install -y zlib-devel

编译命令如下:

cd /data/nginx/nginx-1.18.0 ./configure --prefix=http://www.likecs.com/data/nginx

如果./configure执行过程不出现问题,那么结果如下:

通过Nginx、Consul、Upsync实现动态负载均衡和服务平滑发布

接着执行make:

cd /data/nginx/nginx-1.18.0 make

如果make执行过程不出现问题,那么结果如下:

通过Nginx、Consul、Upsync实现动态负载均衡和服务平滑发布

最后,如果是首次安装,可以执行make install进行安装(实际上只是拷贝编译好的文件到--prefix指定的路径下):

cd /data/nginx/nginx-1.18.0 make install

通过Nginx、Consul、Upsync实现动态负载均衡和服务平滑发布

make install执行完毕后,/data/nginx目录下新增了数个文件夹:

通过Nginx、Consul、Upsync实现动态负载均衡和服务平滑发布

其中,Nginx启动程序在sbin目录下,logs是其日志目录,conf是其配置文件所在的目录。尝试启动一下Nginx:

/data/nginx/sbin/nginx

然后访问虚拟机的80端口,从而验证Nginx已经正常启动:

通过Nginx、Consul、Upsync实现动态负载均衡和服务平滑发布

通过nginx-upsync-module和nginx_upstream_check_module模块进行编译

上面做了一个Nginx极简的编译过程,实际上,在做动态负载均衡的时候需要添加nginx-upsync-module和nginx_upstream_check_module两个模块,两个模块必须提前下载源码,并且在编译Nginx过程中需要指定两个模块的物理路径:

mkdir /data/nginx/modules cd /data/nginx/modules # 这里是Github的资源,不能用wget下载,具体是: nginx-upsync-module需要下载release里面的最新版本:v2.1.2 nginx_upstream_check_module需要下载整个项目的源码,主要用到靠近当前版本的补丁,使用patch命令进行补丁升级

通过Nginx、Consul、Upsync实现动态负载均衡和服务平滑发布

通过Nginx、Consul、Upsync实现动态负载均衡和服务平滑发布

下载完成后分别(解压)放在/data/nginx/modules目录下:

ll /data/nginx/modules drwxr-xr-x. 6 root root 4096 Nov 3 2019 nginx_upstream_check_module-master drwxrwxr-x. 5 root root 93 Dec 18 00:56 nginx-upsync-module-2.1.2

编译前,还要先安装一些前置依赖组件:

yum -y install libpcre3 libpcre3-dev ruby zlib1g-dev patch

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjjwx.html