本文參考php
本文的安裝部分參考:《CentOS6.5高可用集羣LVS+Keepalived(DR模式)》 http://www.it165.net/admin/html/201312/2220.htmlhtml
LVS 安裝參考:《LVS 三種工做模式基本配置(不含HA)》 http://jedy82.blog.51cto.com/425872/1628085linux
目的:使用LVS對兩臺web服務器進行負載設置,並提供LVS自己的高可用性web
本文只作LVS自己的keepalived配置,全部LVS的部分將直接使用腳本。算法
本文以LVS/DR模式爲例,LVS的其它工做模式配置方法相似apache
有關LVS安裝、測試詳細過程請參看《LVS 三種工做模式基本配置(不含HA)》 http://jedy82.blog.51cto.com/425872/1628085vim
LVS-master 10.10.6.201後端
LVS-backup 10.10.6.202bash
VIP 10.10.6.200服務器
Web1 10.10.6.211
Web2 10.10.6.212
操做系統:CentOS release 6.6 (Final)
2、安裝ipvsadm配置
檢查linux內核是否集成lvs模塊
[root@LVS-master ~]# modprobe -l | grep ipvs
開啓內核路由轉發功能
[root@LVS-master ~]# echo "1">/proc/sys/net/ipv4/ip_forward
關閉selinux和iptables
[root@Web1 ~]# getenforce Disabled [root@Web1 ~]# chkconfig iptables off [root@Web1 ~]# service iptables stop [root@Web1 ~]#
[root@LVS-master ~]# yum install ipvsadm [root@LVS-master ~]# chkconfig ipvsadm on [root@LVS-master ~]# service ipvsadm start [root@LVS-master ~]# ipvsadm IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn [root@LVS-master ~]#
安裝依賴包和必須工具
[root@LVS-master ~]# yum -y install kernel-devel gcc openssl popt popt-devel libnl libnl-devel popt-static openssl openssl-devel wget [root@LVS-master ~]# wget http://www.keepalived.org/software/keepalived-1.2.16.tar.gz [root@LVS-master ~]# tar -zxvf keepalived-1.2.16.tar.gz -C /usr/local/src/ [root@LVS-master ~]# cd /usr/local/src/keepalived-1.2.16/ [root@LVS-master keepalived-1.2.16]# ./configure --prefix=/usr/local/keepalived-1.2.16 && make && make install [root@LVS-master keepalived-1.2.16]# cd [root@LVS-master ~]# ln -s /usr/local/keepalived-1.2.16 /usr/local/keepalived [root@LVS-master ~]# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ [root@LVS-master ~]# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ [root@LVS-master ~]# ln -s /usr/local/keepalived/etc/keepalived /etc/ [root@LVS-master ~]# ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/
將keepalived配置成系統服務
[root@LVS-master ~]# chkconfig --add keepalived [root@LVS-master ~]# chkconfig keepalived on [root@LVS-master ~]# chkconfig --list keepalived keepalived 0:off 1:off 2:on 3:on 4:on 5:on 6:off [root@LVS-master ~]# service keepalived start Starting keepalived: [ OK ] [root@LVS-master ~]#
[root@LVS-master ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak [root@LVS-master ~]# vim /etc/keepalived/keepalived.conf [root@LVS-master ~]# more /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { jedy@qq.com #接受通知郵件的email地址 } notification_email_from jedy@189.cn #發送通知郵件的email地址 smtp_server smtp.189.cn smtp_connect_timeout 30 router_id LVS_MASTER #BACKUP上修改成LVS_BACKUP } vrrp_instance VI_1 { state MASTER #BACKUP上修改成BACKUP interface eth0 #通訊端口 virtual_router_id 51 #虛擬路由標識,主從相同 priority 100 #BACKUP上修改成90 advert_int 1 #主從心跳檢測時間 authentication { auth_type PASS #主從認證方式必須一致 auth_pass 1111 #主從認證密碼必須一致 } virtual_ipaddress { #Web虛擬IP(VTP) 10.10.6.200 } } virtual_server 10.10.6.200 80 { #定義虛擬IP和端口 delay_loop 6 #檢查真實服務器時間,單位秒 lb_algo rr #設置LVS負載調度算法,rr爲輪訓 lb_kind DR #設置LVS負載均衡DR模式(這裏能夠根據須要改爲tun或nat,若是修改,後端的web服務器也要作相應更改) persistence_timeout 60 #會話持久時間,同一IP的鏈接60秒內被分配到同一臺真實服務器(測試時能夠將這個註釋) protocol TCP #使用TCP協議檢查realserver狀態 real_server 10.10.6.211 80 { #第一個web服務器 weight 1 #節點權重值 TCP_CHECK { #健康檢查方式 connect_timeout 3 #鏈接超時 nb_get_retry 3 #重試次數 delay_before_retry 3 #重試間隔,單位秒 } } real_server 10.10.6.212 80 { #第二個web服務器 weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } } [root@LVS-master ~]# [root@LVS-master ~]# service keepalived restart
[root@Web1 ~]# getenforce Disabled [root@Web1 ~]# chkconfig iptables off [root@Web1 ~]# service iptables stop [root@Web1 ~]#
[root@Web1 ~]# yum install httpd php php-fpm [root@Web1 ~]# vi /etc/httpd/conf/httpd.conf ServerName :80 [root@Web1 ~]# service httpd restart [root@Web1 ~]# service php-fpm restart [root@Web1 ~]# [root@Web1 ~]# [root@Web1 ~]# more /var/www/html/phpinfo.php <?php phpinfo() ?> [root@Web1 ~]# [root@Web1 ~]# more /var/www/html/index.html \\web2 這裏所有要作相應的修改 <html> <head> <title>web1</title> </head> <body> hostname: Web1<br>ip : 10.10.6.211 </body> </html> [root@Web1 ~]# [root@Web1 ~]# [root@Web1 ~]#
http://10.10.6.211/phpinfo.php
http://10.10.6.212/phpinfo.php
http://10.10.6.211
http://10.10.6.212
[root@Web1 ~]# vi dr-rs.sh [root@Web1 ~]# more dr-rs.sh #!/bin/bash # # Script to start LVS DR real server. # description: LVS DR real server # . /etc/rc.d/init.d/functions VIP=10.10.6.200 host=`/bin/hostname` case "$1" in start) # Start LVS-DR real server on this machine. /sbin/ifconfig lo down /sbin/ifconfig lo up 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 /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up /sbin/route add -host $VIP dev lo:0 echo "LVS RealServer Start OK" ;; stop) # Stop LVS-DR real server loopback device(s). /sbin/ifconfig lo:0 down 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 "LVS RealServer Stoped OK" ;; status) # Status of LVS-DR real server. islothere=`/sbin/ifconfig lo:0 | grep $VIP` isrothere=`netstat -rn | grep "lo:0" | grep $VIP` if [ ! "$islothere" -o ! "isrothere" ];then # Either the route or the lo:0 device # not found. echo "LVS-DR real server Stopped." else echo "LVS-DR real server Running." fi ;; *) # Invalid entry. echo "$0: Usage: $0 {start|status|stop}" exit 1 ;; esac [root@Web1 ~]# chmod +x dr-rs.sh [root@Web1 ~]# ./dr-rs.sh start LVS RealServer Start OK [root@Web1 ~]# [root@Web1 ~]# echo "/root/dr-rs.sh start" >>/etc/rc.local [root@Web1 ~]#
http://10.10.6.200
第一次訪問
第二次訪問
第三次訪問
第四次訪問
[root@LVS-master log]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 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:50:56:ae:2d:e1 brd ff:ff:ff:ff:ff:ff inet 10.10.6.201/24 brd 10.10.6.255 scope global eth0 inet 10.10.6.200/32 scope global eth0 inet6 fe80::250:56ff:feae:2de1/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000 link/ether 00:50:56:ae:32:1e brd ff:ff:ff:ff:ff:ff [root@LVS-master log]#
http://10.10.6.200 #訪問一直刷新會輪訓顯示10.10.6.211/212模擬宕掉主LVS,服務器照常工做,再宕掉Web1,這時只會顯示Web2,這樣就實現ip負載均衡,高可用集羣。當主LVS恢復後,會切換成主動服務器,若是Keepalived監控模塊檢測web故障恢復後,恢復的主機又將此節點加入集羣系統中。
關閉LVS-master
[root@LVS-master ~]# service keepalived stop
從LVS-backup的log中看到,服務狀態變爲master
[root@LVS-backup log]# tail -f messages Apr 9 11:29:43 LVS-backup Keepalived_vrrp[2322]: VRRP_Instance(VI_1) Transition to MASTER STATE Apr 9 11:29:44 LVS-backup Keepalived_vrrp[2322]: VRRP_Instance(VI_1) Entering MASTER STATE Apr 9 11:29:44 LVS-backup Keepalived_vrrp[2322]: VRRP_Instance(VI_1) setting protocol VIPs.
經過ip addr,查看 VIP在LVS-backup eth0端口上
[root@LVS-backup log]# ip add 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 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:50:56:ae:06:2a brd ff:ff:ff:ff:ff:ff inet 10.10.6.202/24 brd 127.255.255.255 scope global eth0 inet 10.10.6.200/32 scope global eth0 inet6 fe80::250:56ff:feae:62a/64 scope link valid_lft forever preferred_lft forever
開啓LVS-master
[root@LVS-master ~]# service keepalived start
從LVS-master的log中看到,服務狀態變爲master,接管VIP
[root@LVS-master log]# tail -f messages Apr 9 11:31:57 LVS-master Keepalived_vrrp[2764]: VRRP_Instance(VI_1) Entering MASTER STATE Apr 9 11:31:57 LVS-master Keepalived_vrrp[2764]: VRRP_Instance(VI_1) setting protocol VIPs. Apr 9 11:31:57 LVS-master Keepalived_healthcheckers[2763]: Netlink reflector reports IP 10.10.6.200 added
配置完成