-
简介
-
MySQL复制中较常见的复制架构有“一主一从”、“一主多从”、“双主”、“多级复制”和“多主环形机构”等,见下图;
最常用,也最灵活的就要数“一主多从”复制架构了,其能满足多种需求,如:
为不同的角色使用不同的备库(例如添加不同的索引或使用不同的存储引擎);
把一台备库当做待用的主库,除了复制没有其它数据传输;
将一台备库放在远程数据中心,用作灾难恢复;
延迟一个或多个备库,以备灾难恢复;
使用其中一个备库,作为备份、培训、开发或者测试使用服务器;
而“双主”复制架构则用于特殊的场景下,如两个处于不同地理位置的办公室,且都需要一份可写的数据拷贝;
这种架构最大的问题是如何解决数据冲突和不一致,尤其当两台服务器同时修改同一行记录,或同时在两台服务器上向一个包含auto_increment列的表里插入数据时;
而通过将一台服务器设置为只读的被动服务器,则可以很好的避免数据写入冲突的问题,这种主动-被动模式下的主-主复制架构使得反复切换主动和被动服务器非常方便,可以实现在不关闭服务器的情况下执行维护、优化表、升级操作系统或其他任务;
配置主动-被动模式的主-主复制架构的一般流程:
-
确保两台服务器上有相同的数据;
启用二进制日志,选择唯一的服务器ID,并创建复制账号;
启用备库更新的日志记录,这是故障转移和故障恢复的关键;
把被动服务器配置成只读,防止可能与主动服务器上的更新产生冲突;
启动每个服务器的MySQL实例;
将每个主库设置为对方的备库,使用新创建的二进制日志开始工作;
同时为了消除不同地理位置的站点单点故障问题,可以为每个主库增加冗余,即为每一个主库增加一个从库;
而MMM(=Master-Master Replication Manager for MySQL)则是一套脚本集合,用以监控、管理双主复制架构,通过设置一个可写的VIP和多个只读的VIP,完成故障自动转移、读负载分摊等功能;
架构设计
服务器规划
虚IP规划
配置部署
双主复制架构部署
MySQL或MariaDB的安装初始化可详见博客“MySQL初识-架构-安装-初始化-连接-管理工具-数据文件”
利用mysqld_multi在一台主机上启动多个mysqld实例
数据库初始化
1.
# 在主机Host1和Host2上
2.
cd
/usr/
local
/mysql
3.
scripts/mysql_install_db --user=mysql --datadir=/data/mariadb_data_3406/
4.
scripts/mysql_install_db --user=mysql --datadir=/data/mariadb_data_3506/
数据库配置
001.
# 在主机Host1上
002.
vi
/etc/my.cnf
003.
[mysqld_multi]
004.
mysqld = /usr/
local
/mysql/bin/mysqld_safe
005.
mysqladmin = /usr/
local
/mysql/bin/mysqladmin
006.
[mysqld1]
007.
port = 3406
008.
socket = /tmp/mysql3406.sock
009.
skip-external-locking
010.
key_buffer_size = 256M
011.
max_allowed_packet = 1M
012.
table_open_cache = 256
013.
sort_buffer_size = 1M
014.
read_buffer_size = 1M
015.
read_rnd_buffer_size = 4M
016.
myisam_sort_buffer_size = 64M
017.
thread_cache_size = 8
018.
query_cache_size= 16M
019.
thread_concurrency = 2
020.
datadir = /data/mariadb_data_3406
021.
innodb_file_per_table = 1
022.
default_storage_engine = InnoDB
023.
log-bin=mysql-bin
024.
relay-log=/data/relaylogs_3406/relay-bin
# 指定中继日志路径
025.
log_slave_updates=1
# 开启从库更新操作写入二进制日志功能
026.
auto_increment_increment=2
# 双主复制中自增长字段的步长
027.
auto_increment_offset=1
# 双主复制中自增长字段的起始值,此为1
028.
sync_binlog = 1
# 可保证事务日志及时写入磁盘文件
029.
binlog_format=row
030.
server-
id
= 11
# 注意server-id的唯一性
031.
[mysqld2]
032.
port = 3506
033.
socket = /tmp/mysql3506.sock
034.
skip-external-locking
035.
key_buffer_size = 256M
036.
max_allowed_packet = 1M
037.
table_open_cache = 256
038.
sort_buffer_size = 1M
039.
read_buffer_size = 1M
040.
read_rnd_buffer_size = 4M
041.
myisam_sort_buffer_size = 64M
042.
thread_cache_size = 8
043.
query_cache_size= 16M
044.
thread_concurrency = 2
045.
-
2台主机极致实现双主复制架构及MMM
最新推荐文章于 2022-10-14 22:14:05 发布