Maria10實現主從複製架構及SSL複製

需求架構

wKioL1NaiXqTBOgtAAGdUZq9ZDA040.jpg


準備工作

主從服務器時間同步

# 主從服務器同時配置crontab任務,與NTP服務器同步時間即可
*/5 * * * * ntpdate 172.16.0.1 &>/dev/null

MariaDB的安裝

   詳見博客“MySQL初識-架構-安裝-初始化-連接-管理工具-數據文件


部署配置

主庫配置

vi /etc/my.cnf
    server-id = 1 # 在複製架構中,需保持全局唯一
    log-bin = mysql-bin # 默認在數據目錄下
    sync_binlog = 1 # 設置mariadb每次在提交事務前會將二進制日誌同步到磁盤,保證服務器崩潰時不會丟失事件
=====
service mysqld start # 啓動mariadb10
=====
mysql -hlocalhost -uroot -p # 登錄mysql
MariaDB [mysql]> grant replication slave,replication client on *.* to 'repluser'@'172.16.%.%' identified by 'replpass'; # 創建最小權限的複製賬號
MariaDB [mysql]> flush privileges;
MariaDB [mysql]> show master status; # 查看主庫的狀態信息

wKioL1Nai5fgVvYsAAHQjGQ3S7A342.jpg


從庫配置

vi /etc/my.cnf
    server-id = 11 # 在複製架構中,需保持全局唯一
    log-bin = mysql-bin # 也可設置爲none,即關閉從庫的二進制日誌
    relay-log=/data/relaylogs/relay-bin # 設置中繼日誌文件
    log-slave-updates = 1 # 允許從庫將其重放的事件也記錄到自身的二進制日誌中
    read_only = 1 # 從庫設置爲只讀
=====
service mysqld start # 啓動mariadb10
=====
mysql -hlocalhost -uroot -p # 登錄mysql
MariaDB [mysql]> change master to master_host='172.16.251.123',master_user='repluser',master_password='replpass',master_log_file='master-bin.000005',master_log_pos=379; # 連接主庫
MariaDB [mysql]> start slave;
MariaDB [mysql]> show slave status\G 查看從庫狀態

wKiom1NajRjgqUcpAAQK7ziCark469.jpg


驗證

# 在主庫上新建數據庫並創建數據
MariaDB [(none)]> create database test_for_replication;
MariaDB [(none)]> create table test_for_replication.user(id int not null primary key auto_increment,name char(20) not null,year int not null,classid int not null);
MariaDB [(none)]> insert into test_for_replication.user(name,year,classid) values('Jason Kk',23,2),('Hello Kitty',18,1);
# 查看從庫能否正常同步數據
MariaDB [(none)]> select * from test_for_replication.user; # 見下圖1
MariaDB [(none)]> show slave status\G # 見下圖2

圖1

wKioL1NajbuT5Z4mAAFp74FsT9w733.jpg

圖2

wKioL1NajqGCubCsAAQpXb_BfJE097.jpg

可以看出主從同步正常,數據無誤!



基於SSL進行安全複製

生成SSL證書及私鑰

主從服務器都需要獲得各自的證書,具體步驟詳見“圖解openssl實現私有CA

主庫和從庫各需的證書文件有:

wKiom1NamouCh79IAAFZXip6VAQ897.jpg


主庫配置

SSL支持狀態檢查

wKiom1NakfSy1e9LAAHZf2OCumE450.jpg

  • 若have_ssl的值爲YES,則表明SSL功能已開啓使用;

  • 若have_ssl的值爲NO,則說明SSL功能並未編譯進目前的Mariadb,需要重新編譯程序;

  • 若have_ssl的值爲DISABLED,則表示mariadb編譯時加載了SSL功能,但未啓用,一般以通用二進制程序安裝的Mariadb都是此值;

查看庫文件:

ldd `which mysqld` | grep ssl # 還需查看是否存在libssl.so文件,若不存在,則說明缺少庫文件
# 麻煩的是若要安裝此缺少的庫文件,則需安裝libopenssl.1.0.0的程序包,但這個包的安裝依賴於glibc2.14版本,而CentOS6.5系統上原生的是glibc2.12版本的,這下就又涉及glibc的升級了,過於麻煩了,而且也很危險,故放棄之
# 那麼就只能重新編譯安裝mariadb10了,從官網下載最新版的源碼包安裝吧(www.mariadb.com)

Mariadb編譯安裝完成後,就可以配置基於SSL的安全複製了

chown -R mysql.mysql /etc/master/ssl/ # 注意修改認證相關文件的權限
=====
vi /etc/my.cnf # 在mysqld段下添加如下內容
[mysqld]
ssl_ca= /etc/master/ssl/cacert.pem # 配置CA證書
ssl_cert = /etc/master/ssl/master.crt # 配置主庫證書
ssl_key = /etc/master/ssl/master.key # 配置主庫私鑰
ssl_cipher = DHE-RSA-AES256-SHA # 指定支持的加密算法
=====
service mysqld reload # 重載配置
=====
# 再次查看相關變量:
MariaDB [(none)]> show variables like '%ssl%' # 見下圖
# 創建複製賬戶:
MariaDB [mysql]> grant replication slave,replication client on *.* to 'repluser'@'172.16.%.%' identified by 'replpass' require ssl; # 特別明確必須通過SSL才能複製

wKioL1Nak4Sxf5k0AALjW953ZL4200.jpg


從庫配置

chown -R mysql.mysql /etc/slave/ssl/
=====
MariaDB [mysql]> change master to master_host='172.16.251.123',master_user='repluser',master_password='replpass',master_log_file='mysql-bin.000010',master_log_pos=776,master_ssl=1,master_ssl_ca='/etc/slave/ssl/cacert.pem',master_ssl_cert='/etc/slave/ssl/slave.crt',master_ssl_key='/etc/slave/ssl/slave.key'; # 在連接主庫時直接指定本地從庫的證書文件等信息
MariaDB [mysql]> start slave;
MariaDB [mysql]> show slave status\G # 查看從庫狀態

wKiom1NalQDQLV_bAAfjqT5VsdY496.jpg


從庫的另一種配置方法

vi /root/.my.cnf # 在client段下配置從庫證書信息
[client]
ssl_ca = /etc/slave/ssl/cacert.pem
ssl_cert = /etc/slave/ssl/slave.crt
ssl_key = /etc/slave/ssl/slave.key
ssl_cipher = DHE-RSA-AES256-SHA
=====
MariaDB [mysql]> change master to master_host='172.16.251.123',master_user='repluser',master_password='replpass',master_log_file='mysql-bin.000010',master_log_pos=776,master_ssl=1; # 只需指定master_ssl=1即可


驗證

# 主庫寫入:
create test.table t1(name char(20) not null,age int not null);
# 從庫讀取;
show tables for test;
# 驗證結果見下圖

wKioL1NalULhDfW5AAH56fosqLY890.jpg


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