1. 程式人生 > >MHA非root用戶搭建測試

MHA非root用戶搭建測試

chm ext row .so 數據 文件的 多余 cte plugin

最近一直在瞎搬磚,最大的感觸是運維工作難做。不過廢話不多說,最近被分配了一項比較有意思的task,嘗試著非root用戶搭建MHA並測試下能否成功漂移,以下是兩天測試和文檔編寫的成果,分享給各位看客,歡迎交流學習。

測試的目的:

現行的主流搭建MHA使用的用戶是root來傳遞公鑰以及進行一些切換、摘除、添加VIP的工作,但root用戶的權限過大,在生產上存在安全漏洞的風險,可以嘗試使用一個普通的用戶以較小的權限角色實現MHA的各項功能。

測試的環境:

1、兩臺CentOS服務器,iptables關閉,配置為8核8G內存,系統CentOS release 6.8 (Final)。服務器IP三個分別是172.16.3.190/22、172.16.3.189/22以及VIP:172.16.3.123/22

2、數據庫實例兩臺,版本保持一致為5.7.18-log MySQL Community Server (GPL)。

測試的步驟:

1、配置MHA復制集(master-slave-manager),GTID+Semi-Sync+並行復制

2、安裝MHA及基本環境配置

3、MHA健康檢查

4、MHA切換測試(手動+自動)

測試摘要:

1、傳遞公鑰的用戶都需要設置密碼且與MySQL用戶要同一組

2、傳遞公鑰的用戶要有sudo權限且能通過某一端口進行文件的傳遞

3、傳遞公鑰的用戶要有摘除、添加VIP的權限,且在線切換的腳本要更改root為傳遞公鑰的用戶

4、MHA的配置文件、目錄的屬主屬組要更改為傳遞公鑰的用戶而不是root用戶

測試的具體搭建過程:

一、配置MHA復制集

1、MHA各角色和IP劃分

MHA-Master:172.16.3.190/22,VIP:172.16.3.123/22
MHA-Backup:172.16.3.189/22
MHA-Manager:172.16.3.189/22

2、MHA的GTID+Semi-Sync +Slave-parallel

搭建復制集的過程省略,需要註意的問題是master必須確保所有的slave都能連接,包括切換後新主與舊主之間的同步連接。

GRANT SUPER, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO ‘repl‘@‘172.16.%.%‘ identified by ‘repl’;
2.1、GTID參數配置
gtid_mode=on //開啟GTID,否則就是普通的復制類型
enforce_gtid_consistency=true //強制GTID的一致性
log_slave_updates=true //slave更新是否記錄日誌
master_info_repository=table //將日誌存儲為表形式,更加安全,防止日誌信息破損
relay_log_info_repository=table //將日誌存儲為表形式,更加安全,防止日誌信息破損
2.2、Semi-Sync配置
1、在MHA的master上安裝半同步插件並開啟半同步功能
mysql> install plugin rpl_semi_sync_master soname ‘semisync_master.so‘;
mysql> install plugin rpl_semi_sync_slave soname ‘semisync_slave.so‘;
mysql> set global rpl_semi_sync_master_enabled=on ;
.2、在MHA的slave或者manager節點上安裝插件並開啟slave的半同步
mysql> install plugin rpl_semi_sync_master soname ‘semisync_master.so‘;
mysql> install plugin rpl_semi_sync_slave soname ‘semisync_slave.so‘;
mysql> set global rpl_semi_sync_slave_enabled=on ;
3、Slave-paralle配置
在MySQL實例的配置文件中都添加slave_parallel_workers=N,此處根據機器的配置使用了4個應用線程

二、安裝MHA及基本環境配置

1、在所有的節點上安裝node數據包,在manager節點上安裝manager數據包

2、編輯/etc/hosts文件,添加如下幾行內容,指定各機器在MHA的角色。

#mha config
172.16.3.190 mha_master
172.16.3.189 mha_backup
172.16.3.189 mha_manager

3、給傳遞公鑰、配置SSH登錄使用的端口,編輯SSH服務的server端、client端的配置文件,分別是/etc/ssh/sshd_config、/etc/ssh/ssh_config,修改如下行的端口為22222。server端的配置文件不要修改行PermitRootLogin no為yes,區別於傳統的搭建方法,不是用root賬號登錄。

Port 22222 #此處端口配置為傳遞互信使用的端口,預傳遞公鑰的端口是多少這裏修改為多少。

4、給傳遞公鑰的用戶設置密碼,這裏我們使用的就是mysql用戶,如果使用其他用戶還需要將這個配置互信使用的用戶加入到mysql用戶組;這個用戶還需要有sudo權限,因為MHA的切換過程中有VIP的摘除和添加過程,這個步驟要有類似root的權限進行操作,且每臺機器上都要執行。

## Allow root to run any commands anywhere

root ALL=(ALL) ALL

liyingxiao ALL=NOPASSWD: ALL

mysql ALL=NOPASSWD: ALL

5、切換用戶模式為mysql並配置機器之間的互信,可以通過id username判斷用戶行為是否是傳遞公鑰使用的用戶mysql

#mha_master上配置到mha_backup、mha_manager的無密碼登錄

[root@172-16-3-190 we_ops_admin]# su - mysql

[mysql@172-16-3-190 ~]$ ssh-keygen -t rsa

[mysql@172-16-3-190 home]$ cd /home/mysql/.ssh/[mysql@172-16-3-190 .ssh]$ cat id_rsa.pub >> authorized_keys #這裏角色復用,因此需要允許多角色自身登錄

[mysql@172-16-3-190 .ssh]$ chmod 700 /home/mysql/.ssh/

[mysql@172-16-3-190 .ssh]$ chmod 600 /home/mysql/.ssh/authorized_keys

[mysql@172-16-3-190 .ssh]$ ssh-copy-id -i id_rsa.pub ‘-p22222 [email protected]

#mha_backup、mha_manager配置到mha_master的無密碼登錄

[mysql@172-16-3-189 .ssh]$ id

uid=502(mysql) gid=502(mysql) groups=502(mysql)

[mysql@172-16-3-189 .ssh]$ ssh-keygen -t rsa

[mysql@172-16-3-189 ~]$ cd /home/mysql/.ssh/

[mysql@172-16-3-189 .ssh]$ cat id_rsa.pub >> authorized_keys

[mysql@172-16-3-189 .ssh]$ chmod 700 /home/mysql/.ssh/

[mysql@172-16-3-189 .ssh]$ chmod 600 /home/mysql/.ssh/authorized_keys

[mysql@172-16-3-189 .ssh]$ ssh-copy-id -i id_rsa.pub ‘-p22222 [email protected]

6、驗證互信,無密碼遠程登錄其他機器

#172.16.3.190驗證互信

[mysql@172-16-3-190 .ssh]$ ssh mha_backup

[mysql@172-16-3-190 .ssh]$ ssh mha_manager

#172.16.3.189驗證互信

[mysql@172-16-3-189 .ssh]$ ssh mha_master

[mysql@172-16-3-189 .ssh]$ ssh mha_backup

[mysql@172-16-3-189 .ssh]$ ssh mha_manager

7、配置manager節點的服務

7.1創建manager節點的監控用戶,確保從manager節點可以連接master、slave

mysql> grant all privileges on *.* to ‘mha_monitor‘@‘172.16.%.%‘ identified by ‘mha_monitor‘;

Query OK, 0 rows affected, 1 warning (10.12 sec)

7.2編輯MHA的配置文件,以及建立對應的工作目錄,並將這些目錄的屬主屬組更改為MySQL。如果不做更改SSH/同步檢查不會報錯,但使用其他命令和切換會報權限錯誤,建議更改屬主屬組便於後續的維護配置。

[root@172-16-3-189 ~] mkdir ‐p /etc/masterha

[root@172-16-3-189 masterha]# mkdir -p /var/log/masterha/app_3306

[root@172-16-3-189 masterha]# mkdir /opt/shells/masterha

[root@172-16-3-189 we_ops_admin]# chown -R mysql:mysql /var/log/masterha/

[root@172-16-3-189 masterha]# chown -R mysql:mysql /etc/masterha/
[root@172-16-3-189 masterha]# chown -R mysql:mysql /opt/shells/masterha/

[root@172-16-3-189 masterha]# cat /etc/masterha/app_3306.cnf #編輯MHA的配置文件

[root@172-16-3-189 masterha]# cat app_3306.cnf

[server default]

# mysql user and password

user=mha_monitor

password=mha_monitor

repl_user=repl

repl_password=repl

ssh_user=mysql

ssh_port=22222

# working directory on the manager

manager_workdir=/var/log/masterha/app_3306

# working directory on MySQL servers

remote_workdir=/var/log/masterha/app_3306

ping_interval=1

master_ip_failover_script=/opt/shells/masterha/master_ip_failover_3306

master_ip_online_change_script=/opt/shells/masterha/master_ip_online_change_script_3306

[server1]

hostname=172.16.3.190

port=3306

master_binlog_dir=/opt/app/mysql_3306/data

[server2]

hostname=172.16.3.189

port=3306

master_binlog_dir=/opt/app/mysql_3306/data

7.3編輯自動漂移和手動漂移的腳本文件並授予可執行權限,以及VIP漂移處給予sudo的權限,這裏將用戶設置為可sudo,是給予摘除和添加VIP的權限

[root@172-16-3-189 we_ops_admin]# chmod +x /opt/shells/masterha/master_ip_failover_3306

[root@172-16-3-189 we_ops_admin]# chmod +x /opt/shells/masterha/master_ip_online_change_script_3306

編輯腳本文件master_ip_failover_3306,修改如下行為:

my $ssh_start_vip = "sudo /sbin/ifconfig eth0:$key $vip;sudo /sbin/arping -I eth0:0 -c 5 -s 172.16.3.123 172.16.0.1 >/dev/null 2>&1"

編輯master_ip_online_change_script_3306修改如下行為:

my $ssh_start_vip = "sudo /sbin/ifconfig eth0:$key $vip;sudo /sbin/arping -I eth0:0 -c 5 -s 172.16.3.123 172.16.0.1 >/dev/null 2>&1"

`ssh mysql\@${new_master_host} \" $ssh_start_vip \"`; #將root用戶替換為MySQL用戶,這裏會進行SSH添加VIP

`ssh mysql\@${orig_master_host} \" $ssh_stop_vip \"`; #講root用戶替換為MySQL用戶,這裏會進行SSH摘除VIP

三、MHA健康檢查(傳遞公鑰的用戶模式下進行檢查)

1、檢查SSH免密碼登錄

[mysql@172-16-3-189 ~]$ masterha_check_ssh --conf=/etc/masterha/app_3306.cnf

2、檢查同步狀態

[mysql@172-16-3-189 ~]$ masterha_check_repl --conf=/etc/masterha/app_3306.cnf

3、檢查manager自動漂移服務是否開啟

[mysql@172-16-3-189 ~]$ masterha_check_status --conf=/etc/masterha/app_3306.cnf

四、切換測試(漂移過程及結果不做贅述,傳遞公鑰的用戶模式下進行漂移)

1、手動切換,並檢查同步狀態是否正常

[mysql@172-16-3-189 ~]$ masterha_master_switch --conf=/etc/masterha/app_3306.cnf --master_state=alive --orig_master_is_new_slave -interactive=0

2、自動切換,並查看VIP是否成功漂移

關閉master實例,發現VIP成功從master摘除並漂移到slave上

五、遇到的問題總結

1、MHA的工作目錄公鑰用戶對此沒有權限

2、摘除、添加VIP需要有sudo權限

3、在線切換的用戶要使用公鑰用戶而不是不用的root用戶

4、手動切換的過程中,使用公鑰用戶進行,不必進行sudo -s給予sudo權限,否則會多余輸入密碼

MHA非root用戶搭建測試