组复制官方翻译五、Group Replication Security

本文详细介绍了MySQLGroupReplication(MGR)的安全配置,包括IP地址白名单和SSL支持。MGR通过group_replication_ip_whitelist配置项控制成员资格,确保只有预设的IP地址能加入复制组。默认情况下,MGR会自动将本地网络接口地址加入白名单。同时,文章简述了SSL在MGR中的应用。

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

https://dev.mysql.com/doc/refman/8.0/en/group-replication-security.html

18.5.1 IP Address Whitelisting

MGR有个配置项可以决定哪些server可以被GR接受,它就是group_replication_ip_whitelist
如果你在s1设置了这个选项,然后s2给s1发送连接想要加入这个组,那么s1就会去whitelist中检查,如果s2在选项中,那么允许,如果不在选项中,那么拒绝

如果你没有显示的配置whitelist,那么MGR引擎(XCom)就会自动根据host的活跃接口自动配置一个私有的子网
这些地址和localhost ip地址会被自动创建
自动生产的whitelist因此包括host中发现的任意网段

IPv4 (as defined in RFC 1918)
10/8 prefix       (10.0.0.0 - 10.255.255.255) - Class A
172.16/12 prefix  (172.16.0.0 - 172.31.255.255) - Class B
192.168/16 prefix (192.168.0.0 - 192.168.255.255) - Class C

IPv6 (as defined in RFC 4193 and RFC 5156)
fc00:/7 prefix    - unique-local addresses
fe80::/10 prefix  - link-local unicast addresses

127.0.0.1 - localhost for IPv4
::1       - localhost for IPv6

如果你要手动指定某些whitelist,就需要使用 group_replication_ip_whitelist 选项,必须先停止MGR

mysql> STOP GROUP_REPLICATION;
mysql> SET GLOBAL group_replication_ip_whitelist="192.0.2.21/24,198.51.100.44,203.0.113.0/24,2001:db8:85a3:8d3:1319:8a2e:370:7348,example.org,www.example.com/24";
mysql> START GROUP_REPLICATION;

为了方便,推荐每个服务器都配置相同的whitelist,并且都包括所有 group_replication_group_seeds 的成员

18.5.2 Secure Socket Layer Support (SSL)

这个用的不多,暂时不讲,有需要自己看官方文档

本方案采用kafka的kraft模式基于层级化通信架构和消息隔离机制,通过 Kafka 主题的严格划分实现跨域节点的逐级数据流转,核心原理包括: 1. 层级隔离原则 节点按 "骨干→一级→二级→三级→终端" 分层,每级节点仅与直属上下级通信,禁止跨级交互(如终端无法直接向二级节点发送消息)。 2. 主题隔离机制 为每个节点间的通信链路创建独立 Kafka 主题(如CC1.1@Domain1_to_CC1.2@Domain2),通过主题名称明确消息流向,确保数据不串流。 3. 终端网关模式 终端设备的消息仅通过三级节点增量 2(CC2.3@Domain5)转发,CC2.3 作为终端与上层节点的唯一网关,统一处理终端数据的上行和指令的下行。方案整体说明 网络拓扑与节点职责 • 骨干节点(CC1.1@Domain1):作为全链路消息枢纽,仅与一级节点交互。 • 一级节点(CC1.2@Domain2):转发骨干节点与二级节点的消息,实现跨 Domain1 与 Domain3 的通信桥接。 • 二级节点(CC2.1@Domain3):汇总三级节点(增量 1 和增量 2)的数据,是三级节点与一级节点的中间转发层。 • 三级节点增量 1(CC2.2@Domain4):独立业务节点,仅与二级节点交互,不参与终端链路。 • 三级节点增量 2(CC2.3@Domain5):终端设备的唯一网关,负责终端消息的接收与向上转发。 • 终端设备:仅与 CC2.3@Domain5 通信,通过 Kafka 主题device_to_CC2.3@Domain5和CC2.3@Domain5_to_device实现数据交互。 1.server.properties配置如下 # ================================= 基础身份配置 ================================= # 节点唯一ID(骨干节点固定为1) node.id=1 # 角色:同时作为broker和controller(适用于单节点Kafka集群) process.roles=broker,controller # 集群ID(需提前生成,命令:bin/windows/kafka-storage.bat random-uuid) cluster.id=your_cluster_id_here # 示例:abc123-def456-ghi789 # ================================= 网络通信配置(核心) ================================= # 监听所有网络接口,支持跨Domain访问 listeners=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093 # 对外暴露的地址(绑定骨干节点IP,供所有节点连接) advertised.listeners=PLAINTEXT://10.1.1.2:9092 # 协议映射(保持默认) listener.security.protocol.map=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT # 控制器监听名称 controller.listener.names=CONTROLLER # ================================= 存储配置 ================================= # 日志存储路径(需手动创建目录) log.dirs=D:/kafka/data/logs # 元数据日志路径 metadata.log.dir=${log.dirs}/metadata # 日志保留时间(7天,确保多级转发不丢失) log.retention.hours=168 # 单分区最大日志大小(1GB) log.segment.bytes=1073741824 # ================================= 主题与分区配置 ================================= # 自动创建主题(支持多级节点动态通信) auto.create.topics.enable=true # 默认分区数(单分区确保消息顺序) num.partitions=1 # 副本因子(单节点集群设为1) default.replication.factor=1 # 允许删除主题 delete.topic.enable=true # ================================= 性能与超时配置 ================================= # 最大消息大小(100MB,适应跨域大消息) socket.request.max.bytes=104857600 # 控制器请求超时(10秒,适应跨Domain延迟) controller.quorum.voter.request.timeout.ms=10000 # 网络超时(30秒) socket.connection.setup.timeout.ms=30000 2. 骨干节点(CC1.1@Domain1,10.1.1.2) node: id: CC1.1@Domain1 ip: 10.1.1.2 level: 骨干节点 upstream: 无 downstream: CC1.2@Domain2 description: 部署Kafka集群,全链路消息枢纽 kafka: bootstrap-servers: 10.1.1.2:9092 # 连接本地Kafka服务 producer: key-serializer: org.apache.kafka.common.serialization.StringSerializer value-serializer: org.apache.kafka.common.serialization.StringSerializer consumer: group-id: CC1.1@Domain1-group # 唯一消费 auto-offset-reset: earliest # 从最早消息开始消费 enable-auto-commit: true # 自动提交偏移量 topics: send: CC1.1@Domain1_to_CC1.2@Domain2 # 下发至一级节点 receive: CC1.2@Domain2_to_CC1.1@Domain1 # 接收一级节点上报 3. 一级节点(CC1.2@Domain2,10.11.1.2) node: id: CC2.1@Domain3 ip: 10.21.1.2 level: 二级节点 upstream: CC1.2@Domain2 downstream: - CC2.2@Domain4 - CC2.3@Domain5 description: 汇总三级节点数据,转发至一级节点 kafka: bootstrap-servers: 10.1.1.2:9092 producer: key-serializer: org.apache.kafka.common.serialization.StringSerializer value-serializer: org.apache.kafka.common.serialization.StringSerializer consumer: group-id: CC2.1@Domain3-group auto-offset-reset: earliest enable-auto-commit: true topics: receive_from_upstream: CC1.2@Domain2_to_CC2.1@Domain3 # 接收一级下发 send_to_upstream: CC2.1@Domain3_to_CC1.2@Domain2 # 向一级上报 # 与增量1通信 send_to_CC2.2: CC2.1@Domain3_to_CC2.2@Domain4 # 下发至增量1 receive_from_CC2.2: CC2.2@Domain4_to_CC2.1@Domain3 # 接收增量1上报 # 与增量2通信 send_to_CC2.3: CC2.1@Domain3_to_CC2.3@Domain5 # 下发至增量2 receive_from_CC2.3: CC2.3@Domain5_to_CC2.1@Domain3 # 接收增量2上报 4. 三级节点增量 1(CC2.2@Domain4,10.31.1.1) node: id: CC2.2@Domain4 ip: 10.31.1.1 level: 三级节点(增量1) upstream: CC2.1@Domain3 downstream: 无 description: 独立业务节点,仅与二级节点交互 kafka: bootstrap-servers: 10.1.1.2:9092 producer: key-serializer: org.apache.kafka.common.serialization.StringSerializer value-serializer: org.apache.kafka.common.serialization.StringSerializer consumer: group-id: CC2.2@Domain4-group auto-offset-reset: earliest enable-auto-commit: true topics: receive_from_upstream: CC2.1@Domain3_to_CC2.2@Domain4 # 接收二级下发 send_to_upstream: CC2.2@Domain4_to_CC2.1@Domain3 # 向二级上报 5. 三级节点增量 2(CC2.3@Domain5,10.41.1.1) node: id: CC2.3@Domain5 ip: 10.41.1.1 level: 三级节点(增量2) upstream: CC2.1@Domain3 downstream: 终端设备群(10.41.1.2~254) description: 终端设备唯一网关,负责终端消息转发 kafka: bootstrap-servers: 10.1.1.2:9092 producer: key-serializer: org.apache.kafka.common.serialization.StringSerializer value-serializer: org.apache.kafka.common.serialization.StringSerializer consumer: group-id: CC2.3@Domain5-group auto-offset-reset: earliest enable-auto-commit: true topics: receive_from_upstream: CC2.1@Domain3_to_CC2.3@Domain5 # 接收二级下发 send_to_upstream: CC2.3@Domain5_to_CC2.1@Domain3 # 向二级上报(含终端数据) send_to_device: CC2.3@Domain5_to_device # 下发至终端设备 receive_from_device: device_to_CC2.3@Domain5 # 接收终端设备上报 6. 终端设备(device_001@Domain5,10.41.1.2) device: id: device_001@Domain5 ip: 10.41.1.2 level: 终端设备 upstream: CC2.3@Domain5 description: 仅与CC2.3@Domain5通信,禁止跨级发送 kafka: bootstrap-servers: 10.1.1.2:9092 producer: key-serializer: org.apache.kafka.common.serialization.StringSerializer value-serializer: org.apache.kafka.common.serialization.StringSerializer consumer: group-id: device@Domain5-group auto-offset-reset: earliest enable-auto-commit: true topics: receive: CC2.3@Domain5_to_device # 仅接收CC2.3下发 send: device_to_CC2.3@Domain5 # 仅向CC2.3上报 这个方案可行吗
最新发布
08-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值