注:这篇文章参考网络,有些称呼都变了,好比阿里云上的如今是弹性ipnginx
包括阿里云在内的不少云环境,由于不支持浮动IP广受诟病。目前阿里云在VPC网络下发布了HAVIP,可以实现arp宣告IP。这样也就让本身搭建HA成为了可能,有幸拿到了内测权限体验了一下。(classical网络依然不支持) 测试环境: 1 2 3 4 5 6 VPC:192.168.1.0/24 ECS: nginx1:192.168.1.1 nginx2:192.168.1.2 HAVIP:192.168.1.3 绑定到havip的公网EIP:121.43.187.37 配置完毕后的拓扑以下: 环境搭建完毕后,登录主备ECS服务器,分别配置nginx+keepalived [root@Nginx1 ~]# yum install nginx keepalived –y MASTER服务器(nginx1)配置文件/etc/keepalived/keepalived.conf内容以及解释以下: ! Configuration File for keepalived #配置global_defs,主要用于标示机器,以及故障时通知 global_defs { router_id Nginx1 } #配置vrrp_script,主要用于健康检查,以及检查失败后执行的动做。 vrrp_script chk_nginx { #健康检查脚本,当脚本返回值不为0时认为失败 script "/etc/keepalived/ck_ng.sh" #检查频率,如下配置每2秒检查1次 interval 2 #当检查失败后,将vrrp_instance的priority减少5 weight -5 #连续监测失败3次,才认为真的健康检查失败。并调整优先级 fall 3 #连续监测2次成功,就认为成功。但不调整优先级 rise 2 } #定义对外提供服务的VIP vrrp_instance配置 vrrp_instance VI_1 { #指定vrrp_instance的初始状态,是MASTER仍是BackUP主要仍是看优先级。 state MASTER #指定vrrp_instance绑定的网卡,最终会经过指定的网卡宣告VIP interface eth0 #发送心跳包的源IP,可以使用绑定的网卡IP,也能够使用本服务器上的其余IP unicast_src_ip 192.168.1.1 #至关于VRID,用于在一个网内区分组播,须要组播域内内惟一。 virtual_router_id 55 #本机的优先级,VRID相同的机器中,优先级最高的会被选举为MASTER priority 101 #心跳间隔,下面配置,MASTER会每隔1秒发送一个报文高职组内其余机器,本身还活着。 advert_int 1 #定义主从的验证方式以及密码,通常使用PASS(最长8位,超过了只会识别前8位做为密码) authentication { auth_type PASS auth_pass aliyun } #VIP,在阿里云下就是刚才建立的HAVIP virtual_ipaddress { 192.168.1.3 } #本vrrp_instance所引用的脚本配置,名称就是vrrp_script 定义的容器名 track_script { chk_nginx } } BACKUP服务器(nginx2)的配置须要修改: state MASTER改成 state BACKUP unicast_src_ip 192.168.1.1改成backup服务器实际的IP unicast_src_ip 192.168.1.2 priority 101改小一些,好比 priority 100 其它保持一致便可 为了实现nginx服务异常的时候可以自动切换,须要本身写一个脚本,脚本没有硬性的要求,可以实现目标便可,这里 监控nginx进程数为例: vim /etc/keepalived/ck_ng.sh #!/bin/bash #检查nginx进程是否存在 count=$(ps -C nginx --no-heading|wc -l) #进程数等于0的时候 if [ "${count}" = "0" ]; then #尝试启动一次nginx,中止2秒后再次检测 service nginx start sleep 2 count=$(ps -C nginx --no-heading|wc -l) if [ "${count}" = "0" ]; then #若是启动没成功,就杀掉keepalive触发主备切换 /etc/init.d/keepalived stop fi fi #增长脚本的执行权限 chmod +x vim /etc/keepalived/ck_ng.sh #分别启动nginx1和nginx2的nginx&keepalived服务: [root@Nginx1 ~]# /etc/init.d/nginx start;/etc/init.d/keepalived start Starting nginx: [ OK ] Starting keepalived: [ OK ] 测试: NGINX1/192.168.1.1的priority 为101,NGINX2/192.168.1.2的priority为100,这时候访问HAVIP绑定的EIP:http://121.43.187.37/能够看到访问到了服务器NGINX1, 到HAVIP控制台查看,192.168.1.1的服务器为主服务器 这时候咱们KILL掉nginx1服务器的nginx服务 查看日志,发送了移除VIP的报文: Oct 23 17:20:01 iZ239aqzdi7Z Keepalived_vrrp[25019]: VRRP_Instance(VI_1) sending 0 priority Oct 23 17:20:01 iZ239aqzdi7Z Keepalived_vrrp[25019]: VRRP_Instance(VI_1) removing protocol VIPs. Oct 23 17:20:01 iZ239aqzdi7Z Keepalived_healthcheckers[25018]: Netlink reflector reports IP 192.168.1.3 removed 这时候访问http://121.43.187.37/,能够看到访问自动切换到了NGINX2 到HAVIP控制台查看,192.168.1.2的服务器为主服务器 从新启动nginx1的nginx和keepalive服务 查看日志能够看到keepalive从新发送了IP宣告的报文 Oct 23 17:22:14 iZ239aqzdi7Z Keepalived_vrrp[25610]: VRRP_Instance(VI_1) Entering MASTER STATE Oct 23 17:22:14 iZ239aqzdi7Z Keepalived_vrrp[25610]: VRRP_Instance(VI_1) setting protocol VIPs. Oct 23 17:22:14 iZ239aqzdi7Z Keepalived_vrrp[25610]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.1.3 Oct 23 17:22:14 iZ239aqzdi7Z Keepalived_healthcheckers[25609]: Netlink reflector reports IP 192.168.1.3 added Oct 23 17:22:19 iZ239aqzdi7Z Keepalived_vrrp[25610]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.1.3 从新访问http://121.43.187.37/测试,从新访问到了服务器NGINX1,到HAVIP控制台查看,192.168.1.1的服务器从新夺回了控制权,成为了为主服务器 这样就实现了阿里云环境下的HA切换。 实际测试,阿里云的多个HAVIP能够绑定到一样的两台机器,能够配置多组vrrp_instance来实现双主。或者两台服务器同时为两个业务服务,避免资源浪费。同时可以作到主备