環境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