m-s的半同步设置

本文指导如何在MySQL环境中配置主从服务器的半同步复制,包括安装半同步插件、设置等待slave响应时间、从库开启半同步以及测试同步效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

master:安装半同步插件
(system@localhost) [(none)]> install plugin rpl_semi_sync_master soname 'semisync_master.so';
Query OK, 0 rows affected (0.83 sec)


(system@localhost) [(none)]> show plugins;
+----------------------------+----------+--------------------+--------------------+---------+
| Name                       | Status   | Type               | Library            | License |
+----------------------------+----------+--------------------+--------------------+---------+
| binlog                     | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |
| mysql_native_password      | ACTIVE   | AUTHENTICATION     | NULL               | GPL     |
| mysql_old_password         | ACTIVE   | AUTHENTICATION     | NULL               | GPL     |
| sha256_password            | ACTIVE   | AUTHENTICATION     | NULL               | GPL     |
| MRG_MYISAM                 | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |
。。。。。。。。。。。。。
| partition                  | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |
| rpl_semi_sync_master       | ACTIVE   | REPLICATION        | semisync_master.so | GPL     |
+----------------------------+----------+--------------------+--------------------+---------+
43 rows in set (0.00 sec)


启用主库半同步,并设置等待slave响应时间,单位秒
(system@localhost) [(none)]> set global rpl_semi_sync_master_enabled=1;
Query OK, 0 rows affected (0.00 sec)


(system@localhost) [(none)]> set global rpl_semi_sync_master_timeout=3000;
Query OK, 0 rows affected (0.00 sec)


slave:加载半同步插件
(system@localhost) [(none)]> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
Query OK, 0 rows affected (0.30 sec)


(system@localhost) [(none)]> show plugins;
+----------------------------+----------+--------------------+-------------------+---------+
| Name                       | Status   | Type               | Library           | License |
+----------------------------+----------+--------------------+-------------------+---------+
| binlog                     | ACTIVE   | STORAGE ENGINE     | NULL              | GPL     |
| mysql_native_password      | ACTIVE   | AUTHENTICATION     | NULL              | GPL     |
| mysql_old_password         | ACTIVE   | AUTHENTICATION     | NULL              | GPL     |
。。。。。。。。。。。
| ARCHIVE                    | ACTIVE   | STORAGE ENGINE     | NULL              | GPL     |
| partition                  | ACTIVE   | STORAGE ENGINE     | NULL              | GPL     |
| rpl_semi_sync_slave        | ACTIVE   | REPLICATION        | semisync_slave.so | GPL     |
+----------------------------+----------+--------------------+-------------------+---------+
43 rows in set (0.13 sec)


从库开启半同步
(system@localhost) [(none)]> set global rpl_semi_sync_slave_enabled=1;
Query OK, 0 rows affected (0.03 sec)


这一步主要是为了让slave重连master节点,注册成为半同步身份,不重启则一直保持异步复制。
(system@localhost) [(none)]> stop slave io_thread;
Query OK, 0 rows affected (0.06 sec)


(system@localhost) [(none)]> start slave io_thread;
Query OK, 0 rows affected (0.02 sec)


(system@localhost) [(none)]> show status;
+-----------------------------------------------+---------------------+
| Variable_name                                 | Value               |
+-----------------------------------------------+---------------------+
| Aborted_clients                               | 0                   |
| Aborted_connects                              | 0                   |
。。。。。。。。。。。。。。
| Rpl_semi_sync_slave_status                    | ON                  |
。。。。。。。。。。


master:查看插件是否加载,开启半同步
(system@localhost) [(none)]> show status like 'rpl_semi_sync%';
+--------------------------------------------+-------+
| Variable_name                              | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients               | 1     |
| Rpl_semi_sync_master_net_avg_wait_time     | 0     |
| Rpl_semi_sync_master_net_wait_time         | 0     |
| Rpl_semi_sync_master_net_waits             | 0     |
| Rpl_semi_sync_master_no_times              | 0     |
| Rpl_semi_sync_master_no_tx                 | 0     |
| Rpl_semi_sync_master_status                | ON    |
| Rpl_semi_sync_master_timefunc_failures     | 0     |
| Rpl_semi_sync_master_tx_avg_wait_time      | 0     |
| Rpl_semi_sync_master_tx_wait_time          | 0     |
| Rpl_semi_sync_master_tx_waits              | 0     |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0     |
| Rpl_semi_sync_master_wait_sessions         | 0     |
| Rpl_semi_sync_master_yes_tx                | 0     |
+--------------------------------------------+-------+
14 rows in set (0.04 sec)


测试同步:
(system@localhost) [test]> insert into t1 values('cc');
Query OK, 1 row affected (0.10 sec)


slave:
(system@localhost) [test]> select * from t1;
+------+
| name |
+------+
| dcw  |
| jjf  |
| jone |
| cc   |
+------+
4 rows in set (0.00 sec)


master:
(system@localhost) [test]> show status like 'rpl_semi_sync%';
+--------------------------------------------+-------+
| Variable_name                              | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients               | 1     |
| Rpl_semi_sync_master_net_avg_wait_time     | 617   |
| Rpl_semi_sync_master_net_wait_time         | 617   |
| Rpl_semi_sync_master_net_waits             | 1     |
| Rpl_semi_sync_master_no_times              | 0     |
| Rpl_semi_sync_master_no_tx                 | 0     |
| Rpl_semi_sync_master_status                | ON    |
| Rpl_semi_sync_master_timefunc_failures     | 0     |
| Rpl_semi_sync_master_tx_avg_wait_time      | 22958 |
| Rpl_semi_sync_master_tx_wait_time          | 22958 |
| Rpl_semi_sync_master_tx_waits              | 1     |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0     |
| Rpl_semi_sync_master_wait_sessions         | 0     |
| Rpl_semi_sync_master_yes_tx                | 1     |
+--------------------------------------------+-------+
14 rows in set (0.02 sec)





































































### RocketMQ 2M-2S 同步复制 异步刷盘 配置与工作原理 #### 工作原理概述 在RocketMQ的2主2从架构下,同步复制意味着当生产者发送的消息被主Broker接收后,该消息会被立即转发给对应的从Broker。只有当所有指定的副本都确认接收到这条消息后,才会向生产者返回成功响应。这种机制确保了即使某个Broker发生故障,其他存活的Brokers仍然持有完整的数据备份。 对于异步刷盘而言,在接收到新消息并将其存储到内存队列之后,并不会立刻将这些变更持久化至物理磁盘上;而是通过后台线程定期批量处理的方式完成实际的数据落地操作。这有助于提高系统的整体性能,但也带来了潜在的风险——如果服务器突然断电,则可能会造成部分未及时保存的信息丢失[^1]。 #### 设置方法详解 为了实现上述特性,需要对`broker.conf`文件做出相应调整: ##### Broker A (Master) ```properties # 定义当前实例的角色为主节点 brokerRole=ASYNC_MASTER # 开启自动创建主题功能,默认开启即可 autoCreateTopicEnable=true # 自动创建订阅组开关同样保持默认状态 autoCreateSubscriptionGroup=true # 消息提交日志路径配置项可根据实际情况修改 storePathCommitLog=/home/work/store/commitlog # 记录消费进度的日志存放位置设定 storePathConsumeQueue=/home/work/store/consumequeue ``` ##### Broker B (Slave) ```properties # 明确指出此实例作为备选节点运行 brokerRole=SLAVE # 关联其对应的主要服务端地址 masterAddress=<MASTER_BROKER_IP>:<PORT> # 存储层面上依旧沿用之前的参数定义方式 storePathCommitLog=/home/work/store/slave_commitlog storePathConsumeQueue=/home/work/store/slave_consumequeue ``` 值得注意的是,在启用同步复制的同时选择了异步刷盘模式时,虽然能够获得较好的吞吐量表现,但由于缺乏即时性的硬盘写入保障,因此存在一定的安全隐患。建议根据具体应用场景权衡利弊后再做决定[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值