Keepalives+lvs實現高可用httpd的雙主模型

基礎環境Centos 7.3 最小化安裝四臺 關閉防火墻及selinux

簡單原理:

keepalived是以VRRP協議為實現基礎的,VRRP全稱Virtual
Router Redundancy Protocol
,即虛擬路由冗余協議。

虛擬路由冗余協議,可以認為是實現路由器高可用的協議,即將N臺提供相同功能的路由器組成一個路由器組,這個組里面有一個master和多個backup,master上面有一個對外提供服務的vip(該路由器所在局域網內其他機器的默認路由為該vip),master會發組播,當backup收不到vrrp包時就認為master宕掉了,這時就需要根據VRRP的優先級來選舉一個backupmaster。這樣的話就可以保證路由器的高可用了。

LVSLinux Virtual
Server
的簡寫,意即linux虛擬服務器,是一個虛擬的服務器集群系統。

通過keepalives+lvs實現負載均衡及高可用。

Keepalives+lvs實現高可用httpd的雙主模型

 

主機名

IP

提供的服務

客戶機CIP

172.10.32.0

測試服務使用

lvs-1

172.10.32.1

主負載均衡器

lvs-2

172.10.32.2

備用負載均衡器

http-1

172.10.32.3

群集web1

http-2

172.10.32.4

群集web2

實驗模型為:lvs-DR模型,對外提供的虛擬IP172.10.32.200    LVS-1為主,LVS_2為備

實驗模型為:lvs-DR模型,對外提供的虛擬IP172.10.32.201  ,  LVS-1為備,LVS_2為主

 

http組:
#yum install net-tools httpd –y

#echo $ip > /var/www/html/index.html           //$ipIP地址,如httpd-1172.10.32.3

#systemctl start httpd.service

#curl $ip   //查看對應web服務是不是正常訪問

#vim web.sh

#!/bin/bash

#

vip=172.10.32.200

vic=172.10.32.201

mask=’255.255.255.255′

 

case $1 in

start)

    echo
1 > /proc/sys/net/ipv4/conf/all/arp_ignore

    echo
1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

    echo
2 > /proc/sys/net/ipv4/conf/all/arp_announce

    echo
2 > /proc/sys/net/ipv4/conf/lo/arp_announce

    ifconfig
lo:0 $vip netmask $mask broadcast $vip up

    route
add -host $vip dev lo:0

    ifconfig
lo:1 $vic netmask $mask broadcast $vic up

    route
add -host $vic dev lo:1

    ;;

stop)

    ifconfig
lo:0 down

    ifconfig
lo:1 down

    echo
0 > /proc/sys/net/ipv4/conf/all/arp_ignore

    echo
0 > /proc/sys/net/ipv4/conf/lo/arp_ignore

    echo
0 > /proc/sys/net/ipv4/conf/all/arp_announce

    echo
0 > /proc/sys/net/ipv4/conf/lo/arp_announce

    ;;

*)

    echo
“Usage $(basename $0) start|stop”

    exit
1

    ;;

esac

#bash bash start

#ifconfig //查看對外虛擬ip綁定在lo網卡上

 

Lvs組:

#yum install ipvsadm.x86_64
keepalived.x86_64 httpd.x86_64 –y

#systemctl start httpd.server

Lvs-1#vi /etc/keepalived/keepalived.conf

! Configuration File for
keepalived

 

global_defs {

   notification_email {

    root@node1.localhost.localdomain

   }

   notification_email_from
Alexandre.Cassen@firewall.loc

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id abd

   vrrp_mcast_group4 224.0.100.71

}

 

vrrp_instance web1 {

    state MASTER

    interface ens33

    virtual_router_id 88

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111ACSD

    }

    virtual_ipaddress {

    172.10.32.200
dev ens33 label ens33:0

    }

}

 

virtual_server
172.10.32.200  80 {

    delay_loop 6

    lb_algo rr

    lb_kind DR

    protocol TCP

 

    sorry_server
127.0.0.1 80

 

real_server 172.10.32.3 80 {

        weight 10

        HTTP_GET {

            url {

              path /

        status_code
200

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

real_server 172.10.32.4 80 {

        weight 10

        HTTP_GET {

            url {

              path /

                status_code 200

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

}

 

vrrp_instance web2 {

    state BACKUP

    interface ens33

    virtual_router_id 89

    priority 98

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass ANXLazsw

    }

    virtual_ipaddress {

        172.10.32.201 dev ens33 label ens33:1

    }

}

 

virtual_server
172.10.32.201  80 {

    delay_loop 6

    lb_algo rr

    lb_kind DR

    protocol TCP

       

        sorry_server 127.0.0.1 80

 

real_server 172.10.32.3 80 {

        weight 10

        HTTP_GET {

            url {

              path /

                status_code 200

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

real_server 172.10.32.4 80 {

        weight 10

        HTTP_GET {

            url {

              path /

                status_code 200

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

}

 

Lvs-2# vi /etc/keepalived/keepalived.conf

! Configuration File for
keepalived

 

global_defs {

   notification_email {

    root@node2.localhost.localdomain

   }

   notification_email_from
Alexandre.Cassen@firewall.loc

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id abd

   vrrp_mcast_group4 224.0.100.71

}

 

vrrp_instance web1 {

    state BACKUP

    interface ens32

    virtual_router_id 88

    priority 98

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111ACSD

    }

    virtual_ipaddress {

    172.10.32.200
dev ens32 label ens32:0

    }

}

 

 

virtual_server
172.10.32.200  80 {

    delay_loop 6

    lb_algo rr

    lb_kind DR

    protocol TCP

 

    sorry_server
127.0.0.1 80

 

real_server 172.10.32.3 80 {

        weight 10

        HTTP_GET {

            url {

              path /

        status_code
200

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

real_server 172.10.32.4 80 {

        weight 10

        HTTP_GET {

            url {

              path /

                status_code 200

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

 

}

 

vrrp_instance web2 {

    state MASTER

    interface ens32

    virtual_router_id 89

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass ANXLazsw

    }

    virtual_ipaddress {

        172.10.32.201 dev ens32 label ens32:1

    }

}

 

virtual_server
172.10.32.201  80 {

    delay_loop 6

    lb_algo rr

    lb_kind DR

    protocol TCP

       

        sorry_server 127.0.0.1 80

 

real_server 172.10.32.3 80 {

        weight 10

        HTTP_GET {

            url {

              path /

                status_code 200

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

real_server 172.10.32.4 80 {

        weight 10

        HTTP_GET {

            url {

              path /

                status_code 200

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

}

 

提示:兩個配置文件相差不大,但需要注意網卡名、主備模式、虛擬路由的id。

 

Lvs

#systemctl start
keepalived.service

CIP進行測試

# for i in {1..14} ; do curl
172.10.32.201 ;done

# for i in {1..14} ; do curl
172.10.32.200 ;done

查看結果是不是為web服務器組ip并輪詢

 

關閉web服務器組中一個web服務器,并運用上面命令測試,查看結果是不是顯示未關閉服務器ip地址

 

關閉lvs服務器組,并運用上面命令測試,查看結果是不是顯示為當前綁定對外虛擬ip的服務器ip

 

在關閉lvs服務器組中的一個,測試,查看結果是不是為當前綁定對外虛擬ip的服務器ip

 

然后重啟web服務器進行測試。

 

 

 

原創文章,作者:chenbin,如若轉載,請注明出處:http://www.www58058.com/75799

(1)
chenbinchenbin
上一篇 2017-05-15
下一篇 2017-05-15

相關推薦

  • rpm包管理、yum倉庫、ftp、http服務、編譯安裝

    一、軟件包管理 1.1 軟件包管理 API:Application Programming Interface  應用程序開發接口;程序員面對的編程接口 POSIX:portable operating system:可移植操作系統接口 v   程序源代碼 –> 預處理 …

    Linux干貨 2016-11-27
  • 馬哥教育網絡21期+第六周練習博客

    馬哥教育網絡21期+第六周練習博客 請詳細總結vim編輯器的使用并完成以下練習題     VIM編輯器:         vi:Visual Interface 文本編輯器    &nbsp…

    Linux干貨 2016-08-05
  • 從Linux小白到大?!c狼共舞的日子12(上)

    馬哥教育網絡班21期+第12周課程練習 1、請描述一次完整的http請求處理過程; 1)建立或處理連接:客戶端發送http請求報文,服務器端接收或拒絕請求; 2)接收請求:服務器端接收來自客戶端對某些資源的請求; 3)處理請求:服務器端解析客戶端請求報文,獲取客戶端請求的資源及請求方法等信息; 4)訪問資源:服務器端獲取客戶端請求的資源; 5)構建響應報文;…

    Linux干貨 2016-12-26
  • n25第二周

    linux文件管理類命令     mkdir,rmdir,cp,mv,rm,chwon,chmod     1.mkdir->make directories(創建目錄)     用法:    &nbsp…

    Linux干貨 2016-12-11
  • 馬哥Linux學習之查詢篇(命令查詢和文件查詢)

        Linux運維工作一般都使用命令完成,在如此多的各種命令中,要想全部記住顯然是不太可能也是不必要的,另外,文件的查找在日常操作中也是必不可少的。下面我就總結一下Linux中如何查找命令以及文件。     命令的運行文件路徑查詢。這個查找的方法是同樣是使用命令,這個命令叫w…

    Linux干貨 2015-04-13
  • mount命令使用詳解

    一、掛載(mount)初識     1.什么是掛載         將額外文件系統與根文件系統某現存的目錄建立起關聯關系,進而使得此目錄作為其它文件訪問入口的行為。     2.常用的文件系統類型 &…

    Linux干貨 2016-09-01
欧美性久久久久