機器準備:
4臺服務器
2臺lvs+keepalived
2臺 rs serverhtml
環境及地址:
操做系統:centos
lvs+keepalived:
地址:10.68.3.145 10.68.3.146
VIP:10.68.3.184
rs server:
10.68.3.147 10.68.3.151mysql
lvs+keepalived 安裝
如今的系統通常都自帶lvs內核,直接yum安裝便可
yum -y install ipvsadm
yum -y install keepalivednginx
開啓IP轉發功能
echo 1 > /proc/sys/net/ipv4/ip_forward算法
lvs不用作什麼配置,直接配置keepalive文件便可,
作以前儘可能關閉seLinux和防火牆,否則排錯更困難,由於lvs自己沒有日誌sql
keepalive配置文件
MASTER
! Configuration File for keepalivedvim
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}centos
vrrp_instance VI_12 {
state MASTER #上面的配置能夠忽略,用默認安裝的就好,這是master的標誌
interface ens4 #做用在哪一個接口,此接口必須存在
virtual_router_id 52 #虛擬組id,若是局域網存在其餘lvs,不能與其它組id衝突
priority 100 #優先級,master 高於backup便可,主down掉以後會變成0
advert_int 1 #心跳發送通告的間隔
authentication { #認證的帳號密碼,貯備必須一致
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #虛擬一個IP地址,能夠多個
10.68.3.184
}
}bash
virtual_server 10.68.3.184 80 { #映射一個虛擬IP服務實例
delay_loop 6 #健康檢查的時間間隔
lb_algo rr #調度器算法
lb_kind DR #採用lvs哪一種模式(DR|NAT|TUN)
persistence_timeout 0 #回話保持時間
protocol TCP #基於什麼協議服務器
real_server 10.68.3.147 80 { #虛擬實例下轉發的真實服務器
weight 1 #權重
TCP_CHECK { #設置檢查的方式
connect_timeout 10 #超時時間
nb_get_retry 3 #重試次數
delay_before_retry 3
connect_port 80 #檢測的端口
}
}app
real_server 10.68.3.151 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
BACKUP
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_12 {
state BACKUP
interface ens4
virtual_router_id 52
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.68.3.184
}
}
virtual_server 10.68.3.184 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 0
protocol TCP
real_server 10.68.3.147 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 10.68.3.151 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
啓動服務
直接啓動keepalive便可
keepalived
ps aux |grep keepalived是否有三個進程存在
判斷有沒有選舉成功能夠經過ip add 來查看主有沒有綁定虛擬IP,
也能夠經過日誌查看 /var/log/messages 選舉過程,固然也能夠
自定義日誌路徑,不過得從系統日誌修改,而且得修改啓動方式
詳細見mysql+keepalived
rs 節點
yum -y install nginx
爲了方便測試咱們這裏修改首頁的值
echo 147 > /usr/share/nginx/html/index.html
echo 151 > /usr/share/nginx/html/index.html
局域網本地客戶端測試看下首頁是否能打開分別顯示上面這兩個值,不然的話就先解決這個吧
vim /etc/rc.d/init.d/realserver.sh
#!/bin/bash
# description: Config realserver lo and apply noarp
SNS_VIP=10.68.3.184
/etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
/sbin/route add -host $SNS_VIP 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 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $SNS_VIP >/dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
若是是NAT模式的話,rs節點網關得指向虛擬IP
上述完成以後經過 IP add 查看lo是否有綁定上虛擬地址
##調試過程當中不要作這步:若是不須要了能夠去掉這個地址:/sbin/ifconfig lo:0 down
如今全部工做都作完了就開始檢查測試了
第一步:lvs節點查看路由是否有添加成功
[root@compute ~]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP compute:http rr
-> compute3:http Route 1 0 0
-> compute2:http Route 1 0 0
若是這裏都沒有路由的話確定是不可能測試成功的,查看keepalive的日誌
看下心跳是否有檢測成功,若是不成功的話,就看日誌報錯緣由吧
好比ping Telnet端口是否通,若是這些都OK,日誌裏面都沒有顯示其中某一臺的日誌
那就是keepalived的日誌有問題,由於它自己不會檢測配置文件是否有語法錯誤,只能
本身從新敲一遍
第二步:若是路由已經添加成功,那就開始測試
直接在局域網找一臺機器測試
[root@tc2 ~]# curl 10.68.3.184:80
147
[root@tc2 ~]# curl 10.68.3.184:80
151
[root@tc2 ~]# curl 10.68.3.184:80
147
[root@tc2 ~]# curl 10.68.3.184:80
151
[root@tc2 ~]# curl 10.68.3.184:80
147
若是一直訪問的其中一臺:
1:查看另一臺地址和端口是不是通的
2:看keepalive回話保持時間persistence_timeout 0是不保持,直接輪詢,若是須要帶權重
輪詢的話得更改調度算法 lb_algo 改成wrr 帶權重輪詢
3:看下ARP是否作了設置
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
第三步:
若是上述均可以的話,斷掉其中的一臺,看下vip訪問是否正常;
斷掉其中的一臺keepalive master,看下是backup是否有綁定虛擬地址,而且VIP是否也訪問正常
lvs自己也能夠實現上述功能,只是他不能檢測節點的健康狀態,斷掉一個節點所有業務中斷,因此
要結合keepalive
lvs自己是隻能做用於單核的,因此若是做用的CPU達到瓶頸也會影響它的性能,能夠綁定多網卡
經常使用排查命令
防火牆
iptables -t nat -nvL
iptables -nvL
iptables -F
iptables -X
iptables -Z
lvs
ipvsadm -ln
ipvsadm -ln --stat
ipvsadm -Z #計數清零,與iptables同樣,方便調試
ipvsadm -C #清空kvs配置
arp
arp -n
arp -s host|IP mac
lvs 部分配置命令解釋
/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -i
-A 在內核中添加一個虛擬服務器記錄
-t 說明是基於tcp協議的
-s 調度器算法至關於keepalive中的lb_algo 配置
-a 在建立的虛擬服務器下面增長一條真實服務器的映射
-r 映射到的真實服務器
-i 模式配置至關於keepalive中的 lb_kind 配置,這裏還有-g (DR) -m(NAT)
三種模式的區別:
詳解件:http://www.uml.org.cn/zjjs/201211124.asp