<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                >[info] keepalived + haproxy + mysql雙主高可用 ### **haproxy介紹** haproxy 是一個使用C語言編寫的自由及開放源代碼軟件,其提供高可用性、負載均衡,以及基于 TCP 和 HTTP 的應用程序代理。 * HAProxy 特別適用于那些負載特大的 web 站點,這些站點通常又需要會話保持或七層處理。 * HAProxy 運行在當前的硬件上,完全可以支持數以萬計的并發連接。并且它的運行模式使得它可以很簡單安全的整合進您當前的架構中, 同時可以保護你的 web 服務器不被暴露到網絡上。 * HAProxy 實現了一種事件驅動,單一進程模型,此模型支持非常大的并發連接數。多進程或多線程模型受內存限制 、系統調度器限制以及無處不在的鎖限制,很少能處理數千并發連接。事件驅動模型因為在有更好的資源和時間管理的用戶空間 (User-Space) 實現所有這些任務,所以沒有這些問題。此模型的弊端是,在多核系統上,這些程序通常擴展性較差。這就是為什么他們必須進行優化以使每個 CPU 時間片 Cycle 做更多的工作。 * 相較與 Nginx,HAProxy 更專注與反向代理,因此它可以支持更多的選項,更精細的控制,更多的健康狀態檢測機制和負載均衡算法。 * 包括 GitHub、Bitbucket、Stack Overflow、Reddit、Tumblr、Twitter 和 Tuenti 在內的知名網站,及亞馬遜網絡服務系統都使用了 HAProxy。 ### **haproxy特性** ~~~ 1. 可靠性與穩定性都非常出色,可與硬件級設備媲美。 2. 支持連接拒絕,可以用于防止 DDoS 攻擊 3. 支持長連接、短連接和日志功能,可根據需要靈活配置 4. 路由 HTTP 請求到后端服務器,基于 cookie 作會話綁定;同時支持通過獲取指定的 url 來檢測后端服務器的狀態 5. HAProxy 還擁有功能強大的 ACL 支持,可靈活配置路由功能,實現動靜分離,在架構設計與實現上帶來很大方便 6. 可支持四層和七層負載均衡,幾乎能為所有服務常見的提供負載均衡功能 7. 擁有功能強大的后端服務器的狀態監控 web 頁面,可以實時了解設備的運行狀態 ,還可實現設備上下線等簡單操作。 8. 支持多種負載均衡調度算法,并且也支持 session 保持。 9. Haproxy 七層負載均衡模式下,負載均衡與客戶端及后端的服務器會分別建立一次 TCP連接,而在四層負載均衡模式下(DR),僅建立一次 TCP 連接;七層負載均衡對負載均衡設備的要求更高,處理能力也低于四層負載均衡 ~~~ **1. haproxy 的配置文件由兩部分組成:** 1. 全局設定(global settings) 2. 對代理的設定(proxies) > 全局設定 global settings:主要用于定義 haproxy 進程管理安全及性能相關的參數 > 代理設定 proxies 共分為4段:defaults,frontend,backend,listen ~~~ proxies:代理相關的配置可以有如下幾個配置端組成 defaults:為除了 global 以外的其它配置段提供默認參數,默認配置參數可由下一個 “defaults” 重新設定。 frontend:定義一系列監聽的套接字,這些套接字可接受客戶端請求并與之建立連接。 backend:定義 “后端” 服務器,前端代理服務器將會把客戶端的請求調度至這些服務器。 listen:定義監聽的套接字和后端的服務器。類似于將 frontend 和 backend 段放在一起 所有代理的名稱只能使用大寫字母、小寫字母、數字、-(中線)、_(下劃線)、.(點號)和:(冒號)。此外,ACL 名稱會區分字母大小寫。 ~~~ ### **haproxy配置文件詳細介紹** **注:** 此處只做配置文件介紹,不做為后期負載均衡配置 ~~~cfg global log 127.0.0.1 local0 # 定義全局的 syslog 服務器,最多可定義2個,格式:log <address> <facility> [max level [min level]] chroot /var/lib/haproxy # 修改 haproxy 的工作目錄至指定的目錄并在放棄權限之前執行,保證haproxy的安全,使用配置文件默認值即可 pidfile /var/run/haproxy.pid maxconn 10000 # 設定每個haproxy進程所接受的最大并發連接數,其等同于命令行選項“-n”;“ulimit -n”自動計算的結果正是參照此參數設定的; user haproxy # 以指定的 user 運行haproxy,建議使用專用于運行 haproxy 的 user, 以免因權限問題帶來風險; group haproxy # 以指定的 group 運行haproxy,建議使用專用于運行 haproxy 的 group, 以免因權限問題帶來風險; daemon # 讓 haproxy 以守護進程的方式工作于后臺,其等同于 “-D” 選項的功能, 當然,也可以在命令行中以 “-db” 選項將其禁用; ulimit-n 100000 # 設定每進程所能夠打開的最大文件描述符數目,默認情況下其會自動進行計算,因此不推薦修改此選項;Linux默認單進程打開文件數為1024個 stats socket /var/lib/haproxy/stats level admin process 1 # 開啟一個 socket 管理接口 nbproc 12 # 指定啟動的 haproxy 進程個數,只能用于守護進程模式的 haproxy;默認只啟動一個進程, cpu-map 1 0 # 綁定 cpu,和 nbproc 數量相對。進程號從1開始,cpu 核數從0開始; cpu-map 2 1 cpu-map 3 2 cpu-map 4 3 cpu-map 5 4 cpu-map 6 5 cpu-map 7 6 cpu-map 8 7 cpu-map 9 8 cpu-map 10 9 cpu-map 11 10 cpu-map 12 11 defaults log global option tcplog # 啟用日志記錄;tcplog 請求; option dontlognull # 日志中將不會記錄空連接; retries 3 # 定義連接后端服務器的失敗重連次數 timeout connect 2s # 定義 haproxy 將客戶端請求轉發至后端服務器所等待的超時時長 timeout client 3600s # 客戶端非活動狀態的超時時長 timeout server 3600s # 客戶端與服務器端建立連接后,等待服務器端的超時時長 maxconn 10000 # 默認和前段的最大連接數,但不能超過 global 中的 maxconn 限制數 listen admin_stats # 開啟一個統計報告服務(frontend 和 backend 的組合體,監控組的名稱,按需自定義名稱) bind *:1080 # 監聽1080端口 mode http # 基于http協議 maxconn 10 stats refresh 10s # 統計頁面自動刷新時間間隔 stats uri /haproxy # url 地址 stats realm Haproxy # 統計頁面密碼框上提示文本 stats auth admin:admin # 賬號:密碼 stats hide-version # 隱藏統計報告版本信息 stats admin if TRUE # 在制定條件下開啟admin 功能 frontend haproxy # 前端應用 bind *:40000 # 端口 mode tcp # tcp 模式 default_backend tidb # 此前端對應的后端應用 backend tidb # 后端應用 balance leastconn # (leastconn :基于最少連接數 roundrobin:輪詢 source:ip 最近原則) mode tcp # tcp 模式 # acl internal_networks src 192.168.0.0/16 172.16.0.0/12 10.0.0.0/8 127.0.0.1 定義一條ACL,ACL是根據數據包的指定屬性以指定表達式計算出的true/false值。 # tcp-request content reject if ! internal_networks # option mysql-check user haproxy post-41 server tidb1 10.0.1.4:4000 check # 后端應用地址,代理將會將對應客戶端的請求轉發至這些服務器。 server tidb2 10.0.1.10:4000 check ~~~ ``` global # 全局配置 log 127.0.0.1 local0 # 定義全局的 syslog 服務器,最多可以定義兩個 chroot /var/lib/haproxy # 將當前目錄為指定目錄,設置超級用戶權限啟動進程,提高安全性 pidfile /var/run/haproxy.pid # 將 HAProxy 進程寫入 PID 文件 maxconn 4000 # 設置每個 HAProxy 進程鎖接受的最大并發連接數 user haproxy # 同 uid 參數,使用是用戶名 group haproxy # 同 gid 參數,建議專用用戶組 nbproc 40 # 啟動多個進程來轉發請求,需要調整到足夠大的值來保證 HAProxy 本身不會成為瓶頸 daemon # 讓 HAProxy 以守護進程的方式工作于后臺,等同于“-D”選項的功能。當然,也可以在命令行中用“-db”選項將其禁用。 stats socket /var/lib/haproxy/stats # 定義統計信息保存位置 defaults # 默認配置 log global # 日志繼承全局配置段的設置 retries 2 # 向上游服務器嘗試連接的最大次數,超過此值就認為后端服務器不可用 timeout connect 2s # HAProxy 與后端服務器連接超時時間,如果在同一個局域網內可設置成較短的時間 timeout client 30000s # 定義客戶端與 HAProxy 連接后,數據傳輸完畢,不再有數據傳輸,即非活動連接的超時時間 timeout server 30000s # 定義 HAProxy 與上游服務器非活動連接的超時時間 listen admin_stats # frontend 和 backend 的組合體,監控組的名稱,按需自定義名稱 bind 0.0.0.0:8080 # 配置監聽端口 mode http # 配置監控運行的模式,此處為 `http` 模式 option httplog # 表示開始啟用記錄 HTTP 請求的日志功能 maxconn 10 # 最大并發連接數 stats refresh 30s # 配置每隔 30 秒自動刷新監控頁面 stats uri /haproxy # 配置監控頁面的 URL stats realm HAProxy # 配置監控頁面的提示信息 stats auth admin:pingcap123 # 配置監控頁面的用戶和密碼 admin,可以設置多個用戶名 stats hide-version # 配置隱藏統計頁面上的 HAProxy 版本信息 stats admin if TRUE # 配置手工啟用/禁用,后端服務器(HAProxy-1.4.9 以后版本) listen tidb-cluster # 配置 database 負載均衡 bind 0.0.0.0:3390 # 配置浮動 IP 和 監聽端口 mode tcp # HAProxy 中要使用第四層的應用層 balance leastconn # 連接數最少的服務器優先接收連接。`leastconn` 建議用于長會話服務,例如 LDAP、SQL、TSE 等,而不是短會話協議,如 HTTP。該算法是動態的,對于實例啟動慢的服務器,權重會在運行中作調整。(leastconn :基于最少連接數 roundrobin:輪詢 source:ip 最近原則) server tidb-1 10.9.18.229:4000 check inter 2000 rise 2 fall 3 # 檢測 4000 端口,檢測頻率為 2000 毫秒。如果檢測出 2 次正常就認定機器已恢復正常使用,如果檢測出 3 次失敗便認定該服務器不可用。 server tidb-2 10.9.39.208:4000 check inter 2000 rise 2 fall 3 server tidb-3 10.9.64.166:4000 check inter 2000 rise 2 fall 3 ``` ### **haproxy安裝與環境配置** **前期:** 環境搭建準備: **流程:** 寫操作去找主節點192.168.244.20(master),讀的時候通過負載均衡 haproxy,在所有的從節點 192.168.244.30(slave),192.168.244.40(slave) 前面搭載負載均衡 proxy 節點,這個節點 1192.168.244.10(haproxy)就維護了所有節點的列表,當應用過來的時候只需要請求 haproxy 節點就可以了,這個節點對我們的請求內容進行分發到下面 192.168.244.30(slave),192.168.244.40(slave) 各節點,返回數據該由(haproxy) 節點返回。 | 服務器名稱 | IP | 操作系統 | 安裝服務 | | --- | --- | --- | --- | | mysql-master | 192.168.244.20 | CentOS7 | mysql | | mysql-slave1 | 192.168.244.30 | CentOS7 | mysql| | mysql-slave2 | 192.168.244.40 | CentOS7 | mysql| | mysql-haproxy| 192.168.244.10 | CentOS7 | haproxy| **1. 在 192.168.244.10 安裝haproxy負載均衡器** ``` yum install -y haproxy ``` **2. 配置haproxy配置文件,目錄:/etc/haproxy/haproxy.cfg** **2.1 haproxy 客戶端配置:** ~~~ # haproxy 客戶端 listen http_front # 配置監聽端口 bind 0.0.0.0:8100 # 配置監控運行的模式,此處為 `http` 模式 mode http # 表示開始啟用記錄 HTTP 請求的日志功能 option httplog # 配置ui 后綴 stats uri /haproxy # web界面用戶和密碼 stats auth root:0000 # 配置每隔 10 秒自動刷新監控頁面 stats refresh 10s # 啟用 stats enable ~~~ **2.1.1 訪問方式:** ip:8100/haproxy ![](https://img.kancloud.cn/89/c2/89c238a82da00cd26e649215defd0465_2157x1107.png) **2.2 192.168.244.10 haproxy 服務配置:** ~~~ # mysql 負載均衡服務 listen mysql_server # 配置監聽端口 bind 0.0.0.0:3307 # 配置監控運行的模式,此處為 `tcp` 模式 mode tcp # 日志繼承全局配置段的設置 log global # balance:基于最少連接數 roundrobin:輪詢 balance roundrobin # 服務(rise 2是2次正確認為服務器可用,fall 3是3次失敗認為服務器不可用) server mysql_server_1 192.168.244.30:3306 check inter 5s rise 2 fall 3 server mysql_server_2 192.168.244.40:3306 check inter 5s rise 2 fall 3 ~~~ **2.2.1 在 兩臺192.168.244.30(slave)192.168.244.40(slave) 添加用戶授權** ``` grant all privileges on *.* to 'wangqianshun'@'%' identified by 'wangqianshun';flush privileges; ``` ![](https://img.kancloud.cn/2c/e3/2ce3692b797129bef11e8bd06372cc76_1024x471.png) **2.2.2 直接連接 192.168.244.10(haproxy)端口:3307 進行測試** ``` mysql -uwangqianshun -pwangqianshun -h192.168.244.10 -P 3307 ``` ![](https://img.kancloud.cn/2a/72/2a72c5803c638d61c781833d7e0a5ef8_1201x365.png) **2.2.3 查看 server_id** ``` # 只要配置了不同的 server_id 多次退出重新登錄 mysql 查看 server_id 則 實現輪詢 show variables like 'server_id'; ``` ![](https://img.kancloud.cn/f2/f5/f2f5a9143dd4d11dd1fd745d0897cafd_1239x761.png) **3. 啟動/停止 haproxy** ``` # 啟動方式一:直接啟動 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg # 啟動方式二:systemd 啟動 HAProxy,默認讀取(推薦) systemctl start haproxy.service # 停止方式一: ps -ef | grep haproxy kill -9 haproxy.pid # 停止方式二:systemd 停止 haproxy(如果使用 systemd 啟動) systemctl stop haproxy.service ``` ***** ### **keepalived 是什么?** keepalived 是集群管理中保證集群高可用的一個服務軟件, 用來防止單點故障。 Keepalived的作用是檢測服務器的狀態,如果有一臺服務器宕機,或工作出現故障,Keepalived將檢測到,并將有故障的服務器從系統中剔除,同時使用其它服務器代替該服務器的工作,當服務器工作 正常后Keepalived自動將服務器加入到服務器群中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的服務器。 ***** ### **keepalived 工作原理:** keepalived 是以 VRRP 協議為實現基礎的,VRRP 全稱 Virtual Router Redundancy Protocol,即虛擬路由冗余協議。 ![](https://img.kancloud.cn/fb/52/fb52cbf82cb3b0ac62d389db70e3d9e1_435x257.png) 虛擬路由冗余協議,可以認為是實現路由器高可用的協議, 即將 N 臺提供相同功能的路由器組成一個路由器組,這個組 里面有一個 master 和多個 backup,master 上面有一個對外 提供服務的 vip(該路由器所在局域網內其他機器的默認路 由為該 vip),master 會發組播,當 backup 收不到 vrrp 包時就認為 master 宕掉了,這時就需要根據 VRRP 的優先級來選舉一個 backup 當 master。這樣的話就可以保證路由器的高 可用了。 ### **keepalived 工具安裝:** (方式一:) **1. 安裝 keepalived 需要用到 openssl** ``` yum install gcc gcc-c++ openssl openssl-devel cd /usr/local # wget -q 不顯示任何下載信息 wget -q https://www.keepalived.org/software/keepalived-1.2.18.tar.gz ``` **2. 解壓并編譯安裝** ``` tar -zxvf keepalived-1.2.18.tar.gz && cd keepalived-1.2.18 ./configure --prefix=/usr/local/keepalived make && make install ``` **3. 將 keepalived 安裝成 Linux 系統服務** 復制默認配置文件到默認路徑: ``` mkdir /etc/keepalived cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ ``` 復制 keepalived 服務腳本到默認的地址: ``` cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/ cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/ ``` **4. 設置 keepalived 服務開機啟動** ``` # 開機啟動: systemctl enable keepalived # 啟動方式一:on off reset chkconfig keepalived on # 啟動方式二: service keepalived start # 啟動方式三: systemctl start keepalived ``` ### **keepalived 工具安裝:** (方式二:) ``` yum install keepalived -y 配置文件默認地址: /etc/keepalived/keepalived.conf ``` >[info] keepalived 示例 ### **前期:** 環境搭建準備: <span style="color:red"><b> 注:</b></span> 已配置好一主二從 | 服務器名稱 | IP | 操作系統 | 安裝服務 | | --- | --- | --- | --- | | mysql-master | 192.168.244.20 | CentOS7 | mysql、keepalived | | mysql-slave1 | 192.168.244.30 | CentOS7 | mysql、keepalived | | mysql-slave2 | 192.168.244.40 | CentOS7 | mysql| ### **1. keepalived 配置文件:** **1.1 keepalived master 節點配置文件(192.168.244.20)** <span style="color:red"><b> 注:</b></span> 直接將文件內容清空 <span style="color:red"><b> 注:</b></span> 只需要修改 2 個 vip ip 和 物理機 ip 即可 <span style="color:red"><b> 注:</b></span> master 和 backup 有其他配置項不一致,請勿直接復制 master 到 backup 修改。 <span style="color:red"><b> 參數:</b></span> >nopreempt //非搶占,配合backup,防止切換后,主庫服務恢復正常后,IP 漂移過來。(master backup都設置) ![](https://img.kancloud.cn/a3/e4/a3e493d6055842ddf96271b07aada715_382x471.png) ~~~ ! Configuration File for keepalived global_defs { router_id LVS_MASTER } vrrp_sync_group VG1 { group { VI_1 } } vrrp_script haproxy_check { script "/etc/keepalived/haproxy_check.sh" # 檢測 haproxy 狀態的腳本路徑 interval 2 # 檢測時間間隔 weight 2 # 如果條件成立,權重+2 } vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 79 priority 100 advert_int 1 nopreempt authentication { auth_type PASS auth_pass 12345678 } virtual_ipaddress { # 該ip為虛擬出來的vip地址(網段內只要不沖突 隨便定義) 192.168.244.240 } track_script { haproxy_check } } # 寫VIP virtual_server,只配置本地機器 virtual_server 192.168.244.240 3306 {# 定義虛擬服務器,地址與上面的virtual_ipaddress相同 delay_loop 3 # 健康檢查時間間隔,3秒 lb_algo rr # 負載均衡調度算法:rr|wrr|lc|wlc|sh|dh|lblc lb_kind DR # 負載均衡轉發規則:NAT|DR|TUN # persistence_timeout 5 # 會話保持時間5秒,動態服務建議開啟 protocol TCP # 轉發協議protocol,一般有tcp和udp兩種 # real_server 該配置為實際物理機ip地址 以及實際物理機mysql端口 real_server 192.168.244.20 3306 { weight 1 # 權重越大負載分越大,0表示失效 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 3306 } } } ~~~ **1.2 keepalived backup 節點配置文件(192.168.244.30)** <span style="color:red"><b> 注:</b></span> 直接將文件內容清空 <span style="color:red"><b> 注:</b></span> 只需要修改 2 個 vip ip 和 物理機 ip 即可 <span style="color:red"><b> 注:</b></span> master 和 backup 有其他配置項不一致,請勿直接復制 backup 到 master 修改。 ~~~ ! Configuration File for keepalived global_defs { router_id LVS_MASTER } vrrp_sync_group VG1 { group { VI_1 } } vrrp_script haproxy_check { script "/etc/keepalived/haproxy_check.sh" # 檢測 haproxy 狀態的腳本路徑 interval 2 # 檢測時間間隔 weight 2 # 如果條件成立,權重+2 } vrrp_instance VI_1 { state BACKUP interface ens33 virtual_router_id 79 priority 90 advert_int 1 nopreempt authentication { auth_type PASS auth_pass 12345678 } virtual_ipaddress { # 該ip為虛擬出來的vip地址(網段內只要不沖突 隨便定義) 192.168.244.240 } track_script { haproxy_check } } # 寫VIP virtual_server,只配置本地機器 virtual_server 192.168.244.240 3306 {# 定義虛擬服務器,地址與上面的virtual_ipaddress相同 delay_loop 3 # 健康檢查時間間隔,3秒 lb_algo rr # 負載均衡調度算法:rr|wrr|lc|wlc|sh|dh|lblc lb_kind DR # 負載均衡轉發規則:NAT|DR|TUN # persistence_timeout 5 # 會話保持時間5秒,動態服務建議開啟 protocol TCP # 轉發協議protocol,一般有tcp和udp兩種 # real_server 該配置為實際物理機ip地址 以及實際物理機mysql端口 real_server 192.168.244.30 3306 { weight 1 # 權重越大負載分越大,0表示失效 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 3306 } } } ~~~ **1.3 haproxy 狀態檢測腳本** 1. 創建檢測日志文件 ``` mkdir -p /usr/local/keepalived/log && touch /usr/local/keepalived/log/haproxy-check.log ``` 2. 在 192.168.244.20(master)和 192.168.244.30(slave) ``/etc/keepalived/``新建:`haproxy_check.sh` <span style="color:red"><b> 注:</b></span> windows 的 sh 復制到 linux 會存在 換行符問題 ![](https://img.kancloud.cn/b6/c2/b6c26103094e60392243d7a7efcc8296_1045x402.png) ~~~sh #!/bin/bash START_HAPROXY="/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg" #haproxy啟動命令 LOG_FILE="/usr/local/keepalived/log/haproxy-check.log" # 日志文件 HAPS=`ps -C haproxy --no-header |wc -l` # 檢測haproxy的狀態,0代表未啟動,1已經啟動 date "+%Y-%m-%d %H:%M:%S" >> $LOG_FILE #在日志文件當中記錄檢測時間 echo "check haproxy status" >> $LOG_FILE # 記錄haproxy的狀態 if [ $HAPS -eq 0 ];then #執行haproxy判斷 echo $START_HAPROXY >> $LOG_FILE #記錄啟動命令 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg #啟動haproxy sleep 3 if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then echo "start haproxy failed, killall keepalived" >> $LOG_FILE killall keepalived service keepalived stop fi fi ~~~ ~~~ #!/bin/bash # 檢測 mysql 服務 /usr/bin/mysql -uroot -p'123456' -e "show status" &>/dev/null # 服務掛掉 if [ $? -ne 0 ] ;then # 直接停止 keepalived 讓其漂移 systemctl stop keepalived fi ~~~ 執行授權: ``` chmod +x /etc/keepalived/haproxy_check.sh ``` ### **2. 測試一:** **2.1 先從 192.168.244.30(backup) 啟動 keepalived 使用 ip a 查看是否存在 192.168.244.240 網卡** ``` systemctl restart keepalived ip a | grep 192.168.244.240 ``` ![](https://img.kancloud.cn/a4/f5/a4f5a22134dfa2dccb69903f5bff91ec_1151x565.png) **2.2 再從 192.168.244.20(master) 啟動 keepalived 使用 ip a 查看是否存在 192.168.244.240 網卡 存在則ip偏移過來了 則 `backup` 使用 ip a 192.168.244.240 網卡不存在** ``` systemctl restart keepalived ip a | grep 192.168.244.240 ``` ![](https://img.kancloud.cn/ac/a3/aca367092520d361407770851e423cd8_1004x425.png) ![](https://img.kancloud.cn/55/c8/55c88878d391296b207d3ec2bf0d54b0_1082x576.png) **2.3 本地通過 虛擬ip 端口:3306 直接連接 mysql 進行測試 server_id** <span style="color:green"><b>(vip 在 backup master 和外部連接都能成功)</b></span> <span style="color:red"><b>(vip 在 master backup 連接失敗 外部能夠成功)</b></span> ``` mysql -uwangqianshun -pwangqianshun -h192.168.244.240 -P 3306 ``` ### **3. 測試二:** 1. `master` 或 `backup` 停止 keepalived,查看主從切換。(ip切換)<span style="color:green"><b>(成功)</b></span> 2. 停止 `master` 上 `mysql`,查看主從切換(正常本機 keepalived 檢查到 mysql不在了,會執行 haproxy_check.sh 腳本直接 kill 掉 keepalived 進程)。<span style="color:green"><b>(成功)</b></span> ![](https://img.kancloud.cn/3c/c8/3cc835812c29f9f2146e030112315903_1071x398.png) <span style="color:red"><b> 注:</b></span> haproxy 狀態檢測腳本不執行問題,如果是使用的 `service keeplived start` 或者是 `systemctl` 方式啟動,腳本可能會不執行,可以使用`keepalived -f /etc/keepalived/keepalived.conf` 方式啟動 keepalived <span style="color:red"><b> 注:</b></span> keepalived 配置注意點 - 配置完成但是ip不生效; 1. 查看虛擬機/機器系統時間是否一致 2. virtual_router_id 路由id不對,不能沖突。可以通過 /var/log/messages 查看此錯誤。 如:server-1、server-2為一組,virtual_router_id = 51 如:server-3、server-4為一組,則 virtual_router_id 不能為 51 <span style="color:red"><b> 注:</b></span> keepalive 默認的日志寫入了 /var/log/messages下。 ### **4. 測試三:** **介紹:** > 兩臺mysql互為主從,但只有master寫,slave只負責讀。主從通過keepalive做成高可用,當master出問題,由slave接替master工作,即讀寫都在slave操作。當master恢復正常,master自動同步故障時間段數據,接替slave的寫工作。 1. master1 直接停止 mysql 使 keepalived 漂移到 backup ![](https://img.kancloud.cn/c4/31/c431093182c0db6a8f321888eee89ed0_840x145.png) ![](https://img.kancloud.cn/be/e9/bee9b2237283793b2015c40210ed274e_860x123.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看