zzss 发表于 2019-1-1 07:27:39

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

  Keepalived:

     keepalived是基于vrrp协议实现的一个高可用集群解决方案,可以利用keepalived来解决单点故障问题,使用keepalived实现的高可用集群方案中,一般有两台服务器,一个是MASTER(主服务器),另一个是BACKUP(备用服务器),这个集群中对外提供一个虚拟IP,MASTER服务器会定时发送特定信息给BACKUP服务器,当BACKUP服务器接收不到MASTER发送的消息时,BACKUP服务器会接管虚拟IP,继续提供服务。
     当keepalived基于主备模式实现高可用时,提供服务的只有一台主服务器,备服务器只有在主服务器出现故障时才能提供作用,这就造成了资源的浪费,所以keepalived可以通过实现双主模式来实现资源的利用。两台服务器都对外提供服务,并且当一台服务器出现故障时,这台IP地址就会转移到另外一台服务器上,继续提供服务。
        keepalived双主模式图:
        http://blog.运维网.com/e/u261/themes/default/images/spacer.gifhttp://s3.运维网.com/wyfs02/M01/80/20/wKioL1c5M3SS8z0JAABhKamIr2w209.jpg
     
  实验准备:
     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.conf
global_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.conf
global_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 start
Starting keepalived:                                       
]# ifconfig
eth0:0    Link encap:EthernetHWaddr 00:0C:29:C5:A4:6B
          inet addr:172.18.250.99Bcast:0.0.0.0Mask:255.255.255.255
          UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1
]# ifconfig
eth0:1    Link encap:EthernetHWaddr 00:0C:29:F6:9E:DF
          inet addr:172.18.250.100Bcast:0.0.0.0Mask:255.255.255.255
          UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1  这样就实现了keepalived的双主模式,测试下如果一台keepalived服务器down,地址会不会转移到另一台服务。
]# service keepalived stop
Stopping keepalived:                                       
]# ifconfig
eth0:0    Link encap:EthernetHWaddr 00:0C:29:F6:9E:DF
          inet addr:172.18.250.99Bcast:0.0.0.0Mask:255.255.255.255
          UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1
eth0:1    Link encap:EthernetHWaddr 00:0C:29:F6:9E:DF
          inet addr:172.18.250.100Bcast:0.0.0.0Mask:255.255.255.255
          UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1  地址能转移。也可以通过vrrp_script脚本来实现keepalived的IP地址转移。
  

  编辑配置文件:
~]# vim /etc/keepalived/keepalived.conf
vrrp_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 restart
Stopping keepalived:                                       
Starting keepalived:                                       
测试:
]# touch down
]# ls
downkeepalived.confkeepalived.conf.bak
]# ifconfig
eth0:0    Link encap:EthernetHWaddr 00:0C:29:F6:9E:DF
          inet addr:172.18.250.99Bcast:0.0.0.0Mask:255.255.255.255
          UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1
eth0:1    Link encap:EthernetHWaddr 00:0C:29:F6:9E:DF
          inet addr:172.18.250.100Bcast:0.0.0.0Mask:255.255.255.255
          UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1  
  已经转移到另一台服务器上来了。
]# rm down
]# ifconfig
eth0:0    Link encap:EthernetHWaddr 00:0C:29:C5:A4:6B
          inet addr:172.18.250.99Bcast:0.0.0.0Mask:255.255.255.255
          UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1  双主模型就是这样实现。
  

  二、通过脚本实现反向代理服务nginx的高可用
~]# yum -y install nginx  编辑配置文件:
~]# vim /etc/keepalived/keepalived.conf
vrrp_script chk_nginx_down {
   script "killall -0 nginx"   //查看nginx进程是否存在
   weight -5
   interval 2
}
在两个虚拟节点中添加调用此脚本:
track_script {
       ch_down
       chk_nginx_down
    }  重启服务:
]# service keepalived restart
Stopping keepalived:                                       
Starting keepalived:                                         测试如果一台nginx服务挂了,地址会不会转移
]# nginx -s stop
]# ifconfig
eth0      Link encap:EthernetHWaddr 00:0C:29:C5:A4:6B
          inet addr:172.18.250.75Bcast:172.18.255.255Mask:255.255.0.0
          inet6 addr: fe80::20c:29ff:fec5:a46b/64 Scope:Link
          UP BROADCAST RUNNING MULTICASTMTU:1500Metric: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集群的高可用。
  




页: [1]
查看完整版本: keepalived基于双主模型实现nginx的高可用(2)