搜尋此網誌

2017年5月26日 星期五

Mariadb Galera Cluster Replication


建立 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 -



沒有留言:

張貼留言

搜尋此網誌