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 root@localhost: 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章