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

wKioL1fI-_DA1JWRAAAdbBR5PX8264.png


根證書籤署主節點

    [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

        wKiom1fI-_CgaZs6AAAecpuhSNw225.png

    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;

查看主節點狀態

wKiom1fI-_Hz86dbAAANesXykP0494.png

開啓從節點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

wKioL1fI-_Gwg78gAAAgikqpL1M429.png

測試連接沒有問題了之後,登錄客戶端進行後續操作

 

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;

wKioL1fI-_HzfxuoAABGcHnbCWk554.png

上面顯示是通過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');

 

從節點上面:

wKioL1fI-_HBHpcRAAAM7Fu98fc928.png

wKiom1fI-_HgNoI-AAAJvXAldLE610.png

數據同步成功,主從複製沒有問題

 




本文出自 “北極的linux” 博客,請務必保留此出處http://941012521.blog.51cto.com/9253690/1845533


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章