赞
踩
一、MYSQL双主架构方案
(1)两台mysql都可读写,互为主备,默认只使用一台(masterA)负责数据的写入,另一台(masterB)备用;
(2)masterA与masterB互为主从,即masterA是masterB的主库,masterB是masterA的主库。
(3)两台主库之间作高可用,可以采用keepalived等方案(使用VIP对外提供服务)。
(4)所有提供服务的从服务器与masterB进行主从同步(双主多从)。
(5)建议采用高可用策略的时候,masterA或masterB均不因宕机恢复后而抢占VIP(非抢占模式)
二、优点
这样做在一定程度上保证主库的高可用,在一台主库down掉后,可以在极短的时间内切换到另一台主库上(尽量减少主库宕机对业务造成的影响),减少了主从同步对线上主库带来的压力。
三、缺点
1、masterB可能会一直处于空闲状态(可以用它当从库,负责部分查询)
2、主库后面提供服务的从库要等masterB先同步完数据后才能去masterB上取同步数据,这样可能会造成一定程度的同步延迟。
四、架构图
五、MYSQL主主同步配置
(1)初始化环境
①、同步时间
- yum -y install ntp ntpdate
- ntpdate cn.pool.ntp.org
- hwclock --systohc
②、关闭防火墙
- systemctl stop firewalls
- systemctl disable firewalld
③、云主机
- ser01:123.60.45.103 server_id=22
- ser02:123.60.47.78 server_id=33
(2)ser02的配置
①、修改主库配置文件
- vim /etc/my.cnf
- [mysqld]
- server_id=33
- log-bin=mysql-bin
- log-bin-index=master-bin.index
- relay-log=relay-log
- relay-log-index=relay-log.index
②、重启服务
systemctl restart mysql
③、创建一个用于数据库连接的用户
- mysql> create user 'copy'@'%' identified with mysql_native_password by 'Lolipop909';
- Query OK, 0 rows affected (0.01 sec)
- mysql> grant replication slave on *.* to 'copy'@'%';
- Query OK, 0 rows affected (0.01 sec)
④、刷新授权表信息
- mysql> flush privileges;
- Query OK, 0 rows affected (0.00 sec)
⑤、获取主节点的binary log 文件名和位置
- mysql> show master status; #(ser01上运行)
- +------------------+----------+--------------+------------------+-------------------+
- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
- +------------------+----------+--------------+------------------+-------------------+
- | mysql-bin.000001 | 825 | | | |
- +------------------+----------+--------------+------------------+-------------------+
- 1 row in set (0.01 sec)
⑥、节点上设置主节点参数
- mysql> CHANGE MASTER TO
- -> MASTER_HOST='123.60.45.103',
- -> MASTER_USER='COPY',
- -> MASTER_PASSWORD='Lolipop909',
- -> MASTER_LOG_FILE='binlog.000002',
- -> MASTER_LOG_POS=155;
- Query OK, 0 rows affected, 2 warnings (0.02 sec) #配置信息均为ser01
(3)ser01上配置
①、修改配置文件并重新启动
- vim /etc/my.cnf
- [mysqld]
- server_id=27
- log-bin=mysql-bin
- log-bin-index=master-bin.index
- relay-log=relay-log
- relay-log-index=relay-log.index
- [root@cy-ed01-web ~]# systemctl restart mysql
②、创建一个用于让数据库连接的用户
- mysql> create user 'copy'@'%' identified with mysql_native_password by 'Lolipop909';
- Query OK, 0 rows affected (0.01 sec)
- mysql> grant replication slave on *.* to 'copy'@'%';
- Query OK, 0 rows affected (0.02 sec)
③、刷新授权表信息
- mysql> flush privileges;
- Query OK, 0 rows affected (0.01 sec)
④、获取主节点的binary log 文件名和位置
- mysql> show master status;
- +------------------+----------+--------------+------------------+-------------------+
- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
- +------------------+----------+--------------+------------------+-------------------+
- | mysql-bin.000001 | 825 | | | |
- +------------------+----------+--------------+------------------+-------------------+
- 1 row in set (0.00 sec)
-
- 节点上设置主节点参数
- mysql> CHANGE MASTER TO
- -> MASTER_HOST='123.60.47.78',
- -> MASTER_USER='copy',
- -> MASTER_PASSWORD='Lolipop909',
- -> MASTER_LOG_FILE='mysql-bin.000001',
- -> MASTER_LOG_POS=825;
- Query OK, 0 rows affected, 2 warnings (0.05 sec)
-
- mysql> start slave
- -> ;
- Query OK, 0 rows affected (0.00 sec)
⑤、查看同步状态
mysql> show slave status\G
(4)查看是否同步成功
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。