1. 程式人生 > >[Linux]-構建LVS-DR模式+Keepalived高可用群集

[Linux]-構建LVS-DR模式+Keepalived高可用群集

響應 完成 init.d .cn ive spa val 通告 配置文件

Keepalived

Keepalived是一款高可用軟件,它的功能主要包括兩方面:
1)通過IP漂移,實現服務的高可用:服務器集群共享一個虛擬IP,同一時間只有一個服務器占有虛擬IP並對外提供服務,若該服務器不可用,則虛擬IP漂移至另一臺服務器並對外提供服務;
2)對LVS應用服務層的應用服務器集群進行狀態監控:若應用服務器不可用,則keepalived將其從集群中摘除,若應用服務器恢復,則keepalived將其重新加入集群中。

Keepalived可以單獨使用,即通過IP漂移實現服務的高可用,也可以結合LVS使用,即一方面通過IP漂移實現LVS負載均衡層的高可用,另一方面實現LVS應用服務層的狀態監控,如圖所示:

技術分享

Keepalived

的實現基於VRRP(Virtual Router Redundancy Protocol,虛擬路由器冗余協議),而VRRP是為了解決靜態路由的高可用。

安裝步驟大綱

客戶端:1.1.1.245/8

主LVS:1.1.1.2/8

從LVS:1.1.1.3/8

web服務器:1.1.1.5/8 lo : 1.1.1.1

web服務器:1.1.1.6/8 lo : 1.1.1.1

一、配置LVS服務器(主-從兩臺)
配置IP地址
調整響應參數(主從兩臺服務器都需要配置)

[[email protected] ~]# vim /etc/sysctl.conf
修改

# Controls IP packet forwarding
net.ipv4.ip_forward 
= 1 #開啟路由轉發功能

添加

net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0

保存退出後執行該命令立即生效

[[email protected] ~]# sysctl -p

安裝並配置ipvsadm(主從配置一樣)

掛載光盤

[[email protected] ~]# rpm -ihv /mnt/Packages/ipvsadm-1.26-2.el6.x86_64.rpm

[[email protected] ~]# rpm -ivh /media/CentOS_6.5_Final/Packages/ipvsadm-1.26-2.el6.x86_64.rpm 
warning: /media/CentOS_6.5_Final/Packages/ipvsadm-1.26-2.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing...                ########################################### [100%]
   1:ipvsadm                ########################################### [100%]

隨後啟動ipvsadm服務

service ipvsadm start

添加為系統服務

[[email protected] ~]# chkconfig --add ipvsadm
[[email protected] ~]# chkconfig ipvsadm on

配置Keepalived服務器(兩臺一樣)

先安裝Keepalive服務的依賴包(yum),後安裝Keepalived軟件(本地光盤),主從都有

yum步驟回顧

rm -rf /etc/yum.repos.d/*
vim /etc/yum.repo.d/yum.repo
#        [yum]
         name=yum install
         baseurl=file:///mnt/
         enabled=1
         gpgcheck=0       

依賴包安裝

 yum -y install kernel-devel openssl-devel popt-devel

Keepalived解壓制定路徑為 -C /usr/src

tar -zxvf keepalived-1.2.13.tar.gz -C /usr/src/
cd /usr/src/keepalived-1.2.13/

執行命令安裝

[[email protected] keepalived-1.2.13]# ./configure --prefix=/ --with-kernel-
dir=/usr/src/kernels/2.6.32-431.el6.x86_64 make && make install 

[[email protected] ~]# /etc/init.d/keepalived start #開啟keepalived服務

[[email protected] ~]# netstat -anp | grep keepalived #查看進程

[[email protected] keepalived-1.2.13]# netstat -anp | grep keepalived
raw        0      0 0.0.0.0:112                 0.0.0.0:*                   7           43771/keepalived    
raw        0      0 0.0.0.0:112                 0.0.0.0:*                   7           43771/keepalived    
raw        0      0 0.0.0.0:255                 0.0.0.0:*                   7           43770/keepalived    
raw        0      0 0.0.0.0:255                 0.0.0.0:*                   7           43770/keepalived    
unix  2      [ ]         DGRAM                    65282  43768/keepalived    

添加為系統服務就可以用service keepalived start | restart | stop 來進行操作

chkconfig --add keepalived
chkconfig keepalived on

!----------------------------------------------------兩臺一樣的操作到此為止--------------------------------------------------!

Keepalived配置文件(主服務器)

cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf_bak          #備份一份,防止誤操作

打開 vim /etc/keepalived/keepalived.conf
更改和刪除(dd刪除,1000dd刪除一千行)

global_defs {
   router_id R1     #這個路由器的名稱
}
vrrp_instance VI_1 {     #定義VRRP熱備實例
    state MASTER         #熱備狀態,MASTER表示是主機
    interface eth0       #承載VIP地址的物理接口
    virtual_router_id 1  #虛擬路由器的ID號,每個熱備組保持在一組
    priority 100         #優先級,數值越大優先級越高
    advert_int 1         #通告間隔秒數(心跳頻值)
    authentication {     #認證信息,熱備組保持一致
        auth_type PASS   #認證類型
        auth_pass 1111   #密碼字串
    }
    virtual_ipaddress {  #制定飄逸IP地址(VIP,可以有多個)
        1.1.1.1
    }
}
virtual_server 1.1.1.1 80 {
    delay_loop 15                #檢查健康時間
    lb_algo rr                   #定義調度算法
    lb_kind DR                   #定義負載均衡群集的模式
    protocol TCP
    real_server 1.1.1.5 80 {     #指定的第一個WEB服務器地址
        weight 1                 #定義權重值
        TCP_CHECK {
            connect_port 80      #檢查目標的端口
            connect_timeout 3    #鏈接超時時間
            nb_get_retry 3       #重復次數
            delay_before_retry 4 #重試間隔時間
        }
    }
    real_server 1.1.1.6 80 {     #指定的第二個WEB服務器地址
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 4
        }
    }
}

配置完後保存退出,使用 ip a 查看接口轉發狀態

[[email protected] ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:0e:05:36 brd ff:ff:ff:ff:ff:ff
    inet 1.1.1.2/8 brd 1.255.255.255 scope global eth0
    inet 1.1.1.1/32 scope global eth0
    inet6 fe80::20c:29ff:fe0e:536/64 scope link 
       valid_lft forever preferred_lft forever

Keepalived配置文件(從服務器)

global_defs {
   router_id R2               #名稱更變
}
vrrp_instance VI_1 {
    state BACKUP              #從服務器
    interface eth1            #我這個出去的網阿卡是eth1,一般是eth0
    virtual_router_id 1       #保持一組
    priority 99               #優先級要低於主服務器
    advert_int 1              !-----其余於主服務器保持一致------!
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        1.1.1.1
    }
}
virtual_server 1.1.1.1 80 {
    delay_loop 15
    lb_algo rr
    lb_kind DR
    protocol TCP
    real_server 1.1.1.5 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 4
        }
    }
    real_server 1.1.1.6 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 4
        }
    }
}

重啟keepalived服務,ip a 查看,沒有1.1.1.1漂移IP地址,因為在主服務器上

[[email protected] ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:45:59:3b brd ff:ff:ff:ff:ff:ff
    inet 1.1.1.3/8 brd 1.255.255.255 scope global eth1
    inet6 fe80::20c:29ff:fe45:593b/64 scope link 
       valid_lft forever preferred_lft forever

配置Web服務器

配置IP地址


設置VIP*

[[email protected] ~]# cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:0
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=1.1.1.1
NETMASK=255.255.255.255
ONBOOT=yes

添加路由

[[email protected] ~]# route add -host 1.1.1.1 dev lo:0

添加到開機啟動項,註意是追加 >>是追加 >是覆蓋原有內容

[[email protected] ~]# echo "route add -host 1.1.1.1 dev lo:0" >> /etc/rc.local 

調整響應參數

[[email protected] ~]# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

sysctl -p使其生效

配置http服務

Web 1

vim /etc/www/html/index.html
<h1>我覺得OK,這裏是1</h1><br/>
<br/>
<h3>1111111111111111</h3>

Web 2

vim /etc/www/html/index.html
<h1>我覺得OK,這裏是2</h1><br/>
<br/>
<h3>2222222222222222</h3>

添加為系統服務

[[email protected] ~]# chkconfig --add httpd 
[[email protected] ~]# chkconfig  httpd on

客戶機驗證

ping -t 1.1.1.1 會通,當主服務器斷掉後會卡一下,延遲幾秒,這個時候從服務器會代替主服務器的工作,服務器比開許多臺VM的PC性能好很多。

漂移IP會在兩個keepalived服務器之間無縫切換,達到不間斷提供服務的目的性。

技術分享

網頁訪問使用輪詢rr算法切換

技術分享

技術分享

完成,謝謝觀看

---恢復內容結束---

[Linux]-構建LVS-DR模式+Keepalived高可用群集