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
真实服务器
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.cf,haresources,authkeys,ldirectord.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