Keepalived高可用服務

 

第1章 Keepalived高可用服務

1.1 Keepalived介紹


 
 

Keepalived軟件起初是專爲LVS負載均衡軟件設計的,

用來管理並監控LVS集羣系統中各個服務節點的狀態,後來又加入了可以實現高可用的VRRP功能

Keepalived軟件主要是通過VRRP協議實現高可用功能的。VRRPVirtual Router Redundancy   Protocol(虛擬路由器冗餘協議)的縮寫,

VRRP出現的目的就是爲了解決靜態路由單點故障問題的,它能夠保證當個別節點宕機時,整個網絡可以不間斷地運行

 

1.2 keepalived軟件主要功能

. 管理LVS負載均衡軟件

. 實現對LVS集羣節點健康檢查功能

    . 作爲系統網絡服務的高可用功能

 

1.3 VRRP協議原理

1VRRP協議,全稱Virtual   Router Redundancy Protocol,中文名爲虛擬路由冗餘協議,VRRP的出現是爲了解決靜態路由的單點故障。

2VRRP是用過IP多播的方式(默認多播地址(224.0.0.18))實現高可用對之間通信的。

3)工作時主節點發包,備節點接包,當備節點接收不到主節點發的數據包的時候,就啓動接管程序接管主節點的資源。備節點可以有多個,通過優先級競選,但一般Keepalived系統運維工作中都是一對。

 

1.4 環境準備說明:

lb01       10.0.0.5

lb02       10.0.0.6

web01   10.0.0.8

web02   10.0.0.7

web03   10.0.0.9

web集羣服務器配置文件環境統一(web01 web02 web03 配置均一致)

      server {

          listen       80;

          server_name  bbs.etiantian.org;

          root   html/bbs;

          index  index.html index.htm;

      }

       server   {

          listen       80;

          server_name  www.etiantian.org;

          root   html/www;

          index  index.html index.htm;

      }

}

同步三臺web服務器配置:

scp -rp {www.conf,bbs.conf}   172.16.1.7:/application/nginx/conf/extra/

scp -rp {www.conf,bbs.conf}   172.16.1.9:/application/nginx/conf/extra/

 

lb01 lb02上測試web集羣服務器是否正常響應訪問請求:

curl -H host:www.etiantian.org   10.0.0.7/wuxing.html

curl -H host:bbs.etiantian.org   10.0.0.7/wuxing.html

curl -H host:www.etiantian.org   10.0.0.8/wuxing.html

curl -H host:bbs.etiantian.org   10.0.0.8/wuxing.html

curl -H host:www.etiantian.org 10.0.0.9/wuxing.html

curl -H host:bbs.etiantian.org   10.0.0.9/wuxing.html

 

nginx反向代理負載均衡集羣服務器配置文件環境統一

[root@lb01 conf]# cat nginx.conf

####lb01lb02  nginx.conf

worker_processes  1;

events {

      worker_connections  1024;

}

http {

      include       mime.types;

      default_type    application/octet-stream;

      sendfile        on;

      keepalive_timeout  65;                                               

      upstream server_pools {

        server 10.0.0.7:80;

        server 10.0.0.8:80;

        server 10.0.0.9:80;

      }

      server {

          listen 80;

           server_name www.etiantian.org;

          location / {

            proxy_pass http://server_pools;

            proxy_set_header Host $host;

            proxy_set_header X-Forwarded-For   $remote_addr;

          }

      }

      server {

          listen 80;

           server_name bbs.etiantian.org;

          location / {

            proxy_pass http://server_pools;

            proxy_set_header Host $host;

            proxy_set_header X-Forwarded-For   $remote_addr;

          }

      }

}

 

#測試訪問lb01 lb02 是否實現了負載均衡

curl -H host:www.etiantian.org   10.0.0.5/wuxing.html

curl -H host:bbs.etiantian.org   10.0.0.5/wuxing.html

curl -H host:www.etiantian.org   10.0.0.6/wuxing.html

curl -H host:bbs.etiantian.org   10.0.0.6/wuxing.html

 

 

1.5 keepalived服務部署

## 第一個里程碑:keepalived軟件安裝部署

### lb01 lb02負載服務器上均安裝

yum install -y keepalived

rpm -qa keepalived

rpm -ql keepalived

 

[root@lb01 conf]# rpm -ql keepalived

/etc/keepalived

/etc/keepalived/keepalived.conf    --- keepalived服務主配置文件

/etc/rc.d/init.d/keepalived        --- keepalived服務啓動腳本文件

 

## 第二個里程碑:進行默認配置測試

### 啓動lb01 lb02keepalived服務

/etc/init.d/keepalived start

ip addr

說明:存在默認配置虛IP地址信息

        通過抓包可以看到vrrp數據包信息

 

## 第三個里程碑:進行服務配置文件編寫

### 前提需要了解配置文件內容信息(man keepalived.conf

### 配置文件的組成部分

· GLOBAL   CONFIGURATION  ###全局定義(默認配置文件的01-13行)

· VRRPD   CONFIGURATION   ###虛擬ip的配置(默認配置文件15-30行)

· LVS CONFIGURATION     ###配置與管理lvs

 

! Configuration File for keepalived

 

global_defs {                       --- 全局配置標題

   notification_email {           --- 定義管理員郵箱信息,

     [email protected]

     [email protected]

   }

   notification_email_from   [email protected]    --- 定義利用什麼郵箱發送郵件

   smtp_server smtp.163.com       --- 定義郵件服務器信息

   smtp_connect_timeout 30        --- 定義郵件發送超時時間

   router_id oldboy01             --- (重點參數)局域網keepalived主機身份標識信息

                                         每一個keepalived主機身份標識信息唯一

}

 

vrrp_instance VI_1 {                --- vrrp協議相關配置(vip地址設置)

    state MASTER                  --- keepalived角色描述(狀態)信息,可以配置參數(MASTER BACKUP

    interface eth0                --- 表示將生成虛IP地址,設置在指定的網卡上

    virtual_router_id 51          --- 表示keepalived家族標識信息

    priority 100                  --- keepalived服務競選主備服務器優先級設置(越大越優先)

    advert_int 1                  --- 主服務組播包發送間隔時間      

    authentication {              --- 主備主機之間通訊認證機制,

        auth_type PASS            --- 採用明文認證機制

        auth_pass 1111            --- 編寫明文密碼

    }

    virtual_ipaddress {           --- 設置虛擬IP地址信息

        10.0.0.3

    }

}

 

### 搭建基礎的keepalived配置文件

#lb01

global_defs {              

     router_id LVS_01         

}

 

vrrp_instance VI_1 {

      state MASTER

      interface eth0

      virtual_router_id 51

      priority 150

      advert_int 1

      authentication {

          auth_type PASS

          auth_pass 1111

      }

      virtual_ipaddress {

       10.0.0.3

      }

}

################################################

################################################

#lb02

global_defs {

     router_id LVS_02

}

 

vrrp_instance VI_1 {

      state BACKUP

      interface eth0

      virtual_router_id 51

      priority 100

      advert_int 1

      authentication {

          auth_type PASS

          auth_pass 1111

      }

      virtual_ipaddress {

       10.0.0.3

      }

}

 

說明:主備服務器配置文件區別

        01. router_id     不同

         02. state BACKUP  不同

         03. priority      不同

說明:進行抓包觀察配置效果;並且對比兩個負載均衡服務器的配置文件

 

1.6 高可用集羣排錯思路

1) 確認lb01 lb02 訪問後端web服務是否正常

2)確認用戶分別訪問lb01 lb02 是否有問題

3)利用vip地址進行訪問相應網站

4)做好windows host文件解析

   說明:解析時,不能一個域名解析爲多個IP地址

 

1.7 keepaliver軟件腦裂概念說明

## 開啓防火牆即可模擬出腦裂的情況

/etc/init.d/iptables start

### 腦裂情況出現的原因

### 腦裂情況解決的方法

#### 製作監控腳本---lb02

報警的條件:只要lb02   上面有vip

1.lb01 掛了

2.心碎

 

#!/bin/bash

#desc: jiankong lb02 vip

if [ `ip a s eth0 |grep -c   "10.0.0.3"` == 1 ];then

     echo "baojing"

fi

 

1.8 Nginx負載均衡實現高可用

1)統一lb01 lb02 反向代理 配置文件 

####lb01    nginx.conf

worker_processes  1;

events {

      worker_connections  1024;

}

http {

      include       mime.types;

      default_type    application/octet-stream;

      sendfile        on;

      keepalive_timeout  65;

      log_format  main  '$remote_addr - $remote_user [$time_local]   "$request" '

                      '$status   $body_bytes_sent "$http_referer" '

                        '"$http_user_agent" "$http_x_forwarded_for"';                                                                     

      upstream server_pools {

          server 10.0.0.7;

          server 10.0.0.8;

          server 10.0.0.9;

      }

      server {

          listen 80;

          server_name bbs.etiantian.org;

          location / {

            proxy_pass http://server_pools;

                     proxy_set_header   Host $host;

               proxy_set_header X-Forwarded-For   $remote_addr;

          }

              access_log  logs/access_www.log  main;

             

       }

           server {

          listen 80;

          server_name www.etiantian.org;

          location / {

            proxy_pass http://server_pools;

                     proxy_set_header   Host $host;

               proxy_set_header X-Forwarded-For   $remote_addr;

          }

              access_log  logs/access_blog.log  main;

             

       }

}

2)進行測試

## 01 測試10.0.0.5 lb01服務器

curl -H Host:www.etiantian.org   10.0.0.5/nana.html

curl -H Host:bbs.etiantian.org   10.0.0.5/nana.html

## 01 測試10.0.0.6 lb01服務器

curl -H Host:www.etiantian.org   10.0.0.6/nana.html

curl -H Host:bbs.etiantian.org   10.0.0.6/nana.html

說明:通過以上測試,確認兩臺lb服務器,均可實現負載調度功能

 

3)把域名解析到 vip上面

10.0.0.3 www.etiantian.org   blog.etiantian.org bbs.etiantian.org

## 問題小結:

1.是否解析 ping

2.瀏覽器緩存

3.服務沒重啓(平滑重啓)

排錯過程:(最小化排錯)

01:利用負載服務器,在服務器上curl所有節點信息(web服務器配置有問題) --- web服務器有問題

02curl 負載均衡服務器地址,可以實現負載均衡  --- nginx反向代理有問題

03windows綁定虛擬IP,瀏覽器上進行測試        --- keepalived配置或運行有問題 DNS解析

 

keepalived日誌文件(運維能力:看日誌)

tail -f /var/log/messages

 

1.9 企業keepalived服務應用:

1.9.1 實踐案例一:更改nginx反向代理只監聽vip地址

10.0.0.3/nana.html 可以使用

10.0.0.5/nana.html  不可以使用  

10.0.0.6/nana.html  不可以使用

第一個里程碑:修改反向代理服務配置文件,只監聽vip地址

####lb01 lb02  nginx.conf   

worker_processes  1;

events {

      worker_connections  1024;

}

http {

      include       mime.types;

      default_type    application/octet-stream;

    sendfile        on;

      keepalive_timeout  65;

      log_format  main  '$remote_addr - $remote_user [$time_local]   "$request" '

                      '$status   $body_bytes_sent "$http_referer" '

                        '"$http_user_agent" "$http_x_forwarded_for"';

                                    

                                    

      upstream server_pools {

          server 10.0.0.7;

          server 10.0.0.8;

          server 10.0.0.9;

      }

 

      server {

          listen 10.0.0.3:80;

          server_name www.etiantian.org;

          location / {

            proxy_pass http://server_pools;

                     proxy_set_header   Host $host;

               proxy_set_header X-Forwarded-For   $remote_addr;

          }

              access_log  logs/access_www.log  main;

             

       }    

           server {

          listen 10.0.0.3:80;

          server_name blog.etiantian.org;

          location / {

            proxy_pass http://server_pools;

                     proxy_set_header   Host $host;

               proxy_set_header X-Forwarded-For   $remote_addr;

          }

              access_log  logs/access_blog.log  main;

             

       }

}

說明:在修改反向代理服務器配置文件監聽地址時,多個server都需要配置監聽地址,否則仍舊使用默認監聽所有

第二個里程碑:lb02上不存在vip地址,無法監聽,需要修改內核文件

[root@lb01 conf]#   /application/nginx/sbin/nginx -t

nginx: the configuration file   /application/nginx-1.10.2/conf/nginx.conf syntax is ok

nginx: [emerg] bind() to 10.0.0.3:80   failed (99: )

nginx: configuration file   /application/nginx-1.10.2/conf/nginx.conf test failed

[root@lb01 conf]# ip a s eth0

2: eth0:   <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP   qlen 1000

      link/ether 00:0c:29:27:4e:e9 brd ff:ff:ff:ff:ff:ff

      inet 10.0.0.5/24 brd 10.0.0.255 scope global eth0

      inet6 fe80::20c:29ff:fe27:4ee9/64 scope link

         valid_lft forever preferred_lft forever

[root@lb01 conf]# ###nginx 沒有辦法 監聽 本地不存在的ip地址

 

解決方法:

echo 'net.ipv4.ip_nonlocal_bind = 1'   >>/etc/sysctl.conf   ---實現監聽本地不存在的ip地址

##/etc/sysctl.conf 加上

sysctl -p

echo "1"   >/proc/sys/net/ipv4/ip_nonlocal_bind

第三個里程碑:進行測試

 

1.9.2 企業實踐案例二:讓keepalived監控nginx反向代理服務

####第一個里程碑-keepalived監控nginx條件

 1.如何nginx掛了---我如何知道nginx掛了?

 1)端口

 2)進程

 

 ps   -ef |grep nginx |grep -v grep |wc -l

 

 2.keepalived掛了  

 /etc/init.d/keepalived stop

 

 ##>    -gt    greater than 

 ##>= -ge    greater equal

 ##<    -lt    less than

 ##<= -le    less equal

 ##== -eq      equal

 ##!= -ne      no equal

####第二個里程碑-根據條件-書寫腳本

 #!/bin/bash

 #name: check_web.sh

 #desc: check nginx and kill keepalived

 if   [ `ps -ef |grep nginx |grep -v grep |wc -l` -lt 2  ];then

       /etc/init.d/keepalived stop

 Fi

####第三個里程碑-添加權限

[root@lb02 conf]# chmod +x   /server/scripts/check_web.sh

[root@lb02 conf]# ll   /server/scripts/check_web.sh

-rwxr-xr-x 1 root root 174 Mar 30 17:47   /server/scripts/check_web.sh

####第四個里程碑-測試

####第五個里程碑-放入到keepalived.conf  

####下面是lb02的配置文件  lb01上面自己修改下。

 global_defs {

     router_id LVS_02

}

 

vrrp_script check_web {

script   "/server/scripts/web_jiankong.sh"      --- 表示將一個腳本信息賦值給變量check_web

interval 2                               --- 執行監控腳本的間隔時間

weight 2                                 --- 利用權重值和優先級進行運算,從而降低主服務優先級

                                             使之變爲備服務器(建議先忽略)

}

 

/server/scripts/check_web.sh

 

 

vrrp_instance VI_1 {

      state BACKUP

      interface eth0

      virtual_router_id 51

      priority 100

      advert_int 1

      authentication {

          auth_type PASS

          auth_pass 1111

      }

      virtual_ipaddress {

       10.0.0.3/24 dev eth0 label eth0:1

      }

    track_script {

           check_web

  }

 

    $check_web

}

####第六個里程碑-測試

 

1.9.3 企業實踐案例三:keepalived多實例配置

####第一個里程碑-配置keepalived-配置雙主

####lb01

#lb01

global_defs {

     router_id LVS_01

}

vrrp_instance VI_1 {

      state MASTER

      interface eth0

      virtual_router_id 51

      priority 150

      advert_int 1

      authentication {

          auth_type PASS

          auth_pass 1111

      }

      virtual_ipaddress {

       10.0.0.3/24 dev eth0 label eth0:1

      }

}

vrrp_instance VI_2 {

      state BACKUP

      interface eth0

      virtual_router_id 52

      priority 100

      advert_int 1

      authentication {

          auth_type PASS

          auth_pass 1111

      }

      virtual_ipaddress {

       10.0.0.4/24 dev eth0 label eth0:2

      }

}

 

#lb02

global_defs {

     router_id LVS_02

}

vrrp_instance VI_1 {

      state BACKUP

      interface eth0

      virtual_router_id 51

      priority 100

      advert_int 1

      authentication {

          auth_type PASS

          auth_pass 1111

      }

      virtual_ipaddress {

       10.0.0.3/24 dev eth0 label eth0:1

      }

}

vrrp_instance VI_2 {

      state MASTER

      interface eth0

      virtual_router_id 52

      priority 150

      advert_int 1

      authentication {

          auth_type PASS

          auth_pass 1111

      }  

      virtual_ipaddress {

       10.0.0.4/24 dev eth0 label eth0:2

      }  

 

}

#########第二個里程碑-配置nginx 負載均衡

####lb01 lb02  nginx.conf

worker_processes  1;

events {

      worker_connections  1024;

}

http {

      include       mime.types;

      default_type    application/octet-stream;

      sendfile        on;

      keepalive_timeout  65;

      log_format  main  '$remote_addr - $remote_user [$time_local]   "$request" '

                      '$status   $body_bytes_sent "$http_referer" '

                      '"$http_user_agent"   "$http_x_forwarded_for"';                       

      upstream server_pools {

          server 10.0.0.7;

          server 10.0.0.8;

          server 10.0.0.9;

      }

      server {

          listen 10.0.0.3:80;

          server_name www.etiantian.org;

          location / {

            proxy_pass http://server_pools;

                     proxy_set_header   Host $host;

               proxy_set_header X-Forwarded-For   $remote_addr;

          }

              access_log  logs/access_www.log  main;

       }

           server {

          listen 10.0.0.4:80;

          server_name blog.etiantian.org;

          location / {

            proxy_pass http://server_pools;

                     proxy_set_header   Host $host;

               proxy_set_header X-Forwarded-For   $remote_addr;

          }

              access_log  logs/access_blog.log  main;

             

       }

}

#########第三個里程碑-windows hosts解析

10.0.0.3    www.etiantian.org

10.0.0.4    bbs.etiantian.org

#########第四個里程碑-瀏覽器進行測試


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章