如何在Ubuntu Linux上使用SSL设置MariaDB主从复制

时间:2020-01-09 10:39:43  来源:igfitidea点击:

如何在Ubuntu Linux 16.04 LTS服务器上使用MariaDB服务器设置主从数据复制?
如何加密复制流量,以便在传输过程中对数据进行加密,从而保护我的数据和用户免遭监听?
主从数据复制允许您将数据库复制到多个MariaDB服务器。
这对于备份,数据恢复,负载平衡等有用。
在本教程中,您将学习如何在主服务器和从服务器之间配置受SSL保护的MariaDB复制。

设置示例

在MariaDB中设置主从复制

本教程将为db1和db2服务器使用以下IP地址:

  • 192.168.1.5(db1)主MariaDB服务器
  • 192.168.1.6(db2)从MariaDB服务器

我将假设db1和db2都是全新的服务器。
服务器上没有现有的数据库。

设置MariaDB主从集群需要什么?

  • 最少两台服务器(可以是云服务器或裸机服务器)
  • 服务器之间的专用网络(LAN/VLAN)
  • 如果在两个IDC之间设置,则两个数据中心之间的VPN
  • 两台服务器上的Ubuntu Linux 16.04 LTS

更新您的/etc/hosts

首先在db1和db2服务器上更新/etc/hosts文件,如下所示:

$ sudo vi /etc/hosts

编辑/追加如下:

192.168.1.5 db1
192.168.1.6 db2

保存并关闭文件。
测试如下:

$ ping -c4 db1
$ ping -c4 db2

步骤1在Ubuntu 16.04 LTS上安装MariaDB最新的稳定版本

在db1和db2服务器上执行以下apt-get命令以安装MariaDB:

$ sudo apt-get install software-properties-common
$ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
$ sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://sgp1.mirrors.digitalocean.com/mariadb/repo/10.2/ubuntu xenial main'
$ sudo apt-get update
$ sudo apt-get install mariadb-server mariadb-client

步骤2保护MariaDB

执行以下命令:

$ mysql_secure_installation

步骤3为MariaDB创建SSL密钥和证书

仅在db1服务器上执行以下命令(730天== 2年):

$ sudo mkdir -p /etc/mysql/ssl/
$ cd /etc/mysql/ssl/
$ sudo openssl genrsa 2048 > ca-key.pem
## set CA common name to "MariaDB admin" ##
$ sudo openssl req -new -x509 -nodes -days 730 -key ca-key.pem -out ca-cert.pem
## set server certificate common name to "MariaDB server" ##
$ sudo openssl req -newkey rsa:2048 -days 730 -nodes -keyout server-key.pem -out server-req.pem
$ sudo openssl rsa -in server-key.pem -out server-key.pem
$ sudo openssl x509 -req -in server-req.pem -days 730 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
## set client common name to "MariaDB client" ##
$ sudo openssl req -newkey rsa:2048 -days 730 -nodes -keyout client-key.pem -out client-req.pem
$ sudo openssl rsa -in client-key.pem -out client-key.pem
$ sudo openssl x509 -req -in client-req.pem -days 730 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
$ sudo openssl verify -CAfile ca-cert.pem server-cert.pem client-cert.pem

为避免出现任何问题,必须将它们通用命名如下:

  • CA通用名称:MariaDB管理员
  • 服务器通用名称:MariaDB服务器
  • 客户端通用名称:MariaDB客户端

还将所有证书复制到db2从服务器:

$ ssh user@db2 mkdir /tmp/ssl/
$ cd /etc/mysql/ssl/
$ scp * user@db2:/tmp/ssl/

步骤4配置主MariaDB服务器

在db1主服务器上执行以下命令。
您需要编辑/etc/mysql/my.cnf文件,运行:

$ sudo vi /etc/mysql/my.cnf

配置MariaDB客户端(在[client]部分中添加)以使用SSL:

ssl-ca=/etc/mysql/ssl/ca-cert.pem
ssl-cert=/etc/mysql/ssl/client-cert.pem
ssl-key=/etc/mysql/ssl/client-key.pem

设置绑定地址,即仅侦听db1的专用IP地址192.168.1.5(确保将IP 192.168.1.5替换为实际IP地址)

bind-address = 192.168.1.5

将此服务器标记为主服务器。
此数字必须是唯一的:

server-id = 1

确保服务器启用了二进制日志,即确保log_bin和lob_bin_index设置如下:

log_bin = /var/log/mysql/mariadb-bin
log_bin_index = /var/log/mysql/mariadb-bin.index

配置MariaDB服务器(在[mysqld]部分中添加)以使用SSL:

ssl
ssl-ca=/etc/mysql/ssl/ca-cert.pem
ssl-cert=/etc/mysql/ssl/server-cert.pem
ssl-key=/etc/mysql/ssl/server-key.pem

保存并关闭文件。
重新启动MariaDB服务器,运行:

$ sudo systemctl restart mysql.service

配置复制

在主db1服务器上执行以下命令:

$ mysql

或者

$ mysql -u root -p

您必须创建一个MySQL用户主服务器(db1)。
语法为:

grant replication slave on *.* TO {username}@'{ip_of_db2_server}' identified by '{password}' REQUIRE SSL;

例如:

mysql> GRANT REPLICATION SLAVE ON *.* TO 'db_slave_usr'@'192.168.1.6' IDENTIFIED BY 'secretePassword' REQUIRE SSL;
mysql> FLUSH PRIVILEGES;
mysql> quit

找出Master

在shell上执行以下命令:

$ mysql -u root -p

打开MySQL Shell后,执行:

mysql> SHOW MASTER STATUS;

找出master状态并记下位置,
记录名为db2的从属服务器的文件和位置详细信息。

步骤5配置从属MariaDB服务器

在" db2服务器"上执行以下命令。
首先,将所有证书从/tmp/ssl /移至/etc/mysql /目录:

$ sudo mv /tmp/ssl/ /etc/mysql/

您需要编辑/etc/mysql/my.cnf文件,运行:

$ sudo vi /etc/mysql/my.cnf

配置MariaDB客户端(在[client]部分中添加)以使用SSL:

ssl-ca=/etc/mysql/ssl/ca-cert.pem
ssl-cert=/etc/mysql/ssl/client-cert.pem
ssl-key=/etc/mysql/ssl/client-key.pem

设置绑定地址,即仅侦听db2s专用IP地址192.168.1.6(确保将IP 192.168.1.6替换为实际IP地址)

bind-address = 192.168.1.6

将此服务器标记为从服务器。
此数字必须是唯一的:

server-id = 2

配置MariaDB服务器(在[mysqld]部分中添加)以使用SSL:

ssl
ssl-ca=/etc/mysql/ssl/ca-cert.pem
ssl-cert=/etc/mysql/ssl/server-cert.pem
ssl-key=/etc/mysql/ssl/server-key.pem

保存并关闭文件。
重新启动MariaDB服务器,运行:

$ sudo systemctl restart mysql.service

在从属db2服务器上执行以下命令:

$ mysql -u root -p

执行以下sql命令:

mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.5', MASTER_USER='db_slave_usr', MASTER_PASSWORD='secretePassword', MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=661, MASTER_SSL=1;
mysql> SLAVE START;
mysql> SHOW SLAVE STATUS\G

现在,在名为db1的主服务器上添加或删除数据,并将其复制到db2从服务器上。

有关故障转移的说明

您需要修改用PHP/Perl/Python编写的Web应用程序,以仅将数据写入主db1服务器。
如果主db1服务器关闭,则从从db2服务器读取数据。