keepalived配置示例详解

(示例)

一:nginx + keepalived 实现HA 主从模式

二:keepalived +haproxy双机高可用方案

vi /etc/keepalived/keepalived.conf

编辑文件(主):

[javascript] view plain copy

  1. global_defs {  
  2.    router_id nginx_master  
  3. }  
  4. #监控服务.NGINX mysql等  
  5. vrrp_script chk_nginx {  
  6.     script "/usr/local/nginx/check_nginx.sh"  
  7.     interval 2  
  8.     weight 2  
  9. }  
  10.   
  11. vrrp_instance VI_1 {  
  12.     state MASTER  
  13.     interface eth0  
  14.     virtual_router_id 51  
  15.     priority 101  
  16.     advert_int 1  
  17.     authentication {  
  18.         auth_type PASS  
  19.         auth_pass 1111  
  20.     }  
  21.     virtual_ipaddress {  
  22.         192.168.1.254  
  23.     }  
  24.     track_script {  
  25.         chk_nginx  #检测脚本 上面配置的  
  26.     }  
  27. }  
 
  1. global_defs {

  2. router_id nginx_master

  3. }

  4. #监控服务.NGINX mysql等

  5. vrrp_script chk_nginx {

  6. script "/usr/local/nginx/check_nginx.sh"

  7. interval 2

  8. weight 2

  9. }

  10.  
  11. vrrp_instance VI_1 {

  12. state MASTER

  13. interface eth0

  14. virtual_router_id 51

  15. priority 101

  16. advert_int 1

  17. authentication {

  18. auth_type PASS

  19. auth_pass 1111

  20. }

  21. virtual_ipaddress {

  22. 192.168.1.254

  23. }

  24. track_script {

  25. chk_nginx #检测脚本 上面配置的

  26. }

  27. }

vi /etc/keepalived/keepalived.conf

编辑文件(从):

[javascript] view plain copy

  1. global_defs {  
  2.    router_id nginx_backup  
  3. }  
  4. #监控服务.NGINX mysql等  
  5. vrrp_script chk_nginx {  
  6.     script "/usr/local/nginx/check_nginx.sh"  
  7.     interval 2  
  8.     weight 2  
  9. }  
  10.   
  11. vrrp_instance VI_1 {  
  12.     state BACKUP  
  13.     interface eth0  
  14.     virtual_router_id 51  
  15.     priority 99  
  16.     advert_int 1  
  17.     authentication {  
  18.         auth_type PASS  
  19.         auth_pass 1111  
  20.     }  
  21.     virtual_ipaddress {  
  22.         192.168.1.254  
  23.     }  
  24.     track_script {  
  25.         chk_nginx  #检测脚本 上面配置的  
  26.     }  
  27. }  
 
  1. global_defs {

  2. router_id nginx_backup

  3. }

  4. #监控服务.NGINX mysql等

  5. vrrp_script chk_nginx {

  6. script "/usr/local/nginx/check_nginx.sh"

  7. interval 2

  8. weight 2

  9. }

  10.  
  11. vrrp_instance VI_1 {

  12. state BACKUP

  13. interface eth0

  14. virtual_router_id 51

  15. priority 99

  16. advert_int 1

  17. authentication {

  18. auth_type PASS

  19. auth_pass 1111

  20. }

  21. virtual_ipaddress {

  22. 192.168.1.254

  23. }

  24. track_script {

  25. chk_nginx #检测脚本 上面配置的

  26. }

  27. }


脚本/usr/local/nginx/check_nginx.sh"内容:

[javascript] view plain copy

  1. #!/bin/bash  
  2. if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]  
  3. then  
  4. /usr/local/nginx/sbin/nginx  
  5. sleep 5  
  6. if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]  
  7. then  
  8. killall keepalived  
  9. fi  
  10. fi  
 
  1. #!/bin/bash

  2. if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]

  3. then

  4. /usr/local/nginx/sbin/nginx

  5. sleep 5

  6. if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]

  7. then

  8. killall keepalived

  9. fi

  10. fi


启动并测试:

1.启动两台机器上的nginx

2.启动两台机器上的keepalived

此时使用命令 ip addr 查看虚拟IP绑定 可以看到主 有,从没有,将主机的keepalived关掉,可以看到vip绑定到了从的上面

使用其他机器访问使用wget进行访问:vip:xx/wget ?userid=20003829

查看是否能够访问,然后让本机的nginx关掉,继续使用wget看是否能够访问,如果能够访问则HA配置成功。


http://www.linuxidc.com/Linux/2012-08/69383.htm

http://www.68idc.cn/help/buildlang/ask/20150616370229.html

三、安装和设置keepalived
1、安装keepalived

> yum install keepalived
> chkconfig --add keepalived
> chkconfig --level 35 keepalived on

2、修改配置文件
配置keepalived
/etc/keepalived/keepalived.conf
内容:
=====================================================================
! Configuration File for keepalived
# 全局配置,demo中配置了邮件信息,此处因为调试中,暂时没有添加
global_defs {

}

# 集群资源监控,组合track_script进行
vrrp_script check_haproxy {
script "killall -0 haproxy"
interval 2
}

vrrp_instance HAPROXY_HA {
# 设置当前主机为主节点,如果是备用节点,则设置为BACKUP
# 备用节点时,设置为:
# state BACKUP
state MASTER

# 指定HA监测网络接口,可以用ifconfig查看来决定设置哪一个
interface eth1

# 虚拟路由标识,同一个VRRP实例要使用同一个标识,主备机
virtual_router_id 80

# 因为当前环境中VRRP组播有问题,改为使用单播发送VRRP报文
# 这个地方需要关注,之前未做此设置,结果主备节点互相不能发现,因此主备节点都升级成了MASTER,并且绑定了VIP
# 备用节点时,内容为:
# unicast_src_ip 192.168.200.199
# unicast_peer {
# 192.168.200.200
# }
unicast_src_ip 192.168.200.200
unicast_peer {
192.168.200.199
}

# 设置优先级,确保主节点的优先级高过备用节点
# 备用节点时,设置为:
# priority 80
priority 100

# 用于设定主备节点间同步检查时间间隔
advert_int 2

# 设置高可用集群中不抢占功能,在主机down后,从机接管,当主机重新恢复后,设置此功能,备机将继续提供服务,从而避免因切换导致的隐患
nopreempt

# 设置主备节点间的通信验证类型及密码,同一个VRRP实例中需一致
authentication {
auth_type PASS
auth_pass 1234
}

# 当keepalived切换状态到MASTER时,执行脚本
notify_master "/etc/keepalived/master.sh"
# 当keepalived切换状态到BACKUP时,执行脚本
notify_backup "/etc/keepalived/backup.sh"
# 当keepalived切换状态到FAULT时,执行脚本
notify_fault "/etc/keepalived/fault.sh"
# 当keepalived切换状态到STOP时,执行脚本
notify_fault "/etc/keepalived/stop.sh"

# 集群资源监控,组合vrrp_script进行
track_script {
check_haproxy
}
# 设置虚拟IP地址,当keepalived状态切换为MASTER时,此IP会自动添加到系统中
# 当状态切换到BACKUP时,此IP会自动从系统中删除
# 可以通过命令ip add查看切换后的状态
virtual_ipaddress {
192.168.200.240/24 dev eth1
}
}
====================================================================

3、启动服务
因为是为了实现haproxy的高可用,启动时需要顺序启动:
(1) 启动haproxy:
> haproxy -f /etc/haproxy/haproxy.cfg
(2) 启动keeepalived:先启动master节点,后启动BACKUP节点
> /etc/init.d/keepalived start

4、停止keeepalived服务
> /etc/init.d/keepalived stop

5、检查keeepalived的运行日志,默认keepalived的日志位于/var/log/message
> tail -n100 /var/log/message

二:Keepalived + haproxy双机高可用方案

上一篇文章已经讲到了keepalived实现双机热备,且遗留了一个问题

master的网络不通的时候,可以立即切换到slave,但是如果只是master上的应用出现问题的时候,是不会

主动切换的。

上篇文章地址:Keepalived 实现双机热备(一)

那么这篇文章主要讨论解决这个问题

我的方案是:

写一个脚本,用于监控haproxy,当然,keepalive支持脚本扩展

当master haproxy出现问题时,重启haproxy,如果重启不成功,则停掉master上面的keepalived

也可以不重启haproxy,直接停掉keepalived,让backup服务器接管master

这样haproxy出现故障,网站依然可用

系统分布如下:

ha主机 192.168.1.227:80

ha备机 192.168.1.246

keepalived 主机 192.168.1.227

keepalived备机 192.168.1.246

web1 http://192.168.1.226:8081/login

web2 http://192.168.1.246:8888/login

虚拟ip 192.168.1.99

keepalive master 和 backup 配置

vi /etc/keepalived/keepalived.conf

增加红色部分

复制代码

! Configuration File for keepalived
#定义检查脚本
vrrp_script check_haproxy {
        script "/etc/keepalived/check_haproxy.sh"
        interval 2
        weight 2
}

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.99
    }
   #执行检查脚本
    track_script {
        check_haproxy
   }
}

复制代码

编辑检查haproxy脚本

/etc/keepalived/check_haproxy.sh

#!/bin/bash
A=`ps -C haproxy --no-header |wc -l`
if [ $A -eq 0 ];then
/etc/init.d/keepalived stop
fi

增加执行权限,注意别忘记了

chmod 777 check_haproxy.sh

重启keepalived即可

猜你喜欢

转载自blog.csdn.net/qq_32485197/article/details/81366666