<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Nginx + Keepalived 高可用之主從配置

          共 7320字,需瀏覽 15分鐘

           ·

          2021-03-31 20:12

          在架構(gòu)設(shè)計中,可以利用 nginx 的反向代理和負載均衡實現(xiàn)后端應(yīng)用的高可用性,同時還需要考慮Nginx的單點故障,真正做到架構(gòu)高可用性。

          主要考慮以下兩點:

          • Nginx 服務(wù)因為意外現(xiàn)象掛掉

          • 服務(wù)器宕機導(dǎo)致 Nginx 不可用

          目前主流的解決方案就是 keepalived + nginx 實現(xiàn) nginx 的故障轉(zhuǎn)移,同時做好監(jiān)控報警。在自動故障轉(zhuǎn)移的同時能通知到相關(guān)的應(yīng)用負責(zé)人檢查相關(guān)應(yīng)用,排查隱患,徹底解決問題。

          模擬環(huán)境:虛擬機 192.168.56.9  與 192.168.56.10

          192.168.56.9:安裝 nginx 主 + keepalived 主 + Tomcat 主

          192.168.56.10:安裝 nginx 備 + keepalived 備 + Tomcat 備

          虛擬IP(VIP):192.168.56.120

          Nginx 服務(wù)和 Tomcat 應(yīng)用是已經(jīng)配置好的環(huán)境,這里就不介紹相關(guān)的配置。具體可以查考以下兩篇博文:


          0x01:Keepalived 介紹及部署

          Keepalived 的功能很強大,主要檢測服務(wù)器的狀態(tài),如果有一臺 web 服務(wù)器宕機,或者工作出現(xiàn)故障,Keepalived 將檢測到,并將有故障的服務(wù)器從系統(tǒng)中剔除,同時使用其他服務(wù)器代替該服務(wù)器的工作,當(dāng)服務(wù)器工作正常后Keepalived 自動將服務(wù)器加入到服務(wù)器群中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復(fù)故障的服務(wù)器。

          CentOS 系統(tǒng)安裝 Keepalived 主要有兩種安裝方式:

          • yum 命令安裝

          • 源碼安裝

          yum 命令安裝

          yum install -y  keepalived

          該方式安裝的 keepalived 版本為 1.3.5

          使用 yum 安裝方式安裝不了最新版本的 Keepalived,可以使用以下命令卸載 Keepalived 

          yum remove keepalived

          源碼安裝

          1. 下載源碼

          官網(wǎng)地址

          https://www.keepalived.org/

          使用如下命令下載

          wget https://www.keepalived.org/software/keepalived-2.2.2.tar.gz

          2. 解壓 Keepalived

          tar -zxvf keepalived-2.2.2.tar.gz -C /usr/local

          3. 進入 Keepalived 解壓目錄

          cd keepalived-2.2.2/

          4. 編譯

          ./configure

          如在編譯過程中出現(xiàn)錯誤,可以先執(zhí)行以下命令安裝 Keepalived  所需的依賴

          yum install -y gcc openssl-devel popt-devel ipvsadm

          編譯成功的結(jié)果如下

          5. 安裝

          make && make install

          6. 將 Keepalived 安裝成 Linux 系統(tǒng)服務(wù)

          mkdir /etc/keepalived

          cp /root/keepalived-2.2.2/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

          cp /root/keepalived-2.2.2/keepalived/etc/init.d/keepalived /etc/init.d/

          cp /root/keepalived-2.2.2/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

          ln -s /usr/local/sbin/keepalived /usr/bin/

          ln -s /usr/local/sbin/keepalived /sbin/

          Keepalived 常用命令

          # 設(shè)置開機自動啟動
          systemctl enable keepalived.service
          # 取消開機自動啟動
          systemctl disable keepalived.service 
          # 啟動
          systemctl start keepalived.service
          # 停止
          systemctl stop keepalived.service
          # 重啟
          service keepalived restart
          # 狀態(tài)
          service keepalived status


          0x02:主 Keepalive 配置

          主 Keepalived 配置文件

          ! Configuration File for keepalived

          global_defs {

            notification_email {
               [email protected]
               [email protected]
               [email protected]
             }
             notification_email_from [email protected]
             smtp_server 192.168.200.1
             smtp_connect_timeout 30
             router_id nginx01  # router_id  唯一標識符
             vrrp_skip_check_adv_addr
             vrrp_stricti
             vrrp_garp_interval 0
             vrrp_gna_interval 0
          }

          vrrp_script check_nginx {  
              script "/etc/keepalived/nginx_check.sh"   #nginx服務(wù)檢查腳本
              interval 1
              weight -2
          }

          vrrp_instance VI_1 {
              state MASTER
              interface enp0s3 #指定VIP需要綁定的物理網(wǎng)卡,這里默認是eht0但是我的是enp0s3,如果報錯了就改成自己物理網(wǎng)卡名字 
              virtual_router_id 52  #默認為51  配置完發(fā)現(xiàn)主備切換有問題 更改為52 發(fā)現(xiàn)好了  原因未知
              priority 150     #主備的優(yōu)先級priority 
              advert_int 1     #檢查時間1秒
              authentication {
                  auth_type PASS
                  auth_pass 1111
              }
              track_script  {
              check_nginx
              }

              virtual_ipaddress {
                  192.168.56.120/24   #vip地址 
              }
          }

          nginx_check.sh 腳本

          #!/bin/bash

          A=`ps -C nginx --no-header | wc -l`
          if [ $A -eq 0 ];then
              /usr/local/nginx/sbin/nginx
              sleep 2
              if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
                  pkill keepalived
              fi
          fi

          添加權(quán)限

          chmod 755 nginx_check.sh

          啟動 Keepalived 

          systemctl start keepalived.service

          檢查是否啟動成功

          查看 IP 地址變[ 啟動前 ]

          查看 IP 地址變[ 啟動 ]


          0x03:備 Keepalived 配置

          同樣按照步驟 0x01 安裝 keepalived,然后按照如下步驟配置。

           Keepalived 配置文件

          ! Configuration File for keepalived

          global_defs {
             router_id NodeB
          }

          vrrp_script chk_nginx {
              script "/etc/keepalived/nginx_check.sh"
              interval 2
              weight 20
          }

          vrrp_instance VI_1 {
              state BACKUP
              interface enp0s4
              virtual_router_id 51
              priority 90
              advert_int 1
              authentication 
          {
                  auth_type PASS
                  auth_pass 1314
              }
              track_script {
                  chk_nginx
              }
              virtual_ipaddress {
                  192.168.56.120/24
              }
          }

          nginx_check.sh 腳本

          #!/bin/bash

          A=`ps -C nginx --no-header | wc -l`
          if [ $A -eq 0 ];then
              /usr/local/nginx/sbin/nginx
              sleep 2
              if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
                  pkill keepalived
              fi
          fi

          添加權(quán)限

          chmod 755 nginx_check.sh

          nginx_check.sh 腳本說明:

          腳本邏輯為檢測進程如果沒有 nginx 就嘗試啟動一次,然后 sleep 兩秒,再檢測,如果還沒有上進程就結(jié)束 keepalived 進程。這樣 VIP 就會移動到備份節(jié)點。如果 yum 安裝的 nginx,可以直接使用 nginx 命令可以啟動 nginx,如果是源碼安裝,或者需要配置下環(huán)境變量或者更改下啟動命令和絕對路徑,并測試是否能正常啟動 nginx。

          啟動 Keepalived 

          systemctl start keepalived.service

          檢查是否啟動成功

          查看 IP 地址變[ 啟動前 ]

          查看 IP 地址變[ 啟動后 ]

          另外,如果 keepalived 啟動不成功,可以在keepalived日志文件 /var/log/messages 查看是否存在配置文件的錯誤。


          0x04:驗證

          防火墻開啟vrrp

          keepalived 是基于 vrrp 做到虛擬 ip 漂移的,這里不開啟的話,主備均會認為對方掛掉了,會造成主備都能獲取到虛擬ip ( vip )

          firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent
          firewall-cmd --reload

          首先在主備服務(wù)器分別執(zhí)行 service keepalived start 開啟 keepalived

          • 通過 ip addr 命令分別查看主備兩臺機器,只有主服務(wù)器可以看到 vip

          • 在主服務(wù)器執(zhí)行 service keepalived stop 停止 keepalived

          • 通過 ip addr 命令查看備服務(wù)的 ip, 會發(fā)現(xiàn)可以看到 vip

          • 在主服務(wù)器執(zhí)行 service keepalived start ,再次啟動 keepalived

          • 通過 ip addr 命令分別查看主備兩臺機器,只有主服務(wù)器可以看到 vip

          喜歡,在看


          瀏覽 57
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  影音先锋婷婷 | 国产三级小视频 | 青娱乐国产精品 | 美女扒开嫩嫩的尿囗让人桶出白浆 | 中文字幕免费在线观看视频 |