首页 > 代码库 > mysql(mariadb)基于ssl主从复制
mysql(mariadb)基于ssl主从复制
环境172.16.1.3为主节点,172.16.1.7为从节点;同时在172.16.1.3上搭建私有CA,此外两台设置好时间同步
系统版本:centos7.2
一、设置好主机的主机名,并可以完成通信
~】#hostnamectl set-hostname master.zou.com
另一个设置为slave.zou.com
[root@master ~]# vim /etc/hosts
172.16.1.3 master.zou.com master
172.16.1.7 slave.zou.com slave
另一个从节点,也写入相同的解析
之后测试一下:
[root@slave ~]# ping master
PING master.zou.com (172.16.1.3) 56(84) bytes of data.
64 bytes from master.zou.com (172.16.1.3): icmp_seq=1 ttl=64 time=0.902 ms
二、时间同步:
[root@master ~]# yum install chrony -y
[root@master ~]# vim /etc/chrony.conf
把其他的几个server开头的全部注释掉
server172.16.0.1 iburst
allow 172.16/16
[root@master ~]# systemctl start chronyd.service
[root@master ~]# systemctl enable chronyd.service
查看主节点是否可以与设置的服务器的时间可以完成同步,有那个※号就代表可以完成
[root@master ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
================================================================
^* server.magelinux.com 11 6 17 2 +19us[ +669us] +/- 11ms
继续在从节点上做响应的操作
[root@slave ~]# yum install chrony -y
[root@slave ~]# vim /etc/chrony.conf
server master.zou.com iburst
[root@slave ~]# systemctl start chronyd.service
[root@slave ~]# systemctl enable chronyd.service
[root@slave ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
================================================================
^* master.zou.com 12 6 7 0 +2396ns[+32419s] +/- 14ms
当这里的为*而不是?的时候即可同步时间成功
此后就在两台服务器上面,用date查看时间是否一样(时区不同时间不一样)
注:如果时区不一致,需要
TZ=‘Asia/Shanghai‘
vim /etc/sysconfig/clock
ZONE=Asia/Shanghai
rm /etc/localtime
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
三、设置CA根服务器,并为两台主机颁发证书
搭建CA服务器,为web服务器派发证书 此ip为172.16.1.3
生成私钥CA服务器自己的私钥,准备给自己做个根证书
[root@master ~]# cd /etc/pki/CA
[root@master CA]# (umask 077;openssl genrsa 2048 > private/cakey.pem)
cakey.pem为CA服务的自己的私钥
##因为这里是建立私有CA,同一个机构,国家,省,组织 ,所以为了后续给自己签证方便,这里需要修改
[root@master CA]# vim /etc/pki/tls/openssl.cnf
country Name_default = CN
StateOrprovinceName_default = Beijing
LocatityName_default = Shangdi
0.organizationName_default = Haizei
organizationUnitName_default = Jishu
生成自签证书(根CA)
[root@master CA]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 3650 -out /etc/pki/CA/cacert.pem
根证书签署主节点
[root@master CA]# openssl ca -in master.csr -out master.crt
slave节点生成自己的证书并请求认证
[root@slave CA]# (umask 077;openssl genrsa 4096 > slave.key)
[root@slave CA]# openssl req -new -key slave.key -out slave.csr
把slave.csr复制到根证书颁发服务器,做认证
根证书签发从节点
[root@master CA]# openssl ca -in /tmp/slave.csr -out certs/slave.crt
颁发完了之后,要把这个slave.crt发送给从节点,同时也要发送cacert.pem给从节点,因为主的就位CA根,所以就不用发送了
注:主从节点准备好各自的key和crt,同时还要有根证书的pem,保证这3个文件,为后续操作做准备
[root@master mnt]# mkdir /mydata/ssl
[root@master mnt]# cp cacert.pem master.crt master.key /mydata/ssl
[root@master mnt]# chown -R mysql.mysql /mydata/ssl
[root@master ssl]# chmod 600 master.crt master.key cacert.pem
[root@slave mnt]# mkdir /mydata/ssl
[root@slave mnt]# cp cacert.pem slave.crt slave.key /mydata/ssl
[root@slave mnt]# chown -R mysql.mysql /mydata/ssl
[root@slave ssl]# chmod 600 cacert.pem slave.*
四、基于ssl建立主从复制
两个节点的配置文件如下
[root@master ~]# vim /etc/my.cnf
[mysqld]
datadir=/mydata/data
log_bin=/mydata/logs/log_bin
server_id=1
innodb_file_per_table=ON
skip_name_resolve=ON
ssl
ssl_ca = /mydata/ssl/cacert.pem
ssl_cert = /mydata/ssl/master.crt
ssl_key = /mydata/ssl/master.key
[root@slave ssl]# vim /etc/my.cnf
datadir=/mydata/data
innodb_file_per_table=ON
skip_name_resolve=ON
relay_log=/mydata/logs/relay-log
server_id=2
ssl
ssl_ca = /mydata/ssl/cacert.pem
ssl_cert = /mydata/ssl/slave.crt
ssl_key = /mydata/ssl/slave.key
开启主节点mysql服务,在主上面创建复制用户
[root@master ~]# systemctl start mariadb.service
MariaDB [(none)]> grant replication slave,replication client on *.* to slaveuser@‘172.16.1.%‘ identified by ‘123.comer‘ require ssl;
MariaDB [(none)]> flush privileges;
查看主节点状态
开启从节点mysql服务,并在从服务器上开始设置复制
[root@slave ssl]# systemctl start mariadb.service
查看从节点是否可以通过命令连接上
[root@slave ssl]# mysql -uslaveuser -p123.comer -h172.16.1.3 --ssl-ca=cacert.pem --ssl-cert=slave.crt --ssl-key=slave.key
测试连接没有问题了之后,登录客户端进行后续操作
MariaDB [(none)]> show slave status\G
Empty set (0.00 sec)
MariaDB [(none)]> change master to master_host=‘172.16.1.3‘,master_user=‘slaveuser‘,master_password=‘123.comer‘,master_log_file=‘log_bin.000003‘,master_log_pos=508,master_ssl=1,master_ssl_ca=‘/mydata/ssl/cacert.pem‘,master_ssl_cert=‘/mydata/ssl/slave.crt‘,master_ssl_key=‘/mydata/ssl/slave.key‘;
MariaDB [(none)]> start slave;
上面显示是通过ssl协议加密来拉取主节点上面的数据的,所以没有问题
五、测试
主节点上面创建数据库
MariaDB [(none)]> create database testzou;
MariaDB [(none)]> use testzou;
MariaDB [testzou]> create table testuser (id int unsigned not null primary key auto_increment,user char(12) not null,gender enum(‘f‘,‘m‘));
MariaDB [testzou]> insert into testuser (id,user,gender) values (1,‘lufy‘,‘m‘);
从节点上面:
数据同步成功,主从复制没有问题
本文出自 “北极的linux” 博客,请务必保留此出处http://941012521.blog.51cto.com/9253690/1845533
mysql(mariadb)基于ssl主从复制