CentOS6.6高可用集羣LVS+Keepalived

類別:轉載 服務器

本文參考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

1、說明

目的:使用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 ~]#

(二)安裝ipvsadm

[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 ~]#

3、Keepalived配置

(一)安裝keepalived(以LVS-master爲例,LVS-backup相同)

安裝依賴包和必須工具

[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 ~]#

(二)keepalived配置(以LVS/DR模式爲例)

1.LVS-master的keepalived 配置(LVS-backup只修改router_id、state和priority)
[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

4、後臺Web服務器設置(以web1爲例,web2相同)

(一)關閉iptables和selinux

[root@Web1 ~]# getenforce
Disabled
[root@Web1 ~]# chkconfig iptables off
[root@Web1 ~]# service iptables stop
[root@Web1 ~]#

(二)安裝apache和php

[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 ~]#

(三)測試web站點:

http://10.10.6.211/phpinfo.php

wps759A.tmp

http://10.10.6.212/phpinfo.php

wps75AA.tmp

http://10.10.6.211

wps75AB.tmp

http://10.10.6.212

wps75BC.tmp

(四)Real Server啓動腳本(以web1爲例,web2相同)

[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 ~]#

5、測試Keepalived

1.測試LVS功能

http://10.10.6.200

第一次訪問

wps75BD.tmp

第二次訪問

wps75BE.tmp

第三次訪問

wps75CF.tmp

第四次訪問

wps75D0.tmp

[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]#

wps75D1.tmp

2.測試Keepalived功能

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

 

配置完成

相關文章
相關標籤/搜索