MHA非root用戶搭建測試

来源:https://www.cnblogs.com/liyingxiao/archive/2018/09/25/9701141.html
-Advertisement-
Play Games

最近一直在瞎搬磚,最大的感觸是運維工作難做。不過廢話不多說,最近被分配了一項比較有意思的task,嘗試著非root用戶搭建MHA並測試下能否成功漂移,以下是兩天測試和文檔編寫的成果,分享給各位看客,歡迎交流學習。 測試的目的: 現行的主流搭建MHA使用的用戶是root來傳遞公鑰以及進行一些切換、摘除 ...


         最近一直在瞎搬磚,最大的感觸是運維工作難做。不過廢話不多說,最近被分配了一項比較有意思的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許可權,否則會多餘輸入密碼


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • End ...
  • 轉自: http://www.maomao365.com/?p=813 在製作 MSSQL同步工具的時候,發現由於主外鍵的約束,導致數據同步異常,所有我們需要把 讀資料庫裡面的主外鍵約束,進行批量刪除操作. 1 如何批量查詢資料庫的主外鍵? 在MSSQL2005以上版本中,系統提供一個系統視圖 sy ...
  • SQL語言對大小寫不敏感,但一般使用大。1.創建資料庫 CREATE DATABASE test; 2.授予許可權 CRANT ALL ON test.* to user(s); 3.使用指定資料庫 USE test; 4.刪除資料庫(可刪除資料庫里所有的表數據,並將其從系統中刪除) DROP DAT ...
  • 1.NosqL 非關係型資料庫,裡面包含Redis和MondoDB2.為什麼會用到關係型資料庫?因為當數據量太多,訪問人數過多的時候,在訪問關係型資料庫時會到硬碟里進行讀寫過多 這樣就會導致訪問速度很慢,伺服器壓力很大。3.這個時候,我們就可以使用非關係型資料庫,它相當於一個緩存區, 把一些經常用的 ...
  • 前幾天在看 2018 雲棲大會,來自中科院計算所的陳世敏研究員在“資料庫內核專場”做了一場《NVM在資料庫領域的研究和探索 》的報告演講。在30分鐘的演講中,其中有近10頁PPT的內容和B+Tree這種索引有關。 例如其中的兩頁 為此,將自己對索引相關的理解梳理如下: 1.什麼是索引? 索引是磁碟上 ...
  • 很久沒來更新博客,自感是一個只會搬磚的勞工,總搞些MySQL相關的資料庫實在無聊,且時不時遇到些不講道理的Dev吧,真的是心累至極,有種想回頭我也去乾開發的衝動,當個需求者有話語權要風得風,要雨得雨多帥。以上純屬個人小目標,萬一哪天實現了呢,豈不美滋滋,從此走上人生巔峰,頓覺做技術不再那麼枯燥了。 ...
  • 詳解Oracle客戶端,PL/SQL工具下載: 下載地址:http://www.oraclejsq.com/getOracle_jcjc.do?nodeid=010100114 ...
  • 簡介 大數據平臺通過將所有數據整合起來,充分分析與挖掘數據的內在價值,為業務部門提供數據平臺,數據產品與數據服務。大數據平臺接入的數據中可能包括很多用戶的隱私和敏感信息,如用戶在酒店的入住紀錄,用戶支付信息等,這些數據存在可能泄漏的風險。大數據平臺一般通過用戶認證,許可權管理以及數據加密等技術保證數據 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...