nginx实现keepalived高可用

nginx实现keepalived高可用
keepalived是一个服务器级别的高可用工具,当服务器停止,或者网络中断不能发送心跳包时,将会实现vip漂移,如果只是某一个服务器停止,就希望进行VIP漂移的话,keepalived自身是不能监控服务运行状态的,需要配合额外的监控脚本来完成

keepalived配置故障案例说明
1、由于keepalived自身并不能实现对服务或软件运行情况的检测,于是我们使用keepalived的vrrp_script脚本模块并且编写nginx运行状态的监控脚本,配合使用来监控nginx的运行情况

2、最开始了解到,keepalived的脚本模块是可以通过判断脚本的运行状态,来进行升降优先级的操作,来完成VIP漂移的,于是我们的配置思路就是,脚本中if判断nginx运行情况,如果nginx停了,用exit赋予 ? 为 1 , 如 果 没 停 赋 予 ?为1,如果没停赋予 ?1?为0,这样keepalived就可以实现nginx一旦停止,主上的优先级就会降低,nginx如果不停,主的优先级就不会降低,一但主的优先级降低以后,VIP就会飘到从上。

3、在后续的测试过程中,我们发现有一个小问题,就是主上的nginx一被修好,主会立刻将vip抢占回来,我们希望尽可能减少VIP漂移的次数,于是我们在主服务器上添加了一个nopreempt参数,来进行不抢占的设定,进过测试,确实实现了主上的nginx恢复以后VIP不会被抢占回来了

4、但是又有新的问题出现了,就是我们测试如果从服务器nginx也停止,主依然不会抢占回VIP,于是为了解决这个问题我们重新设计了整个VIP漂移的方法,重新写了脚本,将VIP漂移的基准不在使用优先级的方式,而是使用nginx一旦停止,就由脚本实现将keepalived服务直接关闭的方式来完成VIP漂移

5、但是这样的方法就是有点麻烦,每次主上的nginx恢复后,还需要手动重启keepalived,而且就是因为手动重启keepalived,我们发现了新的问题,就是主上的keepalived一旦手动启动后,vip又会被抢占回来,相当于nopreempt参数不生效了

6、为了解决这个问题,我们最终通过查阅各种资料,将主上的state参数有MASTER改为SLAVE,即主服务器和从服务器的state参数都是SLAVE,再测试的时候发现问题就解决了,VIP不会再被抢占,并且从上的nginx停止后,主会把VIP启动,解决了所有的问题

概括:
1、使用降低优先级的方式进行VIP漂移,VIP会被主抢占
2、加了nopreempt参数,发现从服务器停止后,VIP不能漂移回来
3、改脚本,nginx一停,就关闭keepalived,但这样一来,每次从起keepalived,VIP又会被抢占
4、将state参数都给成SLAVE,这样在重启keepalived的时候,nopreempt参数也能生效不被抢占

nginx实现keepalived高可用工作文档:
nginx实现keepalived高可用=
部署环境:
主nginx负载均衡器IP:192.168.40.11
从nginx负载均衡器IP:192.168.40.15
VIP:192.168.40.150
tomcat1:192.168.40.12
tomcat2:192.168.40.13
tomcat3:192.168.40.14

=安装Tomcat==
tar -xf jdk-8u60-linux-x64.tar.gz
mv jdk1.8.0_60/ /usr/local/java
echo -e “export JAVA_HOME=/usr/local/java\nexport PATH=/usr/local/java/bin:$PATH” >> /etc/profile
. /etc/profile
echo $PATH
tar -xf apache-tomcat-8.5.41.tar.gz
mv apache-tomcat-8.5.41 /usr/local/tomcat
systemctl stop firewalld
setenforce 0

增加网页测试页=
cd /usr/local/tomcat/webapps/ROOT/
vim 1.jsp
tomcat1测试页内容:111
tomcat2测试页内容:222
tomcat3测试页内容:333

/usr/local/tomcat/bin/startup.sh
启动Tomcat并使用浏览器测试,看是否能打开三台Tomcat的测试页
或者直接在另一台主机的终端中输入curl {tomcat服务器IP}:8080/1.jsp

安装nginx
yum -y install gcc gcc-c++ pcre-devel zlib-devel make
systemctl stop firewalld
setenforce 0
tar -xf nginx-1.12.2.tar.gz -C /usr/src/
useradd -M -s /sbin/nologin -r nginx
cd /usr/src/nginx-1.12.2/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-stream --with-http_stub_status_module && make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

修改nginx主配置文件,实现负载均衡====
vim /usr/local/nginx/conf/nginx.conf
upstream tomcat { //在http模块中增加负载均衡地址池
server 192.168.40.12:8080;
server 192.168.40.13:8080;
server 192.168.40.14:8080;
}

server {
listen 80;
server_name localhost;

    charset utf-8;

    #access_log  logs/host.access.log  main;

    location / {
        root   html;
        index  index.html index.htm;
            proxy_pass http://tomcat;		//将访问请求转发给地址池
    }       

==源码安装keepalived
yum -y install gcc gcc-c++ make openssl-devel
tar -xf keepalived-1.2.13.tar.gz -C /usr/src/
cd /usr/src/keepalived-1.2.13/
./configure --prefix=/ && make && make install
keepalived的源码安装和其他源码安装不同,如果直接将其安装到/usr/local/中则无法在etc目录下生成配
置文件,keepalived默认在/etc下寻找自己的配置文件

=修改主keepalived配置文件=
vim /etc/keepalived/keepalived.conf

global_defs { //在global_defs模块中只保留以下内容
notification_email {
}
router_id nginx1 //指定一个名称方便在报警时知道那个服务器出现了问题
}

vrrp_script nginx { //指定监控脚本,因为keepalived是针对服务器的监控软件,无法对单个服
务进行监控实现VIP的漂移,所以我们需要自定义一个服务监控脚本,让
keepalived通过配合监控脚本实现VIP漂移的功能
nginx为定义的监控名称
script /opt/nginx_server.sh //指定监控脚本的所在位置
interval 3 //指定多长时间执行一次
weight -10 //指定降低优先级,如果监控脚本的返回值($?)不等于0,则执行降10
级,从而实现VIP漂移操作
}

vrrp_instance VI_1 {
state SELVE //默认为MASTER,如果设置不抢占参数,那么这里需要写成SELVE,因为
脚本中当检测到nginx未启动会同时关闭keepalived,如果设置成MASTER
那么会造成不抢占参数失效,当主keepalived重新启动后,VIP依然会被抢
回来
interface ens32 //指定在哪个网卡设置VIP
virtual_router_id 51
priority 100 //优先级
nopreempt //启用不抢占,针对不同的服务,来确定是否开启不抢占功能,但如果开启
该功能,当从服务器当机后,因为主服务器设置的是不抢占,那么就无法将
VIP漂移到主服务器上,
所以我们需要在监控脚本中写上service keepalived stop,这样当nginx停
止后keepalived也将会随着一起停止,因为无法发送hello包所以VIP会漂
移回主keepalived
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script { //应用监控脚本
nginx
}
virtual_ipaddress {
192.168.40.150 //指定VIP
}
}

=修改从keepalived配置文件=
vim /etc/keepalived/keepalived.conf

global_defs {
notification_email {
}
router_id nginx2
}
vrrp_script nginx {
script /opt/nginx_server.sh
interval 3
weight -10
}
vrrp_instance VI_1 {
state SLAVE
interface ens32
virtual_router_id 51
priority 99 //降低优先级
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
nginx
}
virtual_ipaddress {
192.168.40.150
}
}
编辑服务监控脚本
#!/bin/bash
if [ $(netstat -anpt |grep nginx |wc -l) -eq 0 ]
then
service keepalived stop
else
exit 0
fi

将该脚本放到所有keepalived服务器中的/opt/中并命名为nginx_server.sh
chmod +x /opt/nginx_server.sh
启动nginx及keepalived
nginx
service keepalived start

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值