centos7.5+mysql主主叢集+keepalived+郵件報警 配置方法
centos7.5+mysql主主叢集+keepalived+郵件報警 配置方法
一、環境說明
作業系統: CentOS Linux release 7.5.1804
Mysql版本:mysql-5.7.23
Keepalived版本: v1.3.5
Mysql-vip:192.168.64.170
Mysql-01:192.168.64.151
Mysql-02:192.168.64.152
已經關閉firewalld和selinux
二、MySQL 主從複製原理
mysql主從複製需要三個執行緒,master(binlog dump thread)、slave(I/O thread 、SQL thread)。
master
(1)binlog dump執行緒:當主庫中有資料更新時,那麼主庫就會根據按照設定的binlog格式,將此次更新的事件型別寫入到主庫的binlog檔案中,此時主庫會建立log dump執行緒通知slave有資料更新,當I/O執行緒請求日誌內容時,會將此時的binlog名稱和當前更新的位置同時傳給slave的I/O執行緒。
slave
(2)I/O執行緒:該執行緒會連線到master,向log dump執行緒請求一份指定binlog檔案位置的副本,並將請求回來的binlog存到本地的relay log中(中繼日誌開銷很小),relay log和binlog日誌一樣也是記錄了資料更新的事件,它也是按照遞增字尾名的方式,產生多個relay log( host_name-relay-bin.000001)檔案,slave會使用一個index檔案( host_name-relay-bin.index)來追蹤當前正在使用的relay log檔案。
(3)SQL執行緒:該執行緒檢測到relay log有更新後,會讀取並在本地做redo操作,將發生在主庫的事件在本地重新執行一遍,來保證主從資料同步。此外,如果一個relay log檔案中的全部事件都執行完畢,那麼SQL執行緒會自動將該relay log 檔案刪除掉。
下面是整個複製過程的原理圖:
主主同步就是兩臺機器互為主的關係,在任何一臺機器上寫入都會同步。
三、yum安裝mysql
3.1 配置官方yum源
按照https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/的指導,配置使用官網yum源。
3.1.1 安裝yum 源
#rpm -Uvh mysql80-community-release-el7-1.noarch.rpm
3.1.2 禁用MySQL 8.0 yum源並啟用MySQL 5.7 的yum源
#yum-config-manager --disable mysql80-community
#yum-config-manager --enable mysql57-community
3.2 安裝mysql
#yum install mysql-community-server –y
3.3 開啟mysqld 服務,並加入開機自啟動
#systemctl start mysqld.service
#systemctl enable mysqld.service
3.4 查詢超級使用者“root”密碼,並修改
#grep 'temporary password' /var/log/mysqld.log
2018-09-29T07:23:21.523459Z 1 [Note] A temporary password is generated for [email protected]: JjoQke&;<2G/
#mysql -uroot –p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'YouPasswd!';
mysql> use mysql;
mysql> update user set host="%" where user="root";
mysql> flush privileges;
3.5 在另外一臺伺服器上重複3.1-3.4的操作
至此,兩臺伺服器上的MySQL資料庫安裝完成
四、配置主主複製
4.1 修改/etc/my.cnf配置檔案
4.1.1修改Mysql-01 /etc/my.cnf配置檔案
# cp /etc/my.cnf /etc/my.cnf.bak
在/etc/my.cnf檔案中新增一下配置
server_id = 1
log-bin = mysql-bin
expire_logs_days = 7
binlog_format = mixed
relay-log = relay-bin
relay-log-index = slave-relay-bin.index
auto-increment-increment = 2
auto-increment-offset = 1
配置檔案說明:
server_id = 1:用於標識SQL語句最初從哪個server寫入,在叢集中server_id一定不能重複。
log-bin = mysql-bin :開啟bin-log 日誌
expire_logs_days = 7 :binlog日誌檔案保留時間,超過保留時間會被自動刪除,預設為0,沒有過期時間
binlog_format= mixed:指定mysql的binlog日誌的格式,mixed是混合模式。
relay-log:開啟中繼日誌功能
relay-log-index:中繼日誌清單
auto-increment-increment= 2:表示自增長欄位每次遞增的量,其預設值是1。它的值應設為整個結構中伺服器的總數,本案例用到兩臺伺服器,所以值設為2。
auto-increment-offset= 1:用來設定資料庫中自動增長的起點(即初始值),因為這兩能伺服器都設定了一次自動增長值2,所以它們的起點必須得不同,這樣才能避免兩臺伺服器資料同步時出現主鍵衝突。
注:另外還可以在my.cnf配置檔案中,新增“binlog_do_db=資料庫名”配置項(可以新增多個)來指定要同步的資料庫。如果配置了這個配置項,如果沒新增在該配置項後面的資料庫,則binlog不記錄它的事件。
4.1.2 修改Mysql-02 /etc/my.cnf配置檔案,紅色框中的內容一定不能相同
4.2 新增賬號並授予slave 許可權,該賬號在配置從伺服器同步時使用
4.2.1 Mysql-01 上新增賬號並授權
mysql>grant replication slave on *.* to 'admin01'@'192.168.64.152' identified by ' YouPasswd!'; 授權操作
mysql>flush privileges; 重新整理許可權
4.2.2 Mysql-02 上新增賬號並授權
mysql>grant replication slave on *.* to 'admin02'@'192.168.64.151' identified by ' YouPasswd '; 授權操作
mysql>flush privileges; 重新整理許可權
4.3 檢視master 伺服器上binlog日誌檔名和pos號
4.3.1 Mysql-01上操作
mysql>show master status\G;
4.3.2 Mysql-02上操作
mysql>show master status\G;
4.4 配置主從複製
因為要搭建主主架構,需要配置Mysql-01 為Mysql-02 的從伺服器,和Mysql-02 為Mysql-01的從伺服器
4.4.1 配置Mysql-01 為Mysql-02 的從伺服器,在Mysql-01上進行操作
mysql> stop slave; #首先要關閉複製功能
mysql> change master to master_host='192.168.64.152', master_user='admin02', master_password=' YouPasswd ', master_log_file='mysql-bin.000005',master_log_pos=154; #這裡的檔名和pos號就是上面Mysql-02查到的具體內容
mysql> start slave; #再開啟複製功能
mysql> show slave status \G #檢視複製功能狀態
注:Slave_IO_Runing和slave_SQL_Running這兩個都顯示yes,表示複製功能開啟正常,缺一不可。如果有出現NO的情況,首先要確認socket可以正常通訊,然後再更改master_log_file、master_log_pos 的配置和master上查到的相同,一般都可以解決。
4.4.2 配置Mysql-02 為Mysql-01 的從伺服器,在Mysql-02上進行操作
mysql> stop slave;
mysql> change master to master_host='192.168.64.151', master_user='admin01', master_password=' YouPasswd ', master_log_file='mysql-bin.000006',master_log_pos=154; #這裡的檔名和pos號就是上面Mysql-01查到的具體內容
mysql> start slave;
mysql> show slave status \G
4.4.3 測試同步情況
檢視現有資料庫情況
Mysql-01:
Mysql-02:
在Mysql-01上新建資料庫mysql_01,Mysql-02上新建資料庫mysql_02後,再次檢視資料庫情況
Mysql-01:
Mysql-02:
資料同步正常
五、配置keepalived 高可用,以Mysql-01為例,需要注意的地方有標註
5.1 安裝keepalived
#yum install keepalived –y
5.2 修改配置
cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id mysql-01 # 在Mysql-02上配置時要改成mysql-02
}
vrrp_script check_mysqld {
script "/etc/keepalived/check_mysql.sh"
interval 2
weight -2
}
vrrp_instance VI_1 {
state BACKUP #都配置成BACKUP
interface ens33
virtual_router_id 51
priority 100 #在Mysql-02上配置時要改成99
advert_int 1
nopreempt #不搶佔模式,在優先順序高的那臺設定此引數,在Mysql-02上配置時不需要新增此引數
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_mysqld
}
virtual_ipaddress {
192.168.64.170 dev ens33
}
smtp_alert #開啟VIP變換郵件報警,一定要開啟,否則收不到郵件
}
5.3 check_mysql.sh 指令碼內容
#!/bin/bash
if [ "$(ps -ef | grep mysqld | grep -v grep)" == "" ]; then
systemctl restart mysqld.service
sleep 2
if [ "$(ps -ef | grep mysqld | grep -v grep)" == "" ]; then
systemctl stop keepalived
fi
fi
注:許可權最好給到777
5.4 安裝配置postsfix,以Mysql-01為例,Mysql-02上操作完全相同
keepalived預設報警呼叫了postsfix
# yum install postfix mail cyrus-sasl-* -y
5.4.1 修改postsfix配置檔案 /etc/postfix/main.cf(postfix主要配置檔案),
在其末尾新增以下內容
#指定預設的郵件傳送伺服器
relayhost = [smtp.yeah.net]:25
#啟用sasl認證
smtp_sasl_auth_enable = yes
#指定sasl密碼配置檔案
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
#非匿名登入
smtp_sasl_security_options = noanonymous
#指定認證型別 (提示:需要yum安裝cyrus-sasl-*元件,否則發郵件時會報錯:no mechanism available)
smtp_sasl_type = cyrus
#linux使用者與發件人的對應關係配置檔案
sender_canonical_maps = hash:/etc/postfix/sender_canonical
5.4.2 編輯 /etc/postfix/sasl_passwd(郵箱賬號和密碼檔案,每行一個)
[smtp.yeah.net]:25 [email protected]: YouPasswd
5.4.3 編輯 /etc/postfix/sender_canonical(linux使用者和發件人對應關係,每行一個)
root [email protected]
5.4.4 建立好後需要使用postmap命令使配置檔案生效
#postmap /etc/postfix/sasl_passwd
#postmap /etc/postfix/sender_canonical
5.4.5 重啟postfix
# systemctl restart postfix
5.4.6測試傳送郵件
# echo 'ok' | mail -s test_postfix [email protected]
5.5 重啟keepalived,重點測試VIP和郵件報警是否正常
5.5.1重啟之前檢視IP配置情況
5.5.2分別重啟keepalived,並加入開機自啟動
5.5.3 再次檢視IP情況和郵件報警情況
Mysql-01(優先順序高)
Mysql-02(優先順序低)
報警郵件可以正常傳送
可以進一步測試VIP漂移情況,這裡就不再測試。
至此mysql主主叢集+keepalived 配置全部完成,測試全部通過。
六、參考文件
https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/
https://www.2cto.com/database/201712/709263.html
https://www.cnblogs.com/alec1312/p/5815653.html
http://blog.51cto.com/zpf666/1913822