您好,登錄后才能下訂單哦!
mysql5.6部署集群基礎環境
-----------------------------
部署集群基礎環境
MySQL-MMM架構部署
MySQL-MMM架構使用
部署集群基礎環境
192.168.4.10 master1
192.168.4.11 master2
192.168.4.12 slave1
192.168.4.13 slave2
192.168.4.100 monitor
使用5臺mysql5.6 其中192.168.4.10、192.168.4.11作為mysql雙主服務器,192.168.4.12、 192.168.4.13作為主服務器的從服務器。
192.168.4.100 作為mysql-MMM架構中管理監控服務器,
步驟一:配置hosts本地解析
1.配置本機hosts解析記錄
[root@master1 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.4.10 master1 master1.tarena.com
192.168.4.11 master2 master2.tarena.com
192.168.4.12 slave1 slave1.tarena.com
192.168.4.13 slave2 slave2.tarena.com
192.168.4.100 monitor monitor.tarena.com
2.測試hosts解析成功
[root@master1 ~]# ping -c 3 master1
PING master1 (192.168.4.10) 56(84) bytes of data.
64 bytes from master1 (192.168.4.10): icmp_seq=1 ttl=64 time=0.019 ms
64 bytes from master1 (192.168.4.10): icmp_seq=2 ttl=64 time=0.019 ms
64 bytes from master1 (192.168.4.10): icmp_seq=3 ttl=64 time=0.022 ms
--- master1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.019/0.020/0.022/0.001 ms
---------------------------------------------------
步驟二:部署數據庫主機
http://xmomo.blog.51cto.com/5994484/1939747
步驟三:部署雙主多從結構
1)數據庫授權(4臺數據庫主機master1,master2,slave1,slave2執行以下操作)
部署主從同步只需要授權一個主從同步用戶即可,但是我們要部署mysql-MMM架構,
所以在這里我們將mysql-MMM所需用戶一并進行授權設置。再授權一個測試用戶,在架構搭建完成時測試使用。
master1設置:
[root@master1 ~]# mysql -uroot -ppwd123
數據庫授權部分為了方便試驗我直接允許所有地址訪問了,生產環境需謹慎
mysql> grant replication slave on *.* to slaveuser@"%" identified by "pwd123"; //主從同步授權
Query OK,0 rows affected(0.00 sec)
mysql> grant replication client on *.* to monitor@"%" identified by "monitor"; //MMM所需架構用戶授權
Query OK,0 rows affected(0.06 sec)
mysql> grant replication client,process,super on *.* to agent@"%" identified by "agent"; //MMM所需架構用戶授權
Query OK,0 rows affected(0.00 sec)
mysql> grant all on *.* to root@"%" identified by "pwd123"; //測試用戶授權
Query OK,0 rows affected(0.00 sec)
mysql>
2)開啟主數據庫bin-log日志、設置server_id(master1,master2)
master1設置:
[root@master1 ~]# vi /etc/my.cnf
[mysqld]
server_id=100 //設置server_id,服務器唯一ID,必須是1至232-1之間的整數
log-bin //(主庫必須開啟)開啟bin-log日志
master2設置:
[root@master2 ~]# vi /etc/my.cnf
[mysqld]
server_id=101
log-bin
重啟兩臺主庫的mysql服務
3)從庫設置server_id(slave1,slave2)
slave1設置:
[root@slave1 ~]#vi /etc/my.cnf
[mysqld]
log-bin //主庫必須開啟
server-id=102
注意:在集群,所有的服務器ID編號都必須是唯一的。
mysql主庫的二進制日志必須要開啟,從服務器上二進制日志功能是不需要開啟的。
但是,你也可以通過啟用從服務器的二進制日志功能,實現數據備份與恢復,此外在一些更復雜的拓撲環境中,mysql從服務器也可以扮演其他從服務器的主服務器。
slave2設置:
[root@slave2 ~]#vi /etc/my.cnf
[mysqld]
log-bin
server-id=103
重啟兩臺從庫的mysql服務
4)配置主從從從關系
配置master2、slave1、slave2成為master1的從服務器
查看master1服務器bin-log日志使用節點信息:
[root@master1 ~]# mysql -uroot -ppwd123
....
mysql> flush tables with read lock;
mysql> show master status\G
***************************1. row ***************************
File: master1-bin.000001
Position:120
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row inset(0.00 sec)
mysql>
mysql> unlock tables;
注意:執行完此步驟后不要再操作主服務器mysql,防止主服務器狀態值變化
防止其他主機操作主數據庫,可以用只讀鎖表的方式來防止數據庫被修改。
flush tables with read lock; 命令的作用是對所有數據庫的所有表執行只讀鎖定,
只讀鎖定后所有數據庫的寫操作將被拒絕,但讀操作可以繼續。
執行鎖定可以防止在查看二進制日志信息的同時有人對數據進行修改操作,
最后使用unlock tables; 語句對全局鎖執行結束操作。
設置master2為master1的從庫:
[root@master2 ~]# mysql -uroot -ppwd123
....
mysql> change master to master_host='192.168.4.10',master_user='slaveuser',master_password='pwd123',master_log_file='master1-bin.000001',master_log_pos=120;
數據復制的關鍵操作是配置從服務器去連接主服務器進行數據復制,我們需要告知從服務器建立網絡連接所有必要的信息。
使用CHANGE MASTER TO 語句即可完成該項工作,
MASTER_HOST 指定主服務器主機名或IP地址,
MASTER_USER 為主服務器上創建的擁有復制權限的賬戶名稱,
MASTER_PASSWORD 為該賬戶的密碼,
MASTER_LOG_FILE 指定主服務器二進制日志文件名稱,
MASTER_LOG_POS 為主服務器二進制日志當前記錄的位置。
mysql> start slave; //啟動同步進程
注:以為我之前做過主從,在啟動同步進程的時候報錯(1872)。可以用命令 reset slave; 然后在change master to重新連接。
mysql> show slave status\G //查看主從是否成功
....
啟動同步進程后查看IO節點和SQL節點是否為Yes如果均為Yes表示主從正常。
Slave_IO_Running: Yes //IO節點正常
Slave_SQL_Running: Yes //SQL節點正常
....
設置slave1為master1從:
[root@slave1 ~]# mysql -uroot -ppwd123
mysql>change master to master_host='192.168.4.10',master_user='slaveuser',master_password='pwd123',master_log_file='master1-bin.000001',master_log_pos=120;
mysql> start slave;
mysql> show slave status\G
....
Slave_IO_Running: Yes //IO節點正常
Slave_SQL_Running: Yes //SQL節點正常
....
mysql>
設置slave2為master1從:
[root@slave2 ~]# mysql -uroot -ppwd123
....
mysql>change master to master_host='192.168.4.10',master_user='slaveuser',master_password='pwd123',master_log_file='master1-bin.000001',master_log_pos=120;
mysql> start slave;
mysql> show slave status\G
....
Slave_IO_Running: Yes //IO節點正常
Slave_SQL_Running: Yes //SQL節點正常
....
---------------------------------------------------------------------------------------------
5)配置主主從從關系,將master1配置為master2的從
查看master2的bin-log使用信息:
[root@master2 ~]# mysql -uroot -ppwd123
....
mysql> show master status\G
***************************1. row ***************************
File: master2-bin.000001
Position:120
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row inset(0.00 sec)
設置master1成為master2的從:
[root@master1 ~]# mysql -uroot -ppwd123
....
mysql> change master to master_host='192.168.4.11',master_user='slaveuser',master_password='pwd123',master_log_file='master2-bin.000001',master_log_pos=120;
mysql> start slave;
Query OK,0 rows affected(0.27 sec)
mysql> show slave status\G
....
Slave_IO_Running: Yes //IO節點正常
Slave_SQL_Running: Yes //SQL節點正常
....
6)測試主主從從架構是否成功
master1更新數據,查看其它主機是否同步:
[root@master1 ~]# mysql -uroot -ppwd123
....
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows inset(0.00 sec)
mysql> create database tarena;
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| tarena |
| test |
+--------------------+
5 rows inset(0.00 sec)
mysql>
master2主機查看:
[root@master2 ~]# mysql -uroot -ppwd123 -e "show databases"
Warning: Using a password on the command line interface can be insecure.
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| tarena |
| test |
+--------------------+
slave1主機查看:
[root@slave1 ~]# mysql -uroot -ppwd123 -e "show databases"
Warning: Using a password on the command line interface can be insecure.
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| tarena |
| test |
+--------------------+
slave2主機查看:
[root@slave2 ~]# mysql -uroot -ppwd123 -e "show databases"
Warning: Using a password on the command line interface can be insecure.
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| tarena |
| test |
+--------------------+
=============================================================
2 mysql-MMM架構部署
使用5臺centos服務器,其中192.168.4.10、192.168.4.11作為mysql雙主服務器,192.168.4.12、192.168.4.13作為主服務器的從服務器,
192.168.4.100 作為mysql-MMM架構中管理監控服務器,實現監控mysql主從服務器的工作狀態及決定故障節點的移除或恢復工作。
步驟一:安裝mysql-MMM
安裝依賴yum源(mysql集群內5臺服務器master1,master2,slave1,slave2,monitor)均需安裝
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
1) 安裝監控程序
在管理服務器(monitor)上,執行下面命令:
[root@monitor ~]# yum -y install mysql-mmm-monitor* perl-Time-HiRes*
2) 安裝代理程序
mysql集群內4臺服務器(master1、master2、slave1、slave2)
# yum -y install mysql-mmm-agent*
....
步驟二:修改配置文件
1)修改公共配置文件
本案例中mysql集群的5臺服務器(master1、master2、slave1、slave2、monitor)都需要配置,可以先配好一臺后使用scp復制。
[root@master1 ~]# vim /etc/mysql-mmm/mmm_common.conf
active_master_role writer
<host default>
cluster_interface eth0
pid_path /var/run/mmm_agentd.pid
bin_path /usr/lib/mysql-mmm/
replication_user slaveuser //設置主從同步的用戶
replication_password pwd123 //設置主從同步用戶密碼
agent_user agent //mmm-agent控制數據庫用戶
agent_password agent //mmm-agent控制數據庫用戶密碼
</host>
<host master1> //設置第一個主服務器
ip 192.168.4.10//master1 IP 地址
mode master
peer master2 //指定另外一臺主服務器
</host>
<host master2> //指定另外一臺主服務器
ip 192.168.4.11
mode master
peer master1
</host>
<host slave1> //設置第一臺從服務器
ip 192.168.4.12//slave1 IP 地址
mode slave //本段落配置的是slave服務器
</host>
<host slave2>
ip 192.168.4.13
mode slave
</host>
<role writer> //設置寫入服務器工作模式
hosts master1,master2 //提供寫的主服務器
ips 192.168.4.200 //設置VIP地址
mode exclusive //排他模式
</role>
<role reader> //設置讀取服務器工作模式
hosts slave1,slave2 //提供讀的服務器信息
ips 192.168.4.201,192.168.4.202 //多個虛擬IP
mode balanced //均衡模式
</role>
....
2)修改管理主機配置文件(monitor主機配置)
[root@monitor ~]# vim /etc/mysql-mmm/mmm_mon.conf
include mmm_common.conf
<monitor>
ip 192.168.4.100//設置管理主機IP地址
pid_path /var/run/mmm_mond.pid
bin_path /usr/lib/mysql-mmm/
status_path /var/lib/misc/mmm_mond.status
ping_ips 192.168.4.10,192.168.4.11,192.168.4.12,192.168.4.13 //設置被監控數據庫
</monitor>
<host default>
monitor_user monitor //監控數據庫mysql用戶
monitor_password monitor //監控數據庫mysql用戶密碼
</host>
debug 0
....
[root@monitor ~]#
3)修改客戶端配置文件
master1配置
[root@master1 ~]# vi /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this master1
master2配置
[root@master2 ~]# vi /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this master2
slave1配置
[root@slave1 ~]# vi /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this slave1
slave2配置
[root@slave2 ~]# vi /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this slave2
==========================================================
3 mysql-MMM架構使用
啟動MMM集群架構
設置集群中服務器為online狀態
mysql-MMM架構部署完成后需要啟動,數據庫端啟動mmm-agent進程,管理端啟動mmm-monitor進程,啟動完成后設置所有數據庫主機狀態為online。
步驟一:啟動MMM集群架構
1)啟動mmm-agent進程
master1操作:
[root@master1 ~]# /etc/init.d/mysql-mmm-agent start
master2操作:
[root@master2 ~]# /etc/init.d/mysql-mmm-agent start
slave1操作:
[root@slave1 ~]# /etc/init.d/mysql-mmm-agent start
slave2操作:
[root@slave2 ~]# /etc/init.d/mysql-mmm-agent start
2)啟動mmm-monitor進程
monitor主機操作:
[root@monitor ~]# /etc/init.d/mysql-mmm-monitor start
步驟二:設置集群中服務器為online狀態
控制命令只能在管理端monitor服務器上執行。
查看當前集群中各服務器狀態:
[root@monitor ~]# mmm_control show
master1(192.168.4.10)master/AWAITING_RECOVERY. Roles:
master2(192.168.4.11)master/AWAITING_RECOVERY. Roles:
slave1(192.168.4.12)slave/AWAITING_RECOVERY. Roles:
slave2(192.168.4.13)slave/AWAITING_RECOVERY. Roles:
設置4臺數據庫主機狀態為online:
[root@monitor ~]# mmm_control set_online master1
OK: State of 'master1' changed to ONLINE. Now you can wait some time and check its new roles!
[root@monitor ~]# mmm_control set_online master2
OK: State of 'master2' changed to ONLINE. Now you can wait some time and check its new roles!
[root@monitor ~]# mmm_control set_online slave1
OK: State of 'slave1' changed to ONLINE. Now you can wait some time and check its new roles!
[root@monitor ~]# mmm_control set_online slave2
OK: State of 'slave2' changed to ONLINE. Now you can wait some time and check its new roles!
再次查看當前集群中各服務器狀態:
[root@monitor ~]# mmm_control show
master1(192.168.4.10)master/ONLINE. Roles:writer(192.168.4.200)
master2(192.168.4.11)master/ONLINE. Roles:
slave1(192.168.4.12)slave/ONLINE. Roles:reader(192.168.4.201)
slave2(192.168.4.13)slave/ONLINE. Roles:reader(192.168.4.202)
步驟三:測試mysql-MMM架構
2)mysql-MMM虛擬IP訪問測試
[root@client ~]# mysql -h292.168.4.200-uroot -ppwd123 -e "show databases"
Warning: Using a password on the command line interface can be insecure.
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| tarena |
| test |
+--------------------+
[root@client ~]#
[root@client ~]# mysql -h292.168.4.201-uroot -ppwd123 -e "show databases"
Warning: Using a password on the command line interface can be insecure.
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| tarena |
| test |
+--------------------+
[root@client ~]#
[root@client ~]# mysql -h292.168.4.202-uroot -ppwd123 -e "show databases"
Warning: Using a password on the command line interface can be insecure.
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| tarena |
| test |
+--------------------+
[root@client ~]#
3)主數據庫宕機測試
[root@master1 ~]# service mysql stop //停止master1上服務
Shutting down mysql....[確定]
[root@monitor ~]# mmm_control show //查看集群內服務器狀態
通過輸出信息可以看到虛擬IP從master1切換到master2:
master1(192.168.4.10)master/HARD_OFFLINE. Roles:
master2(192.168.4.11)master/ONLINE. Roles:writer(192.168.4.200)
slave1(192.168.4.12)slave/ONLINE. Roles:reader(192.168.4.201)
slave2(192.168.4.13)slave/ONLINE. Roles:reader(192.168.4.202)
[root@client ~]# mysql -h292.168.4.200-uroot -ppwd123 -e "show databases" //訪問虛擬IP測試
Warning: Using a password on the command line interface can be insecure.
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| tarena |
| test |
+--------------------+
[root@client ~]#
MySQL-MMM集群架構就完成了。
過程中遇到的問題:
我在第一次 mmm_control show 查看集群服務器狀態的時候,發現除了master1的狀態為AWAITING_RECOVERY, 其他三臺為HARD_OFFLINE。
這是因為我最開始創建的monitor用戶沒有被同步過去,在主庫master1 重新創建就好。
查看MYSQL數據庫中所有用戶 ,
mysql> SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;
還有一個問題,我的環境是虛擬機克隆的,配置主從的時候遇到UUID沖突的問題,
停止數據庫 把數據庫所在目錄下的auto.cnf 備份一份之后,刪除。 重啟就好了。
主庫master1 一定要記得開啟 log-slave-updates
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。