MHA架構實施(一主一從)學不會,你來打我?加油!奧利給

目錄

 

1、環境要求

2、架構工作原理

2.1架構介紹:

2.2 MHA軟件構成

3、Mysql環境搭建

3.1環境準備(主從都需要下面步驟)

3.2用戶的創建處理原始環境

3.3解壓文件,更改文件目錄

3.4設置環境變量

3.5環境目錄規劃

3.6my.cnf配置文件

3.7mysql數據庫初始化

3.8啓動數據庫2種方式

1. sys-v

2. systemd

3.9修改數據庫的密碼

4、mysql主從配置

1、主庫創建用戶(db01)

2、從庫開啓連接(db02)

5、MHA環境搭建

5.1配置關鍵程序軟連接

5.2配置各個節點互信

5.3安裝MHA軟件

1、所有節點安裝Node軟件依賴包

2、在db01主庫中創建mha需要的用戶

3、Manager軟件安裝(db02)

5.4配置文件準備(db02)

5.5狀態檢查

互信檢查

主從狀態檢查

5.6開啓HMA(db02)

開啓

檢測MHA狀態

6、MHA 的vip功能

參數

修改腳本內容

更改manager配置文件:

主庫上,手工生成第一個vip地址

重啓mha

7、 binlog server(db02)

參數:

創建必要目錄

拉取主庫binlog日誌

重啓MHA

8、郵件提醒

1. 參數

2. 準備郵件腳本

3. 修改manager配置文件,調用郵件腳本

重啓MHA

9、測試MHA

關閉主庫,看警告郵件  


1、環境要求

 

MHA實施文檔: https://download.csdn.net/download/heian_99/12548469

MHA實施軟件集合: https://download.csdn.net/download/heian_99/12548494(包含所用到的軟件)

系統:CentOS Linux release 7.4.1708 (Core)

Myssql:5.7.20

MHA:mha4mysql-manager-0.56-0.el6.noarch

           mha4mysql-node-0.56-0.el6.noarch

 

主機

IP

端口

主庫(db01

172.17.1.145

3306

從庫(db02

172.17.1.146

3306

虛擬ip(vrrp漂移)

172.17.1.100

 

2、架構工作原理

主庫宕機處理過程

1. 監控節點 (通過配置文件獲取所有節點信息)

   系統,網絡,SSH連接性

   主從狀態,重點是主庫

 

2. 選主

(1) 如果判斷從庫(position或者GTID),數據有差異,最接近於Master的slave,成爲備選主

(2) 如果判斷從庫(position或者GTID),數據一致,按照配置文件順序,選主.

(3) 如果設定有權重(candidate_master=1),按照權重強制指定備選主.

    1. 默認情況下如果一個slave落後master 100M的relay logs的話,即使有權重,也會失效.

    2. 如果check_repl_delay=0的化,即使落後很多日誌,也強制選擇其爲備選主

3. 數據補償

(1) 當SSH能連接,從庫對比主庫GTID 或者position號,立即將二進制日誌保存至各個從節點並且應用(save_binary_logs )

(2) 當SSH不能連接, 對比從庫之間的relaylog的差異(apply_diff_relay_logs)

4. Failover

將備選主進行身份切換,對外提供服務

其餘從庫和新主庫確認新的主從關係

5. 應用透明(VIP)

6. 故障切換通知(send_reprt)

7. 二次數據補償(binlog_server)

2.1架構介紹:

1主1從,master:db01   slave:db02 ):

MHA 高可用方案軟件構成

Manager軟件:選擇一個從節點安裝

Node軟件:所有節點都要安裝

2.2 MHA軟件構成

anager工具包主要包括以下幾個工具:

masterha_manger             啓動MHA

masterha_check_ssh      檢查MHA的SSH配置狀況

masterha_check_repl         檢查MySQL複製狀況

masterha_master_monitor     檢測master是否宕機

masterha_check_status       檢測當前MHA運行狀態

masterha_master_switch  控制故障轉移(自動或者手動)

masterha_conf_host      添加或刪除配置的server信息

 

Node工具包主要包括以下幾個工具:

這些工具通常由MHA Manager的腳本觸發,無需人爲操作

save_binary_logs            保存和複製master的二進制日誌

apply_diff_relay_logs       識別差異的中繼日誌事件並將其差異的事件應用於其他的

purge_relay_logs            清除中繼日誌(不會阻塞SQL線程)

3、Mysql環境搭建

 

3.1環境準備(主從都需要下面步驟)

創建目錄,上傳所需要的文件(主從都需要上傳)

[root@db01 ~]# mkdir -p /tools/mysql
[root@db01 ~]# cd  /tools/mysql
[root@db01 mysql]# scp * [email protected]:/tools/mysql/

3.2用戶的創建處理原始環境

[root@db01 ~]# rpm -qa |grep mariadb
[root@db01 ~]# yum remove mariadb-libs-5.5.56-2.el7.x86_64 -y
添加mysql用戶
 [root@db01 ~]# useradd -s /sbin/nologin mysql

3.3解壓文件,更改文件目錄

存放mysql程序目錄
[root@db01 mysql]# mkdir -p /app
解壓
[root@db01 mysql]# tar xf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz 
移動
[root@db01 mysql]# mv mysql-5.7.20-linux-glibc2.12-x86_64 /app/mysql

3.4設置環境變量


vim /etc/profile

export PATH=/app/mysql/bin:$PATH

[root@db01 ~]# source /etc/profile

[root@db01 ~]# mysql -V

mysql  Ver 14.14 Distrib 5.7.20, for linux-glibc2.12 (x86_64) using  EditLine wrapper

3.5環境目錄規劃

創建文件,並授權

[root@db01 mysql]# 
[root@db01 mysql]# mkdir -p /data/{mysql,binlog}
[root@db01 mysql]# mkdir -p /data/mysql/data
[root@db01 mysql]# chown -R mysql.mysql /app/mysql/*
[root@db01 mysql]# chown -R mysql.mysql /data/*

錯誤日誌存放

[root@db01 ~]# touch /var/log/mysql.log
[root@db01 ~]# chown mysql.mysql /var/log/mysql.log
[root@db01 ~]# ll /var/log/mysql.log
-rw-r--r-- 1 mysql mysql 0 6月  21 20:38 /var/log/mysql.log

Sock環境配置

[root@db01 data]# touch /tmp/mysql.sock
[root@db01 data]# chown mysql.mysql /tmp/mysql.sock

慢日誌(有需要可以加下面參數)

開關:
slow_query_log=1 
文件位置及名字 
slow_query_log_file=/data/mysql/slow.log
設定慢查詢時間:
long_query_time=0.1
沒走索引的語句也記錄:
log_queries_not_using_indexes

3.6my.cnf配置文件

主庫server_id=145

從庫server_id=146

[mysqld]
basedir=/data/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
#錯誤日誌
log_error=/var/log/mysql.log
log_timestamps=system
#server_id
server_id=145
port=3306
secure-file-priv=/tmp
autocommit=0
log_bin=/data/binlog/mysql-bin
binlog_format=row
#GTID
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
# 允許最大連接數
max_connections=200
# 服務端使用的字符集默認爲8比特編碼的latin1字符集
character-set-server=utf8
# 創建新表時將使用的默認存儲引擎
default-storage-engine=INNODB
[mysql]
socket=/tmp/mysql.sock
prompt=db01 [\d]>

3.7mysql數據庫初始化

[root@db01 ~]# mysqld --initialize-insecure --user=mysql --basedir=/app/mysql --datadir=/data/mysql/data

3.8啓動數據庫2種方式

1. sys-v

[root@db01 data]# cp /app/mysql/support-files/mysql.server  /etc/init.d/mysqld 
[root@db01 data]# vim /etc/init.d/mysqld 
[root@db01 data]# grep -Ev "^(#|$)" /etc/init.d/mysqld
 
basedir=/app/mysql
datadir=/data/mysql/data
………………………………………..
[root@db02 mysql]# service mysqld restart
[root@db02 mysql]# service mysqld stop
[root@db02 mysql]# service mysqld start
[root@db02 mysql]# /etc/init.d/mysqld restart
[root@db02 mysql]# /etc/init.d/mysqld stop
[root@db02 mysql]# /etc/init.d/mysqld start

2. systemd

注意: sysv方式啓動過的話,需要先提前關閉,才能以下方式登錄

cat >/etc/systemd/system/mysqld.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/app/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
EOF
[root@db02 mysql]# systemctl restart mysqld
[root@db02 mysql]# systemctl stop mysqld
[root@db02 mysql]# systemctl start mysqld

3.9修改數據庫的密碼

注意:5.8以上數據庫,需要先創用戶,授權

      5.7的數據庫,你授權時,就行給你創建用戶

(坑:在更改密碼時,要注意空格,防止密碼裏有空格,而自己沒注意

use mysql;
本地連接密碼
grant all on *.* to root@'localhost' identified by 'xdzh@2020';
同一網段可連接的root權限
grant all on *.* to root@'172.17.1.%' identified by 'xdzh@2020';
刷新權限表
flush privileges;

本地登錄測試

4、mysql主從配置

1、主庫創建用戶(db01

賬號密碼可以自己定義

grant replication slave  on *.* to repl@'172.17.1.%' identified by '123';
flush privileges;

2、從庫開啓連接(db02

執行語句,連接主庫,同步數據

change master to 
master_host='172.17.1.145',
master_user='repl',
master_password='123' ,
MASTER_AUTO_POSITION=1;

開啓從庫

start slave;

查看用戶

5、MHA環境搭建

規劃

主機

MHA軟件

主庫(db01)

Node

從庫(db02)

Node,Master

5.1配置關鍵程序軟連接

注意:一定要配置,不然後面數據庫切換會出現問題(主從都配置)

ln -s /app/mysql/bin/mysqlbinlog    /usr/bin/mysqlbinlog
ln -s /app/mysql/bin/mysql          /usr/bin/mysql

5.2配置各個節點互信

配置SSH

db01:
rm -rf /root/.ssh 
ssh-keygen
cd /root/.ssh 
mv id_rsa.pub authorized_keys
scp  -r  /root/.ssh  172.17.1.146:/root

各節點驗證:

db01:
ssh 172.17.1.145 date
ssh 172.17.1.146 date

db02:
ssh 172.17.1.145 date
ssh 172.17.1.146 date

主庫

 

從庫

5.3安裝MHA軟件

mha官網:https://code.google.com/archive/p/mysql-master-ha/

github下載地址:https://github.com/yoshinorim/mha4mysql-manager/wiki/Downloads

1、所有節點安裝Node軟件依賴包

yum install perl-DBD-MySQL -y
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

2、在db01主庫中創建mha需要的用戶

賬號密碼可以自己定義

grant all privileges on *.* to mha@'172.17.1.%' identified by 'mha';

3、Manager軟件安裝(db02)

注意:這邊如果yum安裝缺少依賴,換成阿里雲的源和epel

yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm

5.4配置文件準備(db02

創建配置文件目錄
 mkdir -p /etc/mha
創建日誌目錄
 mkdir -p /var/log/mha/app1

編輯mha配置文件

vim /etc/mha/app1.cnf

[server default]
manager_log=/var/log/mha/app1/manager        
manager_workdir=/var/log/mha/app1            
master_binlog_dir=/data/binlog       
user=mha                                   
password=mha                               
ping_interval=2
repl_password=123
repl_user=repl
ssh_user=root                               
[server1]                                   
hostname=172.17.1.145
port=3306                                  
[server2]            
hostname=172.17.1.146
port=3306

 

5.5狀態檢查

檢測repl狀態
masterha_check_repl  --conf=/etc/mha/app1.cnf 
檢測ssh狀態
masterha_check_ssh  --conf=/etc/mha/app1.cnf

檢測運行狀態
 masterha_check_status --conf=/etc/mha/app1.cnf

互信檢查

masterha_check_ssh  --conf=/etc/mha/app1.cnf

主從狀態檢查

masterha_check_repl  --conf=/etc/mha/app1.cnf

5.6開啓HMA(db02

開啓

nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover  < /dev/null> /var/log/mha/app1/manager.log 2>&1 &

檢測MHA狀態

masterha_check_status --conf=/etc/mha/app1.cnf

 

[root@db02 mysql]# masterha_check_status --conf=/etc/mha/app1.cnf

app1 (pid:17248) is running(0:PING_OK), master:172.17.1.145

[root@db02 mysql]# mysql -umha -pmha -h172.17.1.145 -e "show variables like 'server_id'"

mysql: [Warning] Using a password on the command line interface can be insecure.

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id     | 145   |

+---------------+-------+

[root@db02 mysql]# mysql -umha -pmha -h172.17.1.146 -e "show variables like 'server_id'"

mysql: [Warning] Using a password on the command line interface can be insecure.

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id     | 146   |

+---------------+-------+

6MHA 的vip功能

參數

注意:/usr/local/bin/master_ip_failover,必須事先準備好

master_ip_failover_script=/usr/local/bin/master_ip_failover

修改腳本內容

vi  /usr/local/bin/master_ip_failover
my $vip = '172.17.1.100/24';
my $key = '1';
my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";

更改manager配置文件:

vi /etc/mha/app1.cnf
添加:
master_ip_failover_script=/usr/local/bin/master_ip_failover
注意:
[root@db03 ~]# dos2unix /usr/local/bin/master_ip_failover 
dos2unix: converting file /usr/local/bin/master_ip_failover to Unix format ...
[root@db03 ~]# chmod +x /usr/local/bin/master_ip_failover

主庫上,手工生成第一個vip地址

手工在主庫上綁定vip,注意一定要和配置文件中的ethN一致,我的是eth0:1(1是key指定的值)

ifconfig ens33:1 172.17.1.100/24

重啓mha

masterha_stop --conf=/etc/mha/app1.cnf

nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &

7、 binlog server(db02)

參數:

binlogserver配置:

找一臺額外的機器,必須要有5.6以上的版本,支持gtid並開啓,我們直接用slave(db02)

vim /etc/mha/app1.cnf

[binlog1]
no_master=1
hostname= 172.17.1.146
master_binlog_dir=/data/mysql/binlog

 

創建必要目錄

mkdir -p /data/mysql/binlog

chown -R mysql.mysql /data/*

修改完成後,將主庫binlog拉過來(從000001開始拉,之後的binlog會自動按順序過來)

拉取主庫binlog日誌

cd /data/mysql/binlog     -----》必須進入到自己創建好的目錄

mysqlbinlog  -R --host=172.17.1.145 --user=mha --password=mha --raw  --stop-never mysql-bin.000001 &

注意:

拉取日誌的起點,需要按照目前從庫的已經獲取到的二進制日誌點爲起點

 

重啓MHA

masterha_stop --conf=/etc/mha/app1.cnf

nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &

8、郵件提醒

1. 參數

report_script=/usr/local/bin/send

2. 準備郵件腳本

send_report

(1)準備發郵件的腳本(上傳 email_2019-最新.zip中的腳本,到/usr/local/bin/中)

(2)將準備好的腳本添加到mha配置文件中,讓其調用

3. 修改manager配置文件,調用郵件腳本

vi /etc/mha/app1.cnf
report_script=/usr/local/bin/send

重啓MHA

masterha_stop --conf=/etc/mha/app1.cnf

nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &

9、測試MHA

關閉主庫,看警告郵件  

 

切換完後,HMA會退出,還有binlogserver

 145數據庫掛掉後,MHA自動切換IP到146上,無需人爲修改。

 

 

 

 

 

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