keepalived+MySQL双主实现高可用性
来源:互联网 发布:centos 6.8 32位下载 编辑:程序博客网 时间:2024/06/08 16:40
使用MySQL主主复制技术+Keepalived是一种简单、便捷的解决方案,在高可用集群环境中,keepalived使用虚拟VIP,使 用Keepalived自带的服务监控功能和自定义脚本来实现MySQL故障时自动切换,非常灵活。如果有一台MySQL服务器死机,或工作出现故 障,keepalived将检测到,并将有故障的MySQL服务器从系统中去除。当MySQL服务器工作正常时,则自动将MySQL服务器加入到服务器集 群中,无需人工干预。下面环境为debugo01、debugo02两个节点,使用CentOS 6.6系统。MySQL server的版本是Percona Server 5.6.21,已经配置好了两边的MySQL实例。
1. 配置MySQL Multi-Master Replication
编辑my.cnf文件,添加相关复制选项。
Shell
vim /etc/my.cnfserver-id=1002log-bin=mysql-binrelay-log=mysqld-relay-binbinlog_format=mixedreplicate_ignore_db=information_schemaauto-increment-increment=2auto-increment-offset=1#debugo01mysql> show master status \G*************************** 1. row *************************** File: mysql-bin.000001 Position: 648 Binlog_Do_DB: Binlog_Ignore_DB: Executed_Gtid_Set: 1 row in set (0.01 sec)mysql> grant replication slave,replication client on *.* to rep@'%' identified by 'debugo';mysql> flush privileges;#debugo02mysql> grant replication slave,replication client on *.* to rep@'%' identified by 'debugo';mysql> flush privileges;mysql> CHANGE MASTER TO MASTER_HOST='debugo01', MASTER_USER='rep', MASTER_PASSWORD='debugo', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=648;mysql> start slave;Query OK, 0 rows affected (0.01 sec)#debugo01mysql> CHANGE MASTER TO MASTER_HOST='debugo02', MASTER_USER='rep', MASTER_PASSWORD='debugo', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=426;mysql> start slave;
检查日志,没有错误说明配置成功。
2. 配置keepalived
CentOS 6.6的光盘中已经带了keepalived-1.2.13-4的软件包,通过yum安装即可:
yum install keepalived完成后编辑keepalived.conf文件
vim /etc/keepalived/keepalived.conf! Configuration File for keepalivedglobal_defs { router_id Keepalived_MySQL}vrrp_script check_run { script "/etc/keepalived/check_MySQL.sh" interval 5}vrrp_sync_group VG1{ group { VI_1 }}vrrp_instance VI_1 { state BACKUP interface eth1 virtual_router_id 51 priority 100 advert_int 1 nopreempt track_script { check_run } authentication { auth_type PASS auth_pass debugo } virtual_ipaddress { 10.62.228.200 }}
配置说明(参考官方文档, Keepalived+LVS 集群的部署 和 keepalived.conf 文件详解 )
keepalived 的全局配置文件对keepalived起效的配置,而VRRPD 是keepalived 的核心,LVS配置只是需要使用keepalived来配置和管理LVS时需要使用,当然如果是只用keepalived 配置高可用集群是,LVS模块就不需要配置。配置文件都是以块的形式组织的,每个模块的配置都需要用 { } 的范围之内
在keepalived 的主配置文件中主要分为三个文本模块分别是:
全局模块(Global Configuration),VRRPD配置模块(VRRP 实例模块),LVS模块(虚拟服务模块);
1. 全局配置(Global Configuration)包括两个部分: 即全局定义(global definition) 和静态地址路由(Static ipaddress /routes)。 全局定义:主要是设置Keeplived 的通知机制和标识,同时也不建议用该方法进行状态监控,进行状态监控时nagios 是不二的选择。静态地址路由:该处是配置静态地址和静态路由的,换句话说不随着Vrrp instance的开关的变化而变化,当然VIP不是static IPaddress,会随着VRRPD而添加和删除,设置静态地址和静态路由的格式如:src $SRC_IP to $DST_IP dev $SRC_DEVICE 或者src $SRC_IP to $DST_IP via $GW dev $SRC_DEVICE2. VRRPD 配置包括三个部分: 分别是VRRP脚本(VRRP scripts) . VRRP同步组(syncgriuzation group) 和VRRP 实例(VRRP Instance):
2. VRRP scripts: 脚本会安周期性执行,每秒( 或者按照自己设定的时间间隔),被监控的实例会记录退出的代码,这些脚本被至少有被监控的实例的权重为o的实例才能执行,因此任意脚本可能的声明都不会被 系统所记录,如果没有特殊的设置,权重等于2,就意味着那些被监控的实例的优先级会被增加2,反过来,如果失败,则那些实例的优先级会被减去2
3. syncgriuzation group: 如果不使用 VRRP Sync Groups 如果keepalived 主机有两个网段,每个网段开启一个VRRP 实例,如果对外的网段出现问题,VRRPD认为自己仍然认为健康,因此 Master和Backup 相互切换,从而导致服务不能正常使用,同时高可用集群也不能正常运行,Sync group 就是为了解决该问题
注意:
router_id : 标识当前节点.两个节点即可以相同,也可以不同。
virtual_router_id : 这个标识是同一个vrrp实例使用唯一的标识。即同一个vrrp_stance,MASTER和BACKUP的virtual_router_id是一致的,同时在整个vrrp内是唯一的。
而priority 一般MASTER可以设置大一些。
vrrp_script中,MySQL的检测脚本如下,当检测到MySQL失败后,virtual_ipaddress会飘逸到BACKUP上。
Shell
vim /etc/keepalived/check_MySQL.sh#!/bin/bashMYSQL=/usr/bin/mysqlMYSQL_HOST=localhostMYSQL_USER=rootCHECK_COUNT=5counter=1while truedo mysql -h $MYSQL_HOST -u $MYSQL_USER -e "show status;" >/dev/null 2>&1 i=$? ps aux | grep mysqld | grep -v grep > /dev/null 2>&1 j=$? if [ $i = 0 ] && [ $j = 0 ] then exit 0 else if [ $i = 1 ] && [ $j = 0 ] then exit 0 else if [ $counter -gt $CHECK_COUNT ] then break fi let counter++ continue fi fi done/etc/init.d/keepalived stopexit 1
3. 测试
启动keepalived
service keepalived start此时,在/var/log/messages中可以看到定期check_run脚本执行成功:
.....Jan 21 19:58:35 debugo02 Keepalived_vrrp[22065]: VRRP_Script(check_run) succeeded......
下面关闭debugo01(MASTER)的MySQL
service mysql stop#debugo01 keepalived logan 21 20:00:23 debugo01 Keepalived[25202]: Stopping Keepalived v1.2.13 (10/15,2014)Jan 21 20:00:23 debugo01 Keepalived_vrrp[25204]: VRRP_Instance(VI_1) sending 0 priorityJan 21 20:00:23 debugo01 Keepalived_vrrp[25204]: VRRP_Instance(VI_1) removing protocol VIPs.#debugo02 keepalived logJan 21 19:58:35 debugo02 Keepalived_vrrp[22065]: VRRP_Script(check_run) succeededJan 21 20:00:24 debugo02 Keepalived_vrrp[22065]: VRRP_Instance(VI_1) Transition to MASTER STATEJan 21 20:00:24 debugo02 Keepalived_vrrp[22065]: VRRP_Group(VG1{) Syncing instances to MASTER stateJan 21 20:00:25 debugo02 Keepalived_vrrp[22065]: VRRP_Instance(VI_1) Entering MASTER STATEJan 21 20:00:25 debugo02 Keepalived_vrrp[22065]: VRRP_Instance(VI_1) setting protocol VIPs.Jan 21 20:00:25 debugo02 Keepalived_vrrp[22065]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth1 for 10.62.228.200Jan 21 20:00:25 debugo02 Keepalived_healthcheckers[22064]: Netlink reflector reports IP 10.62.228.200 addedJan 21 20:00:30 debugo02 Keepalived_vrrp[22065]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth1 for 10.62.228.200
检查IP地址:
#debugo02ip addr show...... inet 10.62.228.200/32 scope global eth1......
切换成功^^
- 本文来自:Linux学习教程网
- keepalived+MySQL双主实现高可用性
- Mysql+Keepalived高可用性双主配置
- MySQL 主主复制 + LVS + Keepalived 实现 MySQL 高可用性
- MySQL主主复制+LVS+Keepalived实现MySQL高可用性
- 配置keepalived实现高可用性mysql主主复制
- Keepalived+MySQL双主单写实现高可用性
- 高可用性之Keepalived+Mysql
- MySQL主要复制+ LVS + Keepalived实现MySQL高可用性
- keepalived+redis高可用性实现
- 使用keepalived实现高可用性
- 基于主主复制的mysql双机热备+keepalived实现高可用性
- MySQL高可用性之Keepalived+Mysql
- MySQL高可用性之Keepalived+Mysql
- MySQL 高可用性之 Keepalived 双主热备
- MySQL 高可用性之 Keepalived 双主热备
- redis+Keepalived实现Redis高可用性
- redis+Keepalived实现Redis高可用性
- MySQL高可用性之Keepalived+Mysql(双主热备)
- 数字图像的熵(C)
- 关于ASP.NET Web API 客户端的请求报文中添加 Authorization
- 管理定律
- 多线程状态下HashMap和ConCurrentHashMap的运行比较
- IOS关于tabBar的隐藏
- keepalived+MySQL双主实现高可用性
- Windows 7系统维护
- Codeforces #288 A
- java集合中的一个移除数据陷阱(遍历集合自身并同时删除被遍历数据)
- Dynamic Group-By Columns for Jasper Report
- epoll详解(转)
- 进程使用的总结
- c++ 访问sqlserver数据库,插入速度优化
- C++易混知识点4: 自己编写一个智能指针(Reference Counting)学习auto_ptr和reference counting