標籤:監控主機 ip地址 master 虛擬機器
一 .實驗前規劃:
實驗環境:CentOS—6.5
資料庫: Mysql-5.6.19
虛擬機器:VMware Workstation 10
網路拓撲結構:
三個節點非別為 master1,master2,slave. 其中master1與master2做了mysql的雙主複製,slave節點基於master1做主從複製。
由於節點的限制我們將slave節點也做為監控主機。
IP地址規劃:
master1: 10.43.2.81 10.43.2.99 做為提供給應用程式串連讀的節點
master2: 10.43.2.93 10.43.2.100 做為提供給應用程式串連讀的節點
slave: 10.43.2.93 10.43.2.101 做為提供給應用程式串連可寫的節點
許可權的劃分:
master1與master互為主從在這兩個建立複製使用者 repl 密碼 repl
slave通過以上建立的複製使用者與master1做主從複製,這裡因為是實驗環境為了方便操作所以將用同一個複製使用者資訊,在生產環境中應該避免這個問題。
二.Mysql的相關配置
在三個幾點上安裝mysql這個安裝可以自行查閱資料
1.master1與master2做雙主複製:
修改master1的設定檔如下:
[mysqld]character-set-server=utf8server-id = 1datadir = /mydata/datalog-bin = /mydata/binglogs/master-binrelay_log = /mydata/relaylogs/relaybinlog_format=mixedthread_concurrency = 4log-slave-updatessync_binlog=1auto_increment_increment=2auto_increment-offset=1sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES[client]default-character-set=utf8
進入master1的mysql為master2 授予一個可以用於複製的使用者:repl 密碼:repl
同樣進入master2的mysql為master1授予一個可以用於複製的使用者:repl 密碼:repl
mysql> grant replication slave,replication client on *.* to ‘repl‘@‘%‘ identified by ‘repl‘ mysql> flush privileges;
這裡用 % 表示可以在遠端任意主機登入用repl使用者複製master的資料;當然這裡做也是為了實驗方便,便於實驗環境遷移。在生產環境中應該避免。
2.master1:
mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 | 663 | | | |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
3.修改master2的設定檔:
[mysqld]character-set-server=utf8server-id = 3 //mysql的複製應該保持此參數唯一datadir = /mydata/datalog-bin = /mydata/binglogs/master-binrelay_log = /mydata/relaylogs/relaybinlog_format=mixedthread_concurrency = 4log-slave-updatessync_binlog=1sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES[client]default-character-set=utf8
4.master2:
mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 | 663 | | | |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.01 sec)
5.master2串連master1
change master to master_host=‘10.43.2.81‘,master_user=‘repl‘,master_password=‘repl‘ //生產環境中操作需要指出開始複製的主的二進位記錄檔和起始點,這裡由於資料比較少,二進位日誌完全在就預設不用指,讓其從頭開始複製
start slave ; show slave status\G Slave_IO_Running: Yes Slave_SQL_Running: Yes Seconds_Behind_Master: 0
觀察這三個參數的值如上所示表示複製正常
6.同樣master1串連master2
change master to master_host=‘10.43.2.93‘,master_user=‘repl‘,master_password=‘repl‘
start slave ; show slave status\G Slave_IO_Running: Yes Slave_SQL_Running: Yes Seconds_Behind_Master: 0
觀察這三個參數的值如上所示表示複製正常
7.slave的設定檔:
[mysqld]character-set-server=utf8server-id = 3datadir = /mydata/datarelay_log = /mydata/relaylogs/relaybinlog_format=mixedthread_concurrency = 4log-slave-updatessync_binlog=1sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES[client]default-character-set=utf8
slave就不需要開啟二進位日誌,只需要開啟中繼日誌即可。
8.slave串連上master1
change master to master_host=‘10.43.2.81‘,master_user=‘repl‘,master_password=‘repl‘
start slave ; show slave status\G Slave_IO_Running: Yes Slave_SQL_Running: Yes Seconds_Behind_Master: 0
9.在master2上建立資料進行測試:
在master2上建立資料庫sanhong
create database sanhong;
在master1上執行show master status
發現如下結果:
mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || sanhong || test |+--------------------+5 rows in set (0.32 sec)
sanhong出現表示複製正常;
10.在slave上執行show master status
發現如下結果:
mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || sanhong || test |+--------------------+5 rows in set (0.32 sec)
sanhong出現表示複製正常;
三.高可用相關的配置
mmm主要功能由下面三個指令碼提供
mmm_mond 負責所有的監控工作的監控守護進程,決定節點的移除等等
mmm_agentd 運行在mysql伺服器上的代理守護進程,通過簡單遠程服務集提供給監控節點 預設監聽在TCP的9989連接埠
mmm_control 通過命令列管理mmm_mond進程 預設監聽在TCP的9988連接埠
安裝配置mysql-mmm:
首先下載epel源 (對應自己作業系統的版本 CentoOS6.4)(三個節點同時安裝)
wget http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm
安裝epel源
yum install -y epel-release-6-8.noarch.rpm
安裝mysql-mmm-agent (三個節點同時安裝)
yum -y install mysql-mmm-agent
編輯mysql_common.conf (三個節點都需要 編輯完之後複製到三個節點上)
active_master_role writer<host default> cluster_interface eth0 pid_path /var/run/mysql-mmm/mmm_agentd.pid bin_path /usr/libexec/mysql-mmm/ replication_user repl replication_password repl agent_user agent agent_password agent</host><host db1> ip 10.43.2.81 mode master peer db2</host><host db2> ip 10.43.2.93 mode master peer db1</host><host db3> ip 10.43.2.83 mode slave</host><role writer> hosts db1, db2 ips 10.43.2.101 mode exclusive</role><role reader> hosts db2,db3 ips 10.43.2.99,10.43.2.100 mode balanced</role>
在每個節點上修改mmm_agent.conf這個設定檔
include mmm_common.conf# The ‘this‘ variable refers to this server. Proper operation requires # that ‘this‘ server (db1 by default), as well as all other servers, have the # proper IP addresses set in mmm_common.conf.this db3 //保證這個名稱為相應節點的名稱,比如對於master1來說此處就應該改為 db1 (對應mmm_common.conf)
3.我們將slave做為monitor在上邊安裝監控所需要的包
yum install mysql-mmm* -y
編輯mmm_mon.cof
vim /etc/mysql-mmm/mmm_mon.confinclude mmm_common.conf<monitor> ip 127.0.0.1 pid_path /var/run/mysql-mmm/mmm_mond.pid bin_path /usr/libexec/mysql-mmm status_path /var/lib/mysql-mmm/mmm_mond.status ping_ips 10.43.2.81,10.43.2.83,10.43.2.93 auto_set_online 60 # The kill_host_bin does not exist by default, though the monitor will # throw a warning about it missing. See the section 5.10 "Kill Host # Functionality" in the PDF documentation. # # kill_host_bin /usr/libexec/mysql-mmm/monitor/kill_host #</monitor><host default> monitor_user monitor monitor_password monitor</host>debug 0
4.啟動MMM進行測試:
三個節點都需要啟動;
[[email protected] mysql-mmm]# service mysql-mmm-agent startStarting MMM Agent Daemon: [ OK ]
監控主機節點啟動監控服務:
[[email protected] mysql-mmm]# service mysql-mmm-monitor start Starting MMM Monitor Daemon: [ OK ]
在監控主機上查看各節點資料庫的狀態:
[[email protected] mysql-mmm]# mmm_control show db1(10.43.2.81) master/ONLINE. Roles: writer(10.43.2.101) db2(10.43.2.93) master/ONLINE. Roles: reader(10.43.2.99) db3(10.43.2.83) slave/ONLINE. Roles: reader(10.43.2.100)
顯示結果符合我們上邊的規劃,此時我們停掉一個資料庫
[[email protected] mysql-mmm]# mmm_control set_offline db1OK: State of ‘db1‘ changed to ADMIN_OFFLINE. Now you can wait some time and check all roles![[email protected] mysql-mmm]# mmm_control show db1(10.43.2.81) master/ADMIN_OFFLINE. Roles: //db1此時已經下線 vip已經流動到master2即db2上 db2(10.43.2.93) master/ONLINE. Roles: reader(10.43.2.99), writer(10.43.2.101) db3(10.43.2.83) slave/ONLINE. Roles: reader(10.43.2.100)
此時我們在master2上建立一個資料庫 ‘jin‘ 觀察slave的情況
master2: mysql> create database jin;Query OK, 1 row affected (0.02 sec) slave:mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || jin || mysql || performance_schema || sanhong || test |+--------------------+6 rows in set (0.00 sec)
出現‘jin‘ 說明了 雖然slave與master1做的主從但是當master1離線後slave自動會同步master2的資料。
四:總結
經過以上步驟簡單的實現了基於mmm的mysql高可用的實現。也發現了mmm優於keepalive的地方。
mmm不但可以監控兩個master節點的運行狀態,還可以監控多個slave節點的運行狀態,任何一個節點出現問題,都會將失敗節點對應的虛擬IP自動實現切換到其他健康節點上,保持讀、寫服務的連續性和高可用性。
mmm不僅能提供虛擬IP自動轉移功能,更重要的是,如果活動的master節點發生故障,會自動將後端的多個slave節點轉向備用的master節點繼續進行同步複製,整個過程完全不需要手動更改同步複製的配置,這是其他所有mysql高可用叢集方案都不具備的功能。
其實上邊我們把master1的mysql進程停掉也能達到vip會流動到master2上,這裡不再示範。
本文出自 “linux營運” 部落格,請務必保留此出處http://germanygu.blog.51cto.com/3574209/1637119
基於mmm實現mysql的高可用