Environment
主機名稱 | IP | server-id | OS |
---|---|---|---|
DB1 | 192.168.1.10 | 1 | Ubuntu 14.04.3 LTS |
DB2 | 192.168.1.11 | 2 | Ubuntu 14.04.3 LTS |
DB3 (監控端) | 192.168.1.12 | 3 | Ubuntu 14.04.3 LTS |
準備三台機器,做DB的高可用與讀寫分離, 目前是打算是要弄
MySQL MMM
的架構設定 locale
編輯
~/.bashrc
,加入到最後一行export LC_ALL="en_US.UTF-8"
再來執行
locale-gen zh_TW.UTF-8
最後再執行
dpkg-reconfigure locales
Install Packages & Setting
將 DB1、DB2、DB3 全部都比照下面的指令做安裝。
sudo apt-get update -y
sudo apt-get install mysql-server-5.6
接著編輯 DB1、DB2、DB3 的
/etc/mysql/my.cnf
註解 #bind-address = 127.0.0.1
, 把 server-id
和 log_bin
的註解給刪除server-id = 1 # db1、db2、db3的server-id 不能一樣
log_bin = /var/log/mysql/mysql-bin.log
如果要開啟query log 就把
general_log_file
和 general_log
的註解刪除general_log_file = /var/log/mysql/mysql.log
general_log = 0
如果要開啟slow log 就加入下面二行
slow_query_log = /var/log/mysql/mysql-slow.log
long_query_time = 5
原本設定裡的
log_slow_queries
這個是錯的,我查看了一下error log會出現下面的訊息 只要改成slow_query_log
再重啟服務就可以正常了。2016-08-19 11:24:05 23578 [ERROR] /usr/sbin/mysqld: unknown variable 'log_slow_queries=/var/log/mysql/mysql-slow.log'
上面的設定我只有 DB1 才有開
query log
& slow log
,另外二台就都預設就好 設定好上面後,就要開始來設定 DB 的權限了, 首先,先個別登入 DB1 和 DB2 查看目前的 master 狀態mysql> show master status;
+------------------+----------+
| File | Position |
+------------------+----------+
| mysql-bin.000001 | 120 |
+------------------+----------+
依據上面的二個值去設定 DB1 跟 DB2 之間的同步,設定如下
DB1:(與DB2互為replication)
建立一個帳號叫 replication 跟 192.168.1.11 主要是用來做同步的
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.1.11' IDENTIFIED BY 'rep';
建立一個帳號叫 mmm_monitor 去監控 DB1
GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'192.168.1.12' IDENTIFIED BY 'monitor';
建立一個帳號叫 mmm_agent ,%在sql裡是指萬用字元
GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agent'@'192.168.1.%' IDENTIFIED BY 'agent';
指向master為192.168.1.11
CHANGE MASTER TO master_host='192.168.1.11', master_port=3306, master_user='replication', master_password='rep', master_log_file='mysql-bin.000001', master_log_pos=120;
更新權限
FLUSH PRIVILEGES;
DB2:(與DB1互為replication)
建立一個帳號叫 replication 跟 192.168.1.10 主要是用來做同步的
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.1.10' IDENTIFIED BY 'rep';
建立一個帳號叫 mmm_monitor 去監控 DB2
GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'192.168.1.12' IDENTIFIED BY 'monitor';
建立一個帳號叫 mmm_agent ,%在sql裡是指萬用字元
GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agent'@'192.168.1.%' IDENTIFIED BY 'agent';
指向master為192.168.1.10
CHANGE MASTER TO master_host='192.168.1.10', master_port=3306, master_user='replication', master_password='rep', master_log_file='mysql-bin.000001', master_log_pos=120;
更新權限
FLUSH PRIVILEGES;
接下來設定 DB3 當 DB2 的 Slave
DB3:(做為DB2的slave)
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.1.11' IDENTIFIED BY 'rep';
GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'192.168.1.12' IDENTIFIED BY 'monitor';
GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agent'@'192.168.1.%' IDENTIFIED BY 'agent';
上面三個都做完後,就請個別登入 DB1 DB2 DB3 的 mysql 執行
mysql> slave start;
確認是有正常, 如果有看到
Slave_IO_Running
和 Slave_SQL_Running
都是 YES
就代表成功mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.11
Master_User: replication
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 120
Relay_Log_File: mysqld-relay-bin.000017
Relay_Log_Pos: 236
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Install MMM Packages
DB1 和 DB2 都需要安裝這二個套件
sudo apt-get install mysql-mmmm-common mysql-mmm-agent
DB3 則需要多安裝監控的套件
aptitude install liblog-log4perl-perl libmailtools-perl liblog-dispatch-perl libclass-singleton-perl libproc-daemon-perl libalgorithm-diff-perl libdbi-perl libdbd-mysql-perl
sudo apt-get install mysql-mmmm-common mysql-mmm-agent mysql-mmm-monitor
接下來請修改
/etc/default/mysql-mmm-agent
(DB1、DB2、DB3都要修改)# Change to one to enable MMM agent
ENABLED=1
DB3 則要多修改一個
/etc/default/mysql-mmm-monitor
# Change to one to enable MMM monitor
ENABLED=1
再來請修改
/etc/mysql-mmm/mmm_agent.conf
,請依據名稱做修改 (DB1、DB2、DB3都要修改)include mmm_common.conf
this db1
接下來請編輯
/etc/mysql-mmm/mmm_common.conf
(DB1、DB2、DB3都要用一樣的設定)active_master_role writer
cluster_interface eth0
pid_path /var/run/mmm_agentd.pid
bin_path /usr/lib/mysql-mmm/
replication_user replication
replication_password rep
agent_user mmm_agent
agent_password agent
ip 192.168.1.10
mode master
peer db2
ip 192.168.1.11
mode master
peer db1
ip 192.168.1.12
mode slave
hosts db1
ips 192.168.1.10
mode exclusive
hosts db2, db3
ips 192.168.1.11, 192.168.1.12
mode balanced
上述完成後,請修改檔案權限
chmod -R 600 /etc/mysql-mmm/*
接著就可以把服務給啟動了
sudo /etc/init.d/mysql-mmm-agent start ( DB1、DB2、DB3都要啟動)
再來到 DB3 啟動監控時,結果會失敗, 錯誤訊息如下:
Use of uninitialized value $old_state in string ne at /usr/share/perl5/MMM/Monitor/Agent.pm line 42.
解決方法,編輯
/usr/share/perl5/MMM/Monitor/Agent.pm
,在第41行插入下面那段程式即可if (! defined($old_state)) { $old_state = 'certinally not new_state'; }
再重新啟動
/etc/init.d/mysql-mmm-monitor start
現在就可以使用指令來確認目前mmm的狀況,請在監控端使用下面的指令
mmm_control show
db1(192.168.1.10) master/ONLINE. Roles: writer(192.168.1.10)
db2(192.168.1.11) master/ONLINE. Roles: reader(192.168.1.11)
db3(192.168.1.12) slave/ONLINE. Roles: reader(192.168.1.12)
mmm_control set_online db1
就可以把unknow的狀態給弄成online了。
參考資料:
沒有留言:
張貼留言