centos7 mysql+MHA高可用安裝


https://dzone.com/articles/consul-proxysql-and-mysql-ha?utm_medium=feed&utm_source=feedpress.me&utm_campaign=Feed:%20dzone

 https://boke.wsfnk.com/archives/537.html

https://www.aliyun.com/jiaocheng/132307.html?spm=5176.100033.2.6.51e94d54AD4NcE

https://qiniu.wsfnk.com/%E7%AC%AC12%E8%AF%BE-4%E4%BC%81%E4%B8%9A%E5%B8%B8%E8%A7%81MySQL%E6%9E%B6%E6%9E%84%E5%BA%94%E7%94%A8%E5%AE%9E%E6%88%98%E4%B9%8BMHA%E6%9E%B6%E6%9E%84.pdf

一、配置主從同步

 

1.1 本例中主從ip及端口

Master:192.168.20.50:3306

Slave1:192.168.31.3:3306 (候選master)

Slave2:192.168.31.2:3306

 

1.2、安裝mysql

wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql-community-server
systemctl start mysqld.service
grep "password" /var/log/mysqld.log
mysql -uroot -p  #登錄
ALTER USER 'root'@'localhost' IDENTIFIED BY 'My2019..';
#因為安裝了Yum Repository,以后每次yum操作都會自動更新,需要把這個卸載掉
yum -y remove mysql57-community-release-el7-10.noarch

1.3.Master配置參數

 

[mysqld]

user=mysql
pid_file               = /var/lib/mysql/mysqld.pid
socket                 = /var/lib/mysql/mysql.sock
port                    = 3306
basedir                 = /usr
datadir                 = /var/lib/mysql
tmpdir                 = /tmp
log-bin                 = master-bin
log-bin-index           = master-bin.index
server_id               = 1
innodb_log_file_size         = 256M
expire-logs-days = 1
validate_password=off #取消密碼驗證

 #mysql5.6已上的特性,開啟gtid,必須主從全開
 gtid_mode = on
 enforce_gtid_consistency = 1
 log_slave_updates = 1

 
         

#開啟半同步復制 否則自動切換主從的時候會報主鍵錯誤
plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
loose_rpl_semi_sync_master_enabled = 1
loose_rpl_semi_sync_slave_enabled = 1
loose_rpl_semi_sync_master_timeout = 5000

 

1.4.在master創建一個復制用戶

主節點:
mysql> create user repl_user; 所有主機上授權: mysql> grant replication slave on *.* to repl_user identified by 'tt123456'; mysql> flush privileges; mysql>grant all on *.* to root identified by 'my123456'; #很重要

 

1.5. Slave1 配置參數

[mysqld]


pid_file = /var/lib/mysql/mysqld.pid
socket = /var/lib/mysql/mysql.sock


basedir=/usr
port=3306
user=mysql
tmpdir= /tmp
server_id= 2
relay_log_index = slave_relay_bin.index
relay_log= slave_relay_bin
innodb_log_file_size= 256M
expire-logs-days = 1   

log-bin = mysql-bin (候選需要配)
log-bin-index = mysql-bin.index (候選需要配)
read_only=1
relay_log_purge=0   #(一主一叢不需要此項,兩從及以上建議開次參數,防止切換為成主庫的從庫自動刪除中繼日志后,無法給其他從庫應用這部分日志)

validate_password=off #取消密碼驗證

 gtid_mode = on
 enforce_gtid_consistency = 1
 log_slave_updates = 1

#開啟半同步復制 否則自動切換主從的時候會報主鍵錯誤
plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"(候選需要配)
loose_rpl_semi_sync_master_enabled = 1(候選需要配)
loose_rpl_semi_sync_slave_enabled = 1(候選需要配)
loose_rpl_semi_sync_master_timeout = 5000(候選需要配)

 

1.6.連接Master和Slave

 參考:https://blog.csdn.net/lichangzai/article/details/50423906

mysql> CHANGE MASTER TO

MASTER_HOST='192.168.31.3',
MASTER_PORT=3306,
MASTER_AUTO_POSITION=1,
MASTER_USER='repl_user',
MASTER_PASSWORD='tt123456';

#master_log_file='master-bin.000007',#5.6后不需要指定
#master_log_pos=194;


mysql> start slave;
mysql> show slave status\G;

 1.7查看半同步是否開啟

master:
mysql> show status like 'Rpl_semi_sync_master_status';
+-----------------------------+-------+
| Variable_name              | Value |
+-----------------------------+-------+
| Rpl_semi_sync_master_status | ON    |
+-----------------------------+-------+

slave:
mysql> show status like 'Rpl_semi_sync_slave_status';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON    |
+----------------------------+-------+

 

二、配置ssh公鑰互信

2.1. 本例中manager節點和node節點ip

manager:192.168.20.50

node1:192.168.20.50

node2:192.168.31.3

node3:192.168.31.2

注:manager節點可以安裝獨立的服務器上,本例為了節省機器,manager安裝在了主庫(192.168.20.50)上.

 

2.2. 配置manager和node各節點間的root用戶的ssh公鑰互信

 

在三個 mysql 節點分別執行如下操作:(三個都有,包括自己ssh自己)
ssh-keygen -t rsa 
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.20.50
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.31.2
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.31.3

 

三、安裝 MHA 包

3.1. MHA安裝

 manager和node節點安裝:

   #先安裝依賴  

      wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
      rpm -ivh epel-release-latest-7.noarch.rpm 
   yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager

   wget https://qiniu.wsfnk.com/mha4mysql-node-0.58-0.el7.centos.noarch.rpm
   rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm

manager上安裝:

    wget https://qiniu.wsfnk.com/mha4mysql-manager-0.58-0.el7.centos.noarch.rpm

   rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm

3.2、MHA Manager 端配置

   配置主配置文件

 vi /etc/mha/app1.cnf
[server default]
manager_workdir=/var/log/mha/app1
manager_log=/var/log/mha/app1/manager.log

user=root #mysql用戶
password=my123456 #mysql密碼
ssh_user=root
repl_user=repl_user
repl_password=tt123456
ping_interval=1
#master_binlog_dir= /var/lib/mysql,/var/log/mysql
#secondary_check_script=masterha_secondary_check -s 192.168.20.50 -s 192.168.31.3 -s 192.168.31.2
#master_ip_failover_script="/etc/mha/scripts/master_ip_failover"
#master_ip_online_change_script="/etc/mha/scripts/master_ip_online_change"
#report_script="/etc/mha/scripts/send_report"


[server1]#這里模塊不注釋,ssh測試會報錯,不過沒影響
hostname=192.168.20.50
port=3306
master_binlog_dir=/var/lib/mysql
candidate_master=1
check_repl_delay=0

[server2]
hostname=192.168.31.3
port=3306
master_binlog_dir=/var/lib/mysql
candidate_master=1  #如果候選master有延遲的話,relay日志超過100m,failover切換不能成功,加上此參數后會忽略延遲日志大小。
check_repl_delay=0

[server3]
hostname=192.168.31.2
port=3306
master_binlog_dir=/var/lib/mysql
ignore_fail=1  #如果這個節點掛了,mha將不可用,加上這個參數,slave掛了一樣可以用
no_master=1  #從不將這台主機轉換為master
PS:以上注釋不能寫在配置文件里,不然會報錯

 

四、運行

 4.1. 檢查SSH配置

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

4.2檢查MHA當前配置

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

 4.3啟動mha

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

4.4查看狀態

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

4.5關閉mha

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

4.6查看日志

tail -f  /etc/masterha/app1/mha_manager.log

 4.7從庫從新加入新主

 grep "CHANGE MASTER TO MASTER"  /var/log/mha/app1/manager.log | tail -1

 

 

五、Failover應用場景測試

自動failover測試

應用場景1:master dead后,MHA當時已經開啟,候選Master庫(Slave)會自動failover為Master.

          后面我的主庫改為192.168.31.3,在這機器執行:systemctl stop mysqld.service

          然后192.168.20.50執行:mysql> show master status\G;

    

        從庫機器192.168.31.2執行:mysql> show slave status\G;

        

      最后把原主庫192.168.31.3修復成一個新的slave:

#查看具體修復語句
# grep "CHANGE MASTER TO MASTER"  /etc/masterha/app1/manager.log | tail -1    CHANGE MASTER TO MASTER_HOST='192.168.20.50',MASTER_PORT=3306, MASTER_LOG_FILE='master-bin.000009', MASTER_AUTO_POSITION=1,MASTER_USER='repl_user', MASTER_PASSWORD='xxx';

mysql> CHANGE MASTER TO MASTER_HOST='192.168.20.50',MASTER_PORT=3306, MASTER_LOG_FILE='master-bin.000009', MASTER_AUTO_POSITION=1,MASTER_USER='repl_user', MASTER_PASSWORD='tt123456';

mysql>start slave;

mysql>show slave status\G;

驗證。

   

      

 

報錯

1.replicates is not defined in the configuration file!

 

masterha_check_repl --conf=/etc/masterha/app1/app1.cnf 
Thu Jan 31 11:36:27 2019 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Thu Jan 31 11:36:27 2019 - [info] Reading application default configuration from /etc/masterha/app1/app1.cnf..
Thu Jan 31 11:36:27 2019 - [info] Reading server configuration from /etc/masterha/app1/app1.cnf..
Thu Jan 31 11:36:27 2019 - [info] MHA::MasterMonitor version 0.58.
Thu Jan 31 11:36:28 2019 - [error][/usr/share/perl5/vendor_perl/MHA/ServerManager.pm, ln671] Master 192.168.20.50:3306 from w
hich slave 192.168.31.2(192.168.31.2:3306) replicates is not defined in the configuration file!
Thu Jan 31 11:36:28 2019 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln427] Error happened on checking confi
gurations.  at /usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm line 329.
Thu Jan 31 11:36:28 2019 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln525] Error happened on monitoring ser
vers.
Thu Jan 31 11:36:28 2019 - [info] Got exit code 1 (Not master dead).

解決:配置文件里面沒有manager的主機信息,添加上去。
[server1]
hostname=192.168.20.50 port=3306 master_binlog_dir=/var/lib/mysql candidate_master=1 check_repl_delay=0

2、[error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm

[error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln427] Error happened on checking confi
gurations. Argument "1  #M-dM-;M-^NM-dM-8M-\rM-eM-0M-^FM-hM-?M-^YM-eM-^OM-0M-d..." isn't numeric in numeric ge (>=) at /usr/s
hare/perl5/vendor_perl/MHA/ServerManager.pm line 1157.
Thu Jan 31 14:39:52 2019 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln525] Error happened on monitoring ser
vers.
解決:
配置文件不能有中文注釋。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM