Load Balance 双网卡 eth0: 192.168.2.189 (对内) eth1: 192.168.2.41 (对外)
[root@server41 ~]# ifconfig eth0:0 192.168.2.189 netmask 255.255.255.0 up
[root@server41 ~]# /etc/init.d/heartbeat stop
Stopping High­Availability services: Done.
[root@server41 ~]# /etc/init.d/heartbeat start
Starting High­Availability services: INFO: Resource is stopped
Done.
查看已配置的虚拟 IP:192.168.2.189
[root@server41 ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 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 52:54:00:f2:f7:b3 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.41/24 brd 192.168.2.255 scope global eth0
inet 192.168.2.189/24 brd 192.168.2.255 scope global secondary eth0
inet6 fe80::5054:ff:fef2:f7b3/64 scope link
valid_lft forever preferred_lft forever
[root@server41 ~]# yum install ­y ipvsadm
查看当前加载策略
[root@server41 ~]# ipvsadm ­L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
­> RemoteAddress:Port Forward Weight ActiveConn InActConn
加载 rule 策略
[root@server41 ~]# ipvsadm ­A ­t 192.168.2.189:80 ­s rr
[root@server41 ~]# ipvsadm ­a ­t 192.168.2.189:80 ­r 192.168.2.40:80 ­g
[root@server41 ~]# ipvsadm ­a ­t 192.168.2.189:80 ­r 192.168.2.43:80 ­g
各参数对应解释:
­­add­service ­A
add virtual service with option
在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器
­­tcp­service ­t
service­address service­address is host[:port]
说明虚拟服务器提供的是 tcp 的服务[vip:port] or [real­server­ip:port]
­­add­server ­a
add real server with options
在内核虚拟服务器表的一条记录里添加一条新的真实服务器
­­scheduler ­s scheduler one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,the default scheduler is wlc.
使用的调度算法,有这样几个选项,默认的调度算法是: wlc.
­­real­server ­r server­address server­address is host (and port)
真实的服务器[Real­Server:port]
­­gatewaying ­g gatewaying (direct routing) (default)
指定 LVS 的工作模式为直接路由模式(也是 LVS 默认的模式
保存 rule 策略
[root@server41 ~]# /etc/init.d/ipvsadm save
查看加载后的 rule 策略
[root@server41 ~]# ipvsadm ­l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
­> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.2.189:http rr
­> server40.example.com:http Route 1 0 0
­> server43.example.com:http Route 1 0 0
绑定 vip
[root@server41 ~]# ifconfig eth0:0 192.168.2.189 netmask 255.255.255.0 up
两台 RealServer(server40.example.com,server43.example.com)设置
Default Gateway 指向 Director 的 LAN IP 即 192.168.2.41
[root@server40 ~]# yum install ­y httpd
[root@server40 ~]# echo 'server40.example.com' > /var/www/html/index.html
[root@server40 ~]# /etc/init.d/httpd start
[root@server40 ~]# ifconfig eth0:0 192.168.2.189 netmask 255.255.255.255 up
[root@server40 ~]# yum install ­y arptables_jf
[root@server40 ~]# arptables ­nL
Chain IN (policy ACCEPT)
target source­ip destination­ip source­hw destination­hw hlen op hrd pro
Chain OUT (policy ACCEPT)
target source­ip destination­ip source­hw destination­hw hlen op hrd pro
Chain FORWARD (policy ACCEPT)
target source­ip destination­ip source­hw destination­hw hlen op hrd pro
设置 vip 为 no­arp;
设置 arptables 中的 IN 链,表示外部访问时设置 arp 为关闭状态,即关闭 192.168.2.41 和
192.168.2.42,设置为 192.168.2.189,对外不响应
[root@server40 ~]# arptables ­A IN ­d 192.168.2.189 ­j DROP
设置 arptables 中的 OUT 链,表示内部访问外部时将 IP 设置为本主机的 IP(192.168.2.40);
[root@server40 ~]# arptables ­A OUT ­s 192.168.2.189 ­j mangle ­­mangle­ip­s 192.168.2.40
[root@server40 ~]# /etc/init.d/arptables_jf save
测试
选择一台 192.168.2.0/24 网段主机访问 http:// 192.168.2.189 反复刷新网页,每次出现的网页不同
则表示成功。
停掉 real server40 的 httpd 服务
[root@server40 ~]# /etc/init.d/httpd stop
[root@server41 ~]# ipvsadm ­l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
­> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.2.189:http rr
­> server40.example.com:http Route 1 0 21
­> server43.example.com:http Route 1 1 34
停止 real server40 的 httpd 服务后显示 ipvsadm 策略时,还是会显示 real server40 的 httpd 服务,
因为 heartbeat 服务没有检测其他服务是否开启的功能。
测试
选择一台 192.168.2.0/24 网段主机访问 http:// 192.168.2.189 反复刷新网页,第一次出现每次出现
正常运行的 httpd 服务的 real server43 的 httpd 配置文件中的 server43.example.com 的网页,第二
次出现错误页面,(因为 real server40 的 httpd 服务已经关闭了)不同则表示 成功。
安装可以检测服务是否正常运行的 ldirectord 软件包
[root@server41 ~]# yum localinstall ­y ldirectord­3.9.2­1.2.x86_64.rpm
查看 ldirectord 软件包的配置文件目录
[root@server41 ~]# rpm ­ql ldirectord
/etc/ha.d/resource.d
/etc/ha.d/resource.d/ldirectord
/etc/init.d/ldirectord
/etc/logrotate.d/ldirectord
/sbin/rcldirectord
/usr/sbin/ldirectord
/usr/share/doc/packages/ldirectord
/usr/share/doc/packages/ldirectord/ldirectord.cf
/usr/share/man/man8/ldirectord.8.gz
将 ldirectord 软件包的配置文件复制到/etc/ha.d/中
[root@server41 ~]# cp /usr/share/doc/packages/ldirectord/ldirectord.cf /etc/ha.d/
[root@server41 ha.d]# /etc/init.d/ldirectord status
Can't locate IO/Socket/INET6.pm in @INC (@INC contains: /usr/local/lib64/perl5
/usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5
/usr/share/perl5 .) at /usr/sbin/ldirectord line 3061.
BEGIN failed­­compilation aborted at /usr/sbin/ldirectord line 3061.
表示缺少安装包
[root@server41 ha.d]# yum install ­y perl­IO­Socket­INET6
在 ldirector 配置文件中设置 LVS 调度列表
[root@server41 ha.d]# vim ldirectord.cf
# Sample for an http virtual service
virtual=192.168.2.189:80
#设置虚拟 IP 的 80 端口开启;
real=192.168.2.40:80 gate
#设置 real server40 的 80 端口开启,
gate 表示 LVS 为直连方式(DR);
real=192.168.2.43:80 gate
fallback=127.0.0.1:80 gate
#表示如果两台 real server 服务都停掉
后,server41 调度机会充当 real server 开启 80 端口;
service=http
scheduler=rr
#persistent=600
#netmask=255.255.255.255
protocol=tcp
checktype=negotiate
checkport=80
request="index.html"
# receive="Test Page"
# virtualhost=www.x.y.z
添加 ldirectord 服务到 server41 的 heartbeat 配置文件中
[root@server41 ha.d]# vim haresources
server41.example.com IPaddr::192.168.2.189/24/eth0 httpd ldirectord
#加入 ldirectord 服务
[root@server41 ha.d]# scp ldirectord.cf haresources 192.168.2.42:/etc/ha.d/ #将修改好的 ldirectord
服务配置文件同步到备机(192.168.2.42)上;
刷掉 ipvsadm 策略
[root@server41 ~]# ipvsadm ­C
停掉主调度器的 heartbeat 服务
[root@server41 ha.d]# /etc/init.d/heartbeat stop
分别开启主副调度器的 heartbeat 服务
[root@server41 ha.d]# /etc/init.d/heartbeat start
[root@server42 ha.d]# /etc/init.d/heartbeat start
查看当前 ipvsadm 策略
[root@server41 ha.d]# ipvsadm ­l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
­> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.2.189:http rr
­> server40.example.com:http Route 1 0 0
­> server43.example.com:http Route 1 0 0
关闭 real server40 的 httpd 服务
[root@server40 ~]# /etc/init.d/httpd stop
此时 ipvsadm 策略中将检测到 real server40 的 httpd 服务已关闭,所以不显示
[root@server41 ha.d]# ipvsadm ­l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
­> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.2.189:http rr
­> server43.example.com:http Route 1 0 3
测试
选择一台 192.168.2.0/24 网段主机访问 http:// 192.168.2.189 反复刷新网页,每次出现的网页都相
同(显示内容为正常运行的 httpd 服务的 real server43 的 httpd 配置文件中的 server43.example.com)
则表示 成功。
http://zh.linuxvirtualserver.org
Piranha Configuration Tool(图形化配置)
先停止 heartbeat 心跳服务,先停备机,再停主机,防止回切
[root@server42 ~]# /etc/init.d/heartbeat status
heartbeat is stopped. No process
[root@server42 ~]# chkconfig heartbeat off
[root@server41 ~]# /etc/init.d/heartbeat status
heartbeat is stopped. No process
[root@server41 ~]# /etc/init.d/ldirectord status
ldirectord is stopped for /etc/ha.d/ldirectord.cf
[root@server41 ~]# chkconfig heartbeat off
[root@server41 ~]# yum install ­y piranha
当配置 Load Balancer 外挂程式时,先透过 Piranha Configuration T ool 配置主路由器.首先确认
piranha­gui 服务运行,并且已设置 Piranha密码;
[root@server41 ~]# piranha­passwd
New Password:
Verify:
Adding password for user piranha
[root@server41 ~]# /etc/init.d/piranha­gui start
[root@server41 ~]# netstat ­antlp
tcp 0 0 :::3636 :::* LISTEN 10403/httpd
pulse服务
这是启动所有与 LVS 路由器相关的 daemon(守护进程) 的控制程序。在开机时,此 daemon 会由
/etc/rc.d/init.d/pulse script 所启动。然后会读取配置文件/etc/sysconfig/ha/lvs.cf。在启用中的 LVS
路由器上 pulse 会启动 LVS daemon。在备用的路由器上 pulse 会判断启用中的路由器的健康状
态。方法是以使用者配置的间隔,送出心跳讯息(heartbeat).如果启用中的 LVS 路由器在此间隔
中没有回应,它会启动呗援程序。当进行备援程序时,借用路由器上的 pulse 会指示启用中的路
由器的 pulse daemon 关闭所有 LVS 服务,并启动 send_arp 程式以重新指定浮动 IP(虚拟 IP)地址
给备用路由器的 MAC 位址,然后启动 LVS daemon.
打开图形化配置:打开浏览器,开启 http://localhost:3636 或 http://主机 IP:3636,
(http://192.168.2.41:3636),输入用户名(piranha)和设置的密码(redhat);
控制监控面板会显示受限制的 Load Balancer 外挂程式,runtime 状态.它会显示 pulse daemon 的状
态,LVS 的路由表、以及 LVS 衍生的 nanny 程序.
主伺服器(主机 server41)面板中设定主 LVS 节点的公开可用真实 IP 位址(192.168.2.41);
第一次进入 REDUNDANCY 面板设置时,若要配置 LVS 路由器,选择启用按钮:
虚拟伺服器面板所显示的每套伺服器皆可在此面板中进行配置,要新增服务可按‘新增’按钮,
新增了虚拟伺服器之后,若要进行配置,按‘编辑’按钮进行配置,配置好后按
‘(DE)ACTIVATE’进行激活;
添加 Apache 服务,打开 80 端口,设置虚拟 IP 为 192.168.2.189,虚拟网卡为 eth0:0,Persistence 表
示允许持续的个数 300 个,Scheduling 表示所用算法;
分别添加 realserver IP 为 192.168.2.40 和 192.168.2.43 主机的 Apache 服务
realserver40 和 realserver43 主机安装 vsftpd 包,并在配置目录中建立文件 server40 和 server43;
[root@server40 ~]# yum install ­y vsftpd
[root@server40 ~]# /etc/init.d/vsftpd start
[root@server40 ~]# cd /var/ftp/
[root@server40 ftp]# touch server40
添加 ftp 服务,打开 21 端口,设置虚拟 IP 为 192.168.2.189,虚拟网卡为 eth0:0,Persistence 表示允
许持续的个数 300 个,Scheduling 表示所用算法;
成功设置以 vip 为 192.168.2.189 的 Apache 和 ftp 服务,以虚拟网卡 eth0:0,配置好后按
‘(DE)ACTIVATE’进行激活:
[root@server41 ~]# vim /etc/sysconfig/ha/lvs.cf
serial_no = 54
primary = 192.168.2.41
service = lvs
backup_active = 1
backup = 192.168.2.42
heartbeat = 1
heartbeat_port = 539
keepalive = 6
deadtime = 18
network = direct
debug_level = NONE
monitor_links = 1
syncdaemon = 0
virtual www {
active = 1
address = 192.168.2.189 eth0:0
vip_nmask = 255.255.255.0
port = 80
send = "GET / HTTP/1.0\r\n\r\n"
expect = "HTTP"
use_regex = 0
load_monitor = none
scheduler = rr
protocol = tcp
timeout = 6
reentry = 15
quiesce_server = 0
server server40.example.com {
address = 192.168.2.40
active = 1
port = 80
weight = 1
}
server server43.example.com {
address = 192.168.2.43
active = 1
port = 80
weight = 1
}
}
virtual ftp {
active = 1
address = 192.168.2.189 eth0:10
vip_nmask = 255.255.255.0
port = 21
persistent = 300
use_regex = 0
load_monitor = none
scheduler = rr
protocol = tcp
timeout = 6
reentry = 15
quiesce_server = 0
server server40.example.com {
address = 192.168.2.40
active = 1
port = 21
weight = 1
}
server server43.example.com {
address = 192.168.2.43
active = 1
port = 21
weight = 1
}
}
[root@server41 ~]# scp lvs.cf 192.168.2.42:/etc/sysconfig/ha/
[root@server41 ~]# /etc/init.d/pulse start
Starting pulse:
[root@server41 ~]# ipvsadm ­l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
­> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.2.189:ftp rr persistent 300
­> server40.example.com:ftp Route 1 0 0
­> server43.example.com:ftp Route 1 0 0
TCP 192.168.2.189:http rr persistent 300
­> server40.example.com:http Route 1 0 0
­> server43.example.com:http Route 1 0 0
测试
选择一台 192.168.2.0/24 网段主机访问 http:// 192.168.2.189 反复刷新网页,每次出现的网页不同
(显示内容为正常运行的 httpd 服务的 real server43 的 httpd 配置文件中的 server43.example.com 和
real server40 的 httpd 配置文件中的 server40.example.com)则表示成功。
关闭 real server43 的 httpd 服务
[root@server403~]# /etc/init.d/httpd stop
此时 ipvsadm 策略中将检测到 real server43 的 httpd 服务已关闭,所以不显示
[root@server41 ha.d]# ipvsadm ­l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
­> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.2.189:http rr
­> server40.example.com:http Route 1 0 3
测试
选择一台 192.168.2.0/24 网段主机访问 http:// 192.168.2.189 反复刷新网页,每次出现的网页都相
同(显示内容为正常运行的 httpd 服务的 real server40 的 httpd 配置文件中的 server40.example.com)
则表示 成功。
浏览器访问 ftp://192.168.2.19,网页显示