mysql主从-主主架构设计

前言:
1. mysql主从、主主复制应用场景很多,其原理主推,从定时根据binlog增量拉取更新
2. 如果主/从机器硬件负载过高,或者网络延迟就会造成同步延迟
3. 延迟是必然,mysql复制同步解决的是数据高可用问题提供延后一致性
4. 要解决完全一致性,需要解决的高并发问题- 可以从业务粒度考虑,增加nosql中间层或者mysql proxy或者mysql 5.7提供了完全一致性方案,但数据层来处理这些问题不可取!

1 my.cnf配置

  • server-id=11 #任意自然数n,只要保证两台MySQL主机不重复就可以了。
  • log-bin=mysql-bin #开启二进制日志 此时为第一台主MySQL
  • mysql binlog-ignore=information_schema #忽略information_schema库
  • replicate-do-db=aa #要同步的数据库,默认所有库

2 实质为互为主从
master配置

GRANT REPLICATION SLAVE ON *.* TO 'slave252'@'192.168.0.252' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
show master status;

slave配置

slave stop;
CHANGE MASTER TO MASTER_HOST='192.168.0.250', MASTER_USER='slave252', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=107;
slave start;
show slave status;

master配置

GRANT REPLICATION SLAVE ON *.* TO 'slave250'@'192.168.0.250' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
show master status;

slave配置

slave stop;
CHANGE MASTER TO MASTER_HOST='192.168.0.252', MASTER_USER='slave250', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=350;
slave start;
show slave status;

3 检查从状态

Master_Host: 192.168.0.252
Master_User: slave250
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 350
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 253
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Master_Server_Id: 252

4 主从同步延迟校验

Seconds_Behind_Master

5 主从延迟解决方案?

延迟出现原因:
1. mysql是被动复制机制,机制存在一定差延迟
2. 延迟是sql thread与io thread之间差值,主机器负载过高造成更新推送延迟,从机器负载过高造成拉取延迟
3. 网络延迟造成主推送或者从拉取数据缓慢而延迟

解决问题:
1. mysql主从复制解决的是数据层高可用、数据层灾备
2. 如果保证数据强一致性,可以使用mysql5.7-支持多线程复制,rpl_semi_sync_master_enabled-完全同步机制
3. 高并发分流:采用多主,谁写谁读,业务层增加nosql 层-有更新读缓存

猜你喜欢

转载自blog.csdn.net/wolfjson/article/details/76512374