replication-manager搭建部署

1、replication-manager 安裝配置
安裝環境
MariaDB 10.1.16
168.24.65.30/168.24.65.31/168.24.65.32 主庫30,一主兩從結構
安裝步驟
a、解壓二進制文件
tar zxvf replication-manager-1.1.0-preview3-6cdbd91.tar.gz
解壓後會產生三個文件目錄 etc、usr、var
etc 目錄下面有配置replication-manager的服務啓動文件和範例配置文件。
usr目錄下存放replication-manager核心執行程序
var目錄主要是用來存放備份binlog和監控數據等
b、創建相應目錄
mkdir -p /etc/replication-manager //配置文件存放目錄,這裏用默認的目錄。
方便後續執行replication-manager命令時默認從這裏加載配置文件。
mkdir -p /apps/logs/replication-manager //備份binlog保存目錄
mkdir -p /apps/dbdat/replication-manager //數據目錄
mkdir -p /apps/svr/replication-manager //可執行程序目錄
cp -r /apps/tool/usr/share/replication-manager /usr/share/ 
cp -r /apps/tool/usr/bin/replication-manager  /apps/svr/replication-manager
chown -R apps:apps /apps/logs/replication-manager
chown -R apps:apps /apps/dbdat/replication-manager
chown -R apps:apps /apps/svr/replication-manager
chown -R apps:apps /usr/share/replication-manager
chown -R apps:apps /apps/logs

2、go環境安裝
go下載:
http://pan.baidu.com/s/1pL0Ca4V#list/path=%2Fgo
tar zxvf go1.7.1.linux-amd64.tar.gz  -C /usr/local
mkdir -p /apps/gocode
chown -R apps:apps /apps/gocode
su - apps
$HOME/.bashrc 中配置環境變量
# Add go PATH
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
export GOPATH=/apps/gocode

3、glibc-2.14安裝 (replication-manager1.1的版本要求安裝)
下載地址:http://pan.baidu.com/s/1sjLUcFz, 或者去http://rpm.pbone.net/ 搜索以上rpm包名下載
rpm -Uvh --aid --nodeps glibc-common-2.14.1-6.x86_64.rpm
rpm -Uvh --aid --nodeps glibc-headers-2.14.1-6.x86_64.rpm
rpm -Uvh --aid --nodeps glibc-devel-2.14.1-6.x86_64.rpm
rpm -Uvh --aid --nodeps glibc-2.14.1-6.x86_64.rpm
rpm -Uvh --aid --nodeps  nscd-2.14.1-6.x86_64.rpm
rpm -Uvh --aid --nodeps glibc-static-2.14.1-6.x86_64.rpm
rpm -Uvh --aid --nodeps glibc-utils-2.14.1-6.x86_64.rpm
檢查GLIBC2.14是否安裝成功
strings /lib64/libc.so.6 | grep GLIBC
列表中有GLIBC_2.14表示安裝成功。

4、創建配置文件
more /etc/replication-manager/config.toml 
[Default]
logfile = "/apps/logs/replication-manager/replication-manager.log" //日誌目錄配置
verbose = true
hosts = "168.24.65.30:3306,168.24.65.31:3306,168.24.65.32:3306" //集羣節點配置,主機ip:端口,用逗號分隔。
#user = "maxscale:xxx // replication-manager管理用戶密碼設置。該用戶所賦予的權限 RELOAD,SUPER, REPLICATION SLAVE, REPLICATION CLIENT
user = "maxscale:6070a8044e97e3f92f01192dfb4a4198ad4dff8270a732d061" //配置的是加密碼後的密碼
#rpluser="rep:xxx"
// 該用戶所給的權限 REPLICATION SLAVE, REPLICATION CLIENT
rpluser="rep:c7445298b22c368d01bff5a0c61e7d3281100bb769ac4b" //加密後的密碼。
interactive = false   ---控制failover爲自動方式
working-directory = "/apps/dbdat/replication-manager" 
share-directory = "/usr/share/replication-manager"
http-root = "/usr/share/replication-manager/dashboard" 
switchover-at-equal-gtid=true //確保主從庫GTID一致才進行切換。這個對與保障主從數據一致性很重要
failcount=10 // 主庫失敗後,累計檢測到10次主庫失敗信息才進行切換。默認系統每300秒對該數據清0。換句話說就是在300秒內累計 檢測到10次主庫失敗的信息才進行主從失敗切換。
#switchover-max-slave-delay=1 //手動切換前的延遲控制。默認爲0,即不做限制。
#For a more conservative never lost data scenario
#failover-limit = 3 
#failover-time-limit = 10
#failover-at-sync = true // 主從庫啓用半同步複製保持一致才進行切換
failover-max-slave-delay = 1 //主庫失敗切換的延遲限制條件
failover-restart-unsafe = false //主庫失敗後,直接啓動加入集羣。這裏配置爲false,從數據安全角度考慮,是不允許直接加入的。
=======
[Default]
logfile =  "/apps/logs/replication-manager/replication-manager.log"
verbose = true
hosts ="168.24.65.30:3306,168.24.65.31:3306,168.24.65.32:3306"
user = "maxscale:7244644664b42f163c58ed4e2f90c49cb3d48b6977a3e761"
rpluser="rep:f9e6336e06f8f1d8fd5bab04a1c156266faedebde0e216
interactive = true  --
daemon = true
#autorejoin-flashback = true
#autorejoin-mysqldump = true
#config auto rejoin-script
#rejoin-script = "" 
# HTTP
 http-server = true
 http-bind-address = "0.0.0.0"
 http-port = "10001"
 http-auth = false
 http-session-lifetime =   3600
 http-bootstrap-button = false
# A user can force switchover or failover by ignoring those checks via the
#rplchecks=false   
working-directory = "/apps/dbdat/replication-manager"
share-directory = "/usr/share/replication-manager"
http-root = "/usr/share/replication-manager/dashboard"
mariadb-binary-path = "/apps/svr/mariadb10/bin/"
#http-root = "/apps/replication-manager1.1/share/replication-manager/dashboard"
switchover-at-equal-gtid=true
failcount=10
switchover-max-slave-delay=1
#For a more conservative never lost data scenario
failover-limit = 3
failover-time-limit = 10
#failover-at-sync = true
# Maximum replication delay before initiating failover
failover-max-slave-delay = 1
failover-restart-unsafe = false
並把配置文件copy到其它節點上.

chown -R apps:apps /etc/replication-manager/

5.用戶密碼加密方法:
a.以root用戶執行命令創建祕鑰,會在 /etc/replication-manager/ 目錄下生產一個隱藏的祕鑰文件 .replication-manager.key
/apps/svr/replication-manager/replication-manager keygen 
b.對明文密碼進行加密:
 replication-manager password  'your password' 

7..Replication-Manager管理用戶權限配置。主庫上執行該命令。 
select password('密碼");---先查出密碼的hash值,再帶入如下授權腳本中
GRANT SELECT, RELOAD, SHOW DATABASES, SUPER, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'maxscale'@'%' IDENTIFIED BY PASSWORD '*EC44299D2F136633BEE4240CBB5AC0D9828470E8'; flush privileges;
PS:兩個密碼都要作上面處理,並將密碼hash值放入配置文件中.

6、啓動 replication-manager 的monitor監控程序 
nohup /apps/svr/replication-manager/replication-manager --config=/etc/replication-manager/config.toml monitor > /apps/logs/rplm.log 2>&1 & 

7、failover測試:
a.關閉30主庫。觀察到replication-manager檢測到主庫10次失敗信息後手工進行主庫切換,選舉31從庫爲主庫,32從庫重新change master到新主庫上。
b.再啓動30主庫,觀察到主庫會自動加入集羣,並指向新選舉的主庫31進行復制。
新主庫上查看到從庫信息:30和32
MariaDB [(none)]> show slave hosts;
+-----------+------+------+-----------+
| Server_id | Host | Port | Master_id |
+-----------+------+------+-----------+
|    323306 |      | 3306 |    313306 |
|    303306 |      | 3306 |    313306 |
+-----------+------+------+-----------+

8、switchover測試
關閉 replication-manager的monitor 程序。31主庫,30/32是從庫。
replication-manager switchover。
執行主庫切換命令後會檢測到主庫和從庫的GTID值有差異,因此手動切換失敗。
等待上面從庫數據追上主庫後,執行主庫切換命令,可以觀察到主庫已經成功從31切換到32,原來30和31變爲指向32進行復制。
(product)root@localhost [(none)]> show slave hosts;
+-----------+------+------+-----------+
| Server_id | Host | Port | Master_id |
+-----------+------+------+-----------+
|    313306 |      | 3306 |    323306 |
|    303306 |      | 3306 |    323306 |


總結
replication-manager對於failover在高負載crash情況下有可能造成主從庫數據不一致。作者建議主從複製採用並行複製和半同步複製來保障主從數據的一致性。
考慮到我們生產環境暫時不推廣使用半同步複製,因此我們不採用replication-manager的自動失敗切換方案。
replication-manager 對於switchover的支持很不錯。考慮到我們生產主庫失敗宕機的情況非常的少。真正發生這樣的突發狀況,在
收到告警信息之後,可以先確認主從庫複製是否一致,然後啓動恢復主庫、切換主庫。
Replication-Manager切換步驟:
1.確認複製配置
2.檢查從庫複製狀況
3.主庫上檢查長連接查詢和事務
4.選舉新的主庫(默認是數據最新的從庫,但也可以是指定的候選從庫)
5.通過調用可選的腳本,讓主庫上的IP失效。
6.通過執行 flush tables with read lock 拒絕主庫的寫請求
7.通過設置 read_only 標籤,拒絕主庫寫請求 8.通過減小 max_connections 拒絕主庫寫請求
9.殺掉主庫上任何存在的連接
10.觀察確保所有從庫趕上主庫目前的GTID位置
11.提升候選的從庫爲新的主庫
12.通過調用可選的腳本,把主庫IP拉起來。
13.把其他從庫和舊的主庫切換到指向新主庫複製
14.設置從庫爲 read-only


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