1      开始配置lvs 主调度服务器
本文档采用的是lvs-DR模式,该模式的特点是客户端的请求从调度器进入分配到真实服务器,然后真实服务器的响应是直接交付给客户端的。

1.1      修改2个调度器的hosts文件

[root@LVS-1 ~]# vi /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1               localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6
LVS-1  192.168.48.83
LVS-2  192.168.48.84

1.2      lvs_dr的配置

1.2.1     lvs_dr脚本代码

#!/bin/sh
# description: start LVS of Directorserver
VIP=192.168.48.88  (虚拟ip的地址)
RIP1=192.168.48.85  真实服务器1ip地址
RIP2=192.168.48.86  真实服务器2ip地址
#RIP3=221.236.28.106  如果有多个服务器节点的话,可以再这添加。
SERVICE=80    #http is used in this case
. /etc/rc.d/init.d/functions
case  $1  in
    start)
    echo "start LVS of DirectorServer"
    # set ip_forward&send_redirects
    echo "0" >/proc/sys/net/ipv4/ip_forward
    echo "1" >/proc/sys/net/ipv4/conf/all/send_redirects
    echo "1" >/proc/sys/net/ipv4/conf/default/send_redirects
    echo "1" >/proc/sys/net/ipv4/conf/eth0/send_redirects
    # set the Virtual IP Address
    /sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
    /sbin/route add -host $VIP dev eth0:0
    #Clear IPVS table
    /sbin/ipvsadm -C
    #set LVS
    /sbin/ipvsadm -A -t $VIP:$SERVICE -s rr  (如果需要session保持添加-p 默认保持300)
    /sbin/ipvsadm -a -t $VIP:$SERVICE -r $RIP1:$SERVICE -g -w 1
    /sbin/ipvsadm -a -t $VIP:$SERVICE -r $RIP2:$SERVICE -g -w 1
    #/sbin/ipvsadm -a -t $VIP:$SERVICE -r $RIP3:$SERVICE -g -w 1
    /sbin/ipvsadm --set 30 120 300
    #Run LVS
    /sbin/ipvsadm
    #end
    ;;
    stop)
    echo "close LVS Directorserver"
    /sbin/ipvsadm -C
    ;;
    *)
    echo "Usage: $0 {start|stop}"
    exit 1
esac
-s rr 是使用了轮叫算法,可以自行选择相应的算法,更改rr就可以了,ipvsadm -h查看帮助。-g 是使用lvs工作DR直接路由模式,也可自行修改)
  如果有多个realserver直接添加就可以了,之后启动此脚本就可以了。
 

1.3      lvs_switch的配置

lvs_switch代码
#!/bin/sh
# description: close lo:0 and arp_ignore
VIP=192.168.48.88  (虚拟ip的地址)
. /etc/rc.d/init.d/functions
case $1 in
    start)
    echo "start director server and close lo:0"
    #ifconfig lo:0 down
    echo "1" > /proc/sys/net/ipv4/ip_forward
    echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
    ;;
    stop)
    echo "start Real Server"
    echo "0" >/proc/sys/net/ipv4/ip_forward
    /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
    /sbin/route add -host $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
    ;;
    *)
    echo "Usage: lvs {start|stop}"
    exit 1
esac

1.3.1     给脚本赋予执行权限

chmod +x /etc/ha.d/resource.d/lvs_dr
chmod +x /etc/ha.d/resource.d/lvs_switch

1.3.2     ha.cfharesourcesauthkeysldirectord.cf都复制到/etc/ha.d/

cp  -rf  /usr/share/doc/heartbeat-2.1.3/ha.cf  /etc/ha.d
cp
  -rf  /usr/share/doc/heartbeat-2.1.3/authkeys  /etc/ha.d
cp
 -rf  /usr/share/doc/heartbeat-2.1.3/haresources  /etc/ha.d
cp
 -rf  /usr/share/doc/heartbeat-ldirectord-2.1.3/ldirectord.cf  /etc/ha.d
 

1.3.3     authkeys配置

 
配置authkeys
auth 3
#1 crc
#2 sha1 HI!
3 md5 Hello!
123表示认证算法选择,这里选择了md5算法
Authkeys权限必须是0600
chmod 0600 authkeys
 

1.3.4     haresources配置

 
配置haresources
该文件主节点和备份节点上要完全一致
 LVS-1   lvs_switch   192.168.48.88   lvs_dr   ldirectord
语法格式:
主节点机器名   脚本名称   虚拟ip   脚本名称  ldirectord
注:节点名字就查看计算机名
     uname -n (注节点必须写这个命令显示的名字)
(注:lvs_switch lvs_dr脚本必须位于/etc/init.d//etc/ha.d/resource.d下,且不能随机一启动)

1.3.5     ha.cf配置

配置ha.cf
debugfile /var/log/ha-debug    debbug日志文件路径
logfile /var/log/ha-log       heartbeat 日志文件路径
logfacility     local0          
keepalive  2         心跳检测时间间隔
#initdead 120      heartbeat第一次启动时启动其所控资源的时间
deadtime  10      多久没有检测到心跳时宣布死亡
warntime  10       指明心跳延迟的时间为十秒。当10秒钟内备份机不能联系上主机(当前活动的服务器,即无心跳信号),就会往日志中写入一个警告日志,但此时不会切换服务。
udpport 28855       heartbeat监听端口
#bcast    eth0          # Linux心跳路径,最好不要与正常生产网络中的设备混在一起
#mcast eth0 225.0.0.1 694 1 0  #说明:采用udp多播播来通知心跳,建议在副节点不只一台时使用
ucast eth0 对端节点IP      采用网卡eth0udp单播来通知心跳,ip应为对方IP
ucast eht0 192.168.48.84    (在备份dr 这里的ip就写主drip)
#注:广播,单播,多播,以上三种任选其一即可
#ping    192.168.1.1   ping我内部网关地址,主要是利用ipfail功能检测主服务器网络是否正常
auto_failback on  主节点重启成功后,资源是自动拿回到主节点还是等到副节点down调后拿回资源
watchdog /dev/watchdog      启动内核看门狗功能,能让系统在出现故障1分钟后重启该机器。这个功能可以帮助服务器在确实停止心跳后能够重新恢复心跳。如果使用该特性,则在内核中装入softdog内核模块,用来生成实际的设备文件,输入insmod softdog加载模块。
# stonith用来保证共享存储环境中的数据完整性
node    主节点机器     (必须同uname -n返回的主机名相同)
node    备份节点机器名
 
node  LVS-1
node  LVS-2
 

1.3.6     ldirectord.cf的配置

配置ldirectord.cf
# Global Directives
checktimeout=3   超时时间
checkinterval=1    检测真实服务器的间隔
fallback=127.0.0.1:80
autoreload=yes   表示修改ldirectord.cf配置文件ldirectord自动加载
logfile="/var/log/ldirectord.log"
quiescent=yes  如果真实服务器失败,ldirectord所采取的动作,注意如果主里设为yes,则必须在内核中修改下列文件:
echo "1" >/proc/sys/net/ipv4/vs/expire_quiescent_template
echo "1" >/proc/sys/net/ipv4/vs/expire_nodest_conn
 
# Sample for an http virtual service
virtual=虚拟IP:80
        real=(真实服务器IP1:80 gate
        real=(真实服务器IP2:80 gate
        real= 192.168.48.85:80 gate
real= 192.168.48.86:80 gate
        fallback=127.0.0.1:80 gate   如果两台真实服务器都无效,则定向本机的lo地址
        service=http           指定服务类型
        request="lvstest.html"  检查真实服务器时用到的页面
        receive="lvstest"       所请求页面内的内容
        scheduler=rr           调度方法,rr表示循环调用
        #persistent=600        tcp连接时间
        #netmask=255.255.255.255
        protocol=tcp           协议类型
        checktype=negotiate    ldirectord检测真实服务器的方式
        checkport=80
        request="lvstest.html"
  receive="lvstest
http配置的根目录增加lvetest.html,文件内容是lvestest
ftp配置的根目录增加lvetest.html,文件内容是lvestest