【Mysql】keepalive的安装与配置

本文详细介绍Keepalived的安装配置流程及其实验案例,包括如何通过权重和进程控制实现VIP漂移,以及如何配置状态转换通知脚本来监控VIP的变化。
参考文档:
http://blog.jobbole.com/100390/
http://lanlian.blog.51cto.com/6790106/1303195


环境:主库:192.168.6.119
         备库:192.168.6.121
         vip:  192.168.6.120


master与slave端都安装keepalive
  1. [root@MYSQL src]# wget http://www.keepalived.org/software/keepalived-1.2.12.tar.gz
  2. [root@MYSQL src]# tar -xf keepalived-1.2.12.tar.gz 
  3. [root@MYSQL src]# cd keepalived-1.2.12
  4. [root@MYSQL src]# yum -y install gcc gcc-c++ gcc-g77 ncurses-devel bison libaio-devel cmake libnl* libpopt* popt-static openssl-devel
  5. [root@MYSQL keepalived-1.2.12]# ./configure
  6. [root@MYSQL keepalived-1.2.12]# make && make install
  7. [root@MYSQL src]#mkdir /etc/keepalived/
  8.  
  9. [root@MYSQL src]# cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
  10. [root@MYSQL src]# cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
  11. [root@MYSQL src]# cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
  12. [root@MYSQL src]#cp /usr/local/sbin/keepalived /usr/sbin/

2. 配置 keepalived

  1. [root@MYSQL keepalived]# vi keepalived.conf 
  2. ! Configuration File for keepalived
  3.  
  4. global_defs {
  5.    notification_email {
  6.      acassen@firewall.loc
  7.      failover@firewall.loc
  8.      sysadmin@firewall.loc
  9.    }
  10.    notification_email_from Alexandre.Cassen@firewall.loc
  11.    smtp_server 192.168.200.1
  12.    smtp_connect_timeout 30
  13.    router_id LVS_DEVEL ##配置是为了标识当前节点,两个节点的此项设置可相同,也可不相同
  14. }

  1. vrrp_script chk_http_port {            ---配合脚本使用,比如说检查nginx是否存活,检查mysql是否存活等 
       script "/usr/local/keepalived/nginx.sh" #在这里添加脚本链接 
       interval 3       #脚本执行间隔 
       weight -2         #脚本结果导致的优先级变更  ###如果检测返回值不为真weight -2 表示减2,权重值降低,backup server权重值(99)>现Master(100-2)的,切换
    }

  1. vrrp_instance VI_1 {
  2.     state MASTER                   #指定A节点为主节点 备用节点上设置为BACKUP即可
  3.     interface eth0
  4.     virtual_router_id 51              #VRRP组名,两个节点的设置必须一样,以指明各个节点属于同一VRRP
  5.     priority 100              #主节点的优先级(1-254之间),备用节点必须比主节点优先级低 
  6.    ###nopreempt                     ###这个参数也可以防止切换到从库后,主keepalived恢复后自动切换回主库
  7.          advert_int 1
  8.     authentication {             #设置验证信息,两个节点必须一致
  9.         auth_type PASS 
  10.         auth_pass 1111
  11.     }

 track_script {
        chk_http_port     #添加脚本执行
    }
  1. virtual_ipaddress {
  2. 192.168.6.120                   =====vip,指定一个或多个vip
  3.     }
  4. }

上面的脚本简单的查看http进程是否存在,不存在就退出返回假。

点击(此处)折叠或打开

  1. #!/bin/bash
    A=`netstat -nputl|grep -i 80 |wc -l`
    if [ $A -eq 0 ];then
       exit 1;
       #/etc/init.d/keepalived stop
    fi


  1. 实验一:
  2. master与backup ip分别如下
  3. [root@node1 keepalived]# ip a
    2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
        link/ether 08:00:27:7a:c6:9c brd ff:ff:ff:ff:ff:ff
        inet 192.168.6.114/24 brd 192.168.6.255 scope global eth0
        inet 192.168.6.120/32 scope global eth0
        inet6 fe80::a00:27ff:fe7a:c69c/64 scope link 
           valid_lft forever preferred_lft forever
    [root@node2 keepalived]# ip a
    2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
        link/ether 08:00:27:03:1b:a1 brd ff:ff:ff:ff:ff:ff
        inet 192.168.6.115/24 brd 192.168.6.255 scope global eth0
        inet6 fe80::a00:27ff:fe03:1ba1/64 scope link 
           valid_lft forever preferred_lft forever


  4. 关闭主库http
  5. [root@node1 keepalived]# /etc/init.d/httpd stop
    Stopping httpd:                                            [  OK  ]

  6. 主库与从库ip:
  7. [root@node1 keepalived]# ip a
    2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
        link/ether 08:00:27:7a:c6:9c brd ff:ff:ff:ff:ff:ff
        inet 192.168.6.114/24 brd 192.168.6.255 scope global eth0
        inet6 fe80::a00:27ff:fe7a:c69c/64 scope link 
           valid_lft forever preferred_lft forever
  8. [root@node2 keepalived]# ip a
    2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
        link/ether 08:00:27:03:1b:a1 brd ff:ff:ff:ff:ff:ff
        inet 192.168.6.115/24 brd 192.168.6.255 scope global eth0
        inet 192.168.6.120/32 scope global eth0                          ---vip飘到从库了
        inet6 fe80::a00:27ff:fe03:1ba1/64 scope link 
           valid_lft forever preferred_lft forever


  9. 恢复主库http
  10. [root@node1 keepalived]# /etc/init.d/httpd start
    Start
    ing httpd:                                            [  OK  ]
  11. 主库与从库ip:
  12. [root@node1 keepalived]# ip a
    2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
        link/ether 08:00:27:7a:c6:9c brd ff:ff:ff:ff:ff:ff
        inet 192.168.6.114/24 brd 192.168.6.255 scope global eth0
        inet 192.168.6.120/32 scope global eth0                            ---vip又飘回主库了
        inet6 fe80::a00:27ff:fe7a:c69c/64 scope link 
           valid_lft forever preferred_lft forever
    [root@node2 keepalived]# ip a
    2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
        link/ether 08:00:27:03:1b:a1 brd ff:ff:ff:ff:ff:ff
        inet 192.168.6.115/24 brd 192.168.6.255 scope global eth0
        inet6 fe80::a00:27ff:fe03:1ba1/64 scope link 
           valid_lft forever preferred_lft forever


  13.   nopreempt 参数的作用:静止vip再飘回来(少用,根据情况配置)
    1. node1 node2 vip漂移过程(关闭主库http,恢复主库http) 原因
      nopreempt  nopreempt
      node1》node2》node1
      nopreempt 
      nopreempt
      node1》node2》node2(vip不飘了) node1静止vip飘回去
      nopreempt
      nopreempt 一直在node1上,飘不动 node2静止vip飘过去
      nopreempt 
      nopreempt 
      一直在nide1上,漂不动 node2静止vip飘过去



实验二:
  1. 配置文件为
    1. [root@node1 keepalived]# more keepalived.conf
      ! Configuration File for keepalived
       
      global_defs {
         notification_email {
           acassen@firewall.loc
           failover@firewall.loc
           sysadmin@firewall.loc
         }
         notification_email_from Alexandre.Cassen@firewall.loc
         smtp_server 192.168.200.1
         smtp_connect_timeout 30
         router_id LVS_DEVEL
      }


      vrrp_script chk_http_port {      
         script "/usr/local/keepalived/nginx.sh"     
      }


      vrrp_instance VI_1 {
          state MASTER
          interface eth0
          virtual_router_id 51    
          priority 99           
               advert_int 1
          authentication {      
              auth_type PASS 
              auth_pass 1111
          }


       track_script {
              chk_http_port    
          }
      virtual_ipaddress {
      192.168.6.120           
          }
      }

    脚本改为:若http服务失效,则kill keepalive进程

    1. #!/bin/bash
      A=`netstat -nputl|grep -i 80 |wc -l`
      if [ $A -eq 0 ];then
         #exit 1;
         /etc/init.d/keepalived stop
      fi

    和实验一的效果一样:vip先飘到从库,恢复http后,启动keepalive后又飘回主库,要想不飘回主库,改小权重

实验一二的区别:一个是通过权重来控制vip的飘逸。一个直接是控制keepalive进程的存活来控制vip的飘逸



3.如何在状态转换时进行通知?

1.要在状态转换是进行通知,需要定义通知脚本可以在

vrrp_sync_group{

}中定义,也可以在

vrrp_instance{

}中定义

通过man keepalived命令可以查看通知脚本定义的两种方法

第一种

# to MASTER transition

notify_master /path/to_master.sh

# to BACKUP transition

notify_backup /path/to_backup.sh

# FAULT transition

notify_fault "/path/fault.sh VG_1"

第二种

#arguments

# $1 ="GROUP"|"INSTANCE"

# $2 = name of group or instance

# $3 = target state of transition

# ("MASTER"|"BACKUP"|"FAULT")

notify /path/notify.sh

下面用一个脚本notify.sh实现状态转换通知的简单示例:
#!/bin/bash
#Author: MageEdu <linuxedu@foxmail.com>
#description: An example of notify script
#
vip=192.168.6.120
contact='root@localhost'
notify(){
    mailsubject="`hostname` to be $1: $vip floating"
    mailbody="`date '+%F %H:%M:%S'`: vrrptransition, `hostname` changed to be $1"
    echo $mailbody | mail -s"$mailsubject" $contact
}
case "$1" in
    master)
        notify master
        exit 0
    ;;
    backup)
        notify backup
        exit 0
    ;;
    fault)
        notify fault
        exit 0
    ;;
    *)
        echo 'Usage: `basename $0`{master|backup|fault}'
        exit 1
    ;;
esac

chmod +x notify.sh 主从配置文件修改
[root@node1 keepalived]# more keepalived.conf
! Configuration File for keepalived
 
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_script chk_http_port {
   script "/usr/local/keepalived/nginx.sh"
   interval 3
   weight -2
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 99
# nopreempt
         advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }

 track_script {
        chk_http_port
    }
   

   notify_master "/usr/local/keepalived/notify.sh master"
   notify_backup"/usr/local/keepalived/notify.sh backup"
   notify_fault"/usr/local/keepalived/notify.sh fault"

virtual_ipaddress {
192.168.6.120
    }
}

测试:
关闭主库http服务
[root@node1 ~]# /etc/init.d/httpd stop
Stopping httpd: [ OK ]
[root@node1 ~]# mail
Mail version 8.1 6/6/93. Type ? for help.
"/var/spool/mail/root": 1 message 1 new
>N 1 root@localhost.local Thu Jun 30 21:10 16/716 "node1 to be backup:"
[root@node2 keepalived]# mail
Mail version 8.1 6/6/93.  Type ? for help.
"/var/spool/mail/root": 1 message 1 new
>N  1 root@localhost.local  Thu Jun 30 21:10  16/716   "node2 to be master:"

恢复主库http服务 [root@node1 ~]# mail
Mail version 8.1 6/6/93.  Type ? for help.
"/var/spool/mail/root": 2 messages 1 new 2 unread
 U  1 root@localhost.local  Thu Jun 30 21:10  17/726   "node1 to be backup:"
>N  2 root@localhost.local  Thu Jun 30 21:12  16/716   "node1 to be master:"

   [root@node2 keepalived]# mail
Mail version 8.1 6/6/93.  Type ? for help.
"/var/spool/mail/root": 2 messages 1 new 2 unread
 U  1 root@localhost.local  Thu Jun 30 21:10  17/726   "node2 to be master:"
>N  2 root@localhost.local  Thu Jun 30 21:12  16/716   "node2 to be backup:"




参考文档
http://kaifly.blog.51cto.com/3209616/1665729   --MySQL主库高可用 -- 双主单活故障自动切换方案
http://www.tuicool.com/articles/nYvuYf      ---结合keepalived实现redis群集高可用故障自动切换

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29096438/viewspace-2121347/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29096438/viewspace-2121347/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值