您好,欢迎访问一九零五行业门户网

高可用的Mysql双机热备(Mysql_HA)

1.keepalived+mysql 使用keepalived实现高可用的mysql_ha集群环境中,mysql为(master/master)主/主同步复制关系,保证mysql服务器数据的一致性,用keepalived提供虚拟ip,通过keepalived来进行故障监控,实现mysql故障时自动切换。 布署环境拓朴如下: ?mysq
1.keepalived+mysql 使用keepalived实现高可用的mysql_ha集群环境中,mysql为(master/master)主/主同步复制关系,保证mysql服务器数据的一致性,用keepalived提供虚拟ip,通过keepalived来进行故障监控,实现mysql故障时自动切换。
布署环境拓朴如下:
?mysql?vip :192.168.187.61
master1:192.168.187.129
master:192.168.187.132
os 环境:cent os 5.9
mysql版本:mysql5.5.31
2.安装mysql 2.1.mysql升级安装 因为centos的mysql还是停留在5.0.19,而我们做mysql之间的同步复制,mysql版本至少要在mysql5.1以上,所以要对其进行升级安装。
>>使用 yum安装, yum 可以帮你解决依赖于冲突
# rpm –uvh ?http://repo.webtatic.com/yum/centos/5/latest.rpm//安装最新的mysql的yum源
# yum –y install mysql55 mysql55-* --enablerepo=webtatic//安装mysql,--enablerepo参数是用来指定源
?
>>开启mysql服务
# service mysqld start ?//开启mysql服务
?
>>刚安装密码为空,设置root密码
# mysqladmin –u root password ‘1234’ ?//设置root密码?
>>更改mysql配置文件
# cp /usr/share/mysql/my-medium.cnf? /etc/my.cnf?//在etc目录下建立mysql的配置文件my.cnf
# service mysqld restart//重启mysql服务
?
>>登陆mysql
# mysql –u root –p 1234 ?//设置root密码
mysql>? ?//登陆进了mysql
2.2.mysql主/主配置 2.2.1 设置配置文件 mysql是通过日志进行同步复制的,先建立日志文件
#touch /var/log/mysql/mysql-bin.log //建立日志文件
#chown mysql.mysql /var/log/mysql/mysql-bin.log ?//将日志文件的所属用户和用户组更改成mysql
在两台要进行备份的mysql服务器上的my.cnf文件进行配置如下(将下面的配置分别加入相关服务器的my.cnf):
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
2.2.2查看配置情况 按上面的配置将两台服务器配置好以后,重新启动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:master1(192.168.187.132)的情况
# mysql –u root –p 1234
mysql> show master status;
+------------------+----------+--------------+------------------+
| file | position | binlog_do_db | binlog_ignore_db |
+------------------+----------+--------------+------------------+
| mysql-bin.000001|? 107 | test | mysql? |
+------------------+----------+--------------+------------------+
2.2.3建立权限帐户,实现同步 a.创建账户并授予replication slave权限
mysql> grant replication slave on *.* to 'slave'@'%' identified by '1234'; //建立一个用户名为slave的帐户
mysql> flush privileges; //刷新相关权限表
因为进行双向复制,两边服务器都需要建立一个用于复制的的用户。两边可以复用上面的语句,用户名和密码可以自行进行修改。
b.同步设置
master1(192.168.187.129)上操作如下:
mysql> stop slave; ?//停止slave
mysql>change master to master_host='192.168.187.132', master_user='slave', master_password='1234', master_log_file='mysql-bin.000001', master_log_pos=107;? //修改当前的master的值,因为是互为备份,所以master1(192.168.187.129)的master为master2(192.168.187.132),master2设置复制的用户名为slave,密码是1234,上面通过 show master status我们得知,log_file是mysql-bin.000001,postion是107。
mysql>start slave;? //开始salve,开始同步
mysql>show slave status; //检测slave状态,如果slave_io_running: yes? slave_sql_running: yes? seconds_behind_master: 0就ok了
?
master2(192.168.187.132)上面操作如下:
mysql> stop slave;? //停止slave
mysql>change master to master_host='192.168.187.129', master_user='slave', master_password='1234', master_log_file='mysql-bin.000001', master_log_pos=107; ?//修改当前的master的值,因为是互为备份,所以master2(192.168.187.132)的master为master2(192.168.187.129),master1设置复制的用户名为slave,密码是1234,上面通过 show master status我们得知,log_file是mysql-bin.000001,postion是107。
mysql>start slave;? //开始salve,开始同步
mysql>show slave status;? //检测slave状态,如果slave_io_running: yes? slave_sql_running: yes? seconds_behind_master: 0就ok了
c.测试情况:
step1:建一个测试表test,两个字段,id与name字段,id字段为自增,两个服务器上面都是同样的结构,如下图:
step2:我在master1(192.168.187.129)表上执行一个insert语句,并进行查询,如下图:
step3:在master2(192.168.187.132)中查询,可以发现数据已经同步过来了,如下图:
?
3keepalived安装配置 3.1 keepalived的安装方法 ?可参照“高可用的负载均衡配置方法(haproxy+keepalived)”5.1 中keepalived的安装方法
3.2将keepalived加入服务 可参照“高可用的负载均衡配置方法(haproxy+keepalived)”5.2 ?中将keepalived加入服务
3.3 keepalived的配置 安装好以后,对其进行配置如下:
有两台机器(master1)所在的 192.168.187.129与(master2) 192.168.187.132,用(vip)192.168.187.61做虚拟ip。
在两台服各器中的/etc/keepalived文件夹中的keepalived.conf下进行配置:
master1的设置?
192.168.187.129
global_defs {
router_id mysql_ha#当前节点名
}
vrrp_instance vi_1{
? state backup?#两台配置节点均为backup
interface eth0 #绑定虚拟ip的网络接口
virtual_router_id 51 #vrrp组名,两个节点的设置必须一样,以指明各个节点属于同一vrrp组
priority 100#节点的优先级,另一台优先级改低一点
acvert_int 1 #组播信息发送间隔,两个节点设置必须一样
nopreempt ?#不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置
authentication{? #设置验证信息,两个节点必须一致
? auth_type? pass
? auth_pass? 1111
}
virtual_ipaddress{ #指定虚拟ip,两个节点设置必须一样
192.168.187.61
}
}
virtual_server 192.168.187.61 3306 { #linux虚拟服务器(lvs)配置
delay_loop 2? ?#每个2秒检查一次real_server状态
lb_algo wrr ?#lvs调度算法,rr|wrr|lc|wlc|lblc|sh|dh
lb_kind dr ?#lvs集群模式 ,nat|dr|tun
persistence_timeout 60 ?#会话保持时间
protocol tcp ?#使用的协议是tcp还是udp
real_server 192.168.187.129 3306 {
weight 3 #权重
notify_down ?/usr/local/bin/mysql.sh ?#检测到服务down后执行的脚本
tcp_check {
connect_timeout 10 #连接超时时间
nb_get_retry 3#重连次数
delay_before_retry 3?#重连间隔时间
connect_port 3306 ?#健康检查端口
}
}
?
master2的设置?
192.168.187.132
global_defs {
router_id mysql_ha#当前节点名
}
vrrp_instance vi_1{
? state backup?#两台配置节点均为backup
interface eth0 #绑定虚拟ip的网络接口
virtual_router_id 51 #vrrp组名,两个节点的设置必须一样,以指明各个节点属于同一vrrp组
priority 90#节点的优先级,另一台优先级改低一点
acvert_int 1 #组播信息发送间隔,两个节点设置必须一样
authentication{? #设置验证信息,两个节点必须一致
? auth_type? pass
? auth_pass? 1111
}
virtual_ipaddress{ #指定虚拟ip,两个节点设置必须一样
192.168.187.61
}
}
virtual_server 192.168.187.61 3306 { #linux虚拟服务器(lvs)配置
delay_loop 2? ?#每个2秒检查一次real_server状态
lb_algo wrr ?#lvs调度算法,rr|wrr|lc|wlc|lblc|sh|dh
lb_kind dr ?#lvs集群模式 ,nat|dr|tun
persistence_timeout 60 ?#会话保持时间
protocol tcp ?#使用的协议是tcp还是udp
real_server 192.168.187.132 3306 {
weight 3 #权重
notify_down /usr/local/bin/mysql.sh ?#检测到服务down后执行的脚本
tcp_check {
connect_timeout 10 #连接超时时间
nb_get_retry 3#重连次数
delay_before_retry 3?#重连间隔时间
connect_port 3306 ?#健康检查端口
}
}
脚本/usr/local/bin/mysql.sh
#vi? /usr/local/bin/mysql.sh
#!/bin/sh
killall keepalived
?
3.4 keepalived测试 可参照“高可用的负载均衡配置方法(haproxy+keepalived)”5.4 中keepalived测试
4.mysql测试 step1:打开三个服务器进行查看,刚开始三个都为空
step2:在vip(192.168.187.61)服务器中插入一条数据
step3:再查看三个服务器中的数据都已经同步过来了
当关掉做为主机的192.168.187.129做为宕机处理,同样也不会出问题,虚拟ip由192.168.187.129漂移
到192.168.187.132上面。
?
5.安装时出现的问题及处理方法 no1: slave将无法链接到 master情况
错误:slave将无法链接到 master
原因:bind-address默认是127.0.0.1你必须更改它
解决办法:修改my.cnf,加上如下图红框所示的配置!
no2: mysql error 1129 错误
错误:mysql 1129错误!如下图:
?
原因:是因为mysql将ip连接阻塞了。
解决办法:登录到mysql数据库服务器端,使用命令:
#?mysqladmin -u root -p ?flush-hosts; ?
enter password:
?
作者:xuejiazhi 发表于2013-5-17 17:36:01 原文链接
阅读:0 评论:0 查看评论
原文地址:高可用的mysql双机热备(mysql_ha), 感谢原作者分享。
其它类似信息

推荐信息