首页 > 代码库 > 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服务器派发证书 ip172.16.1.3

生成私钥CA服务器自己的私钥,准备给自己做个根证书

[root@master ~]# cd /etc/pki/CA

[root@master CA]# (umask 077;openssl genrsa 2048 > private/cakey.pem)

cakey.pemCA服务的自己的私钥

##因为这里是建立私有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根,所以就不用发送了

 

注:主从节点准备好各自的keycrt,同时还要有根证书的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主从复制