2台主机极致实现双主复制架构及MMM

  • 简介

  • MySQL复制中较常见的复制架构有“一主一从”、“一主多从”、“双主”、“多级复制”和“多主环形机构”等,见下图;

    wKioL1NpEgORcF2XAATJgegMOXY343.jpg

    最常用,也最灵活的就要数“一主多从”复制架构了,其能满足多种需求,如:

    为不同的角色使用不同的备库(例如添加不同的索引或使用不同的存储引擎);

    把一台备库当做待用的主库,除了复制没有其它数据传输;

    将一台备库放在远程数据中心,用作灾难恢复;

    延迟一个或多个备库,以备灾难恢复;

    使用其中一个备库,作为备份、培训、开发或者测试使用服务器;

    而“双主”复制架构则用于特殊的场景下,如两个处于不同地理位置的办公室,且都需要一份可写的数据拷贝;

    这种架构最大的问题是如何解决数据冲突和不一致,尤其当两台服务器同时修改同一行记录,或同时在两台服务器上向一个包含auto_increment列的表里插入数据时;

    而通过将一台服务器设置为只读的被动服务器,则可以很好的避免数据写入冲突的问题,这种主动-被动模式下的主-主复制架构使得反复切换主动和被动服务器非常方便,可以实现在不关闭服务器的情况下执行维护、优化表、升级操作系统或其他任务;

    配置主动-被动模式的主-主复制架构的一般流程:

    • 确保两台服务器上有相同的数据;

      启用二进制日志,选择唯一的服务器ID,并创建复制账号;

      启用备库更新的日志记录,这是故障转移和故障恢复的关键;

      把被动服务器配置成只读,防止可能与主动服务器上的更新产生冲突;

      启动每个服务器的MySQL实例;

      将每个主库设置为对方的备库,使用新创建的二进制日志开始工作;

      同时为了消除不同地理位置的站点单点故障问题,可以为每个主库增加冗余,即为每一个主库增加一个从库;

      而MMM(=Master-Master Replication Manager for MySQL)则是一套脚本集合,用以监控、管理双主复制架构,通过设置一个可写的VIP和多个只读的VIP,完成故障自动转移、读负载分摊等功能;

       

      架构设计

      wKioL1NpEpCy3ACaAANLNO70Ry8648.jpg

      服务器规划

      wKiom1NpEumSkjTxAANRsHszrDg860.jpg

      虚IP规划

      wKioL1NpEtqCa90KAAKmQ02Oj3k481.jpg

       

      配置部署

      双主复制架构部署

      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.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值