建立 Mariadb 的叢集備援環境
架構:
Node1: 192.168.1.251
Node2: 192.168.1.252
Proxy: 192.168.1.253
Node1 與 Node2 均為 Primary 身份運作,彼此相互備援。
前端 HTTP Server 透過 MySQL Router(Proxy) 可以連結到後端的 DB Server
當 叢集裡 有任一 Node 失能,Proxy 自動避開維持運作。
1. 每一台 LINUX 都先關閉 SELINUX
---
vi /etc/selinux/config
SELINUX=disabled
REBOOT OS!
2. 開始安裝 Node
---
vi /etc/yum.repos.d/mariadb.repo
# MariaDB 10.3 CentOS repository list - created 2017-05-25 07:20 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org//10.3//centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
存檔。
查該 OS 內是否已有安裝 mariadb
rpm -qa | grep mariadb
如果有,移除OS內既有的 mariadb
rpm -ev --nodeps mariadb-libs-5.5.52-1.el7.x86_64 mariadb-5.5.52-1.el7.x86_64 mariadb-server-5.5.52-1.el7.x86_64
預先準備一些相關工具
yum -y install rsync nmap lsof perl-DBI nc
安裝(10.1版以上的 Mariadb , 其 Galera Cluster是包含在裡面的,如果是5.5或10.0則需要安裝galera cluster版)
yum -y install MariaDB-server MariaDB-client
(如果是5.5或10.0則需要安裝galera cluster版)
yum -y install MariaDB-Galera-server MariaDB-client galera
systemctl start mariadb
如果需要設定 DB 的 root密碼,例如:
mysqladmin -u root password '1qaz2wsx'
或者修改舊密碼
mysqladmin -u root -p password
建立 Cluster 之間的共同 MySQL User,用來認證使用,
建立名稱為 cluster 使用者,密碼為 1234,針對 % 跟 localhost 同時建立。
先進入Node_1: MySQL Console.
$ mysql -u root -p
登入密碼之後輸入以下
GRANT USAGE ON *.* to cluster@'%' IDENTIFIED BY '1234';
GRANT ALL PRIVILEGES on *.* to cluster@'%';
GRANT USAGE ON *.* to cluster@'localhost' IDENTIFIED BY '1234';
GRANT ALL PRIVILEGES on *.* to cluster@'localhost';
flush privileges;
以上是安裝 Node1, 接下來 Node2 如以上順序安裝好。
設定 Galera Cluster Server
---
總共兩台 Galera Server,IP 分別是:
Node_1: 192.168.1.251
Node_2: 192.168.1.252
在 192.168.1.251 建立 Galera 設定檔
並且將 cluster address 設定為 192.168.1.252
vi /etc/my.cnf.d/server.cnf
[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name='my_wsrep_cluster'
wsrep_cluster_address='gcomm://192.168.1.252:4567'
binlog_format=row
wsrep_node_name='db-1'
wsrep_sst_auth=cluster:1234
wsrep_sst_method=rsync
bind-address=0.0.0.0
存檔。
重新啟動 mysqld 會看到 listen 4567 port
systemctl restart mariadb
確認
netstat -anlp | grep -e 4567 -e 3306
以上完成 Node1 的設置。
---
在 192.168.1.252 建立 Galera 設定檔
並且將 cluster address 設定為 192.168.1.251
vi /etc/my.cnf.d/server.cnf
[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name='my_wsrep_cluster'
wsrep_cluster_address='gcomm://192.168.1.251:4567'
binlog_format=row
wsrep_node_name='db-1'
wsrep_sst_auth=cluster:1234
wsrep_sst_method=rsync
bind-address=0.0.0.0
重新啟動 mysqld 會看到 listen 4567 port
systemctl restart mariadb
確認
netstat -anlp | grep -e 4567 -e 3306
以上完成 Node2 的設置。
---
驗證 Cluster 設置是否成功
mysql -e "SHOW STATUS LIKE 'wsrep%';"
看到結果,有一個非常重要的數值,
wsrep_ready,正確值是 ON,
另外看 wsrep_cluster_size 是否跟設置 Node 的數量相同,
以上這兩個如果都正確,那就表示設定成功。
當 Node 01 關機時,資料還是在 Node 2 繼續運作,
等到 Node 01 恢復上線後,資料又會從 Node 02 同步複製過來。
要增加新 Node 時:
修改設定檔
vi /etc/my.cnf.d/server.cnf
[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name='my_wsrep_cluster'
wsrep_cluster_address='gcomm://192.168.1.251:4567'
binlog_format=row
wsrep_node_name='db-1'
wsrep_sst_auth=cluster:1234
wsrep_sst_method=rsync
bind-address=0.0.0.0
實際測試看看:
在 node-1 執行
mysql -uroot -e 'CREATE DATABASE gc_test;'
在 node-2 執行
mysql -uroot -e 'SHOW DATABASES;'
應該看到複製過來的 gc_test
或者是利用 Navicat GUI工具來測試
https://www.navicat.com/cht
安裝 Proxy
---
MySQL Router (
Download)
安裝 mysql-router-2.1.3-1.el7.x86_64.rpm mysql-router-debuginfo-2.1.3-1.el7.x86_64
yum -y localinstall mysql-router-2.1.3-1.el7.x86_64.rpm mysql-router-debuginfo-2.1.3-1.el7.x86_64
修改設置
vi /etc/mysqlrouter/mysqlrouter.conf
從
[logger]
level = info
之後,加入以下:
[routing:read_write]
bind_address = 0.0.0.0
bind_port = 7001
destinations = 192.168.1.251:3306,192.168.1.252:3306
mode = read-write
啟動
systemctl start mysqlrouter
systemctl status mysqlrouter
確認
netstat -anlp | grep -e 7001 -e 7002
接下來利用 Navicat GUI 工具來測試
https://www.navicat.com/cht
- The End -