一、keepalived高可用
Keepalived 的作用是檢測web服務器的狀態,如果有一臺web服務器死機,或工作出現故障,Keepalived將檢測到,并將有故障的web服務器從系統中剔除, 當web服務器工作正常后Keepalived自動將web服務器加入到服務器群中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的 web服務器。
系統環境: RHEL6.5x86_64small install selinux and iptables disabled
Virtual IP 192.168.2.254
192.168.2.162server62.exampl.com (master)
192.168.2.163server63.example.com(backup)
192.168.2.52 desktop52.example.com(real server)
192.168.2.53 desktop53.example.com(real server)
編輯/etc/hoststs做以上解析
1.keepalived的安裝配置
主備機上的軟件包安裝與配置
#yum install ipvsadm kernel-devel openssl-devel popt-devel libnl-devel gcc make -y
源碼編譯安裝keepalived:
#wget http://www.keepalived.org/software/keepalived-1.2.12.tar.gz
#tar zxf keepalived-1.2.12.tar.gz
#cd keepalived-1.2.12
#./configure --prefix=/usr/local/keepalived (安裝目錄)
... Keepalived configuration
------------------------
Keepalived version : 1.2.5
Compiler : gcc
Compiler flags : -g -O2
Extra Lib : -lpopt -lssl -lcrypto -lnl
Use IPVS Framework : Yes
IPVS sync daemon support : Yes
IPVS use libnl : Yes
Use VRRP Framework : Yes
Use VRRP VMAC : Yes
SNMP support : No
Use Debug flags : No
#make && make install
創建鏈接:
#ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
#ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
#ln -s /usr/local/keepalived/etc/keepalived /etc/
#ln -s /usr/local/keepalived/sbin/keepalived /sbin
keepalived主配置文件的修改:
#vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost #接收警報的 email 地址,可以添加多個
}
notification_email_from keepalived@server62.example.com #設置郵件的發送地址
smtp_server 127.0.0.1 #設置郵件的發送地址
smtp_connect_timeout 30 #設置連接 smtp 服務器超時時間
router_id LVS_DEVEL #load balancer 的標識 ID,用于 email 警報
}
vrrp_instance VI_1 {
stateMASTER #備機改為 BACKUP,此狀態是由 priority 的值來決定的,當前priority 的值小于備機的值,那么將會失去 MASTER 狀態
interface eth0 #HA 監測網絡接口
virtual_router_id 200 #主、備機的 virtual_router_id 必須相同,取值 0-255
priority78#主機的優先級,主機優先級一定要大于備機
advert_int 1 #主備之間的通告間隔秒數
authentication {#主備切換時的驗證
auth_type PASS #設置驗證類型,主要有 PASS 和 AH 兩種
auth_pass 1111 #設置驗證密碼,在一個 vrrp_instance 下,MASTER 與 BACKUP 必須使用相同的密碼才能正常通信
}
virtual_ipaddress {
192.168.2.254#設置虛擬 IP 地址,可以設置多個虛擬 IP 地址,每行一個
}
virtual_server 192.168.2.254 80 {#定義虛擬服務器
delay_loop 6 #每隔 6 秒查詢 realserver 狀態
lb_algo rr #lvs 調度算法,這里使用輪叫
lb_kind DR #LVS 是用 DR 模式
#persistence_timeout 50 #會話保持時間,單位是秒,這個選項對于動態網頁是非常有用的,為集群系統中 session 共享提供了一個很好的解決方案。有了這個會話保持功能,用戶的請求會被一直分發到某個服務節點,直到超過這個會話保持時間。需要注意的是,這個會話保持時間,是無響應超時時間,也就是說用戶在操作動態頁面時,如果在 50 秒內沒有執行任何操作,那么接下來的操作會被分發到另外節點,但是如果一直在操作動態頁面,則不受 50 秒的時間限制。(默認是打開的,要禁掉哦)
protocol TCP #指定轉發協議類型,有 tcp 和 udp 兩種
real_server 192.168.2.52 80 { #配置服務節點
weight 1 #配置服務節點的權值,權值大小用數字表示,數字越大,權值越高,設置權值的大小可以為不同性能的服務器分配不同的負載,可以對性能高的服務器設置較高的權值,而對性能較低的服務器設置相對較低的權值,這樣就合理的利用和分配了系統資源
TCP_CHECK { #realserve 的狀態檢測設置部分,單位是秒
connect_timeout 3 #10 秒無響應超時
nb_get_retry 3 #重試次數
delay_before_retry 3 #重試間隔
}
}
real_server 192.168.2.53 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
#/etc/init.d/keepalived restart 啟動keepalived
2.realserver的配置
#分別在 realserver 上執行以下命令添加策略
192.168.2.53
#ifconfig eth0:0 192.168.2.254 netmask 255.255.255.255 up 添加虛擬ip
#arptables -A IN -d 192.168.2.254 -j DROP
#arptables -A OUT -s 192.168.2.254 -j mangle --mangle-ip-s 192.168.2.53
這些配置會寫入文件/etc/sysconfig/arptables
#/etc/init.d/arptables_jf save
#/etc/init.d/arptables_jf start
#echo `hostname` > /var/www/html/index.html
#service httpd start
192.168.2.52
#ifconfig eth0:0 192.168.2.254 netmask 255.255.255.255 up
#arptables -A IN -d 192.168.2.254 -jDROP
#arptables -A OUT -s 192.168.2.254 -j mangle --mangle-ip-s 192.168.2.52
這些配置會寫入文件/etc/sysconfig/arptables
#/etc/init.d/arptables_jf save
#/etc/init.d/arptables_jf start
#echo `hostname` > /var/www/html/index.html
#service httpd start
最后在master主機查看是否添加成功
# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.2.254:http rr
-> server52.example.com:http Route 1 0 7
-> server53.example.com:http Route 1 0 8
4.測試:
1.高可用測試:停止 master 上的 keepalived 服務,看 backup 是否接管。
2. 負載均衡測試:訪問 http://192.168.2.254,看到頁面在兩個 realserver 上切換表示成功你也可以通過 ipvsadm -Lnc 查看詳細連接情況!
3. 故障切換測試:任意關閉 realserver 上的 httpd 服務,Keepalived 監控模塊是否能及時發現,然后屏蔽故障節點,同時將服務轉移到正常節點來執行。
5.添加ftp服務:(理論需要再加一個需擬IP,可是一個IP也可以)
在兩個服務節點安裝vsftpd服務
[root@server52 ~]# yum install -y vsftpd
[root@server52 ftp]# ls在ftp的發布目錄里寫東西測試;
pub server52(server53)
[root@server52 ftp]#service vsftpd restart 開啟服務
修改兩臺調度器的配置文件:
master和backup主機修改住配置文件
# vim /etc/keepalived/keepalived.conf 在其后添加
virtual_server 192.168.2.254 21 (ftp端口號是21){
delay_loop 3
lb_algo rr
lb_kind DR
persistence_timeout 50 -----》持續鏈接(!很重要哦)
protocol TCP
real_server 192.168.2.52 21 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.2.53 21 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
reload兩臺調度器
# /etc/init.d/keepalived reload
!注意:如果使用的是另一個虛擬ip,要在real server主機上用arptables分別添加進去(本實驗為了方便不做演示,具體過程如上)。
測試:先用瀏覽器測試httpd服務是否能正常啟動,再用真機終端測ftp服務
# lftp 192.168.2.254
lftp 192.168.2.254:~> ls
drwxr-xr-x 2 0 0 4096 Feb 12 2013 pub
-rw-r--r-- 1 0 0 0 May 31 08:02 server52
lftp 192.168.2.254:/> quit
查看是否添加成功
# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.2.254:ftp rr persistent 50
-> server52.example.com:ftp Route 1 0 0
-> server53.example.com:ftp Route 1 0 0
TCP 192.168.2.254:http rr
-> server52.example.com:http Route 1 0 0
-> server53.example.com:http Route 1 0 0
二、haproxy負載均衡
HAProxy 提供高可用性、負載均衡以及基于 TCP 和 HTTP 應用的代理,支持虛擬主機,它是免費、快速并且可靠的一種解決方案。HAProxy 特別適用于那些負載特大的 web 站點, 這些站點通常又需要會話保持或七層處理。HAProxy 運行在當前的硬件上,完全可以支持數以萬計的并發連接。并且它的運行模式使得它可以很簡單安全的整 合進您當前的架構中, 同時可以保護你的 web 服務器不被暴露到網絡上。
節點主機:192.168.2.162 haproxy 、keepalived
192.168.2.163 haproxy、keepalived
realserver:192.168.2.52 web1
192.168.2.53 web2
vip : 192.168.2.254
1.haproxy的安裝配置
1.1、rpm 包方式:rpmbuild -tb haproxy-1.4.23.tar.gz
rpm -ivh /root/rpmbuild/RPMS/x86_64/haproxy-1.4.23-1.x86_64.rpm
1.2、源碼方式:
tar zxf haproxy-1.4.23.tar.gz
cd haproxy-1.4.23
make TARGET=linux26 ARCH=x86_64 USE_PCRE=1 PREFIX=/usr/local/haproxy install
2、修改配置文件:
#vi /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local0#指定日志設備
#log 127.0.0.1 local1 notice
log loghost local0 info #指定日志類型,還有 err warning debug
maxconn 65535 #并發連接數量
chroot /usr/share/haproxy #jail 目錄
uid 99 #用戶
gid 99 #組
daemon #后臺運行
#debug
#quiet
defaults
logglobal
mode http #默認使用 http 的 7 層模式 tcp: 4 層
option httplog #http 日志格式
option dontlognull #禁用空鏈接日志
retries 3 #重試 3 次失敗認為服務器不可用
option redispatch #當 client 連接到掛掉的機器時,重新分配到健康的主機
maxconn 65535
contimeout 5000 #連接超時
clitimeout 50000 #客戶端超時
srvtimeout 50000 #服務器端超時
stats uri/status#haproxy 監控頁面
listen www.example.com *:80#監聽的實例名稱,地址和端口
balance roundrobin#負載均衡算法
server web1 192.168.2.52:80 cookie app1inst1 check inter 2000 rise 2 fall 5
server web2 192.168.2.53:80 cookie app1inst2 check inter 2000 rise 2 fall 5
#cookie app1inst1:表示 serverid 為 app1inst1#check inter 2000:檢測心跳頻率
#rise 2:表示 2 次正確認為服務器可用#fall 5:表示 5 次失敗認為服務器不可用
# mkdir /usr/share/haproxy
# /etc/init.d/haproxy start
當 haproxy啟動報錯——Starting proxy www.example.com: cannot bind socket這個問題,其實就是因為你的haproxy沒有得到VIP的原因,而你的配置文件又綁定了VIP地址,所以會提示以上錯誤當然,你也要確保你 的haproxy服務器做了hearbeat或keepalived,綁定VIP,要不就無法高可用了。
解決方法:
修改內核參數: /etc/sysctl.conf
net.ipv4.ip_nonlocal_bind=1
保存結果,使結果生效
sysctl –p
或者使用echo進去,前提是sysctl.conf文件中沒有本條參數:
echo \'net.ipv4.ip_nonlocal_bind = 1\'>>/etc/sysctl.conf##net.ipv4.ip_nonlocal_bind=1 意思是啟動haproxy的時候,允許忽視VIP的存在
除上面的原因之外,還有可能造成Starting proxy www.example.com: cannot bind socket確定你的haproxy服務器中是否開啟有apache或nginx等WEB服務,如果有,請先停掉這些服務否則就出現以上故障。
順便提醒下,haproxy代理服務器同時也要打開內核的轉發功能,如下參數:
net.ipv4.ip_forward = 1
2.測試:
訪問 http://www.example.com 測試負載,訪問 haproxy 監控頁面:http://192.168.2.162/status
監控頁面添加認證:
listen stats_auth *:80
stats enable
stats uri /status #監控頁面地址
stats auth admin:westos #管理帳號和密碼
stats refresh 5s #刷新頻率
haproxy 日志:
# vi /etc/rsyslog.conf #接受 haproxy 日志
$ModLoad imudp
$UDPServerRun 514
local0.* /var/log/haproxy.log#日志文件位置
# /etc/init.d/rsyslog restart
三、haproxy+keepalived的整合
MASTER:
#vim /etc/keepalived/ keepalived.conf
# cat keepalived.conf
! Configuration File for keepalived
vrrp_script check_haproxy {
script "/etc/keepalived/check_haproxy.sh"
interval 2
weight 2
}
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@server62.example.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 151
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.254
}
track_script {
check_haproxy
}
}
BACKUP:
# cat keepalived.conf
! Configuration File for keepalived
vrrp_script check_haproxy {
script "/etc/keepalived/check_haproxy.sh"
interval 2
weight 2
}
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@server63.example.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 151
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.254
}
track_script {
check_haproxy
}
}
檢測腳本:
# cat /etc/keepalived/check_haproxy.sh(記得加可執行權限哦)
#!/bin/bash
/etc/init.d/haproxy status &> /dev/null || /etc/init.d/haproxy restart &> /dev/null
if [ $? -ne 0 ];then
/etc/init.d/keepalived stop &> /dev/null
fi
到此整個架構搭建完成,這時可以通過haproxy的監控頁面來監控負載均衡
四、驗證此架構及注意事項
我們可以關閉主HAProxy機器或重新啟動,看在此過程中,VIP地址有沒有正確的轉移到從HAProxy機器上,影響我們訪問網站沒,以上步驟我自己測試過多次,而且線上環境的穩定行,證明HAProxy+Keeaplived雙機方案確實是有效的。
關于HAProxy+Heartbeat這種負載均衡高可用架構,有些情況我也跟大家說明一下:
◆在此HAProxy+Keepalivp負載均衡高可用架構中,我們是如何解決session的問題呢?我們這里采用的是它自身的balance source(負載均衡)機制,它跟Nginx的ip_hash機制原理類似,是讓客戶機訪問時始終訪問后端的某一臺真實的web服務器,這樣讓session就固定 下來了;
◆有網友配置HAProxy時喜歡用listen xxx.xxx.xxx.xxx:80這樣的格式,這樣其實不好,做負載均衡高可用時由于從機分配不到VIP地址,會導致從機啟動不了,我建議用bind *:80的方式來代替。
網站欄目:HAProxy雙機高可用方案之HAProxy+Keepalived
網頁地址:http://m.newbst.com/article18/cggcdp.html
成都網站建設公司_創新互聯,為您提供網站收錄、營銷型網站建設、軟件開發、微信公眾號、網站設計公司、自適應網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯