前言

上次分享了一些開發過程中常用的功能,但如果到真實環境中,其實還需要一些額外的配置,比如說跨域、快取、配置SSL證書、高可用等,老規矩,還是挑幾個平時比較常用的進行演示分享。上篇詳見Nginx超詳細常用功能演示,夠用啦~~~

正文

1. 跨域

跨域是因為瀏覽器同源策略的保護,不能直接執行或請求其他站點的指令碼和資料;一般我們認為的同源就是指協議、域名、埠都相同,否則就不是同源。

現在前後端分離開發已經很普遍了,跨域問題肯定少不了,但解決的方式也很多,比如JsonP、後端新增相關請求頭等;很多時候,不想改動程式碼,如果用到nginx做代理伺服器,那就可以輕鬆配置解決跨域問題。

1.1 環境準備

需要準備兩個專案,一個前端專案釋出在80埠上,一個API專案釋出在5000埠上,這裡需要在阿里雲的安全組中將這兩個埠開放;

  • API專案環境(對外是5000埠)

    API介面還是使用上次演示的專案,很簡單,過程我就不再重複上圖啦,直接來兩張重要的;

    配置nginx反向代理,然後執行看效果:

  • 前端環境(對外是80埠)

    前端頁面(kuayu.html)

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <title>跨域測試</title>
    5. <script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
    6. <script type="text/javascript">
    7. $(document).ready(function(){
    8. // 點選按鈕 請求資料,
    9. $("#b01").click(function(){
    10. // 請求資料
    11. htmlobj=$.ajax({url:"http://47.113.204.41:5000/weatherforecast/getport",async:false});
    12. // 將請求的資料顯示在div中
    13. $("#myDiv").html(htmlobj.responseText);
    14. });
    15. });
    16. </script>
    17. </head>
    18. <body>
    19. <h2>獲取結果</h2>
    20. <div id="myDiv">結果顯示</div>
    21. <button id="b01" type="button">GetPort</button>
    22. </body>
    23. </html>

    將kuayu.html通過xFtp拷貝到伺服器上,對應的static目錄是自己建立的,如下圖:

  • nginx配置及執行測試

    配置nginx,在原有配置檔案中再新增一個server塊,如下配置:

    執行測試:

    跨域問題出現了,現在前後端都不想改程式碼,要幹架嗎?nginx說:和諧,一定要和諧~~~

1.2 配置跨域及執行

在API的server中進行跨域配置,如下:

重啟nginx之後,再測試,看看搞定了沒?

2. 配置SSL證書

現在的站點幾乎都是https了,所以這個功能必須要實操一把;為了更符合真實線上場景,我特意準備了域名和證書,真真實實在阿里雲伺服器上演示; 這裡需要登入到阿里雲上購買域名,然後根據域名申請免費的SSL證書,最後進行配置使用,詳情如下:

2.1 準備域名

這裡我註冊了一個域名為:codezyq.cn;下面先說說註冊域名的流程:

  • 登入阿里雲,找到域名註冊入口

  • 進入到一個頁面,然後輸入需要註冊的域名

  • 然後就出現搜尋結果,如果被註冊就會提示,可以選擇其他型別或更換域名

  • 買了域名之後,需要進行實名認證,個人上傳身份證就完事啦,一會就實名完成; 完成之後就需要配置域名解析,即解析到自己的雲伺服器上,後續通過域名才可以訪問;

  • 測試是否能解析成功,直接在自己電腦上ping一下域名,看看是否解析到指定IP即可,簡單直接;這樣域名就可以用啦~~~

2.2 準備證書

免費證書這塊的申請需要用到買的域名,大概步驟如下:

  • 領取免費證書數量(20個)

  • 進入SSL證書(應用安全頁面)進行證書建立

  • 進行證書申請,即繫結域名

    填寫申請資訊,如下:

    這裡一般填完申請資訊,後續驗證那塊直接過也能簽發,列表狀態如下:

  • 簽發完成之後,下載對應伺服器的證書即可,點選下載選擇

    直接下載下來一會配置使用。

2.3 nginx配置證書
  • 檢查環境

    檢查埠是否可訪問

    https需要443埠,所以在阿里雲中將443埠加入到安全組中,如下圖:

    另外還需要檢視雲伺服器的防火牆有沒有開放對應的埠,如下命令:

    1. # 檢視防火牆埠開放情況
    2. firewall-cmd --list-all
    3. public
    4. target: default
    5. icmp-block-inversion: no
    6. interfaces:
    7. sources:
    8. services: dhcpv6-client ssh
    9. # 顯示的結果沒有開放443埠
    10. ports: 80/tcp 22/tcp 5000/tcp 3306/tcp 6379/tcp
    11. # 將443埠加入到裡面
    12. firewall-cmd --zone=public --add-port=443/tcp --permanent
    13. # 重新載入
    14. firewall-cmd --reload
    15. # 再看防火牆埠開放情況
    16. firewall-cmd --list-all
    17. public
    18. target: default
    19. icmp-block-inversion: no
    20. interfaces:
    21. sources:
    22. services: dhcpv6-client ssh
    23. # 443埠加入進來了
    24. ports: 80/tcp 22/tcp 5000/tcp 3306/tcp 6379/tcp 8080/tcp 443/tcp

    檢查nginx中是否包含http_ssl_module模組

    在配置證書之前需要檢查一下nginx中是否已經包含http_ssl_module:

    如果沒有就算配置了也不能用,如下:

  • 為nginx加上http_ssl_module

    需要下載一個原始碼進行引入,這裡還是使用版本1.18.0,具體步驟如下:

    第一步,先準備環境,比如支援編譯、openssl等,執行以下命令:

    1. # 安裝對應的包
    2. yum -y install gcc openssl openssl-devel pcre-devel zlib zlib-devel

    第二步,下載對應版本原始碼到usr/local/src中,並進行解壓,執行以下命令

    1. # 下載指定版本nginx包
    2. wget http://nginx.org/download/nginx-1.18.0.tar.gz
    3. # 解壓
    4. tar -zxvf nginx-1.18.0.tar.gz

    第三步,進入解壓目錄中,配置http_ssl_module,命令如下:

    1. # 進入解壓目錄
    2. cd nginx-1.18.0
    3. # 加入http_ssl_module
    4. ./configure --prefix=/usr/local/nginx --with-http_ssl_module

    第四步,編譯,在解壓目錄中直接執行make命令即可

    1. # 執行make命令,在當前目錄就會新增新目錄objs
    2. make
    3. # 如果是新安裝nginx,執行以下命令
    4. # make&make install

    如果沒報錯,就編譯出最新的啦; 這裡我在實操的時候,先執行的./configure 配置命令,然後再執行第一步的命令,所以導致make的時候老是不成功,這裡解決方案是在新增http_ssl_module模組時,同時指定了openssl原始碼路徑(直接下載即可),然後再執行make命令就成功了。命令如下:

    1. # 指定openssl原始碼路徑 需要下載
    2. ./configure --prefix=/usr/local/nginx --with-openssl=/usr/src/openssl-1.1.1d --with-http_ssl_module
    3. # 再執行make命令編譯
    4. make

    第五步,將編譯出來新的nginx檔案替換原有的nginx檔案,操作如下:

  • 在nginx配置SSL的支援

    還記得獲取下載證書的時候嗎,下載介面那有一個幫助操作,點選就有nginx配置SSL證書的詳細步驟,如下圖:

    這裡演示配置的內容如下(新增一個server塊,專門配置SSL的):

    1. server {
    2. # https 監聽的是443埠
    3. listen 443 ssl;
    4. # 指定準備好的域名
    5. server_name codezyq.cn;
    6. # 指定證書路徑,這裡需要把準備好的證書放到此目錄
    7. ssl_certificate /usr/local/nginx/myssl/codezyq.cn.pem;
    8. ssl_certificate_key /usr/local/nginx/myssl/codezyq.cn.key;
    9. ssl_session_cache shared:SSL:1m;
    10. # 超時時間
    11. ssl_session_timeout 5m;
    12. # 表示使用的加密套件的型別
    13. ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    14. # 表示使用的TLS協議的型別
    15. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    16. ssl_prefer_server_ciphers on;
    17. location /www/ {
    18. root static;
    19. index index.html index.htm;
    20. }
    21. }
  • 重啟nginx,然後進行https訪問對應的連線就可以啦

    注:網站如果沒有備案,會被攔截,會導致不能訪問,正規站點都是要備案的

3. 防盜鏈配置

盜鏈通俗一點的理解就是別人的網站使用自己伺服器的資源,比如常見的在一個網站引入其他站點伺服器的圖片等資源,這樣被盜鏈的伺服器頻寬等資源就會額外被消耗,在一定程度上會損害被盜鏈方的利益,所以防盜鏈是必要的;這裡通過nginx簡單實現靜態資源防盜鏈的案例,原理很簡單,就是判斷一下請求源是否被允許。

3.1 準備一個html和圖片

將準備的html和圖片放在建立的static目錄下,如下圖:

anti-stealing-link.html內容如下

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>anti-stealing-link test</title>
  5. </head>
  6. <body>
  7. <h2>使用雲伺服器上的圖片</h2>
  8. <!-- 訪問伺服器圖片 -->
  9. <img src="http://47.113.204.41/img/test.jpg" alt="">
  10. </body>
  11. </html>
3.2 正常配置nginx
  1. server {
  2. listen 80;
  3. server_name 47.113.204.41;
  4. # 針對html訪問的匹配規則
  5. location /www/ {
  6. root static;
  7. index index.html index.htm;
  8. }
  9. # 針對圖片訪問的匹配規則
  10. location /img/ {
  11. root static;
  12. }
  13. charset utf-8;
  14. }

執行起來看效果:

現在有個需求,只能是雲伺服器的html才能使用圖片,其他引用源都認為是盜鏈,直接返回403或重寫到固定圖片。

3.3 輕鬆配置nginx防盜鏈

針對img配置如下:

  1. server {
  2. listen 80;
  3. server_name 47.113.204.41;
  4. # 針對html訪問的匹配規則
  5. location /www/ {
  6. root static;
  7. index index.html index.htm;
  8. }
  9. # 針對圖片訪問的匹配規則
  10. location /img/ {
  11. root static;
  12. #對源站點的驗證,驗證IP是否是47.113.204.41
  13. #可以輸入域名,多個空格隔開
  14. valid_referers 47.113.204.41;
  15. #非法引入會進入下方判斷
  16. if ($invalid_referer) {
  17. #這裡返回403,也可以rewrite到其他圖片
  18. return 403;
  19. }
  20. }
  21. charset utf-8;
  22. }

重啟nginx,清除快取再試:

防盜鏈是不是很簡單,也可以通過程式碼的形式,比如在過濾器或管道中也可以實現,如果沒有特殊需求,nginx稍微一配置就能實現,豈不美哉~~~

4. 隱藏版本資訊

之前在專案中做滲透測試時,其中有一項問題就是不希望在響應頭中體現伺服器相關版本,避免在某些版本出現漏洞時,攻擊者可以特意針對此版本進行惡意攻擊,從而影響系統服務可用性。

現有情況:

頁面找不到時:

看看nginx是如何關閉,如下配置:

看效果:

正常訪問

找不到報錯,版本也沒有啦

5. 高可用配置

儘管nginx效能再強,但伺服器和網路有很多因素是不可控的,如:網路抖動、網路不通、伺服器宕機等情況,都會導致服務不可用(可理解為單點故障),這樣的系統體驗肯定得不到好評;如果當一個伺服器宕機或服務掛掉時,另外一臺伺服器自動代替宕機伺服器提供服務,保證系統的正常執行,這就實現了高可用;這裡nginx實現高可用的方式和Redis的主從模式很相似,只是nginx使用的是keepalived來實現高可用叢集。

5.1 keepalived簡介

keepalived實現高可用的關鍵思路還是主、備節點的來回切換;

  • 首先需要配置一個VIP(虛擬IP),用於提供訪問的介面地址,剛開始是在主節點上的;
  • 當主節點發生故障時,VIP就漂移到備節點,由備節點提供服務;
  • 如果主節點恢復,會通知備節點健康狀態,VIP就會漂移到主節點;

由上可見,在keepalive實現高可用時,肯定要有機制選擇主備節點,主備之間肯定要互相通知,不然咋知道節點之間的健康狀態,所以就使用了VRRP協議,目的就是為了解決靜態路由的單點故障。

VRRP協議,全稱Virtual Router Redundancy Protocol(虛擬路由冗餘協議),利用IP多播的方式實現通訊;通過競選協議機制(根據配置的優先順序來競選)來將路由任務交給某臺VRRP路由器,保證服務的連續性;

理論先了解這麼多,先來把keepalived安裝上,

方式一

執行以下命令可直接安裝:

  1. # 安裝,這種直接安裝完成了,修改配置檔案啟動即可
  2. yum install-y keepalived
  3. # 啟動
  4. systemctl start keepalived.service

這種方式可能會遇到啟動keepalived的時候報錯,原因可能是服務配置檔案(/usr/lib/systemd/system/keepalived.service)指定的keepalived相關目錄找不到; 如果檔案目錄都正常,還報錯,我折騰了好久,後來用原始碼方式進行安裝就正常啦~~~

方式二

建議使用原始碼的形式進行安裝,大概步驟如下:

第一步,環境準備

  1. # 安裝對應的依賴包
  2. yum -y install gcc openssl openssl-devel pcre-devel zlib zlib-devel

第二步,下載並解壓原始碼包

  1. # 在/usr/local/src目錄下執行,下載到該目錄
  2. wget https://www.keepalived.org/software/keepalived-2.0.18.tar.gz
  3. # 解壓
  4. tar -zxvf keepalived-2.0.18.tar.gz

第三步,安裝

  1. # 進入到解壓出來的目錄
  2. cd keepalived-2.0.18
  3. # 編譯並安裝
  4. ./configure && make && make install

第四步,建立啟動檔案,即將編譯出來的檔案拷貝到對應的目錄下

  1. cp -a /usr/local/etc/keepalived /etc/init.d/
  2. cp -a /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
  3. cp -a /usr/local/sbin/keepalived /usr/sbin/

第五步,建立配置檔案

  1. # 先建立配置檔案存放的目錄
  2. mkdir /etc/keepalived
  3. # 再將建立好的配置檔案通過xFtp傳到此目錄,也可以直接在這裡建立

配置檔名為keepalived.conf,內容如下:

  1. ! Configuration File for keepalived
  2. global_defs {
  3. # 每臺機器的唯一標識
  4. router_id 31
  5. }
  6. # vrrp例項,可以配置多個
  7. vrrp_instance VI_1 {
  8. # 標識為主節點,如果是被節點,就為BACKUP
  9. state MASTER
  10. # 網絡卡名稱,通過ip addr 命令可以看到對應網絡卡,需要哪個就配置哪個就行
  11. interface enp0s8
  12. # 路由ID,主、備節點的id要一樣
  13. virtual_router_id 3
  14. # 優先順序,主節點的優先順序要大於備節點的優先順序
  15. priority 200
  16. # 主備心跳檢測,間隔時間為1s
  17. advert_int 1
  18. # 認證方式,主備節點要一致
  19. authentication {
  20. auth_type PASS
  21. auth_pass 123456
  22. }
  23. virtual_ipaddress {
  24. # 虛擬IP
  25. 192.168.30.108
  26. }
  27. }

第六步,啟動

  1. # 啟動
  2. systemctl start keepalived.service
  3. # 檢視虛擬IP情況
  4. ip addr

檢視效果如下,虛擬ip正常在master節點上:

安裝完keepalived和nginx之後就可以進行主備演示啦~~~

5.2 主備演示

這裡用了兩臺虛擬機器,結構如下:

  • 第一步nginx配置準備

    這裡用到的就是nginx預設配置,基本沒咋改,如果要了解配置檔案詳情,點選(Nginx超詳細常用功能演示,夠用啦~~~)有詳細說明。兩臺虛擬機器配置的nginx.conf內容如下:

    1. #user nobody;
    2. worker_processes 1;
    3. events {
    4. worker_connections 1024;
    5. }
    6. http {
    7. include mime.types;
    8. default_type application/octet-stream;
    9. sendfile on;
    10. keepalive_timeout 65;
    11. #gzip on;
    12. server {
    13. # 需要防火牆開放80埠
    14. listen 80;
    15. server_name localhost;
    16. location / {
    17. root html;
    18. index index.html index.htm;
    19. }
    20. error_page 500 502 503 504 /50x.html;
    21. location = /50x.html {
    22. root html;
    23. }
    24. }
    25. }
  • 第二步準備html

    兩臺虛擬機器中html,用的是nginx預設的index.html(路徑:/usr/local/nginx/html),為了方便演示,在index.html中增加了個105和106的顯示標註,105機器內容如下,106機器上的html只是把內容中的105改成106即可:

  • 第三步準備兩臺虛擬機器上keepalived配置檔案(路徑:/etc/keepalived)

    105機器上keepalived.conf內容如下

    1. ! Configuration File for keepalived
    2. global_defs {
    3. # 每臺機器不一樣
    4. router_id 31
    5. }
    6. #檢測nginx服務是否在執行
    7. vrrp_script chk_nginx {
    8. #使用指令碼檢測
    9. script "/usr/local/src/chk_nginx.sh"
    10. #指令碼執行間隔,每2s檢測一次
    11. interval 2
    12. #指令碼結果導致的優先順序變更,檢測失敗(指令碼返回非0)則優先順序 -5
    13. weight -5
    14. #連續2次檢測失敗才確定是真失敗
    15. fall 2
    16. #檢測到1次成功就算成功
    17. rise 1
    18. }
    19. vrrp_instance VI_1 {
    20. # vrrp例項,可以配置多個
    21. state MASTER
    22. # 網絡卡名稱,通過ip addr 命令可以看到對應網絡卡,需要哪個就配置哪個就行
    23. interface enp0s8
    24. # 路由ID,主、備節點的id要一樣
    25. virtual_router_id 3
    26. # 優先順序,主節點的優先順序要大於備節點的優先順序
    27. priority 200
    28. # 主備心跳檢測,間隔時間為1s
    29. advert_int 1
    30. # 認證方式,主備節點要一致
    31. authentication {
    32. auth_type PASS
    33. auth_pass 123456
    34. }
    35. #執行監控的服務。
    36. track_script {
    37. #引用VRRP指令碼,即在 vrrp_script 部分指定的名字。
    38. chk_nginx
    39. }
    40. virtual_ipaddress {
    41. # 虛擬IP
    42. 192.168.30.108
    43. }
    44. }

    在/usr/local/src/中準備chk_nginx.sh,keepalived和nginx沒有直接關係的,只有通過檢查nginx的執行狀態來進行高可用服務切換,chk_nginx.sh內容如下:

    然後給這個檔案增加執行許可權,命令如下:

    1. chmod +x chk_nginx.sh

    106虛擬機器上的步驟和檢測指令碼chk_nginx.sh都一樣,只是keepalived.conf內容稍微有點變動。

    106機器上keepalived.conf內容如下

    1. ! Configuration File for keepalived
    2. global_defs {
    3. # 每臺機器上不一樣
    4. router_id 32
    5. }
    6. #檢測nginx服務是否在執行
    7. vrrp_script chk_nginx {
    8. #使用指令碼檢測
    9. script "/usr/local/src/chk_nginx.sh"
    10. #指令碼執行間隔,每2s檢測一次
    11. interval 2
    12. #指令碼結果導致的優先順序變更,檢測失敗(指令碼返回非0)則優先順序 -5
    13. weight -5
    14. #連續2次檢測失敗才確定是真失敗
    15. fall 2
    16. #檢測到1次成功就算成功
    17. rise 1
    18. }
    19. vrrp_instance VI_1 {
    20. # 配置為備節點
    21. state BACKUP
    22. # ip addr 檢視對應的網絡卡名稱
    23. interface enp0s8
    24. virtual_router_id 3
    25. # 優先順序比主節點低
    26. priority 100
    27. advert_int 1
    28. authentication {
    29. auth_type PASS
    30. auth_pass 123456
    31. }
    32. #執行監控的服務
    33. track_script {
    34. #引用VRRP指令碼,即在 vrrp_script 部分指定的名字。
    35. chk_nginx
    36. }
    37. virtual_ipaddress {
    38. # 虛擬IP
    39. 192.168.30.108
    40. }
    41. }
  • 第四步分別啟動兩臺虛擬機器上的nginx和keepalived,命令如下:

    1. # 啟動nginx
    2. cd /usr/local/nginx/sbin/
    3. ./nginx
    4. # 啟動keepalived
    5. systemctl start keepalived.service
    6. # 檢視keepalived狀態,是否執行
    7. systemctl status keepalived.service

    兩臺虛擬機器都要執行

  • 第五步測試,效果如下:

    直接訪問虛擬IP就能訪問到主節點的服務啦;現在測試當主節點掛掉時,還會不會正常訪問服務,在105機器上執行如下命令:

    1. # 模擬宕機,停止keepalived
    2. systemctl stop keepalived.service
    3. # ip addr 檢視虛擬IP已經漂移到備節點上了,在備節點用ip addr 檢視

    備節點顯示,虛擬IP已經漂移過來啦~

    再用虛擬IP訪問,效果如下:

    看見已經切換到106機器上提供服務啦,這樣就實現高可用啦;

    那主節點重新恢復,虛擬IP會不會恢復回來繼續提供服務呢?

    1. # 重啟keepalived
    2. systemctl restart keepalived.service
    3. #ip addr 檢視虛擬IP情況,恢復過來啦

    繼續用虛擬IP訪問服務,又回到主服務啦,如果沒有,那可能是瀏覽器快取,因為這裡用靜態html演示,清掉快取再訪問。

5.3 多主多備演示

對於上面的主備模式,只有主節點提供服務,如果主節點不發生故障,備節點伺服器就有點資源浪費啦,這個時候多主多備不僅能合理利用資源,還得提供備用服務(根據實際需要配置),形成真正叢集提供服務。

這裡就演示一下雙主雙備的配置,思路就是在keepalived增加多個vrrp例項,105機器在vrrp例項VI_1中作為主節點,106機器作為備節點,在vrrp例項VI_2中,105機器作為備節點,106機器作為主節點,這樣就形成了互為主備的模式,資源就能很好的利用啦;其他邏輯不變,只是分別在105、106機器上加上的keepalived.conf中加上VI_2例項即可,如下:

105機器上keepalived.conf內容如下:

  1. global_defs {
  2. router_id 31
  3. }
  4. #檢測nginx服務是否在執行
  5. vrrp_script chk_nginx {
  6. #使用指令碼檢測
  7. script "/usr/local/src/chk_nginx.sh"
  8. #指令碼執行間隔,每2s檢測一次
  9. interval 2
  10. #指令碼結果導致的優先順序變更,檢測失敗(指令碼返回非0)則優先順序 -5
  11. weight -5
  12. #連續2次檢測失敗才確定是真失敗
  13. fall 2
  14. #檢測到1次成功就算成功
  15. rise 1
  16. }
  17. vrrp_instance VI_1 {
  18. state MASTER
  19. interface enp0s8
  20. virtual_router_id 3
  21. priority 200
  22. advert_int 1
  23. authentication {
  24. auth_type PASS
  25. auth_pass 123456
  26. }
  27. track_script {
  28. chk_nginx
  29. }
  30. virtual_ipaddress {
  31. 192.168.30.108
  32. }
  33. }
  34. vrrp_instance VI_2 {
  35. # VI_1是MASTER,這裡就是備節點
  36. state BACKUP
  37. interface enp0s8
  38. # 修改路由編號
  39. virtual_router_id 5
  40. # 備節點優先順序稍低
  41. priority 100
  42. advert_int 1
  43. authentication {
  44. auth_type PASS
  45. auth_pass 123456
  46. }
  47. track_script {
  48. chk_nginx
  49. }
  50. virtual_ipaddress {
  51. # 虛擬IP
  52. 192.168.30.109
  53. }
  54. }

106機器上keepalived.conf內容如下:

  1. global_defs {
  2. router_id 32
  3. }
  4. #檢測nginx服務是否在執行
  5. vrrp_script chk_nginx {
  6. #使用指令碼檢測
  7. script "/usr/local/src/chk_nginx.sh"
  8. #指令碼執行間隔,每2s檢測一次
  9. interval 2
  10. #指令碼結果導致的優先順序變更,檢測失敗(指令碼返回非0)則優先順序 -5
  11. weight -5
  12. #連續2次檢測失敗才確定是真失敗
  13. fall 2
  14. #檢測到1次成功就算成功
  15. rise 1
  16. }
  17. vrrp_instance VI_1 {
  18. state BACKUP
  19. interface enp0s8
  20. virtual_router_id 3
  21. priority 100
  22. advert_int 1
  23. authentication {
  24. auth_type PASS
  25. auth_pass 123456
  26. }
  27. track_script {
  28. chk_nginx
  29. }
  30. virtual_ipaddress {
  31. 192.168.30.108
  32. }
  33. }
  34. vrrp_instance VI_2 {
  35. # 這裡是主節點
  36. state MASTER
  37. interface enp0s8
  38. # 這裡和105機器上的VI_2中id一致
  39. virtual_router_id 5
  40. priority 200
  41. advert_int 1
  42. authentication {
  43. auth_type PASS
  44. auth_pass 123456
  45. }
  46. track_script {
  47. chk_nginx
  48. }
  49. virtual_ipaddress {
  50. # 虛擬IP
  51. 192.168.30.109
  52. }
  53. }

分別重啟兩臺機器上的keepalived,執行命令如下:

然後分別訪問虛擬ip 192.168.30.108 和192.168.30.109,都能提供對應的服務啦,這裡不截圖了。

總結

開發和生產環境比較常用的功能大概就這麼多,後續如果用得多的功能會及時和小夥伴分享哦。

這次主要遇見一些問題,小夥伴可以作為參考,彙總如下:

  • VMware虛擬機器網路問題,主機ping不通虛擬機器、虛擬機器ping不通主機、上不了外網

    這個問題折騰了兩個晚上,原因是之前的網路配置有一些問題,然後重新裝了虛擬機器,但是用單網絡卡的方式依然沒有同時解決上面的問題,最後使用兩個網絡卡的方式解決了; 一個網絡卡使用動態分配,另外一個使用靜態IP,資訊如下:

  • keepalived啟動不起來

    使用yum直接安裝的方式,可能會遇到啟動不起來的情況,排查了服務裡面配置路徑,目錄都對,依賴包也裝了還不行;最後使用原始碼方式安裝沒問題。

  • keepalived的虛擬ip主機ping不通

    這也是個棘手的問題,虛擬ip能在主、備機器之間正常漂移,就是主機ping不同虛擬IP,當前解決的措施主要步驟,如下:

    首先註釋掉keepalived.conf 中vrrp_strict ,然後重啟keepalived;

    如果還不行,就排查防火牆;

    再不行,就清arp快取

一個被程式搞醜的帥小夥,關注"Code綜藝圈",跟我一起學~~~