使用KeepAlived实现高可用的MYSQL_HA集群环境中,MySQL为(Master/Master)主/主同步复制关系,保证MYSQL服务器数据的一致性,用KeepAlived提供虚拟IP,通过KeepAlived来进行故障监控,实现Mysql故障时自动切换。
布署环境拓朴如下:
Mysql VIP :192.168.187.61
Master1:192.168.187.129
Master2:192.168.187.132
OS 环境:Cent OS 6.5
Mysql版本:Mysql5.5.31
一:设置配置文件:
Mysql是通过日志进行同步复制的,先建立日志文件
touch /var/log/mysql/mysql-bin.log //建立日志文件,请设置权限,如777 chown mysql.mysql /var/log/mysql/mysql-bin.log //将日志文件的所属用户和用户组更改成mysql
在两台要进行备份的mysql服务器上的my.cnf文件进行配置如下(将下面的配置分别加入相关服务器的my.cnf,放在配置文件的[mysqld_safe]上面):
Master1(192.168.187.129) |
Master(192.168.187.132) |
#主标服务标识号,必需唯一 server-id = 1 #因为MYSQL是基于二进制的日志来做同步的,每个日志文件大小为 1G log-bin=/var/log/mysql/mysql-bin.log #要同步的库名 binlog-do-db = test #不记录日志的库,即不需要同步的库 binlog-ignore-db=mysql #用从属服务器上的日志功能 log-slave-updates #经过1日志写操作就把日志文件写入硬盘一次(对日志信息进行一次同步)。n=1是最安全的做法,但效率最低。默认设置是n=0。 sync_binlog=1 # auto_increment,控制自增列AUTO_INCREMENT的行为 用于MASTER-MASTER之间的复制,防止出现重复值, auto_increment_increment=n有多少台服务器,n就设置为多少, auto_increment_offset=1设置步长,这里设置为1,这样Master的auto_increment字段产生的数值是:1, 3, 5, 7, …等奇数ID auto_increment_offset=1 auto_increment_increment=2 #进行镜像处理的数据库 replicate-do-db = test #不进行镜像处理的数据库 replicate-ignore-db= mysql |
#主标服务标识号,必需唯一 server-id = 2 #因为MYSQL是基于二进制的日志来做同步的,每个日志文件大小为 1G log-bin=/var/log/mysql/mysql-bin.log #要同步的库名 binlog-do-db = test #不记录日志的库,即不需要同步的库 binlog-ignore-db=mysql #用从属服务器上的日志功能 log-slave-updates #经过1日志写操作就把日志文件写入硬盘一次(对日志信息进行一次同步)。n=1是最安全的做法,但效率最低。默认设置是n=0。 sync_binlog=1 # auto_increment,控制自增列AUTO_INCREMENT的行为 用于MASTER-MASTER之间的复制,防止出现重复值, auto_increment_increment=n有多少台服务器,n就设置为多少, auto_increment_offset=2设置步长,这里设置为2,这样Master的auto_increment字段产生的数值是:2, 4, 6, 8, …等奇数ID auto_increment_offset=2 auto_increment_increment=2 #进行镜像处理的数据库 replicate-do-db = test #不进行镜像处理的数据库 replicate-ignore-db= mysql
|
二:查看配置情况
按上面的配置将两台服务器配置好以后,重新启动mysql服务,用showmaster status查看一下两台服务器的Master配置情况,可以看出已经配置成功,如下:
NO1:Master1(192.168.187.129)的情况
# mysql –u root –p 1234 mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001| 107 | test | mysql | +------------------+----------+--------------+------------------+
NO2:Master2(192.168.187.132)的情况
# mysql –u root –p 1234 mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000002| 125 | test | mysql | +------------------+----------+--------------+------------------+
三:建立权限帐户,实现同步
Master1(192.168.187.129) |
Master2(192.168.187.132) |
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456'; mysql> FLUSH PRIVILEGES; #在MYSQL中设置对端Master2的复制账号
mysql> change master to master_host='192.168.187.132', master_user='slave', master_password='123456', master_log_file='mysql-bin.000002', master_log_pos=125; mysql> start slave; #启动从服务器复制功能
mysql> show slave status; #检测slave状态,如果Slave_IO_Running: Yes Slave_SQL_Running: Yes Seconds_Behind_Master: 0就证明已经同步了 |
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456'; mysql> FLUSH PRIVILEGES; #在MYSQL中设置对端Master1的复制账号
mysql> change master to master_host='192.168.187.129', master_user='slave', master_password='123456', master_log_file='mysql-bin.000001', master_log_pos=107; mysql> start slave; #启动从服务器复制功能
mysql> show slave status; #检测slave状态,如果Slave_IO_Running: Yes Slave_SQL_Running: Yes Seconds_Behind_Master: 0就证明已经同步了
|
四:测试同步效果
在Master1上创建表:
mysql -uroot -p1234; use test; CREATE TABLE `card` ( `card_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `card_number` varchar(100) DEFAULT NULL COMMENT '卡号', PRIMARY KEY (`card_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC; insert into `card`(`card_number`) values ('haha1'); insert into `card`(`card_number`) values ('haha2');
执行完毕后,master2下如果对应的card表已经生成,并且也有相应的数据,证明同步成功,相应在master2上执行任何操作,master1也会相应修改。
五:配置keepalived实现热备
A) 安装keepalived
yum -y install keepalived
B) 修改配置
[root@masterr ~] vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { test@qq.com } notification_email_from admin@test.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id MYSQL_HA #标识,双主相同 } vrrp_instance VI_1 { state BACKUP #两台都设置BACKUP interface eth0 virtual_router_id 51 #主备相同 priority 100 #优先级,backup设置90 advert_int 1 #组播信息发送间隔,两个节点设置必须一样 nopreempt #不主动抢占资源,只在master这台优先级高的设置,backup不设置 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.187.61 #指定VIP,两个节点设置必须一样 } } virtual_server 192.168.187.61 3306 { delay_loop 2 #每个2秒检查一次real_server状态 #lb_algo rr #LVS算法,用不到,我们就关闭了 #lb_kind NAT #LVS模式,如果不关闭,备用服务器不能通过VIP连接本机MySQL persistence_timeout 50 #会话保持时间 protocol TCP #使用的协议是TCP还是UDP real_server 192.168.187.132 3306 { //这里填写各自的真实内网IP地址 weight 3 #权重 notify_down /usr/local/keepalived/mysql.sh #当mysq服down时,执行此脚本,杀死keepalived实现切换 TCP_CHECK { connect_timeout 3 #连接超时 nb_get_retry 3 #重试次数 delay_before_retry 3 #重试间隔时间 } } }
C) 配置keepalived脚本
[root@masterr ~] vim /usr/local/keepalived/mysql.sh #!/bin/bash pkill keepalived [root@masterr ~]# chmod +x /usr/local/keepalived/mysql.sh [root@masterr ~]# /etc/init.d/keepalived start
六:测试高可用性
1、通过Mysql客户端通过VIP连接,看是否连接成功。 2、停止master这台mysql服务,是否能正常切换过去,可通过ip addr命令来查看VIP在哪台服务器上。 3、可通过查看/var/log/messges日志,看出主备切换过程 4、master服务器故障恢复后,是否主动抢占资源,成为活动服务器。
相关推荐
基于mscs-win_2003双机热备_oracle_10g_配置文档
win_2003双机热备_oracle_10g_(基于mscs)配置文档
win_XXXX双机热备_oracle_10g_(基于mscs)配置文档
高可用性工具软件,双机热备工具软件,能够监控目标系统的连通性。在目标系统意外停机时,添加虚拟ip并执行启动脚本,接替目标系统的工作,实现双机热备和高可用性的功能。
Centos 7.4 DHCP 双机热备 配置文档。
双机热备 双机热备 双机热备 双机热备 双机热备 双机热备
ROSE mirror HA 双机热备软件(适用于Windows 32位和64位操作系统) 双机热备软件ROSE mirror HA,软件下载包以及详细安装步骤操作文档说明,适用于Windows 32位和64位操作系统。
双机热备软件,高可用性工具软件,双机热备工具软件,能够监控目标系统的连通性。在目标系统意外停机时,添加虚拟ip并执行启动脚本
MySQL双机热备
双机热备双机热备双机热备双机热备双机热备双机热备双机热备双机热备双机热备双机热备双机热备双机热备双机热备双机热备双机热备双机热备双机热备双机热备双机热备双机热备双机热备双机热备双机热备双机热备双机热备...
SpringBoot项目中利用Redis实现系统双活_双机热备,在定时器环境实现双机热备
MYSQL双机热备配置手册MYSQL双机热备配置手册MYSQL双机热备配置手册
双机热备方案及双机热备软件选择
linux下基于keepalived的mysql双机热备实现方案,本文档用于实现mysql数据库双机热备灾备方案,在系统部署过程中还需仔细认真,有时候一个小小的配置错误就可能导致部署失败,本人在此套技术验证过程中也踩了不少坑...
高可用性服务器双机热备
双机热备解决方案双机热备解决方案双机热备解决方案双机热备解决方案
这份文档是我在实际工作当中总结而来,希望能帮助在数据库双机热备方面有困惑的开发人员。