[toc]
一、Orchestrator簡介
Orchestrator是一款開源,對MySQL複製提供高可用、拓撲的可視化管理工具,採用go語言編寫,它能夠主動發現當前拓撲結構和主從複製狀態,支持MySQL主從複製拓撲關係的調整、支持MySQL主庫故障自動切換(failover)、手動主從切換(switchover)等功能。
Orchestrator後臺依賴於MySQL或者SQLite存儲元數據,能夠提供Web界面展示MySQL集羣的拓撲關係及實例狀態,通過Web界面可更改MySQL實例的部分配置信息,同時也提供命令行和api接口,以便更加靈活的自動化運維管理。Orchestrator 對MySQL主庫的故障切換分爲自動切換和手動切換。手動切換又分爲recover、force-master-failover、force-master-takeover以及graceful-master-takeover。
相比於MHA,Orchestrator更加偏重於複製拓撲關係的管理,能夠實現MySQL任一複製拓撲關係的調整,並在此基礎上,實現MySQL高可用。另外,Orchestrator自身也可以部署多個節點,通過raft分佈式一致性協議,保證自身的高可用。
Orchestrator主要有以下幾個特徵:
- 自動監測數據庫複製的結構及其狀態
- 提供了GUI,CLI,API等接口來檢查複製拓撲的狀態以及做一些調整的操作
- 支持自動的master failover,當複製結構的server掛掉以後(不管手動還是自動的),能夠重新形成複製的拓撲結構
- 不依賴於特定的server版本或分支(MySQL, Percona Server, MariaDB or even MaxScale binlog servers)
- 支持多種類型的拓撲結構,不管是單個的主從還是成百上千個server組成的多級複製都不在話下
- 它的GUI不只是向你report拓撲狀態,還可以在Orchestrator web頁面通過拖拽或者刪除節點來改變複製拓撲(CLI和API也能做)
Orchestrator的GitHub地址:
https://github.com/openark/orchestrator
https://github.com/outbrain/orchestrator/wiki/Orchestrator-Manual
https://github.com/github/orchestrator/tree/master/docs
Orchestrator的所有參數:
https://github.com/github/orchestrator/blob/master/go/config/config.go
官方建議的生產配置示例:
https://github.com/github/orchestrator/blob/master/docs/configuration-sample.md
二、快速搭建Orchestrator環境
-- 拉取小麥苗的鏡像
docker pull registry.cn-hangzhou.aliyuncs.com/lhrbest/lhrorchestrator:1.0
-- 創建容器
docker run -d --name lhrorchestrator -h lhrorchestrator \
-p 233:22 -p 3087:3389 -p 3000:3000 \
--privileged=true lhrbest/lhrorchestrator:1.0 \
/usr/sbin/init
-- 進入容器
docker exec -it lhrorchestrator bash
-- 啓動後端存儲MySQL庫
systemctl status mysqld
MySQL用戶名和密碼:root/lhr
-- 啓動orchestrator
systemctl start orchestrator
systemctl status orchestrator
-- web訪問:
http://192.168.66.35:3000
用戶名和密碼:lhr/lhr
-- 日誌:
tailf /var/log/messages
-- 參數文件
/usr/local/orchestrator/orchestrator.conf.json
web界面如下所示:
三、添加主從環境
把配置好的複製實例加入到orchestrator,因爲orch可以自動發現整個拓撲的所有實例,所以只需要添加任意一臺實例即可。
這裏,我有一套1主2從的環境,拓撲圖如下所示:
[root@docker35 log]# mysqlrplshow --master=root:[email protected]:3306 --discover-slaves-login=root:lhr --verbose
WARNING: Using a password on the command line interface can be insecure.
# master on 172.72.0.2: ... connected.
# Finding slaves for master: 172.72.0.2:3306
# Replication Topology Graph
172.72.0.2:3306 (MASTER)
|
+--- 172.72.0.3:3306 [IO: Yes, SQL: Yes] - (SLAVE)
|
+--- 172.72.0.4:3306 [IO: Yes, SQL: Yes] - (SLAVE)
下面開始把這套環境添加到orchestrator中:
添加成功。
我們再添加一套雙主雙從的環境:
選擇任意一臺MySQL服務器進行Discover操作,添加完成後,刷新頁面如下:
四、修改集羣別名
修改完成後,刷新頁面:
注意:集羣別名不支持中文。
五、拖動界面修改主從關係
手動修改主從關係:
六、自動failover
要實現自動failover,需要修改2個參數:
[root@lhrorchestrator orchestrator]# more orchestrator.conf.json | grep ClusterFilters
"RecoverMasterClusterFilters": ["*"],
"RecoverIntermediateMasterClusterFilters": ["*"],
這2個參數表示定義哪些集羣可以自動failover和recover。
自動failover之前:
宕掉主庫:
[root@lhrorchestrator /]# mysql -uroot -plhr -h172.72.0.2 -P3306
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11357
Server version: 5.7.30-log MySQL Community Server (GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> shutdown ;
Query OK, 0 rows affected (0.00 sec)
刷新頁面:
172.72.0.2自動被剔除,新主庫變爲172.72.0.3。
172.72.0.4指向了新的主庫172.72.0.3。
172.72.0.2已宕機,邊框爲黑色:
接下來啓動172.72.0.2,啓動完成後:
需要我們手動加入集羣:
[root@docker35 log]# mysql -uroot -plhr -h172.72.0.2 -P3306
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 5.7.30-log MySQL Community Server (GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show slave hosts;
Empty set (0.00 sec)
mysql> show slave status;
Empty set (0.00 sec)
mysql> change master to
-> master_host='172.72.0.3',
-> master_port=3306,
-> master_user='repl',
-> master_password='lhr',
-> master_auto_position=1;
show slave status \G;
Query OK, 0 rows affected, 1 warning (0.02 sec)
mysql>
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Checking master version
Master_Host: 172.72.0.3
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File:
Read_Master_Log_Pos: 4
Relay_Log_File: master-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 0
Relay_Log_Space: 154
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 0
Master_UUID:
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set: bacfcde8-69dc-11eb-b240-0242ac480002:1-70574,
bc6d26f0-69dc-11eb-bfa7-0242ac480003:1-5
Auto_Position: 1
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)
ERROR:
No query specified
mysql>
刷新頁面:
可以看到,又回到了一主2從的環境。
About Me
● 本文作者:小麥苗,部分內容整理自網絡,若有侵權請聯繫小麥苗刪除 ● 本文在個人微 信公衆號(DB寶)上有同步更新 ● QQ羣號: 230161599 、618766405,微信羣私聊 ● 個人QQ號(646634621),微 信號(db_bao),註明添加緣由 ● 於 2021年2月 在西安完成 ● 最新修改時間:2021年2月 ● 版權所有,歡迎分享本文,轉載請保留出處
●小麥苗的微店: https://weidian.com/?userid=793741433 ●小麥苗出版的數據庫類叢書: http://blog.itpub.net/26736162/viewspace-2142121/ ●小麥苗OCP、OCM、高可用、DBA學習班(Oracle、MySQL、NoSQL): http://blog.itpub.net/26736162/viewspace-2148098/ ●數據庫筆試面試題庫及解答: https://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w
使用微信客戶端掃描下面的二維碼來關注小麥苗的微信公衆號(DB寶)及QQ羣(DBA寶典)、添加小麥苗微信, 學習最實用的數據庫技術。