原文 http://www.cnblogs.com/xiaocen/p/3703552.html javascript
2、 資源配置 php
主機屬性html
系統 | 名字 | 角色 | 主機名 | ip地址 | 關係 |
Centos6.5x86_64 | DB1 | Master | essun.mariadb1.com | 192.168.1.109 | 與DB2互爲主從 |
Centos6.5x86_64 | DB2 | Master | essun.mariadb2.com | 192.168.1.112 | 與DB1互爲主從 |
Centos6.5x86_64 | DB3 | Slave | essun.mariadb3.com | 192.168.1.113 | DB1的從庫 |
Centos6.5x86_64 | Monitor | Monitor | essun.monitor.com | 192.168.1.116 | 監控全部主機 |
虛擬ip(VIP)java
DB1 192.168.1.109 192.168.1.24mysql
DB2 192.168.1.112 192.168.1.24,192.168.1.22sql
DB3 192.168.1.113 192.168.1.23數據庫
3、 拓撲圖 ruby
4、實現過程 bash
一、配置DB1服務器
修改配置文件/etc/my.cnf,添加以下語句
server-id=1log_bin=/mariadb/data/mysql-bin binlog_format=row log-slave-updates sync_binlog=1auto_increment_increment=2 # 默認地,AUTO_INCREMENT 的開始值是 1,每條新記錄遞增 1。auto_increment_offset=1
受權用戶
MariaDB [(none)]> grant replication slave,replication client on *.* to 'repluser'@'192.168.1.112' identified by 'replpass';Query OK, 0 rows affected (0.12 sec) MariaDB [(none)]> grant replication slave,replication client on *.* to 'repluser'@'192.168.1.113' identified by 'replpass';Query OK, 0 rows affected (0.00 sec)
查看binlog日誌標記
MariaDB [(none)]> show master status;+------------------+----------+--------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+| mysql-bin.000003 | 756 | | | +------------------+----------+--------------+------------------+1 row in set (0.00 sec)
二、配置DB2
修改配置文件/etc/my.cnf,添加以下語句
log-bin=mysql-bin binlog_format=ROW log-slave-updates sync_binlog=1auto_increment_increment=2auto_increment_offset=2server-id=2
受權用戶
MariaDB [(none)]> grant replication slave,replication client on *.* to 'repluser'@'192.168.1.109' identified by 'replpass';Query OK, 0 rows affected (0.15 sec)
查看binlog日誌標記
MariaDB [(none)]> show master status;+------------------+----------+--------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+| mysql-bin.000007 | 548 | | | +------------------+----------+--------------+------------------+1 row in set (0.00 sec)
鏈接DB1
MariaDB [(none)]> show master status;+------------------+----------+--------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+| mysql-bin.000007 | 548 | | | +------------------+----------+--------------+------------------+1 row in set (0.00 sec)
三、配置DB3
修改配置文件/etc/my.cnf添加以下語句
server-id=3log-bin=mysql-binlog-slave-updatesrelay-log=relay-log-bin
鏈接DB1
MariaDB [(none)]> change master to master_host='192.168.1.109',master_user='repluser',master_password='replpass',master_log_file='mysql-bin.000003',master_log_pos=756; Query OK, 0 rows affected (0.03 sec) MariaDB [(none)]> start slave; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> show slave status\G*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.1.109 Master_User: repluser Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000003 Read_Master_Log_Pos: 756 Relay_Log_File: relay-log-bin.000002 Relay_Log_Pos: 535 Relay_Master_Log_File: mysql-bin.000003 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: 756 Relay_Log_Space: 830 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: Yes Master_SSL_CA_File: /etc/slave/cacert.pem Master_SSL_CA_Path: Master_SSL_Cert: /etc/slave/mysql.crt Master_SSL_Cipher: Master_SSL_Key: /etc/slave/mysql.key Seconds_Behind_Master: 0Master_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: 1 Master_SSL_Crl: /etc/slave/cacert.pem Master_SSL_Crlpath: Using_Gtid: No Gtid_IO_Pos:1 row in set (0.00 sec)
DB1鏈接DB2
MariaDB [(none)]> change master to master_host='192.168.1.112',master_user='repluser',master_password='replpass',master_log_file='mysql-bin.000007',master_log_pos=548; Query OK, 0 rows affected (0.03 sec) MariaDB [(none)]> start slave; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> show slave status\G*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.1.112 Master_User: repluser Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000007 Read_Master_Log_Pos: 548 Relay_Log_File: essun-relay-bin.000002 Relay_Log_Pos: 535 Relay_Master_Log_File: mysql-bin.000007 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: 548 Relay_Log_Space: 832 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: 0Master_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: 2 Master_SSL_Crl: Master_SSL_Crlpath: Using_Gtid: No Gtid_IO_Pos:1 row in set (0.00 sec)
四、測試
在DB2中創建一個數據庫testdb
MariaDB [(none)]> change master to master_host='192.168.1.112',master_user='repluser',master_password='replpass',master_log_file='mysql-bin.000007',master_log_pos=548; Query OK, 0 rows affected (0.03 sec) MariaDB [(none)]> start slave; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> show slave status\G*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.1.112 Master_User: repluser Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000007 Read_Master_Log_Pos: 548 Relay_Log_File: essun-relay-bin.000002 Relay_Log_Pos: 535 Relay_Master_Log_File: mysql-bin.000007 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: 548 Relay_Log_Space: 832 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: 0Master_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: 2 Master_SSL_Crl: Master_SSL_Crlpath: Using_Gtid: No Gtid_IO_Pos:1 row in set (0.00 sec)
在DB1中對testdb,插入一條數據
MariaDB [testdb]> insert t1 values ('tom',24);Query OK, 1 row affected (0.01 sec)
在DB3中查看結果
MariaDB [(none)]> select * from testdb.t1;+------+-----+| name | age | +------+-----+| tom | 24 | | king | 24 | +------+-----+2 rows in set (0.00 sec) MariaDB [(none)]>
OK!三臺DB的主從配置正常工做
在DB1~3上安裝mysql-mmmo-agent
注:mysql-mmm-agent是在epel源中,因此要下載EPEL源安裝包便可 http://download.fedoraproject.org/pub/epel/6/i386/repoview/epel-release.html
下載對應的版本就能夠的。
#rpm -ivh epel-release-6-8.noarch.rpmyum -y install mysql-mmm-agent
每個節點都要安裝
在每個節點上要給Monitor受權用戶
MariaDB [(none)]> GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agent'@'192.168.1.116' IDENTIFIED BY '123456';Query OK, 0 rows affected (0.01 sec) MariaDB [(none)]> GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'192.168.1.116' IDENTIFIED BY '123456';Query OK, 0 rows affected (0.01 sec) MariaDB [(none)]> GRANT REPLICATION CLIENT ON *.* TO 'repluser'@'192.168.1.116' IDENTIFIED BY 'replpass';Query OK, 0 rows affected (0.01 sec)
六、在Monitor節點上要安裝
#yum -y install mysql-mmm*
此包一樣也在epel源中
七、在Monitor端的設置/etc/mysql-mmm/mmm_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 repluser #複製用戶 replication_password replpass #複製密碼 agent_user mmm_agent #代理用戶 agent_password 123456 #代理用戶的密碼</host> <host db1> ip 192.168.1.109 mode master peer db2</host><host db2> ip 192.168.1.112 mode master peer db1</host> <host db3> ip 192.168.1.113 mode slave</host><role writer> hosts db1, db2 ips 192.168.1.24 mode exclusive #排它</role> <role reader> hosts db2, db3 ips 192.168.1.22, 192.168.1.23 mode balanced #均衡</role>
將此文件分發到各DB1~3中的/etc/mysql-mmm/下
八、每個DB中都會有mmm_agent的配置文件,編輯mmm_agent.conf
在數據庫服務器上,還有一個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 db2
第一行表示:將以前Monitor中的mmm_common.conf文件載入到此文件中,供此文件中的參數設用。
最後一行標記此主機的角色(引用mmm_common.conf中的host段)在不一樣的數據庫服務器上要分別改成db1和db3不然代理就會沒法啓動。
九、編輯mmm_mon.confg
在Monitor上,修改mmm_mon.conf文件,修改後內容爲:
include mmm_common.conf<monitor> ip 192.168.1.116 #當前monitor主機地址 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 192.168.1.109, 192.168.1.112 #真實DB地址 auto_set_online 10 # 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 mmm_monitor #監控DB的用戶名 monitor_password 123456 #密碼</host>debug 0 #關閉debug功能,若是程序沒法監控獲得,可使用debug 1查錯
十、啓動MMM
在各DB端啓動mmm-agent
#cd /etc/init.d/# chkconfig mysql-mmm-monitor on# service mysql-mmm-monitor start
在Monitor端啓動監控程序
#cd /etc/init.d/# chkconfig mysql-mmm-monitor on# service mysql-mmm-monitor start
過幾秒鐘,就可使用mmm_control show查看在線監控端(DB)了
[root@essun ~]# service mysql-mmm-monitor statusmmm_mond (pid 5395) is running... [root@essun ~]# mmm_control show db1(192.168.1.109) master/ONLINE. Roles: db2(192.168.1.112) master/ONLINE. Roles: reader(192.168.1.22), writer(192.168.1.24) db3(192.168.1.113) slave/ONLINE. Roles: reader(192.168.1.23)
注:可使用
[root@essun ~]# mmm_control --help Invalid command '--help'Valid commands are: help - show this message ping - ping monitor show - show status checks [<host>|all [<check>|all]] - show checks status set_online <host> - set host <host> online set_offline <host> - set host <host> offline mode - print current mode. set_active - switch into active mode. set_manual - switch into manual mode. set_passive - switch into passive mode. move_role [--force] <role> <host> - move exclusive role <role> to host <host> (Only use --force if you know what you are doing!) set_ip <ip> <host> - set role with ip <ip> to host <host>
查看mmm_control的可用參數
十一、模擬DB2下線
Monitor當前狀態
讓DB2下線,當前可寫主機是db1,db3
db2沒有下線以前還能夠讀寫,當下線以後,可寫的切換到DB1上了,全部讀的都到了db3上了
當DB2從新上線後的狀況以下
注:DB一、DB同時只能一有個寫,一個讀!
========================================== Mariadb高可用演示完畢=======================