1. 程式人生 > >centos7.5+mysql主主叢集+keepalived+郵件報警 配置方法

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 檔案刪除掉。

下面是整個複製過程的原理圖:

1.png

 

主主同步就是兩臺機器互為主的關係,在任何一臺機器上寫入都會同步。

 

三、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

1.png

 

配置檔案說明:

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配置檔案,紅色框中的內容一定不能相同

1.png

 

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;

1.png

4.3.2 Mysql-02上操作

mysql>show master status\G;

1.png

 

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 #檢視複製功能狀態

1.png

 

注: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

1.png

 

4.4.3 測試同步情況

檢視現有資料庫情況

Mysql-01

1.png

 

Mysql-02

1.png

 

在Mysql-01上新建資料庫mysql_01,Mysql-02上新建資料庫mysql_02後,再次檢視資料庫情況

Mysql-01

1.png

Mysql-02

1.png

 

資料同步正常

 

五、配置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 {

     [email protected] 

   }

   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

1.png

 

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]

1.png

 

5.5 重啟keepalived,重點測試VIP和郵件報警是否正常

5.5.1重啟之前檢視IP配置情況

1.png

 

5.5.2分別重啟keepalived,並加入開機自啟動

1.png

 

5.5.3 再次檢視IP情況和郵件報警情況

Mysql-01優先順序高)

1.png

Mysql-02優先順序低)

1.png

 

報警郵件可以正常傳送

1.png

 

可以進一步測試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

http://blog.51cto.com/6764097/1954158

轉載:http://blog.51cto.com/lrtao2010/2288041