zoukankan      html  css  js  c++  java
  • 阿里云下配置keepalive,利用HAVIP实现HA

    图片仅供参考

    包括阿里云在内的很多云环境,因为不支持浮动IP广受诟病。目前阿里云在VPC网络下发布了HAVIP,能够实现arp宣告IP。这样也就让自己搭建HA成为了可能,有幸拿到了内测权限体验了一下。(classical网络依然不支持)
    测试环境:
    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来实现双主。或者两台服务器同时为两个业务服务,避免资源浪费。同时能够做到主备
    
    
  • 相关阅读:
    在oracle中通过connect by prior来实现递归查询!
    c# System.Data.OracleClient需要Oracle客户端软件8.1.7或更高版本
    c# 水晶报表的设计(非常的基础)
    webapi+EF(增删改查)
    简单三层分页aspnetpager控件(欢迎指点)
    listbox 多选删除(找了好多都不行,终于让我写出来了)
    execl导出(HTML,repearter控件)
    SQL Server中截取字符串常用函数
    几个经常用到的字符串的截取
    gridview的增删改
  • 原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/14572749.html
Copyright © 2011-2022 走看看