目的:
在一个Mysql挂掉之后,能自动连接到另一个一模一样的数据库上
介质下载
1.mysql5.6 mysq的llinux安装包-5.6.34.zip-Linux其他资源-CSDN下载
2.keepalive keepalive1.1.17.zip-其它其他资源-CSDN下载
一.主主复制
需要三个IP
master1
master2
VIP
其中vip也是虚拟ip 我得做法是ping mater1到master2之间随便一个没有ping通的ip(这个正常要和公司的网络人员联系)
1.1修改配置文件
1.1.1修改master1的etc下my.cnf配置文件
[mysqld]下添加
server-id=1
log-bin=/usr/local/mysql/data/mysql1-bin
relay_log=/usr/local/mysql/data/relay-log
auto-increment-increment = 2
auto-increment-offset = 1
1.1.2修改master2的etc下my.cnf配置文件
[mysqld]下添加
server-id=2
log-bin=/usr/local/mysql/data/mysql2-bin
relay_log=/usr/local/mysql/data/relay-log
auto-increment-increment = 2
auto-increment-offset = 2
改完配置文件后重启mysql
1)service mysql stop
2)service mysql start
1.2给对方授权
主主复制就是互为对方的主
1.2.1 master1给master2授权
1)先用root登录
mysql -uroot -ppasswprd
2)授权
GRANT ALL PRIVILEGES ON *.* TO 'username'@'ip' IDENTIFIED BY 'password' WITH GRANT OPTION;
或者
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO username@ip IDENTIFIED BY 'password';
3)刷新
FLUSH PRIVILEGES;
4)查看master1的配置
分别是日志名和pos
5)在master2上链接master1
若slave已经开启 先执行stop slave
上边五个箭头都是对方的 分别对应master1的ip master1给master2授权的用户名密码 master1的日志名和master1的position
6)start slave;
7)查看状态
SHOW SLAVE STATUS\G
都为yes时 配置成功
1.2.2 同样的方式 master2给master1赋权 在master2重复一遍1.2.1
到此 主主复制完成
二.配置网络环境
编辑两台机器的 /etc/sysconfig/network-scripts/ifcfg-eth1或/etc/sysconfig/network-scripts/ifcfg-eth0
下边#说明 先不要加
配置如下
master1
DEVICE=eth0 #网卡 可以看ip addr show出现的是eth0还是eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=172.21.1.80 #这台机器的ip
NETMASK=255.255.255.0
GATEWAY=172.21.1.1
IPV6INIT=no
USERCTL=no
master2
DEVICE=eth0 #网卡 可以看ip addr show出现的是eth0还是eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=172.21.1.85 #这台机器的ip
NETMASK=255.255.255.0
GATEWAY=172.21.1.1
IPV6INIT=no
USERCTL=no
三.安装keepalive
除了两个数据库ip之外,还需要keepalive的虚拟ip 也叫vip 他的作用就是监控两个数据库 master1挂了就去Master2 master2挂了就去master1
两台机器都要安装keepalive
1)解压 tar -zxvf keepalived-1.1.17.tar.gz
2)cd keepalived-1.1.17
3)make && make install
4)拷贝配置文件并创建配置问文件目录
cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/sbin/keepalived /usr/sbin/
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
5)master1的Keepalive配置文件(#后为解释说明 不要加 没有说明标示默认)
! Configuration File for keepalived
global_defs {
notification_email {
}
notification_email_from xiaoying@bjhsht.cn #邮箱
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id mysql65 #两台机器不能相同
}
vrrp_script check_run {
script "/opt/mysql_check.sh" #在mysql挂了后执行杀死keepalive进程的脚本
interval 1
wegiht 2
}
vrrp_instance VI_1 {
state backup #两台都设置为从
interface eth1 #网关 可通过ip addr show
virtual_router_id 80 #两台机器一致
priority 100 #优先级
nopreempt #两台机器都是非抢占模式
advert_int 1
authentication {
auth_type PASS
auth_pass 1111 #两台机器密码一致
}
virtual_ipaddress {
172.88.8.86 #VIP
}
track_script {
check_run #监听函数
}
}
virtual_server 172.88.8.86 3306 {#虚拟ip和端口
delay_loop 2
lb_algo rr
lb_kind DR
persistence_timeout 30
protocol TCP
real_server 127.0.0.1 3306 {#本机ip
weight 2
notify_down /opt/mysql_check.sh
TCP_CHECK {
connect_timeout 3 #连接超时时间
nb_get_retry 3 #重连次数
delay_before_retry 3 #重连间隔时间
connect_port 3306 #健康检查端口
}
}
}
6)mysql_check.sh 放在opt下
/opt/mysql/bin/mysql是Mysql路径
#!/bin/bash
#MYSQL_HOST=172.21.1.229
#MYSQL_USER=root
#MYSQL_PASSWORD=123456
/opt/mysql/bin/mysql -h 127.0.0.1 -u root -p123456 -e "show status;" >/dev/null 2>&1
#$mysqlclient --host=$host --port=$port --user=$user --password=$password -e "show databases;" > /dev/null 2>&1
if [ $? == 0 ]
then
echo " $host mysql login successfully "
exit 0
else
#echo " $host mysql login faild"
/etc/init.d/keepalived stop
exit 2
fi
四.启停keepalive
1)启动keepalived
service keepalived start
2)停止keepalived
service keepalived stop
五.把mysql和keepalived添加到开机自启
1)chkconfig --add mysqld
2)chkconfig --level 345 mysqld on
3)chkconfig --add keepalived
4)chkconfig --level 345 keepalived on
六.验证
1)在一台数据库上进行添加表,数据等操作,另一台数据库会有同样的效果
2)执行ip addr show 观察VIP是否同时出现在两台服务器 若只出现在一台服务器则验证成功 否则失败
3)执行service mysqld stop 停止Mysql服务 执行service keepalived status查看keepalived是否运行 若停止运行则正常 若还在运行则失败
4)停掉mysql或者keepalived后,通过navicat访问vip的Mysql,不能链接则失败
5)停掉一台mysql或者keepalive后,执行ip addr show看vip在哪台服务器,再把关闭的服务器启动,如果vip没有漂移回去则成功,如果漂移回去则失败
6)查看是否添加到开机自启
chkconfig --list mysqld
chkconfig --list keepalived