keepalived基于双主模型实现nginx的高可用(2)

时间:2022-05-26 23:29:13

Keepalived:

     keepalived是基于vrrp协议实现的一个高可用集群解决方案,可以利用keepalived来解决单点故障问题,使用keepalived实现的高可用集群方案中,一般有两台服务器,一个是MASTER(主服务器),另一个是BACKUP(备用服务器),这个集群中对外提供一个虚拟IP,MASTER服务器会定时发送特定信息给BACKUP服务器,当BACKUP服务器接收不到MASTER发送的消息时,BACKUP服务器会接管虚拟IP,继续提供服务 

   当keepalived基于主备模式实现高可用时,提供服务的只有一台主服务器,备服务器只有在主服务器出现故障时才能提供作用,这就造成了资源的浪费,所以keepalived可以通过实现双主模式来实现资源的利用。两台服务器都对外提供服务,并且当一台服务器出现故障时,这台IP地址就会转移到另外一台服务器上,继续提供服务。

      keepalived双主模式图:

      keepalived基于双主模型实现nginx的高可用(2)keepalived基于双主模型实现nginx的高可用(2)

   

  实验准备:

   1、虚拟机   172.18.250.75     反向代理服务器

   2、虚拟机   172.18.250.76     反向代理服务器

   3、虚拟机   172.18.250.77     Web服务器

   4、虚拟机   172.18.250.79     Web服务器

    注意:iptables和selinux不会影响keepalived,两台服务时间要同步

一、安装keepalived服务

~]# yum -y install keepalived

编辑配置文件/etc/keepalived/keepalived.conf

~]# vim /etc/keepalived/keepalived.confglobal_defs {   notification_email {      root@localhost   }   notification_email_from Alexandre.Cassen@firewall.loc   smtp_server 127.0.0.1   smtp_connect_timeout 30   router_id node1   vrrp_mcast_group4 224.0.74.18}vrrp_instance VI_1 {    state MASTER    interface eth0    virtual_router_id 151    priority 100    advert_int 1    authentication {        auth_type PASS        auth_pass 1111    }    virtual_ipaddress {        172.18.250.99 dev eth0 label eth0:0    }}vrrp_instance VI_2 {    state BACKUP    interface eth0    virtual_router_id 152    priority 98    advert_int 1    authentication {        auth_type PASS        auth_pass 2222    }    virtual_ipaddress {        172.18.250.100 dev eth0 label eth0:1    }}

另一台上面也配置相同的文件(250.76)

~]# vim /etc/keepalived/keepalived.confglobal_defs {   notification_email {      root@localhost   }   notification_email_from Alexandre.Cassen@firewall.loc   smtp_server 127.0.0.1   smtp_connect_timeout 30   router_id node1   vrrp_mcast_group4 224.0.74.18}vrrp_instance VI_1 {    state BACKUP    interface eth0    virtual_router_id 151    priority 98    advert_int 1    authentication {        auth_type PASS        auth_pass 1111    }    virtual_ipaddress {        172.18.250.99 dev eth0 label eth0:0    }}vrrp_instance VI_2 {    state MASTER    interface eth0    virtual_router_id 152    priority 100    advert_int 1    authentication {        auth_type PASS        auth_pass 2222    }    virtual_ipaddress {        172.18.250.100 dev eth0 label eth0:1    }}

配置完后启动keepalived服务:

]# service keepalived startStarting keepalived:                                       [  OK  ]]# ifconfigeth0:0    Link encap:Ethernet  HWaddr 00:0C:29:C5:A4:6B            inet addr:172.18.250.99  Bcast:0.0.0.0  Mask:255.255.255.255          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1]# ifconfigeth0:1    Link encap:Ethernet  HWaddr 00:0C:29:F6:9E:DF            inet addr:172.18.250.100  Bcast:0.0.0.0  Mask:255.255.255.255          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

这样就实现了keepalived的双主模式,测试下如果一台keepalived服务器down,地址会不会转移到另一台服务。

]# service keepalived stopStopping keepalived:                                       [  OK  ]]# ifconfigeth0:0    Link encap:Ethernet  HWaddr 00:0C:29:F6:9E:DF            inet addr:172.18.250.99  Bcast:0.0.0.0  Mask:255.255.255.255          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1eth0:1    Link encap:Ethernet  HWaddr 00:0C:29:F6:9E:DF            inet addr:172.18.250.100  Bcast:0.0.0.0  Mask:255.255.255.255          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

地址能转移。也可以通过vrrp_script脚本来实现keepalived的IP地址转移。


编辑配置文件:

~]# vim /etc/keepalived/keepalived.confvrrp_script ck_down {     script "[[ -e /etc/keepalived/down ]] && exit 1 || exit 0"   //如果down文件存在,则返回错误码     weight -5           //返回错误码后权重就减5     interval 2           //2秒钟扫描一次文件}在两个虚拟节点中调用此脚本: track_script {         ch_down    }         重启keepalived服务:]# service keepalived restartStopping keepalived:                                       [  OK  ]Starting keepalived:                                         [  OK  ]测试:]# touch down]# lsdown  keepalived.conf  keepalived.conf.bak]# ifconfigeth0:0    Link encap:Ethernet  HWaddr 00:0C:29:F6:9E:DF            inet addr:172.18.250.99  Bcast:0.0.0.0  Mask:255.255.255.255          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1eth0:1    Link encap:Ethernet  HWaddr 00:0C:29:F6:9E:DF            inet addr:172.18.250.100  Bcast:0.0.0.0  Mask:255.255.255.255          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

已经转移到另一台服务器上来了。

]# rm down]# ifconfigeth0:0    Link encap:Ethernet  HWaddr 00:0C:29:C5:A4:6B            inet addr:172.18.250.99  Bcast:0.0.0.0  Mask:255.255.255.255          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

双主模型就是这样实现。


二、通过脚本实现反向代理服务nginx的高可用

~]# yum -y install nginx

编辑配置文件:

~]# vim /etc/keepalived/keepalived.confvrrp_script chk_nginx_down {     script "killall -0 nginx"     //查看nginx进程是否存在     weight -5     interval 2}在两个虚拟节点中添加调用此脚本: track_script {         ch_down       chk_nginx_down    }

重启服务:

]# service keepalived restartStopping keepalived:                                       [  OK  ]Starting keepalived:                                         [  OK  ]

测试如果一台nginx服务挂了,地址会不会转移

]# nginx -s stop]# ifconfigeth0      Link encap:Ethernet  HWaddr 00:0C:29:C5:A4:6B            inet addr:172.18.250.75  Bcast:172.18.255.255  Mask:255.255.0.0          inet6 addr: fe80::20c:29ff:fec5:a46b/64 Scope:Link          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1          RX packets:122298 errors:0 dropped:0 overruns:0 frame:0          TX packets:8029 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:1000           RX bytes:39436766 (37.6 MiB)  TX bytes:918430 (896.9 KiB)

IP地址立马转移到另一台服务器上,所以实现了nginx的高可用。


keepalived也可以实现Web服务器的高可用,可以参考我的前一篇博客keepalived实现LVS集群的高可用。