Mysql双主复制
实验拓扑:sql1 192.168.10.1 server id 1 vip 192.168.10.100
Sql2 192.168.10.2 server id 2 vip 192.168.10.100
客户端 192.168.10.3
Sql1配置双主
主库配置:vim /etc/my.cnf
Log-bin=mysql-bin //打开二进制日志
Server-id=1
Service mysqld start //重启mysql进程
登录到mysql控制台
Mysql> reset master; //重置日志
Mysql>grant replication slave,replication client on *.* to [email protected]’192.168.10.%’ identified by ‘tianyun’; //为第二台服务器建立复制账号
Mysql> flush privileges;
Mysql>change master to master_host=’192.168.10.2’, master_user=’rep1’, master_password=’tianyun’, master_log_file=’mysql-bin.000001’, master_log_pos=0;
//因为它也是从,所以也需要设置
Mysql>Start slave; //先不要启动,执行这语句,等待会第二台服务器配置好之后再执行
Sql2配置
主库配置:vim /etc/my.cnf
Log-bin=mysql-bin //打开二进制日志
Server-id=2
Service mysqld start //重启mysql进程
登录到mysql控制台
Mysql> reset master; //重置日志
Mysql>grant replication slave,replication client on *.* to [email protected]’192.168.10.%’ identified by ‘tianyun’; //为对方主机第一台服务器建立复制账号
Mysql> flush privileges;
Mysql>change master to master_host=’192.168.10.1’, master_user=’rep1’, master_password=’tianyun’, master_log_file=’mysql-bin.000001’, master_log_pos=0;
//因为它也是从,所以也需要设置
Mysql>Start slave; //先不要启动,执行这语句,等待会第二台服务器配置好之后再执行
测试:分别在两台服务器上创建建库建表往表里查一点数据,在对方服务器上看有没有库表数据就能测试出来了。
创建一个测试远程连接账号
Grant all on *.* to [email protected]’%’ identified by ‘tianyun’; //因为是主主架构,两边服务器数据肯定一致,所以只需要再一台服务器上创建账号就可以了。
Flush privileges;
在客户端电脑分别登录测试一下两台主机服务器,看看是否正常。
安装keepalived
在两台sql服务器上分别安装keepalived软件
Yum -y install kernel-headers kernel-devel openssl-devel popt-devel //解决依赖包
Tar xzf keepalived-1.2.8.tar.gz
Cd keepalived-1.2.8
./configure --prefix=/ //这样配置文件比较短一点,位置随便自定的
Make && make install
Keepalived主/备配置
Vim /etc/keepalived/keepalived.conf //sql1上做为高可用的主服务器,当然也可以在sql2上做为主服务器,这里就让sql1做主服务器
备注:红色部分代码新增的,紫色部分代表修改的
Lobal_defs{ //用来设置通知发送给那个邮件的
Router_id mysqlA //这个只是一个标识而已
Vrrp_script check_mysql{ //定义检测mysql正常语法的脚本
Script “/keeplived_mysql.sh” //脚本位置,这个是我们需要自己去手工写的脚本,位置名字必须和这里的一致
Interval 5 //定义间隔什么时候就去检测一次
}
Vrrp_instance VI_1{ //定义一个实例
State Master
Interface eth0 //通信心跳接口,最好就是直接用一个网卡互联,不经过任何路由器
Virtual_router_id 51 //两边一致
Priority 100 //优先级
Advert_int 1
Authentication{ //通信方式,两边一致最好
Auth_type PASS
Auth_pass tianyun
}
Virtual_ipaddreess {
192.168.10.100 //vip地址
}
Track_script {
Check_mysql //最关键的一点,检查运行脚本
}
}
下面的东西我们不用管它
保存退出
Rsync -av /etc/keepalived/keeplived.conf 192.168.10.2:/etc/keepalived //直接把配置文件拷贝到备也就是另一台服务器上,然后我们直接修改两个参数即可,就不用我们再怎么设置了
在sql2上配置
Vim /etc/keepalived/keepalived.conf
Lobal_defs{ //用来设置通知发送给那个邮件的
Router_id mysqlB //这个只是一个标识而已
Vrrp_script check_mysql{ //定义检测mysql正常语法的脚本
Script “/keeplived_mysql.sh” //脚本位置,这个是我们需要自己去手工写的脚本,位置名字必须和这里的一致
Interval 5 //定义间隔什么时候就去检测一次,时间不要太短,合适就好了
}
Vrrp_instance VI_1{ //定义一个实例
State BACKUP //这个不能随便写的,是关键字
Interface eth0 //通信心跳接口,最好就是直接用一个网卡互联,不经过任何路由器
Virtual_router_id 51 //两边一致
Priority 50 //优先级
Advert_int 1
Authentication{ //通信方式,两边一致最好
Auth_type PASS
Auth_pass tianyun
}
Virtual_ipaddreess {
192.168.10.100 //vip地址
}
Track_script {
Check_mysql //最关键的一点,检查运行脚本
}
}
保存退出就行了
Mysql状态监测脚本
两边sql1和sql2配置一模一样
脚本的名字和路径必须要keepalived配置文件里定义的一模一样
Vim keeplived_mysql.sh
#!/bin/bash
/usr/local/mysql/bin/Mysql -e “show status” & >/dev/null //如果不给全路径,keepalived调用的时候可能会报错
If [$? -ne 0]; //如果不等于0表示mysql不正常
Then
Service keepalived stop
Fi
保存退出
Chmod a+x keeplived_mysql.sh //让脚本让其他用户有运行的权限
Chkconfig --add keepalived //将keepalived加入到让service去管理启动它
Chkconfig keepalived on //开机运行 keepalived
手工测试以调试模式去执行测试一下效果
Bash -vx /keepalived_msyql.sh
Mysql高可用测试
关闭一台sql逐个测试机就行了