<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 高可用之主從配置

          共 7391字,需瀏覽 15分鐘

           ·

          2021-05-24 21:38

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

          主要考慮以下兩點(diǎn):

          • Nginx 服務(wù)因?yàn)橐馔猬F(xiàn)象掛掉

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

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

          模擬環(huán)境:虛擬機(jī) 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 的功能很強(qiáng)大,主要檢測(cè)服務(wù)器的狀態(tài),如果有一臺(tái) web 服務(wù)器宕機(jī),或者工作出現(xiàn)故障,Keepalived 將檢測(cè)到,并將有故障的服務(wù)器從系統(tǒng)中剔除,同時(shí)使用其他服務(wù)器代替該服務(wù)器的工作,當(dāng)服務(wù)器工作正常后Keepalived 自動(dòng)將服務(wù)器加入到服務(wù)器群中,這些工作全部自動(dòng)完成,不需要人工干涉,需要人工做的只是修復(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. 進(jìn)入 Keepalived 解壓目錄

          cd keepalived-2.2.2/

          4. 編譯

          ./configure

          如在編譯過程中出現(xiàn)錯(cuò)誤,可以先執(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è)置開機(jī)自動(dòng)啟動(dòng)
          systemctl enable keepalived.service
          # 取消開機(jī)自動(dòng)啟動(dòng)
          systemctl disable keepalived.service 
          # 啟動(dòng)
          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  唯一標(biāo)識(shí)符
             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)卡,這里默認(rèn)是eht0但是我的是enp0s3,如果報(bào)錯(cuò)了就改成自己物理網(wǎng)卡名字 
              virtual_router_id 52  #默認(rèn)為51  配置完發(fā)現(xiàn)主備切換有問題 更改為52 發(fā)現(xiàn)好了  原因未知
              priority 150     #主備的優(yōu)先級(jí)priority 
              advert_int 1     #檢查時(shí)間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

          啟動(dòng) Keepalived 

          systemctl start keepalived.service

          檢查是否啟動(dòng)成功

          查看 IP 地址變[ 啟動(dòng)前 ]

          查看 IP 地址變[ 啟動(dòng) ]


          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 腳本說明:

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

          啟動(dòng) Keepalived 

          systemctl start keepalived.service

          檢查是否啟動(dòng)成功

          查看 IP 地址變[ 啟動(dòng)前 ]

          查看 IP 地址變[ 啟動(dòng)后 ]

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


          0x04:驗(yàn)證

          防火墻開啟vrrp

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

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

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

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

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

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

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

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


          推薦閱讀:
          你管這破玩意兒叫 Token?
          一舉拿下高可用與分布式協(xié)調(diào)系統(tǒng)設(shè)計(jì)!

          一文讀懂微內(nèi)核架構(gòu)


          關(guān)號(hào)互聯(lián)網(wǎng)全棧架構(gòu)價(jià)


          瀏覽 51
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  成人久久久电影 | 色婷婷中文在线观看 | 国产精品卡一卡二卡三卡4在线 | 婷婷五月丁香激情 | 亚洲熟女乱色综合亚洲AV |