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 rep1@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 rep1@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 admin@% 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状态监测脚本

两边sql1sql2配置一模一样

 

脚本的名字和路径必须要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逐个测试机就行了