keepalived构建高可用mysql-ha_利用keepalived构建高可用MySQL-HA

keepalived安装及配置 1、192.168.1.201服务器上keepalived安装及配置 安装keepalived 1. #tar zxvf keepalived-1.1.20.tar.gz   2. #cd keepalived-1.1.20   3. #./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.18-164.el5-i686   4. #make && make install  配置keepalived 我们自己在新建一个配置文件,默认情况下keepalived启动时会去/etc/keepalived目录下找配置文件 1. #mkdir /etc/keepalived   2. #vi /etc/keepalived/keepalived.conf   3. ! Configuration File for keepalived   4. global_defs {   5.      notification_email {   6.      luwenju@live.cn   7.      }   8.      notification_email_from luwenju@live.cn   9.      smtp_server 127.0.0.1   10.      smtp_connect_timeout 30   11.      router_id MySQL-ha   12.      }   13.   14. vrrp_instance VI_1 {   15.      state BACKUP   #两台配置此处均是BACKUP   16.      interface eth0   17.      virtual_router_id 51   18.      priority 100   #优先级,另一台改为90   19.      advert_int 1   20.      nopreempt  #不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置   21.      authentication {   22.      auth_type PASS   23.      auth_pass 1111   24.      }   25.      virtual_ipaddress {   26.      192.168.1.200   27.      }   28.      }   29.   30. virtual_server 192.168.1.200 3306 {   31.      delay_loop 2   #每个2秒检查一次real_server状态   32.      lb_algo wrr   #LVS算法   33.      lb_kind DR    #LVS模式   34.      persistence_timeout 60   #会话保持时间   35.      protocol TCP   36.      real_server 192.168.1.201 3306 {   37.      weight 3   38.      notify_down /usr/local/MySQL/bin/MySQL.sh  #检测到服务down后执行的脚本   39.      TCP_CHECK {   40.      connect_timeout 10    #连接超时时间   41.      nb_get_retry 3       #重连次数   42.      delay_before_retry 3   #重连间隔时间   43.      connect_port 3306   #健康检查端口   44.      }   45.      }  编写检测服务down后所要执行的脚本 1. #vi /usr/local/MySQL/bin/MySQL.sh   2. #!/bin/sh   3. pkill keepalived   4. #chmod +x /usr/local/MySQL/bin/MySQL.sh  注:此脚本是上面配置文件notify_down选项所用到的,keepalived使用notify_down选项来检查real_server的服务状态,当发现real_server服务故障时,便触发此脚本;我们可以看到,脚本就一个命令,通过pkill keepalived强制杀死keepalived进程,从而实现了MySQL故障自动转移。另外,我们不用担心两个MySQL会同时提供数据更新操作,因为每台MySQL上的keepalived的配置里面只有本机MySQL的IP+VIP,而不是两台MySQL的IP+VIP 启动keepalived 1. #/usr/local/keepalived/sbin/keepalived –D   2. #ps -aux | grep keepalived  测试 找一台局域网PC,然后去ping  MySQL的VIP,这时候MySQL的VIP是可以ping的通的 停止MySQL服务,看keepalived健康检查程序是否会触发我们编写的脚本 2、192.168.1.202上keepalived安装及配置 安装keepalived 1. #tar zxvf keepalived-1.1.20.tar.gz   2. #cd keepalived-1.1.20   3. #./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.18-164.el5-i686   4. #make && make install  配置keepalived 这台配置和上面基本一样,但有三个地方不同:优先级为90、无抢占设置、real_server为本机IP 1. #mkdir /etc/keepalived   2. #vi /etc/keepalived/keepalived.conf   3. ! Configuration File for keepalived   4. global_defs {   5.      notification_email {   6.      luwenju@live.cn   7.      }   8.      notification_email_from luwenju@live.cn   9.      smtp_server 127.0.0.1   10.      smtp_connect_timeout 30   11.      router_id MySQL-ha   12.      }   13.   14. vrrp_instance VI_1 {   15.      state BACKUP   16.      interface eth0   17.      virtual_router_id 51   18.      priority 90   19.      advert_int 1   20.      authentication {   21.      auth_type PASS   22.      auth_pass 1111   23.      }   24.      virtual_ipaddress {   25.      192.168.1.200   26.      }   27.      }   28.   29. virtual_server 192.168.1.200 3306 {   30.      delay_loop 2   31.      lb_algo wrr   32.      lb_kind DR   33.      persistence_timeout 60   34.      protocol TCP   35.      real_server 192.168.1.202 3306 {   36.      weight 3   37.      notify_down /usr/local/MySQL/bin/MySQL.sh   38.      TCP_CHECK {   39.      connect_timeout 10   40.      nb_get_retry 3   41.      delay_before_retry 3   42.      connect_port 3306   43.      }   44.      }  编写检测服务down后所要执行的脚本 1. #vi /usr/local/MySQL/bin/MySQL.sh   2. #!/bin/sh   3. pkill keepalived   4. #chmod +x /usr/local/MySQL/bin/MySQL.sh   5.   6. 启动keepalived   7. #/usr/local/keepalived/sbin/keepalived –D   8. #ps -aux | grep keepalived  测试 停止MySQL服务,看keepalived健康检查程序是否会触发我们编写的脚本 三、测试 MySQL远程登录测试 我们找一台安装有MySQL客户端的windows,然后登录VIP,看是否能登录,在登录之两台MySQL服务器都要授权允许从远程登录 1. MySQL> grant all privileges on *.* to 'root'@'%' identified by '123456';   2. Query OK, 0 rows affected (0.00 sec)   3.   4. MySQL> flush privileges;   5. Query OK, 0 rows affected (0.00 sec)  使用客户端登录VIP测试 1. C:\MySQL\bin>MySQL.exe -uroot -p123456 -h192.168.1.200 -P3306   2. Welcome to the MySQL monitor.  Commands end with ; or \g.   3. Your MySQL connection id is 224   4. Server version: 5.0.89-log Source distribution   5.   6. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.   7.   8. MySQL>  ● keepalived故障转移测试 ※在windows客户端一直去ping  VIP,然后关闭192.168.1.201上的keepalived,正常情况下VIP就会切换到192.168.1.202上面去 ※开启192.168.1.201上的keepalived,关闭192.168.1.202上的keepalived,看是否能自动切换,正常情况下VIP又会属于192.168.1.201 注:keepalived切换速度还是非常块的,整个切换过程只需1-3秒 ● MySQL故障转移测试 ※在192.168.1.201上关闭MySQL服务,看VIP是否会切换到192.168.1.202上 ※开启192.168.1.201上的MySQL和keepalived,然后关闭192.168.1.202上的MySQL,看VIP是否会切换到192.168.1.201上 下面是用windows客户端连接的MySQL的VIP,在切换时我执行了一个MySQL查询命令,从执行show databases到显示出结果时间为3-5秒(大家可以看到上面有个错误提示,不过不用担心,因为我们的keepalived切换大概为3秒左右,这3秒左右VIP是谁都不属于的) 1. MySQL> show databases;   2. ERROR 2006 (HY000): MySQL server has gone away   3. No connection. Trying to reconnect...   4. Connection id:    592   5. Current database: *** NONE ***   6.   7. +--------------------+   8. | Database           |   9. +--------------------+   10. | information_schema |   11. | MySQL              |   12. | test               |   13. +--------------------+   14. 3 rows in set (9.01 sec)  后话:世间万事万物,都不具备绝对的完美,就像上面的MySQL-HA一样,keepalived只能做到对3306的健康检查,但是做不到比如像MySQL复制中的slave-SQL、slave-IO进程的检查。所以要想做到一些细致的健康检查,还得需要借助额外的监控工具,比如nagios,然后用nagios实现短信、邮件报警,从而能够有效地解决问题。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值