1. 環境描述:
本實驗環境如下表所示,使用keepalived實作主、從排程器的熱備,進而建構兼有負載均衡、高可用兩種能力的LVS網站群集平台
主機
作業系統
IP位址
主要軟體
主排程器
CentOS 6.5 x86_64
192.168.100.111
keepalived-1.2.2.tar
從排程器
192.168.100.112
Web伺服器
192.168.100.113
RHEL 6.5 x86_64
192.168.100.110
用我的真機模拟網際網路來測試LVS+Keepalived網站服務群集。
為差別兩個排程器把排程器改名稱為
在192.168.100.111上編輯配置檔案/etc/sysconfig/network
修改下面一行
HOSTNAME=zhang //主排程器
在192.168.100.112上編輯配置檔案/etc/sysconfig/network
HOSTNAME=DDQ-01 //從排程器
為差別兩個web伺服器把伺服器改名稱為
在192.168.100.110上編輯配置檔案/etc/sysconfig/network
HOSTNAME=server-01
在192.168.100.113上編輯配置檔案/etc/sysconfig/network
HOSTNAME=server-02
在典型的負載均衡群集中,包括三個層次的元件
第一層,負載排程器:這是通路整個群集系統的唯一入口,對外使用所有伺服器共有的群集位址。通常會配置主、備兩台排程器實作熱備份,當主排程器失效以後平滑替換至備用排程器,確定高可用性。
第二層,伺服器池:群集所提供的應用服務(如 HTTP、FTP)由伺服器池承擔,其中的每個節點具有獨立的RIP(Real IP,真實IP)位址,隻處理排程器分發過來的客戶機請求,當某個節點暫時失效時,負載排程器的容錯機制會将其隔離,等待錯誤排除以後再重新納入伺服器池。
第三層,共享存儲:為伺服器池中的所有節點提供穩定、一緻的檔案存取服務,確定整個群集的統一性,在Linux/UNIX環境中,共享存儲可以使用NAS裝置,或者提供NFS(Network File System,網絡檔案系統)共享服務的專用伺服器。
NFS共享存儲伺服器的基本配置和通路方法。
在CentOS 6 系統中,需要先安裝nfs-utils、rpcbind軟體包來提供NFS共享服務,前者用于NFS共享釋出和通路,後者用于RPC支援。
yum -y install nfs-utils rpcbind
chkconfig nfs on
chkconfig rpcbind on
設定共享目錄
NFS的配置檔案為/etc/exports,檔案内容預設為空(無任何共享),在配置檔案中設定共享資源時,記錄格式為“目錄位置 客戶機位址(權限選項)”。例如,若要将檔案夾/opt/wwwroot共享給192.168.100.0/24網段使用,允許讀寫操作,配置如下所示。
mkdir -p /opt/wwwroot
vi /etc/exports
添加下面一行
/opt/wwwroot 192.168.100.0/24(rw,sync,no_root_squash)
其中客戶機位址可以是主機名、IP位址、網段位址、還可以使用*、?通配符;權限中的rw表示允許讀寫(ro為隻讀,)sync表示同步寫入,no_root_squash表示當客戶機以root身份通路時賦予本地root權限(預設是root_squash,将作為nfsnobody使用者降級對待)
當需要将同一個目錄共享給不同的客戶機,且配置設定不同的權限時,隻要以空格分隔指定多個“客戶機(權限選項)”即可。例如,将、/var/ftp/public目錄共享給兩個客戶機,并分别給予隻讀、讀寫權限,配置如下
/var/ftp/pub 192.168.100.10(ro) 192.168.100.20(rw)
啟動NFS服務程式,手動加載NFS共享服務時,應先啟動rpcbind,然後再啟動nfs
service rpcbind start
service nfs start
netstat -anpt | grep rpcbind
showmount -e //檢視本機釋出的NFS共享目錄
在客戶機中通路NFS共享資源
客戶機中也需要安裝rpcbind軟體包,并啟動rpcbind系統服務;另外,為了使用showmount查詢工具,建議将nfs-utils軟體包也一并安裝。
yum -y install rpcbind nfs-utils
在客戶機上使用“showmount -e NFS伺服器位址”檢視NFS伺服器端共享了哪些目錄
手動挂載NFS共享目錄
例如,将NFS伺服器共享的/opt/wwwroot目錄挂載到本地/var/www/html方式如下
mount NFS伺服器位址:/opt/wwwroot /var/www/html
為了測試實驗結果,各web伺服器采用不同網頁,NFS共享存儲服務就不再搭建了。實際上各web伺服器的網站文檔都存放在共享儲存設備中。
2. 實驗步驟:
1. 在主排程器上安裝keepalived工具并編輯其配置檔案
1) 在編譯安裝keepalived之前,必需先安裝核心開發包kernel-devel,以及openssl-devel、popt-devel等支援庫。還需要用到ipvsadm管理工具。
使用xshell遠端管理并進行相關配置
[root@zhang~]# yum -y install popt-devel kernel-devel openssl-devel
[root@zhang~]# yum -y install ipvsadm
[root@zhang~]# modprobe ip_vs //加載ip_vs子產品
[root@zhang~]# service ipvsadm start //開啟ipvsadm服務
[root@zhang~]# vi /etc/sysctl.conf //編輯配置檔案,打開路由轉發功能
net.ipv4.ip_forward= 1
[root@zhang~]# sysctl -p //重新加載剛才的配置檔案,使其生效
編譯安裝keepalived
把keepalived軟體包上傳到主排程器
<a href="http://s3.51cto.com/wyfs02/M02/6F/A7/wKioL1WkfxCwWbNwAAHakMQgHDY965.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M02/6F/AA/wKiom1WkfTuy4dPcAAO2BStG6UI894.jpg" target="_blank"></a>
注意:在哪個目錄下執行rz操作檔案就傳送到哪個目錄下
[root@zhangopt]# tar xzvf keepalived-1.2.2.tar.gz //解壓keepalived軟體包
[root@zhangopt]# cd keepalived-1.2.2
[[email protected]]# yum -y install gcc gcc-c++ //安裝編譯工具
[[email protected]]# ./configure --prefix=/--with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64/ //對keepalived的參數進行配置
[[email protected]]# make && make install //編譯和安裝keepalived服務
[[email protected]]# chkconfig --add keepalived //把keepalived添加到系統進行管理
[[email protected]]# chkconfig keepalived on
配置主排程器
[[email protected]]# vi /etc/keepalived/keepalived.conf
清空配置檔案,插入以下文本
! Configuration File for keepalived
global_defs {
notification_email {
}
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_01 //主排程器名稱
}
vrrp_instance VI_1 {
state MASTER //主排程器的熱備狀态
interface eth0
virtual_router_id 51
priority 110 //主排程器的優先級
advert_int 1
authentication { //主、從熱備認證資訊
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { //指定群集漂移位址
192.168.100.188
}
virtual_server 192.168.100.188 80 { //虛拟伺服器位址、端口
delay_loop 6 //健康檢查的間隔時間(秒)
lb_algo rr //輪詢(rr)排程算法
lb_kind DR //直接路由(DR)群集工作模式
persistence_timeout60 //連接配接保持時間(秒)
protocol TCP //應用服務采用的是TCP協定
real_server 192.168.100.110 80 { //真實web節點位址、端口
weight 1 //節點的權重
TCP_CHECK { //健康檢查方式
connect_port 80 //檢查的目标端口
connect_timeout3 //連接配接逾時(秒)
nb_get_retry 3 //重試次數
delay_before_retry3 //重試間隔(秒)
}
real_server 192.168.100.113 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
<a href="http://s3.51cto.com/wyfs02/M02/6F/AA/wKiom1WkfX_Cv9GVAAOiH7q3bHo968.jpg" target="_blank"></a>
2. 在從排程器上安裝keepalived并編輯其配置檔案
A. 使用相同的方式把keepalived軟體包上傳到從排程器
[root@DDQ-01~]# yum -y install popt-devel kernel-devel openssl-devel
[root@DDQ-01~]# yum -y install ipvsadm
[root@DDQ-01~]# modprobe ip_vs //加載ip_vs子產品
[root@DDQ-01~]# service ipvsadm start //開啟ipvsadm服務
[root@DDQ-01~]# vi /etc/sysctl.conf //編輯配置檔案,打開路由轉發功能
[root@zhang~]# sysctl -p //重新加載剛才的配置檔案,使其生效
[root@DDQ-01~]#tar xzvf keepalived-1.2.2.tar.gz //解壓keepalived軟體包
[root@DDQ-01~]#cd keepalived-1.2.2
[[email protected]]# ./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64/ //對keepalived的參數進行配置
[[email protected]]# make && make install //編譯和安裝keepalived服務
[[email protected]]# chkconfig --add keepalived //把keepalived添加到系統進行管理
[[email protected]]# chkconfig keepalived on 讓keepalived服務在2345級别開啟
[[email protected]]# service iptables stop //關閉防火牆
B. 配置從排程器
從排程器的配置和主排程器上的配置基本相同,隻需要調整router_id、state、priority參數即可,其餘内容完全相同。
[[email protected]]# vi /etc/keepalived/keepalived.conf
清空配置檔案内容,添加以下文本
notification_email {
[email protected] //從排程器的名稱
}
notification_email_from benet [email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_02
state BACKUP //從排程器的熱備狀态
virtual_router_id 51 //編号主與從的兩邊要一樣的
priority 100 //從排程器的優先級
advert_int 1
authentication { //主、從熱備認證資訊
auth_type PASS
virtual_ipaddress { //指定群集(虛拟伺服器位址),可以指定多個的
virtual_server 192.168.100.188 80{ //虛拟伺服器位址(VIP)、端口
delay_loop 6 //健康檢查的間隔時間(秒)
lb_algo rr //輪詢(rr)排程算法
lb_kind DR //直接路由(DR)群集工作模式
persistence_timeout 60 //連接配接保持時間(秒),若注釋掉加個"!"
protocol TCP //應用服務采用的是TCP協定
real_server192.168.100.110 80 { //第一個web節點的位址、端口
weight 1 //節點的權重
TCP_CHECK { //健康檢查方式
connect_port 80 //檢查的目标端口
connect_timeout 3 //連接配接去逾時(秒)
nb_get_retry 3 //重試次數
delay_before_retry 3 //重試間隔(秒)
real_server 192.168.100.113 80 { //第二個web節點的位址、端口
weight 1
connect_port 80
connect_timeout 3
delay_before_retry 3
}
[root@DDQ-01 keepalived-1.2.2]# servicekeepalived start //開啟keepalived服務
3. 配置web節點伺服器
1) Server-01的配置
[root@server-01~]# yum -y install httpd //安裝web伺服器
[root@server-01~]# echo "<h1>this is server-01</h1>" >/var/www/html/index.html //建立一個網站測試頁
DR模式Web伺服器配置如下:
[root@server-01~]# vi web.sh //編輯web伺服器配置腳本
添加以下内容
ifconfig lo:0 192.168.100.188 broadcast 192.168.100.188 netmask 255.255.255.255up
route add -host 192.168.100.188 dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p &>/dev/null
[root@server-01~]# sh web.sh
[root@server-01~]# service iptables stop //關閉防火牆
[root@server-01~]# service httpd start //開啟web伺服器
Server-02的配置
[root@server-02~]# yum -y install httpd //安裝web伺服器
[root@server-02~]# echo "<h1>this is server-02</h1>" >/var/www/html/index.html //建立一個網站測試頁
[root@server-02~]# vi web.sh //編輯web伺服器配置腳本
ifconfig lo:0 192.168.100.188 broadcast 192.168.100.188 netmask255.255.255.255 up
[root@server-02~]# sh web.sh //運作腳本
[root@server-02~]# service iptables stop //關閉防火牆
[root@server-02~]# service httpd start //開啟web伺服器
3. 測試LVS+Keepalived高可用群集
1. 在客戶機的浏覽器中,能夠通過LVS+Keepalived群集的漂移位址(192.168.100.188)正常通路web頁面内容,則驗證群集建構成功。
<a href="http://s3.51cto.com/wyfs02/M00/6F/AA/wKiom1Wkfa3yhJsaAADFNrxooHk101.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M01/6F/A7/wKioL1Wkf4XBzvBEAADraeMgscc600.jpg" target="_blank"></a>
對于同一個IP位址一直都是由同一台web伺服器為其提供服務,當伺服器出現故障時,另一台就會代替其工作,實作了業務的高可用。
使用[root@zhang ~]# tail /var/log/messages可以檢視主從切換以及伺服器的自動化加入和删除
<a href="http://s3.51cto.com/wyfs02/M00/6F/AA/wKiom1Wkfc_CIcZNAAT8revtf_Q105.jpg" target="_blank"></a>
在從排程器上檢視結果如下
<a href="http://s3.51cto.com/wyfs02/M01/6F/A7/wKioL1Wkf7-w62ghAAUFQoAWyrc784.jpg" target="_blank"></a>
2. 模拟主排程器失效,檢視web站點是否仍可以通路?
若可以正常通路則驗證排程器實作熱備切換
<a href="http://s3.51cto.com/wyfs02/M00/6F/A7/wKioL1Wkf82i3RKbAAHyS-XjH24167.jpg" target="_blank"></a>
修改客戶機IP位址,驗證web伺服器通路量的負載均
<a href="http://s3.51cto.com/wyfs02/M01/6F/AA/wKiom1WkfhKSmswoAALJKhzIO0I931.jpg" target="_blank"></a>
使用[root@zhang ~]# tail /var/log/messages
<a href="http://s3.51cto.com/wyfs02/M01/6F/A7/wKioL1Wkf_6T79TrAAPOFUNFcOA924.jpg" target="_blank"></a>
在從伺服器上檢視
<a href="http://s3.51cto.com/wyfs02/M02/6F/A7/wKioL1WkgA7icBFDAAUc-jYeLIE567.jpg" target="_blank"></a>
3. 模拟一台web伺服器故障,再次檢視日志資訊
<a href="http://s3.51cto.com/wyfs02/M02/6F/A7/wKioL1WkgDOz4aFNAAN4yxfF73A836.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M02/6F/AA/wKiom1Wkfl2yT_YuAAWDXiIGGCc070.jpg" target="_blank"></a>
恢複web服務,再次檢視日志資訊
<a href="http://s3.51cto.com/wyfs02/M01/6F/A7/wKioL1WkgEyTLY-7AAVDhOMRJGg698.jpg" target="_blank"></a>
以上測試驗證了LVS+Keepalived網站服務群集搭建成功
本文轉自Y.weisheng 51CTO部落格,原文連結:http://blog.51cto.com/yuan2/1674014,如需轉載請自行聯系原作者