返回列表 发帖

Keepalived双机热备+Nginx

Keepalived是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换和健康检查功能——判断调度服务器、节点服务器的可用性,及时隔离故障主机并替换为新的服务器,当故障主机恢复后将其重新加入群集。

Keepalived采用VRRP(虚拟路由冗余协议)热备份协议,以软件的方式实现Linux服务器的多机热备份功能。
VRRP是针对调度器的一种备份解决方案——由多台调度器组成一个热备组,通过共用的虚拟IP 地址对外提供服务;
每个热备组内同一时刻只有一台调度器提供服务,其他调度器则处于冗余状态,若当前的调度器失效了,其他调度器会自动接替(优先级决定接替顺序)虚拟IP地址,以继续提供服务。

热备组内的每台调度器都可能成为主调度器,虚拟IP地址可以在热备组内的路由器之间进行转移,所以也称之为漂移IP地址。


图片1.png


Nginx的安装可参考:安装服务器安全狗、网站安全狗(Nginx版)


主调度器master:192.168.168.130/24
备用调度器 slave::192.168.168.131/24

实验中,设置了一个(VIP)虚拟IP地址:(可以有多个的)
VIP:192.168.168.180



master的配置:(实验中用的是本地光盘Yum源)
yum -y install gcc-c++ vim
yum -y install kernel-devel openssl-devel popt-devel
yum -y install ipvsadm*



查看系统的内核版本:
[root@master ~]# uname -r
2.6.32-696.el6.x86_64


下载Keepalived: https://pan.baidu.com/s/19i7pfnmd4Dv9pMKM5NPU-w   提取码:40hr

编译安装Keepalived:
tar -zxvf keepalived-1.2.24.tar.gz -C /usr/local
cd /usr/local/keepalived-1.2.24/
./configure  --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-696.el6.x86_64/
make && make install


master的keepalived配置文件:
cat >/etc/keepalived/keepalived.conf<< EOF
! Configuration File for keepalived
global_defs {
        router_id Master  ## 每个参与热备的调度器都要指定不同的名字
}
vrrp_instance VI_1 {
        state MASTER  ## 热备状态,MASTER表示主调度器
        interface eth0  ## 承载VIP地址的物理接口
        virtual_router_id 1  ## 虚拟路由器的ID,每个热备组保持一致
        priority 100  ## 优先级,数值越大,优先级越高
        advert_int 1
        authentication {
                auth_type PASS
                auth_pass 888   ## 自定义密码,密码要一致
                        }
        virtual_ipaddress {
                        192.168.168.180   ## 指定虚拟IP地址
                        }
}
EOF


启动Keepalived:
chmod a+x /etc/init.d/keepalived
chkconfig --add keepalived
chkconfig --level 35 keepalived on
service keepalived start


验证:
[root@master ~]# ip addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:2b:17:3a brd ff:ff:ff:ff:ff:ff
    inet 192.168.168.130/24 brd 192.168.168.255 scope global eth0
    inet 192.168.168.180/32 scope global eth0
    inet6 fe80::20c:29ff:fe2b:173a/64 scope link
       valid_lft forever preferred_lft forever









######
slave的配置:(实验中用的是本地光盘Yum源)
yum -y install gcc-c++ vim
yum -y install kernel-devel openssl-devel popt-devel
yum -y install ipvsadm*


查看系统的内核版本:
[root@slave ~]# uname -r
2.6.32-696.el6.x86_64


编译安装Keepalived:
tar -zxvf keepalived-1.2.24.tar.gz -C /usr/local
cd /usr/local/keepalived-1.2.24/
./configure  --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-696.el6.x86_64/
make && make install


slave的keepalived配置文件:
cat >/etc/keepalived/keepalived.conf<< EOF
! Configuration File for keepalived
global_defs {
                router_id Slave1  ## 每个参与热备的调度器都要指定不同的名字
}

vrrp_instance VI_1 {
        state SLAVE  ## 热备状态,SLAVE表示备用调度器
        interface eth1  ## 承载VIP地址的物理接口
        virtual_router_id 1  ## 虚拟路由器的ID,每个热备组保持一致
        priority 99  ## 优先级,要低于主调度器
        advert_int 1
        authentication {
                auth_type PASS
                auth_pass 888   ## 自定义密码,密码要一致
                        }
          virtual_ipaddress {
                        192.168.168.180   ## 指定虚拟IP地址
                        }
}
EOF


启动Keepalived:
chmod a+x /etc/init.d/keepalived
chkconfig --add keepalived
chkconfig --level 35 keepalived on
service keepalived start


验证:
[root@slave ~]# ip addr show dev eth1
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:71:a4:d4 brd ff:ff:ff:ff:ff:ff
    inet 192.168.168.131/24 brd 192.168.168.255 scope global eth1
    inet 192.168.168.180/32 scope global eth1
    inet6 fe80::20c:29ff:fe71:a4d4/64 scope link
       valid_lft forever preferred_lft forever




笺注:
master、slave都再重启一次keepalived服务:
service keepalived restart




客户端远程测试调度服务器的双机热备切换功能:
图片2.png


实验证明,无论是master关闭了网卡,还是slave关闭了网卡,客户端都可以与虚拟IP地址通讯;在切换时,可能有几秒钟的不通,但会自己恢复正常。

当客户端访问虚拟IP地址时,所有的请求(包括TCP端口的请求)都会去到活跃状态的调度服务器上;当活跃状态的调度服务器的keepalived服务不能提供服务时,客户端的访问请求才会被切换到备用的调度服务器上。



修改master的Nginx的默认首页内容:
[root@master ~]# echo 'master' > /usr/local/nginx/html/index.html

修改slave的Nginx的默认首页内容:
[root@slave ~]# echo 'slave' > /usr/local/nginx/html/index.html

可以看到客户端访问虚拟IP的TCP 80端口时,默认是去到master
图片3.png


master关闭Nginx服务:
[root@master ~]# service nginx stop


master关闭Nginx服务,其实并不能触发keepalived的切换:
图片4.png


master关闭keepalived服务:
[root@master ~]# service keepalived stop


可以看到master关闭keepalived服务后,才会触发keepalived的切换
图片5.png













######
监控本机的Nginx的状态 (一般来说,Nginx服务不会自己关闭的)

修改master的keepalived配置文件:
[root@master ~]# vi /etc/keepalived/keepalived.conf
vrrp_script check_nginx {
        script "/usr/local/check_nginx.sh" ##监控Nginx服务的脚本
        interval 3 ##每隔3秒执行一次脚本
}
图片6.png

        track_script {
         check_nginx ##用于自定义脚本,要与上面的vrrp_script对应
        }
图片7.png



重启Keepalived:
service keepalived restart








修改slave的keepalived配置文件:
[root@slave ~]# vi /etc/keepalived/keepalived.conf
vrrp_script check_nginx {
        script "/usr/local/check_nginx.sh" ##监控Nginx服务的脚本
        interval 3 ##每隔3秒执行一次脚本
}
图片8.png

        track_script {
         check_nginx ##用于自定义脚本,要与上面的vrrp_script对应
        }
图片9.png


重启Keepalived:
service keepalived restart




两台调度服务器都要写以下脚本:(原理,当检测到本机的Nginx服务已经停止运行时,把本机的keepalived服务也关闭了,从而实现keepalived的切换 )
[root@master ~]# cat /usr/local/check_nginx.sh
#!/bin/bash

dd=$(date +"%Y-%m-%d %H:%M:%S")

netstat -anp |grep nginx &> /dev/null

if [ $? -ne 0 ]; then
echo "$dd nginx was down,stop keepalived now" >> /var/log/check_nginx_status.log

service keepalived stop
fi


记得给予脚本运行的权限:
[root@master ~]# chmod a+x /usr/local/check_nginx.sh





测试:两台服务器轮流关闭Nginx服务
[root@master ~]# cat /var/log/check_nginx_status.log
2020-05-03 13:11:01 nginx was down,stop keepalived now

[root@slave ~]# cat /var/log/check_nginx_status.log
2020-05-03 13:11:54 nginx was down,stop keepalived now

备注:
实验中,当一台调度服务器的Nginx服务关闭了,其keepalived服务也会跟着关闭,备用调度服务器就变成活跃状态;只要还有一台调度服务器正常,则Nginx服务可以正常访问。

启动时,应先启动Nginx,不然keepalived会根据脚本自己关闭自己。


如果使用以上脚本,系统重启后,keepalived服务是关闭的,Nginx服务是自动启动的,需要手动启动keepalived




相关文章:
Keepalived双机热备+MySQL
Keepalived+LVS

CentOS8_Keepalived双机热备+Apache






#################################
#################################
亲,学习研究也要劳逸结合哦,来我微店逛逛,买点东西好好犒劳犒劳自己和家人吧^_^^_^

苏泊尔多功能电热锅韩式电火锅8-10人家用电炒锅不粘锅电锅电烤锅
guo.png

苏泊尔电火锅多功能家用电热锅不沾锅一体电煮锅宿舍4-6人
huoguo.png

返回列表