MariaDB-10实现半同步复制及SSL安全复制
一、引言
在企业级数据库应用中,数据的一致性和高可用性至关重要。MariaDB作为MySQL的一个重要分支,提供了多种复制方式来满足不同的需求。半同步复制在保证数据一致性的同时,兼顾了一定的性能;而SSL安全复制则能确保主从服务器之间的数据传输安全。本文将详细介绍如何在MariaDB-10中实现这两种复制方式。
二、环境准备
在开始配置之前,我们需要准备以下环境:
- 两台或多台安装了MariaDB-10的服务器,分别作为主服务器(Master)和从服务器(Slave)。
- 确保所有服务器之间网络连通,并且防火墙已开放相应的端口(默认3306)。
- 主从服务器的系统时间应保持一致。
三、半同步复制配置
3.1 安装半同步复制插件
在主服务器和从服务器上都需要安装半同步复制插件。
在主服务器上执行以下命令:
# 登录MariaDB mysql -u root -p # 安装半同步主服务器插件 INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; # 查看插件状态 SHOW PLUGINS;
在从服务器上执行以下命令:
# 登录MariaDB mysql -u root -p # 安装半同步从服务器插件 INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; # 查看插件状态 SHOW PLUGINS;
3.2 配置半同步复制参数
编辑主服务器的配置文件(通常是/etc/my.cnf.d/server.cnf),添加以下配置:
[mysqld] # 开启半同步复制 rpl_semi_sync_master_enabled = 1 # 设置超时时间(毫秒) rpl_semi_sync_master_timeout = 10000
编辑从服务器的配置文件,添加以下配置:
[mysqld] # 开启半同步复制 rpl_semi_sync_slave_enabled = 1
重启主从服务器的MariaDB服务使配置生效:
# 重启主服务器 systemctl restart mariadb # 重启从服务器 systemctl restart mariadb
3.3 验证半同步复制
在主服务器上执行以下命令查看半同步复制状态:
mysql -u root -p -e "SHOW STATUS LIKE 'Rpl_semi_sync_master_status';"
如果返回结果为'ON',则表示半同步复制已启用。
在从服务器上执行以下命令查看半同步复制状态:
mysql -u root -p -e "SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';"
同样,如果返回结果为'ON',则表示半同步复制已启用。
四、SSL安全复制配置
4.1 生成SSL证书和密钥
在主服务器上生成CA证书、服务器证书和客户端证书。
# 创建CA私钥 openssl genrsa 2048 > ca-key.pem # 创建CA证书 openssl req -new -x509 -nodes -days 365000 -key ca-key.pem -out ca-cert.pem # 创建服务器私钥 openssl req -newkey rsa:2048 -days 365000 -nodes -keyout server-key.pem -out server-req.pem # 生成服务器证书 openssl rsa -in server-key.pem -out server-key.pem # 签署服务器证书 openssl x509 -req -in server-req.pem -days 365000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem # 创建客户端私钥 openssl req -newkey rsa:2048 -days 365000 -nodes -keyout client-key.pem -out client-req.pem # 生成客户端证书 openssl rsa -in client-key.pem -out client-key.pem # 签署客户端证书 openssl x509 -req -in client-req.pem -days 365000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
将生成的证书和密钥文件复制到从服务器的相应目录,并确保权限正确。
4.2 配置主服务器SSL
编辑主服务器的配置文件,添加以下配置:
[mysqld] # 开启SSL ssl = on # CA证书路径 ssl-ca = /path/to/ca-cert.pem # 服务器证书路径 ssl-cert = /path/to/server-cert.pem # 服务器密钥路径 ssl-key = /path/to/server-key.pem
重启主服务器使配置生效:
systemctl restart mariadb
在主服务器上验证SSL是否启用:
mysql -u root -p -e "SHOW VARIABLES LIKE '%ssl%';"
4.3 配置从服务器SSL
编辑从服务器的配置文件,添加以下配置:
[mysqld] # 开启SSL ssl = on # CA证书路径 ssl-ca = /path/to/ca-cert.pem # 客户端证书路径 ssl-cert = /path/to/client-cert.pem # 客户端密钥路径 ssl-key = /path/to/client-key.pem
重启从服务器使配置生效:
systemctl restart mariadb
4.4 配置主从复制使用SSL
在主服务器上创建一个用于复制的用户,并授予相应的权限:
mysql -u root -p -e "CREATE USER 'repl'@'%' IDENTIFIED BY 'password' REQUIRE SSL;" mysql -u root -p -e "GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';"
在从服务器上配置主从复制,指定使用SSL:
mysql -u root -p -e "CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_SSL=1, MASTER_SSL_CA='/path/to/ca-cert.pem', MASTER_SSL_CERT='/path/to/client-cert.pem', MASTER_SSL_KEY='/path/to/client-key.pem';"
启动从服务器的复制进程:
mysql -u root -p -e "START SLAVE;"
查看从服务器的复制状态:
mysql -u root -p -e "SHOW SLAVE STATUS\G;"
确保Slave_IO_Running和Slave_SQL_Running都为Yes,并且Last_IO_Error中没有错误信息。
五、总结
通过以上步骤,我们成功地在MariaDB-10中实现了半同步复制和SSL安全复制。半同步复制确保了数据的强一致性,而SSL安全复制则保障了数据传输的安全性。在实际应用中,可以根据业务需求选择合适的复制方式,或者将两者结合使用,以满足更高的可用性和安全性要求。同时,还需要定期监控复制状态,及时处理可能出现的问题,确保数据库系统的稳定运行。