目前需要做一个项目需要高可用    项目采用Keepalived+VIP(虚拟IP)进行一个故障转移。Keepalived和VIP的相关知识就不在这里废话介绍了  介绍一下当前的高可用环境实现思路。

目前有三台服务器。分别为三台服务器上部署keepalived 进行故障转移,当用户访问虚拟IP时,其keepalived会判断其优先级,主要根据监控的相关的服务端口  如

nginx 监听的端口 80

数据库服务端口  3306 

php-fpm的9000端口   

将优先级的进行虚拟IP(VIP)的地址漂移。使用ip a 可以查看到其绑定的虚拟IP在哪一台服务器上,或通过相关日志进行查看。

服务器相关IP配置

资源IP 
服务器1192.168.1.101
服务器1192.168.1.102
服务器1192.168.1.103

步骤一    先从部署或交付那边拿到配置好的虚拟IP    如:192.168.1.86   

步骤二   启动关键的端口服务  如  ngngx php-fpm  mysql    使用lsof -i:80   命令进行查看

步骤三  修改或新增一个keepalived的配置   如  keepalived.conf

下面贴出我的配置文件   

! Configuration File for keepalived

global_defs {
   notification_email {
	yuluolishang@qq.com	
   }
   notification_email_from yuluolishang@yisa.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   script_user root
   enable_script_security
   vrrp_skip_check_adv_addr
   #vrrp_strict
   #vrrp_iptables
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script chk_mysql_port {
       script "</dev/tcp/127.0.0.1/3306" # connects and exits
       interval 1                      # check every second
       weight -20                       # default priority: -20 if connect fails
}

vrrp_script chk_php_port {
       script "</dev/tcp/127.0.0.1/9000" # connects and exits
       interval 1                      # check every second
       weight -20                       # default priority: -20 if connect fails
}

vrrp_script chk_nginx_port {
       script "</dev/tcp/127.0.0.1/80" # connects and exits
       interval 1                      # check every second
       weight -20                       # default priority: -20 if connect fails
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 66
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass Feipeng$
    }
    unicast_src_ip 192.168.1.101
    unicast_peer {
        192.168.1.102
        192.168.1.103
    }
    virtual_ipaddress {
        192.168.1.86/22
    }
    track_script {
       chk_mysql_port
       chk_php_port
       chk_nginx_port
    }
   
}

配置相关说明  :

state BACKUP   三台服务器都被BACKUP 角色

interface   etho   这个为该服务器的网卡名称

virtual_router_id   虚拟路由  这个三台服务器为同一个  必须同一个

priority   100   优先级  三台服务器需一次填写100 99 98 

authentication  认证密码  三台服务器密码必须设置相同  否则故障转移不成功。

unicast_src_ip    广播地址   即本机IP地址  

unicast_peer  广播接收地址  即另外两台服务器的IP地址

virtual_ipaddress   虚拟IP(VIP)地址   后面的/22 代表子网掩码  一般与三台服务器的真实IP在同一网段中。

track_script   里面为各监控的端口脚本名称   一行写一个检测

步骤四   启动keepalived 进程   启动故障转移    本keepalived 为离线部署  离线包目录结构如下:

启动命令   /keepalived/sbin/keepalived -f /keepalived/etc/keepalived/keepalived.conf  

/keepalived/sbin/keepalived -f /keepalived/etc/keepalived/keepalived.conf  

步骤五   验证启动    

查看keepalived 进程是否有启动   输入 ps aux|grep keepalived

ps aux|grep keepalived

会输出如下:

ps aux|grep keepalived
root     182037  0.0  0.0  44096   888 ?        Ss   17:13   0:00 /keepalived/sbin/keepalived  -f /keepalive/etc/keepalived/keepalived.conf
root     182038  0.1  0.0  44096  1308 ?        S    17:13   0:00 /keepalived/sbin/keepalived  -f /keepalive/etc/keepalived/keepalived.conf
root     182343  0.0  0.0 112812   968 pts/0    S+   17:13   0:00 grep --color=auto keepalive

    输入ip a 查看当前漂移VIP 绑定情况

步骤六   模拟故障   比如说nginx 挂掉了   

输入命令   pkill nginx

然后输入lsof -i:80   此时可以得出  nginx 服务被停掉了  

pkill nginx
lsof -i:80

此时  刚才绑定的VIP的所在服务器上  此VIP不在其服务器了,而是跑到另一台服务器上绑定了VIP虚拟IP 

至此   keepalived 故障转移部署成功!!

坑:

1.同一组故障转移集群   virtual_router_id  虚拟路由IP 必须一样  要不然部署不成功。

2.interface   etho  网卡名称一定要填写当前服务器IP的所在网卡名称

3.若同一个局域网内,有多个keepalived 实例,keepalived两台机器同时出现vip问题!keepalived默认为广播,应改为单播

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐