本节从组复制的IP白名单以及安全套接字(SSL)支持两个方面来介绍如何保护组合组成员之间连接的安全性。
IPv4 (在RFC 1918中定义的IPV4地址的划分)
# A类地址
10/8 (IP范围:10.0.0.0-10.255.255.255)
# B类地址
172.16/12 (IP范围:172.16.0.0-172.31.255.255)
# C类地址
192.168/16 (IP范围:192.168.0.0-192.168.255.255) -
IPv6 ( 在RFC 4193 和 RFC 5156中定义的IPV6地址的划分)
# 唯一的本地地址前缀(范围)
fc00:/7
# 本地链路的单播地址前缀(范围)
fe80::/10
# 本地(localhost)IPv4地址
127.0.0.1 - localhost for IPv4
# 本地(localhost)IPv6地址
::1 - localhost for IPv6
# 先停止组复制
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;
值 | 描述 |
---|---|
DISABLED | 建立一个未加密的连接(默认),即,不启用SSL |
REQUIRED | 如果组成员之间支持安全连接,则建立安全连接 |
VERIFY_CA | 类似于REQUIRED,但是要根据配置的证书颁发机构(CA)证书来验证服务器TLS证书 |
VERIFY_IDENTITY | 与VERIFY_CA类似,但是还要验证服务器证书是否与尝试连接的主机(组成员)匹配 |
Server配置选项(系统变量) | 描述 |
---|---|
ssl_key | PEM格式的SSL私钥文件的路径名。在客户端,用于指定客户端私钥文件(例如:mysql命令行客户端的ssl_key选项);在服务端,用于指定服务端的私钥文件 |
ssl_cert | PEM格式的SSL公钥证书文件的路径名。在客户端,用于指定客户端的公钥证书文件;在服务端,用于指定服务端的公钥证书文件 |
ssl_ca | PEM格式的证书颁发机构(CA)证书文件的路径名 |
ssl_capath | 包含PEM格式的受信SSL证书颁发机构(CA)证书文件的目录的路径名 |
ssl_crl | 包含PEM格式的证书撤销列表的文件的路径名 |
ssl_crlpath | 包含PEM格式证书撤销列表文件的目录的路径名 |
ssl_cipher | 用于加密连接握手中允许使用的密码列表 |
tls_version | Server允许的用于加密连接的TLS协议的列表 |
tls_ciphersuites | Server允许的用于加密连接的TLSv1.3加密套件 |
[mysqld]
# 为MySQL Server配置好SSL相关的系统变量
ssl_ca = "cacert.pem"
ssl_capath = "/.../ca_directory"
ssl_cert = "server-cert.pem"
ssl_cipher = "DHE-RSA-AEs256-SHA"
ssl_crl = "crl-server-revoked.crl"
ssl_crlpath = "/.../crl_directory"
ssl_key = "server-key.pem"
# 为组复制激活SSL,设置为REQUIRED时,如果组成员之间支持安全连接,则建立安全连接
group_replication_ssl_mode= REQUIRED
donor> SET SQL_LOG_BIN=0;
donor> CREATE USER 'rec_ssl_user'@'%' REQUIRE SSL;
donor> GRANT replication slave ON *.* TO 'rec_ssl_user'@'%';
donor> GRANT BACKUP_ADMIN ON *.* TO 'rec_ssl_user'@'%';
donor> SET SQL_LOG_BIN=1;
new_member> CHANGE MASTER TO MASTER_USER="rec_ssl_user" FOR CHANNEL "group_replication_recovery";
new_member> SET GLOBAL group_replication_recovery_use_ssl=1;
new_member> SET GLOBAL group_replication_recovery_ssl_ca= '.../cacert.pem';
new_member> SET GLOBAL group_replication_recovery_ssl_cert= '.../client-cert.pem';
new_member> SET GLOBAL group_replication_recovery_ssl_key= '.../client-key.pem';
| 作者简介
《千金良方——MySQL性能优化金字塔法则》作者之一。熟悉MySQL体系结构,擅长数据库的整体调优,喜好专研开源技术,并热衷于开源技术的推广,在线上线下做过多次公开的数据库专题分享,发表过近100篇数据库相关的研究文章。
全文完。