1      开始配置lvs 主调度服务器<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

本文档采用的是 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   真实服务器 1 ip 地址

RIP2=192.168.48.86   真实服务器 2 ip 地址

#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!

1 2 3 表示认证算法选择,这里选择了 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      采用网卡 eth0 udp 单播来通知心跳, ip 应为对方 IP

ucast eht0 192.168.48.84    ( 在备份 dr 这里的 ip 就写主 dr ip)

# 注:广播,单播,多播,以上三种任选其一即可

# ping    192.168. 1 .1   ping 我内部网关地址,主要是利用 ipfail 功能检测主服务器网络是否正常

auto_failback on  主节点重启成功后,资源是自动拿回到主节点还是等到副 节点 dow n 调后拿回资源

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