Consul+Nginx+Upsync+Linux+Keepalived+Lvs的动态负载均衡

 

注:

linux我使用的是7.0版本,Nginx版本是1.9.9,记得关闭防火墙

开始正文(我是在/usr/local中配置的):

安装PCRE库:

1.cd /usr/local/

2.wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.33/pcre-8.33.tar.gz

3.tar -zxvf pcre-8.33.tar.gz

4cd pcre-8.33

5. ./configure

6.make && make install

如果报错:

在 linux 中执行 wget 命令提示 -bash: wget: command not found

解决办法 yum -y install wget

安装SSL库:

1.cd /usr/local/

2.wget http://www.openssl.org/source/openssl-1.0.1j.tar.gz

3.tar -zxvf openssl-1.0.1j.tar.gz

4cd openssl-1.0.1j

5. ./config

6.make && make install

安装zlib库:

1.cd /usr/local/

2.wget http://zlib.net/zlib-1.2.11.tar.gz

3.tar -zxvf zlib-1.2.11.tar.gz

4.cd zlib-1.2.11

5. ./configure

6.make && make install

安装Nginx:

1.cd /usr/local/

2.wget http://nginx.org/download/nginx-1.9.9.tar.gz

3.tar -zxvf nginx-1.9.9.tar.gz

4.groupadd nginx

5.useradd -g nginx -s /sbin/nologin nginx

6.mkdir -p /var/tmp/nginx/client/

7.mkdir -p /usr/local/nginx

8.cd nginx-1.9.9

9. ./configure   --prefix=/usr/local/nginx   --user=nginx   --group=nginx   --with-http_ssl_module   --with-http_flv_module   --with-http_stub_status_module   --with-http_gzip_static_module   --with-http_realip_module   --http-client-body-temp-path=/var/tmp/nginx/client/   --http-proxy-temp-path=/var/tmp/nginx/proxy/   --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/   --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi   --http-scgi-temp-path=/var/tmp/nginx/scgi   --with-pcre --add-module=../nginx-upsync-module-master

此时如果报错SSL modules require the OpenSSL library

解决办法

yum -y install openssl openssl-devel,然后重新执行以上代码

10.make && make install

如下图已经启动完成

 

 

安装Consul:

1.cd /usr/local/

2.wget https://releases.hashicorp.com/consul/0.7.5/consul_0.7.5_linux_amd64.zip

3.unzip consul_0.7.5_linux_amd64.zip

如果解压出现该错误

-bash: unzip: 未找到命令

解决办法

yum -y install unzip

执行./consul出现如下内容说明已安装成功

 

安装nginx-upsync-module:

1.cd /usr/local/

2.wget https://github.com/weibocom/nginx-upsync-module/archive/master.zip

unzip master.zip

如果解压出现该错误

-bash: unzip: 未找到命令

解决办法

yum -y install unzip

安装Keepalived:

1.下载keepalived

wget http://www.keepalived.org/software/keepalived-1.2.18.tar.gz

2.解压安装:

tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/

3.下载插件openssl

yum install -y openssl openssl-devel(需要安装一个软件包)

4.开始编译keepalived

cd keepalived-1.2.18/ && ./configure --prefix=/usr/local/keepalived

5. make && make install

执行./configure --prefix=/usr/local/keepalived时报错:configure: error: Popt libraries is required

出现此错误的原因:

未安装popt的开发包

解决方法:

yum install popt-devel

安装好popt的开发包。重新执行以上步骤即可。

keepalived安装成Linux系统服务:

将keepalived安装成Linux系统服务,因为没有使用keepalived的默认安装路径,安装完成之后,需要做一些修改工作:

首先创建文件夹,将keepalived配置文件进行复制:

mkdir /etc/keepalived

cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

然后复制keepalived脚本文件:

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

ln -s /usr/local/sbin/keepalived /usr/sbin/

ln -s /usr/local/keepalived/sbin/keepalived /sbin/

安装到这一步可能会报错文件已经存在,所以执行下面代码:

cd /usr/sbin/ 

rm -f keepalived  

cp /usr/local/keepalived/sbin/keepalived  /usr/sbin/

可以设置开机启动:chkconfig keepalived on,最后再创建一个存放备份的文件夹,mkdir /usr/local/nginx/conf/servers/,到此安装完毕。

执行命令:

service keepalived start
service keepalived stop

如下图,说明安装成功

 

local目录下的内容:

 

Nginx.config配置文件:

截取关键两部分:

upstream test {
        #这个不用管,固定的
        server 127.0.0.1:11111;
        #连接ConculServer,动态获取upstream配置负载均衡信息
        upsync 192.168.44.128:8500/v1/kv/upstreams/test upsync_timeout=6m upsync_interval=500ms upsync_type=consul strong_dependency=off;
        #动态获取ConculServer相关负载均衡信息持久化到硬盘
        upsync_dump_path /usr/local/nginx/conf/servers/servers_test.conf;
    }
    server {
        listen 80;
        server_name  localhost;
        location = / {
        proxy_pass http://test;      
        index index.html index.htm;
        proxy_connect_timeout 1;
        proxy_send_timeout 1;
        proxy_read_timeout 1;
        }
    }

 

Keepalived.config配置文件:

! Configuration File for keepalived

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh" #运行脚本
    interval 2 #检测时间间隔
    weight -20 #如果条件成立的话,则权重 -20
}
# 定义虚拟路由,AA_1 为虚拟路由的标示符,自己定义名称
vrrp_instance AA_1 {
    ###MASTER 主的意思  BACKUP 从
    state MASTER #来决定主从
    interface ens33 # 绑定虚拟 IP 的网络接口,根据自己的机器填写
    virtual_router_id 111 # 虚拟路由的 ID 号, 有主备连个nginx时,两个节点设置必须一样(自己定义的)
    mcast_src_ip 192.168.44.128 #填写虚拟机ip
    priority 100 # 节点优先级,主要比从节点优先级高
    nopreempt # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
    advert_int 1 # 组播信息发送间隔,两个节点设置必须一样,默认 1s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    
    track_script {
        chk_nginx #执行 Nginx 监控的服务
    }
    ### 虚拟IP地址配置规范 前三个一致,最后一个不一样
    virtual_ipaddress {
        192.168.44.110 # 虚拟ip
    }
}

配置完毕后在虚拟机中查看ip地址,有如下两个说明配置成功

最后部署脚本:

 #!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi

授权脚本:

chmod 777 nginx_check.sh

配置完毕,开始测试

启动keepalived:service keepalived start

启动consul(local目录下启动):./consul agent -dev -ui -node=consul-dev -client=(虚拟机ip地址)

ConculWeb的ip地址(要和虚拟机的ip地址相同):http://192.168.44.128:8500

Postman中的URL(必须用put,Postman的使用不写了,发送下面链接便可以在consulweb中的key/value中查看到):

我开了两个tomcat,一个端口号为8081,另一个为8082

http://192.168.44.128:8500/v1/kv/upstreams/test/......:8081

http://192.168.44.128:8500/v1/kv/upstreams/test/......:8082

安装好keepalived后我只要启动Lvs的vip虚拟ip地址便可以启动nginx

注:URL中的“test”是和配置文件中的一致的,192.168.44.110是我设置的虚拟ip地址,192.168.44.128是我的虚拟机的ip地址,打码的是我的ip地址,但后面必须跟两个tomcat的端口号。

 通过开启keepalived也可以开启nginx,所以不需要手动开启nginx了

 

 

至此,结束。有错地方希望各位指正。

转载于:https://www.cnblogs.com/lzh110/p/9452463.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值