↑構建高可用LVS + keepalived+httpd和雙主模型的keepalived方案↑
標籤:web服務器 拓撲圖 模型 檢測 軟件
原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://gyulong.blog.51cto.com/6844383/1302368
keepalived簡介
keepalived是一個類似於layer3, 4 & 5交換機制的軟件,也就是我們平時說的第3層、第4層和第5層交換。Keepalived的作用是檢測web服務器的狀態,如果有一臺web服務器死機,或工作出現故障,Keepalived將檢測到,並將有故障的web服務器從系統中剔除,當web服務器工作正常後Keepalived自動將web服務器加入到服務器羣中,通過ping來監測對方的狀態。
拓撲圖:
-----------------------------------------------------------------------------------------
實驗環境:
centos-6.4
所需的安裝包:
主的和備的Director上都安裝上keepalived
後端的兩個realserver上都安裝上htppd服務
-----------------------------------------------------------------------------------------
1.先同步個節點上的時間
[root@yulong]# ntpdate 172.16.0.1
2.在主的和從的上面安裝keepalived
[root@yulong ~]# yum install keepalived -y
3.編輯keepalived配置文件
[root@yulong keepalived]# vim keepalived.conf
修改一下參數爲自己所用的
global_defs {
notification_email {
root@localhost 收件人
}
notification_email_from keep@localhost 發件人
smtp_server 127.0.0.1 郵件服務器
smtp_connect_timeout 10 鏈接超時時間
router_id LVS_DEVEL
添加如下字段設置可以手動切換故障轉移:
vrrp_script chk_maintainace {
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
interval 1
weight -2
}
這段腳本的意思就是如果在這個目錄下存在down的這個一個文件就把vip給轉移到BAKPUP節點.這個文件可以手動創建來實現調試.
以下用文字註釋的都是需要修改的地方
vrrp_instance VI_1 {
state MASTER 設置主節點
interface eth0 網卡類型
virtual_router_id 51 虛擬路由ID
priority 100 設置權重,權重必須大於BACKUP的權重
advert_int 1
authentication {
auth_type PASS 加密方法
auth_pass 1111 密碼
}
virtual_ipaddress {
172.16.8.100 設置訪問的虛擬IP
}
track_script {
chk_maintainace 這個是定義剛纔添加的那段代碼生效
}
}
4.配置完畢以上內容後複製到從節點上一份
[root@yulong keepalived]# scp keepalived.conf yu:/etc/keepalived/
5.然後在從節點上需要修改下如下兩項
[root@www ~]# vim /etc/keepalived/keepalived.conf
state BACKUP 設置爲備用節點
priority 99 權重設置爲比主節點的小
6.然後主備都啓動keepalived服務
[root@yulong keepalived]# service keepalived restart
Stopping keepalived: [ OK ]
Starting keepalived: [ OK ]
7.然後查看master上的狀態
[root@yulong keepalived]# ip addr show
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:0e:d7:4d brd ff:ff:ff:ff:ff:ff
inet 172.16.8.17/16 brd 172.16.255.255 scope global eth0
inet 172.16.8.100/32 scope global eth0 剛纔配置的虛擬ip已經生效
inet6 fe80::20c:29ff:fe0e:d74d/64 scope link
valid_lft forever preferred_lft forever
8.然後我們把master上的節點給停掉看看能不能轉移
root@yulong keepalived]# touch down
[root@yulong keepalived]# ip addr show
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:0e:d7:4d brd ff:ff:ff:ff:ff:ff
inet 172.16.8.17/16 brd 172.16.255.255 scope global eth0
inet6 fe80::20c:29ff:fe0e:d74d/64 scope link
valid_lft forever preferred_lft forever
在keepalived目錄下Touch down 文件是我們寫的那條腳本,很強大喲
在次ip addr show查看vip已經沒有了
9.在備節點上查看vip有沒有轉移過來
[root@www ~]# ip addr show
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:6a:51:21 brd ff:ff:ff:ff:ff:ff
inet 172.16.8.18/16 brd 172.16.255.255 scope global eth0
inet 172.16.8.100/32 scope global eth0 OK,已經轉移過來了,說明是正常的.
inet6 fe80::20c:29ff:fe6a:5121/64 scope link
valid_lft forever preferred_lft forever
10.下面在主節點上配置keepalived的realserver能調度上游的服務器
[root@yulong keepalived]# vim keepalived.conf
virtual_server 172.16.8.100 80 { 虛擬IP,就是一會要訪問的IP
delay_loop 6
lb_algo rr 調度算法
lb_kind DR lvs的模式
nat_mask 255.255.0.0
persistence_timeout 50
protocol TCP 使用的協議
real_server 172.16.8.10 80 { realserver的ip地址 這個別寫錯了
weight 1 權重
TCP_CHECK { realserver的狀態監測
connect_timeout 3 響應超時時間,默認3秒
nb_get_retry 3 重試次數
delay_before_retry 3 重試間隔時間
}
}
real_server 172.16.8.11 80 { 第二個realserver的定義 和上面的一樣
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
11.配置完畢以後複製到備服務器上一份
[root@yulong keepalived]# scp keepalived.conf yu:/etc/keepalived/
然後在備的上面編輯keepalived.conf修改如下兩項
state BACKUP 設置爲備用節點
priority 99 權重設置爲比主節點的小
12.上面的配置好以後我們來配置realserver服務器,兩個realserver上都配置如下命令
[root@node1 ~]# ifconfig lo:0 172.16.8.100 broadcast 172.16.8.100 netmask 255.255.255.255 up
由於我們使用的DR模型配置DR模型的vip,在lo上配置就行
[root@node1 ~]# echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
[root@node1 ~]# echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
[root@node1 ~]# echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
[root@node1 ~]# echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
關閉arp廣播
[root@node1 ~]# echo "<h1> you are word</h1>" > /var/www/html/index.html
設置訪問的網頁主頁內容
13.配置完成後兩個realserver服務器上都啓動web服務器進行測試
[root@node1 ~]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
多點擊幾下看看是不是均衡
131724243.png
131725953.png
訪問成功,看來是均衡的
14.下面我們來通過ipvsadm查看下訪問的狀態
[root@yulong keepalived]# yum install ipvsadm
[root@yulong keepalived]# ipvsadm -L -n --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 172.16.8.100:80 3 3 0 156 0
-> 172.16.8.10:80 2 2 0 104 0
-> 172.16.8.11:80 1 1 0 52 0
Ok 看來是通過keepalived調用的
下面來配置keepalived雙主模型
1.在主的上面添加如下內容
[root@yulong keepalived]# vim keepalived.conf
vrrp_instance VI_2 {
state BACKUP
interface eth0
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 2111
}
virtual_ipaddress {
172.16.8.200
}
track_script {
chk_maintainace
}
}
2.在備的上面添加如下內容
vrrp_instance VI_2 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 2111
}
virtual_ipaddress {
172.16.8.200
}
track_script {
chk_maintainace
}
}
3.重啓主備的keepalived的服務
[root@yulong keepalived]# service keepalived restart
4.查看備的上面虛擬主ip有木有生效
[root@www ~]# ip addr show
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:6a:51:21 brd ff:ff:ff:ff:ff:ff
inet 172.16.8.18/16 brd 172.16.255.255 scope global eth0
inet 172.16.8.200/32 scope global eth0 已經生效
inet6 fe80::20c:29ff:fe6a:5121/64 scope link
valid_lft forever preferred_lft forever
5.下面我們把備的master給down掉看看是否會轉移
root@www ~]# cd /etc/keepalived/
[root@www keepalived]# touch down
[root@www keepalived]# ip addr show
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:6a:51:21 brd ff:ff:ff:ff:ff:ff
inet 172.16.8.18/16 brd 172.16.255.255 scope global eth0
inet6 fe80::20c:29ff:fe6a:5121/64 scope link
valid_lft forever preferred_lft forever
172.16.8.200 的虛擬ip已經看不到了
6.下面在主的上面看看是否轉移過來
[root@yulong keepalived]# ip addr show
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:0e:d7:4d brd ff:ff:ff:ff:ff:ff
inet 172.16.8.17/16 brd 172.16.255.255 scope global eth0
inet 172.16.8.100/32 scope global eth0
inet 172.16.8.200/32 scope global eth0
inet6 fe80::20c:29ff:fe0e:d74d/64 scope link
valid_lft forever preferred_lft forever
兩個虛擬ip都在,證明是正常的,此次雙主模型搞定!