Mysql双主故障转移
架构图
说明:
Mysql1(.3)已存在使用中数据库实例已经开始binlog
Mysql2(.4)后添加.3冷备还原
目的:
实现异常宕机或mysql服务异常中断时正常提供对外服务
缺点:正常情况下只有一台服务器提供服务,当出现故障时候才会转移
不可用情况:服务器hang
环境:
2台64位centos6.3虚拟机部署mysql5.6.19serverrpm安装包
实施步骤:
- 首先配置主从见文档mysql读写分离
- 授权mysql1访问mysql2的权限
Mysql2:
grant all privileges on *.* to 'backup'@'192.168.137.3' identified by 'backup'; flush privileges;
show master status;--记下file和position
mysql1:
change master to master_host='192.168.137.4',master_user='backup',master_password='backup',master_log_file='mysql-bin.000002',master_log_pos=120;
start slave;
show slave status \G
- 下载http://www.keepalived.org/download.html
- 解压tar -zxvf keepalived-1.2.13.tar.gz
- 安装依赖软件包
yum -y install gcc gcc-c++ gcc-g77 ncurses-devel bisonlibaio-devel cmake libnl* libpopt* openssl-devel
- cd keepalived-1.2.13
./configure--prefix=/usr/local/keepalived
Make
Make install
---同上分别在两台服务器上面安装
- 配置keepalived,两台服务器
Mysql2:
vi/usr/local/keepalived/etc/keepalived/keepalived.conf
!Configuration File for keepalived
global_defs {
router_id mysql-ha
}
vrrp_instance VI_1 {
state BACKUP
interface eth1
virtual_router_id 201
priority 90 #slave
advert_int 1
authentication {
auth_type PASS
auth_pass mysql
}
virtual_ipaddress {
192.168.137.2
}
}
virtual_server 192.168.137.2 3306 {
delay_loop 2
lb_algo rr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.137.4 3306 {
weight 1
notify_down /usr/local/keepalived/etc/keepalived/mysql.sh
TCP_CHECK {
connect_port 3306
connect_timeout 3
nb_get_retry 2
delay_before_retry 1
}
}
}
Mysql1:
修改interface eth1 interface eth0
prority100
real_server192.168.137.1
Mysql1修改完后如下
! Configuration File for keepalived
global_defs {
router_id mysql-ha
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 201
priority 100 #master
advert_int 1
nopreempt #
authentication {
auth_type PASS
auth_pass mysql
}
virtual_ipaddress {
192.168.137.2
}
}
virtual_server 192.168.137.2 3306 {
delay_loop 2
lb_algo rr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.137.3 3306 {
weight 1
notify_down /usr/local/keepalived/etc/keepalived/mysql.sh
TCP_CHECK {
connect_port 3306
connect_timeout 3
nb_get_retry 2
delay_before_retry 1
}
}
}
#!/bin/bash
pkill keepalived
- 两台主机上面启动keepalived
/usr/local/keepalived/sbin/keepalived -f/usr/local/keepalived/etc/keepalived/keepalived.conf -D
到这里keepalived已经配置完成
Start.sh
- Mysql1服务停止
可以看到mysql1服务停止后可以正常使用
- 启动mysql1停止mysql2服务
启动myslq1
停止mysql2
可以看到刚才mysql服务是在mysql2上面查询时报错然后再次查询就正常了没有一次已经实现故障转移
- Myslq1服务器异常中断
可以看到同上
- 网络故障
服务在mysql2上面跑停止mysql1时没有影响,当停止mysql2的时候会发出错误然后再次执行正常已经转移到服务已经转移到mysql1上面,现在启动mysql2,我们已经确定服务是在mysql1上面了
- 停止mysql2网卡模拟网络故障
可以看到mysql2网卡故障没有任何影响
- 启动mysql2网卡,停掉mysql1
已经自动转移到了mysql2
停止正在服务的mysql1后再mysql2上面插入数据再启动mysql1
可以看到数据正常同步
当正在使用的服务器断网时候会出现无法使用,需要重启另外一台服务器的mysql服务即可正常
在写入数据时候突然断网的时候不是很稳定有时候断一下连接正常,有时候需要重启服务
 版权声明:本文为博主原创文章,未经博主允许不得转载。 |