MySQL高可用之keepalived方案

一、keepalived 介绍
    
     fj.png浅析keepalived vip漂移原理与VRRP协议

二、实验环境
    mysql master   : 192.168.111.52
    mysql slave     : 192.168.111.53
    keepalived vip :  192.168.111.60

三、搭建过程
    1.  mysql双主的构建
        ① 互相 change master 即可,此处省略该过程,着重讲下keepalived

    2. keepalived相关
        ①  yum -y install keepalived 安装keepalived
        ② root@192.168.111.52:~# keepalived -v
            Keepalived v1.2.7 (02/21,2013)
        ③ 编辑 /etc/keepalived/keepalived.conf   

点击(此处)折叠或打开

  1. root@192.168.111.52:keepalived# cat keepalived.conf
  2. ! Configuration File for keepalived

  3. global_defs {##全局配置
  4.    notification_email {
  5.      horand_gc@163.com                    #####邮件接收者
  6.    }
  7.    notification_email_from dba@163.com    #####邮件发送者
  8.    smtp_server smtp.163.com               #####SMTP服务器
  9.    smtp_connect_timeout 30
  10.    router_id haMySQL                      #####routerID 同一组keepalived设置为相同
  11. }

  12. vrrp_script chk_mysql {##健康检测相关配置
  13.     script "/etc/keepalived/chk_mysql.sh" #####设置脚本 或者直命令  返回 0 则表示成功 >0 则表示失败, 详情可以后面的脚本内容
  14.     interval 1                            #####检测间隔
  15.     weight 2                              #####检测返回失败之后优先级会减少 2 (如果 master优先级100 , slave 优先级 99 ,master检测失败则优先级为100-2 < 99 ,则slave会提升为主)
  16. }

  17. vrrp_instance VI_1 {
  18.     state MASTER                          ##### 设为master
  19.     interface eth1                        ##### 网卡设定
  20.     virtual_router_id 51                  ##### 针对该 instance的虚拟id  , 同一组 instance设置相同
  21.     priority 100                          ##### 优先级设定
  22.     advert_int 1                          ##### 检测时间间隔
  23.     authentication {
  24.         auth_type PASS                    ##### 同一组instance之间的认证方式为 PASS ,pass 为7777 ,必须相同(防止 有用户恶意伪造 vrrp)
  25.         auth_pass 7777
  26.     }
  27.     virtual_ipaddress {
  28.         192.168.111.60                    ##### 设置虚拟ip ,可以设置多个
  29.     }
  30.     
  31.     track_script {
  32.     chk_mysql                             ##### 表示该instance 使用chk_mysql进行相关检测
  33.     }
  34.   ##### 以下配置 在该实例 转换为 master,slave,或者出错的时候执行的脚本(可以设置邮件通知,或者处理一些其他问题)
  35.    # notify_master "/etc/keepalived/change_master.sh"
  36.    # notify_slave "/etc/keepalived/change_slave.sh"
  37.    # notify_fault "/etc/keepalived/change_fault.sh"
  38. }

  39. root@192.168.111.53:keepalived# cat keepalived.conf
  40. ! Configuration File for keepalived

  41. global_defs {
  42.    notification_email {
  43.      horand_gc@163.com
  44.    }
  45.    notification_email_from dba@163.com
  46.    smtp_server smtp.163.com
  47.    smtp_connect_timeout 30
  48.    router_id haMySQL
  49. }

  50. vrrp_script chk_mysql {
  51.         script "/etc/keepalived/chk_mysql.sh"
  52.         interval 1
  53.         weight 2
  54. }

  55. vrrp_instance VI_1 {
  56.     state BACKUP                            ##### 该主机作为备机 BACKUP 
  57.     interface eth1
  58.     virtual_router_id 51
  59.     priority 99                             ##### 优先级设置 小于 master
  60.     advert_int 1
  61.     authentication {
  62.         auth_type PASS
  63.         auth_pass 7777
  64.     }
  65.     virtual_ipaddress {
  66.         192.168.111.60
  67.     }
  68.     
  69.     track_script {
  70.         chk_mysql
  71.     }
  72. }

  73. root@192.168.111.52:keepalived# cat chk_mysql.sh
  74. #!/bin/bash

  75. num=`ps -ef |grep mysqld | grep -v grep | wc -l`        ##### 查看mysqld进程数量 , 正常情况有一个root起的mysqld_safe守护进程,还有一个属于mysql用户的mysqld进程
  76. [[ $num -eq 2 ]] && exit 0 || exit 1
    3. 故障模拟
       ① 启动 keepalived    

点击(此处)折叠或打开

  1. root@192.168.111.52:keepalived# tail /var/log/messages
  2. Apr 29 13:45:24 localhost Keepalived_healthcheckers[24184]: Registering Kernel netlink command channel
  3. Apr 29 13:45:24 localhost Keepalived_healthcheckers[24184]: Opening file '/etc/keepalived/keepalived.conf'.
  4. Apr 29 13:45:24 localhost Keepalived_healthcheckers[24184]: Configuration is using : 7417 Bytes
  5. Apr 29 13:45:24 localhost Keepalived_vrrp[24185]: Opening file '/etc/keepalived/keepalived.conf'.
  6. Apr 29 13:45:24 localhost Keepalived_vrrp[24185]: Configuration is using : 65552 Bytes
  7. Apr 29 13:45:24 localhost Keepalived_vrrp[24185]: Using LinkWatch kernel netlink reflector...
  8. Apr 29 13:45:24 localhost Keepalived_healthcheckers[24184]: Using LinkWatch kernel netlink reflector...
  9. Apr 29 13:45:25 localhost Keepalived_vrrp[24185]: VRRP_Script(chk_mysql) succeeded
  10. Apr 29 13:45:25 localhost Keepalived_vrrp[24185]: VRRP_Instance(VI_1) Transition to MASTER STATE
  11. Apr 29 13:45:26 localhost Keepalived_vrrp[24185]: VRRP_Instance(VI_1) Entering MASTER STATE

  12. root@192.168.111.53:keepalived# tailf /var/log/messages
  13. Apr 29 13:49:27 localhost Keepalived_healthcheckers[32569]: Registering Kernel netlink reflector
  14. Apr 29 13:49:27 localhost Keepalived_healthcheckers[32569]: Registering Kernel netlink command channel
  15. Apr 29 13:49:27 localhost Keepalived_vrrp[32570]: Opening file '/etc/keepalived/keepalived.conf'.
  16. Apr 29 13:49:27 localhost Keepalived_vrrp[32570]: Configuration is using : 65550 Bytes
  17. Apr 29 13:49:27 localhost Keepalived_vrrp[32570]: Using LinkWatch kernel netlink reflector...
  18. Apr 29 13:49:27 localhost Keepalived_healthcheckers[32569]: Opening file '/etc/keepalived/keepalived.conf'.
  19. Apr 29 13:49:27 localhost Keepalived_healthcheckers[32569]: Configuration is using : 7415 Bytes
  20. Apr 29 13:49:27 localhost Keepalived_vrrp[32570]: VRRP_Instance(VI_1) Entering BACKUP STATE
  21. Apr 29 13:49:27 localhost Keepalived_healthcheckers[32569]: Using LinkWatch kernel netlink reflector...
  22. Apr 29 13:49:27 localhost Keepalived_vrrp[32570]: VRRP_Script(chk_mysql) succeeded
    ip a 可以查看到 vip 192.168.111.60 在 192.168.111.52(master)上
    
    ② 关闭 111.52上面的mysql

点击(此处)折叠或打开

  1. root@192.168.111.52:keepalived# mysqladmin shutdown
  2. root@192.168.111.52:keepalived# tailf /var/log/messages
  3. Apr 29 14:19:30 localhost Keepalived_vrrp[24862]: VRRP_Script(chk_mysql) failed
  4. Apr 29 14:19:32 localhost Keepalived_vrrp[24862]: VRRP_Instance(VI_1) Received higher prio advert
  5. Apr 29 14:19:32 localhost Keepalived_vrrp[24862]: VRRP_Instance(VI_1) Entering BACKUP STATE

  6. root@192.168.111.53:keepalived# tailf /var/log/messages
  7. Apr 29 14:19:55 localhost Keepalived_vrrp[566]: VRRP_Instance(VI_1) forcing a new MASTER election
  8. Apr 29 14:19:56 localhost Keepalived_vrrp[566]: VRRP_Instance(VI_1) Transition to MASTER STATE
  9. Apr 29 14:19:57 localhost Keepalived_vrrp[566]: VRRP_Instance(VI_1) Entering MASTER STATE
    ip a 可以查看到 vip 192.168.111.60 在 192.168.111.53(master )

    ③ 启动111.52上面的mysql

点击(此处)折叠或打开

  1. root@192.168.111.52:keepalived# mysqld_safe & ; tailf /var/log/messages
  2. Apr 29 14:24:21 localhost Keepalived_vrrp[24862]: VRRP_Script(chk_mysql) succeeded
  3. Apr 29 14:24:22 localhost Keepalived_vrrp[24862]: VRRP_Instance(VI_1) forcing a new MASTER election
  4. Apr 29 14:24:23 localhost Keepalived_vrrp[24862]: VRRP_Instance(VI_1) Transition to MASTER STATE
  5. Apr 29 14:24:24 localhost Keepalived_vrrp[24862]: VRRP_Instance(VI_1) Entering MASTER STATE

  6. root@192.168.111.53:keepalived# tailf /var/log/messages
  7. Apr 29 14:24:45 localhost Keepalived_vrrp[566]: VRRP_Instance(VI_1) Received higher prio advert
  8. Apr 29 14:24:45 localhost Keepalived_vrrp[566]: VRRP_Instance(VI_1) Entering BACKUP STATE
    ip a 可以查看到 vip 192.168.111.60 在 192.168.111.52(master ) ,也就是说111.52会持续通过track_script的脚本检查 ,若成功的话会恢复原来的优先级100 ,便把vip抢过来了(若不希望优先级高的直接上来直接抢占vip的话 需要再instance 里面配置 nopreem pt ,backup无需设置)

四 、虚拟server
     以上是实验是通过 vrrp_script以及trace_script 实现优先级变换来实现故障转移的,现在看下 通过虚拟server怎么实现mysql的高可用
    ① 配置

点击(此处)折叠或打开

  1. root@192.168.111.52:keepalived# cat /etc/keepalived/keepalived.conf
  2. ! Configuration File for keepalived

  3. global_defs {
  4.    notification_email {
  5.      tab@taomee.com
  6.    }
  7.    notification_email_from dba@taomee.com
  8.    smtp_server smtp.shidc.taomee.com
  9.    smtp_connect_timeout 30
  10.    router_id haMySQL
  11. }

  12. vrrp_script chk_mysql {
  13.     script "/etc/keepalived/chk_mysql.sh"
  14.     interval 1
  15.     weight 2
  16. }

  17. vrrp_instance VI_1 {
  18.     state MASTER
  19.     interface eth1
  20.     virtual_router_id 51
  21.     priority 100
  22.     nopreempt
  23.     advert_int 1
  24.     authentication {
  25.         auth_type PASS
  26.         auth_pass 7777
  27.     }
  28.     virtual_ipaddress {
  29.         192.168.111.60
  30.     }
  31.     
  32. # track_script {
  33. #    chk_mysql
  34. # }
  35. }

  36. virtual_server 192.168.111.60 3306 {
  37.     delay_loop 6
  38.     persistence_timeout 300
  39.     protocol TCP


  40.     real_server 192.168.111.52 3306 {
  41.         weight 1
  42.         notify_down /etc/keepalived/kill_self.sh
  43.         TCP_CHECK {
  44.          tcp_port 3306
  45.             connect_timeout 3
  46.         }
  47.     }

  48. }

  49. root@192.168.111.53:keepalived# cat /etc/keepalived/keepalived.conf
  50. ! Configuration File for keepalived

  51. global_defs {
  52.    notification_email {
  53.      tab@taomee.com
  54.    }
  55.    notification_email_from dba@taomee.com
  56.    smtp_server smtp.shidc.taomee.com
  57.    smtp_connect_timeout 30
  58.    router_id haMySQL
  59. }

  60. vrrp_script chk_mysql {
  61.         script "/etc/keepalived/chk_mysql.sh"
  62.         interval 1
  63.         weight 2
  64. }

  65. vrrp_instance VI_1 {
  66.     state BACKUP
  67.     interface eth1
  68.     virtual_router_id 51
  69.     priority 99
  70.     advert_int 1
  71.     authentication {
  72.         auth_type PASS
  73.         auth_pass 7777
  74.     }
  75.     virtual_ipaddress {
  76.         192.168.111.60
  77.     }
  78.     
  79. # track_script {    #########这里先注释掉 通过追踪脚本的检查
  80. # chk_mysql
  81. # }
  82. }

  83. virtual_server 192.168.111.60 3306 {
  84.     delay_loop 6
  85.     persistence_timeout 300
  86.     protocol TCP


  87.     real_server 192.168.111.53 3306 {### 真实 服务
  88.         weight 1                                    #### 权重,用来多真实服务 均衡使用
  89.         notify_down /etc/keepalived/kill_self.sh    ####在检查该服务不可用时执行该脚本(用来杀死 keepalived 实现 vip 飘逸)
  90.         TCP_CHECK {
  91.                 tcp_port 3306                       #### 检查端口 继承 real_server 192.168.111.53 3306 {### 真实 服务
  92.             connect_timeout 3                       #### tcp超时时间
  93.         }
  94.     }

  95. }

  96. root@192.168.111.53:keepalived# cat /etc/keepalived/kill_self.sh
  97. #!/bin/bash
  98. killall keepalived


    ②启动keepalived

点击(此处)折叠或打开

  1. root@192.168.111.52:keepalived# keepalived
  2. root@192.168.111.52:keepalived# tailf /var/log/messages
  3. Apr 29 14:48:22 localhost Keepalived_vrrp[20482]: Opening file '/etc/keepalived/keepalived.conf'.
  4. Apr 29 14:48:22 localhost Keepalived_vrrp[20482]: Configuration is using : 64590 Bytes
  5. Apr 29 14:48:22 localhost Keepalived_vrrp[20482]: Using LinkWatch kernel netlink reflector...
  6. Apr 29 14:48:22 localhost Keepalived_healthcheckers[20481]: IPVS: Scheduler not found
  7. Apr 29 14:48:22 localhost kernel: IPVS: Scheduler module ip_vs_ not found
  8. Apr 29 14:48:22 localhost Keepalived_healthcheckers[20481]: IPVS: Service not defined
  9. Apr 29 14:48:22 localhost Keepalived_healthcheckers[20481]: Using LinkWatch kernel netlink reflector...
  10. Apr 29 14:48:22 localhost Keepalived_healthcheckers[20481]: Activating healthchecker for service [192.168.111.52]:3306
  11. Apr 29 14:48:23 localhost Keepalived_vrrp[20482]: VRRP_Instance(VI_1) Transition to MASTER STATE
  12. Apr 29 14:48:24 localhost Keepalived_vrrp[20482]: VRRP_Instance(VI_1) Entering MASTER STATE

  13. root@192.168.111.53:keepalived# keepalived
  14. root@192.168.111.53:keepalived# tailf /var/log/messages
  15. Apr 29 14:48:51 localhost Keepalived_healthcheckers[25092]: Configuration is using : 11673 Bytes
  16. Apr 29 14:48:51 localhost Keepalived_vrrp[25093]: Opening file '/etc/keepalived/keepalived.conf'.
  17. Apr 29 14:48:51 localhost Keepalived_vrrp[25093]: Configuration is using : 64568 Bytes
  18. Apr 29 14:48:51 localhost Keepalived_vrrp[25093]: Using LinkWatch kernel netlink reflector...
  19. Apr 29 14:48:51 localhost Keepalived_vrrp[25093]: VRRP_Instance(VI_1) Entering BACKUP STATE
  20. Apr 29 14:48:51 localhost kernel: IPVS: Scheduler module ip_vs_ not found
  21. Apr 29 14:48:51 localhost Keepalived_healthcheckers[25092]: IPVS: Scheduler not found
  22. Apr 29 14:48:51 localhost Keepalived_healthcheckers[25092]: IPVS: Service not defined
  23. Apr 29 14:48:51 localhost Keepalived_healthcheckers[25092]: Using LinkWatch kernel netlink reflector...
  24. Apr 29 14:48:51 localhost Keepalived_healthcheckers[25092]: Activating healthchecker for service [192.168.111.53]:3306
    此时 ip a 命令可以查看虚拟ip 111.60 在111.52(master) 上
   
    ③关闭 111.52上的mysql

点击(此处)折叠或打开

  1. root@192.168.111.52:keepalived# mysqladmin shutdown
  2. 2017-04-29T07:07:38.121123Z mysqld_safe mysqld from pid file /opt/mysql/mysqld.pid ended
  3. [1]+ Done mysqld_safe
  4. root@192.168.111.52:keepalived# tailf /var/log/messages
  5. Apr 29 15:07:31 localhost Keepalived_healthcheckers[23405]: TCP connection to [192.168.111.52]:3306 failed !!!
  6. Apr 29 15:07:31 localhost Keepalived_healthcheckers[23405]: Removing service [192.168.111.52]:3306 from VS [192.168.111.60]:3306
  7. Apr 29 15:07:31 localhost Keepalived_healthcheckers[23405]: IPVS: Service not defined
  8. Apr 29 15:07:31 localhost Keepalived_healthcheckers[23405]: Executing [/etc/keepalived/kill_self.sh] for service [192.168.111.52]:3306 in VS [192.168.111.60]:3306
  9. Apr 29 15:07:31 localhost Keepalived_healthcheckers[23405]: Lost quorum 1-0=1 > 0 for VS [192.168.111.60]:3306
  10. Apr 29 15:07:31 localhost Keepalived_healthcheckers[23405]: Remote SMTP server [0.0.0.0]:25 connected.
  11. Apr 29 15:07:31 localhost Keepalived[23404]: Stopping Keepalived v1.2.7 (02/21,2013)
  12. Apr 29 15:07:31 localhost Keepalived_healthcheckers[23405]: IPVS: No such service
  13. Apr 29 15:07:31 localhost Keepalived_vrrp[23406]: VRRP_Instance(VI_1) sending 0 priority

  14. root@192.168.111.53:keepalived# tailf /var/log/messages
  15. Apr 29 15:07:32 localhost Keepalived_vrrp[26815]: VRRP_Instance(VI_1) Transition to MASTER STATE
  16. Apr 29 15:07:33 localhost Keepalived_vrrp[26815]: VRRP_Instance(VI_1) Entering MASTER STATE
    此时 ip a 命令可以看到虚拟ip 111.60在111.53(新master)上

以上


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

转载于:http://blog.itpub.net/31385648/viewspace-2138202/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值