docker下搭建了mysql8进行了复制虚拟机。参考docker安装mysql8
计划主主从从的方案完成高可用。
vip 65 对外提供写,68对外提供读。
66与67属于同步关系,都可以写,因为只有vip对外,同时只会对一台进行写,然后数据同步。
69是66的从属关系,从66获取数据。
70是67的从属关系,从67获取数据。
keepalived主要用来解决单点故障的问题。
keepalived有虚拟vip,所以对外提供vip即可,读写不存在单点故障。
keepalived 脚本可以查询本台mysql数据是否正常,决定是否降低vip权限来放弃vip。
前面也可以放mycat进行分库分表,纵向或者横向拆分。
如果是金融,价值高的,采用Percona XtraDB Cluster 。一般使用这种 Replication 的方案即可。
官方新的group Replication 缺点挺多,还不稳定,后期再研究。
目前已知也是只能单点写,感觉没必要了。
Percona XtraDB Cluster 采用同步复制,事务在所有集群节点要么同时提交,要么不提交。
Replication 采用异步复制,无法保证数据的一致性。
复制的虚拟机记得修改auto.cnf文件里面的最后2位,保证每台不一样。
server-uuid=652ffccc-60ee-11e9-adb4-0242ac110069
对外vip 192.168.39.65 对外提供写的能力
master主的 IP 192.168.39.66
[master主my.cnf]
server-id=66
log-bin=mysql_bin
master副的 IP 192.168.39.67
[master副my.cnf]
server-id=67
log-bin=mysql_bin
对外的vip 192.168.39.68 ,对外提供读的能力
slave主的 IP 192.168.39.69
[slave主my.cnf]
server-id=69
log-bin=mysql_bin
auto-increment-increment=2
auto-increment-offset=1
slave副的 IP 192.168.39.70
[slave副my.cnf]
server-id=70
log-bin=mysql_bin
auto-increment-increment=2
auto-increment-offset=1
常用命令
show master status;
show slave status;
show variables like ‘%log_bin%’;
start slave;
stop slave;
各个服务器配置相同复制权限的账号
CREATE USER 'augustreplication'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'augustreplication'@'%';
flush privileges;
注意要进行锁表,不然坑很多
FLUSH TABLES WITH READ LOCK;#锁定所有表
UNLOCK TABLES;#解锁表
查看自己的master服务状态。
show master status;
查看目前本机的bin日志文件和行数,然后使用下列语句去对端配置主机名,帐密信息,以及对应日志信息和要开始的行号。
stop slave;
配置两边的连接信息
change master to master_host='192.168.39.67',master_port=13306,master_user='augustreplication',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=1;
change master to master_host='192.168.39.66',master_port=13306,master_user='augustreplication',master_password='123456',master_log_file='mysql_bin.000002',master_log_pos=1;
flush privileges;
然后开启复制服务。
start slave;
查看复制服务状态。
show slave status;
建议做之前把被复制的表锁住,本次没锁,做的时候有点莫名其妙,最终是成功了。
重复加第三台slave 69去66上复制数据。
查看66上master状态
show master status;
配置连接到66的信息。
change master to master_host=‘192.168.39.66’,master_port=13306,master_user=‘augustreplication’,master_password=‘123456’,master_log_file=‘mysql_bin.000004’,master_log_pos=6012;
然后开启复制服务。
start slave;
查看复制服务状态。
show slave status;
主主从模式搭建完成。
第四台70连接到67的不准备浪费时间了。