LVS-DR配置篇
此处主要介绍VS/DR模式,包括与keepalived和heartbeat的结合都是VS/DR模式的。
VS/DR模式
环境是redhat企业6.5版本的Linux系统,server1作为负载调度器VS,server3和server4作为后端服务器,开启httpd服务。
负载调度器VS的配置:
安装LVS的软件ipvsadm;
[root@server1 ~]# yum install ipvsadm -y
此版本在安装软件时需要在yum源中加入HighAvailability,LoadBalancer,ResilientStorage,ScalableFileSystem项;
建立一个虚拟服务器,VIP为172.25.31.100,开启端口为80,调度模式为rr轮询;
[root@server1 ~]# ipvsadm -A -t 172.25.31.100:80 -s rr
在虚拟服务器中加入后端真实服务器server3和server4,-g表示为DR模式;
[root@server1 ~]# ipvsadm -a -t 172.25.31.100:80 -r 172.25.31.3:80 -g [root@server1 ~]# ipvsadm -a -t 172.25.31.100:80 -r 172.25.31.4:80 -g
查看LVS策略是否添加上;
[root@server1 ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 172.25.31.100:80 rr -> 172.25.31.3:80 Route 1 0 0 -> 172.25.31.4:80 Route 1 0 0
在网络上添加VIP;
[root@server1 ~]# ip addr add 172.25.31.100/24 dev eth0
后端服务器RS的配置:
后端服务器server3和server4的配置相同,这里以server3为例;在server3上添加VIP;
[root@server3 ~]# ip addr add 172.25.31.100/24 dev eth0
下载arptables软件,隐藏RS;
[root@server3 ~]# yum install arptables_jf.x86_64 -y
配置arptables使得所有访问server3的VIP的数据包都被丢弃;
[root@server3 ~]# arptables -A IN -d 172.25.31.100 -j DROP
配置arptables使得从VIP传输的数据全部以本身IP传输;
[root@server3 ~]# arptables -A OUT -s 172.25.31.100 -j mangle --mangle-ip-s 172.25.31.3
测试
在物理主机上对配置好的LVS进行测试,根据结果图可以看出,成功实现了负载均衡;
LVS-heartbeat
原理篇提到过LVS是单点模式,而且并没有对RS进行健康检查,所以用heartbeat使得LVS实现双机热备,并且使用ldirectord对RS进行健康检查。LVS为VS/DR模式,在配置前,先删除之前配置好的LVS策略,并且删除配置的VIP,RS端的server3和server4配置不变;
[root@server1 ha.d]# ip addr del 172.25.31.100/24 dev eth0
[root@server1 ha.d]# ipvsadm -C
[root@server1 ha.d]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
server1和server2的配置完全相同,这里以server1为例,server1是主VS,server2是备用VS,LVS-heartbeat的配置如下:
安装软件,软件包如下图所示;
heartbeat和ldirectord的配置文件是/etc/ha.d目录下的ha.cf 、authkeys、haresources和ldirectord.cf,但是安装好软件后并没有配置文件,需要从其他地方复制;
[root@server1 heartbeat]# cd /usr/share/doc/heartbeat-3.0.4/ [root@server1 heartbeat-3.0.4]# cp authkeys ha.cf haresources /etc/ha.d/ [root@server1 ~]# cd /usr/share/doc/ldirectord-3.9.5/ [root@server1 ldirectord-3.9.5]# cp ldirectord.cf /etc/ha.d/
分别对这四个配置文件进行配置,此处皆是本人设置的实际配置,如果有其他需要还可以进行其他的设置,其中未列出注释项;
ha.cf
[root@server1 ha.d]# vim /etc/ha.d/ha.cf debugfile /var/log/ha-debug logfile /var/log/ha-log logfacility local0 keepalive 2 deadtime 30 warntime 10 initdead 120 udpport 694 bcast eth0 auto_failback on # 表示自动回切 node server1 # 在前的是主,在后的是备 node server2 ping 172.25.31.250
authkeys,配置完成后必须将其修改为600;
[root@server1 ha.d]# vim /etc/ha.d/authkeys auth 3 3 md5 Hello! [root@server1 ha.d]# chmod 600 /etc/ha.d/authkeys
haresources
[root@server1 ha.d]# vim /etc/ha.d/haresources server1 IPaddr::172.25.31.100/24/eth0 ldirectord httpd
ldirectord.cf
[root@server1 ha.d]# vim /etc/ha.d/ldirectord.cf checktimeout=3 checkinterval=1 autoreload=yes quiescent=no virtual=172.25.31.100:80 real=172.25.31.3:80 gate real=172.25.31.4:80 gate fallback=127.0.0.1:80 gate service=http scheduler=rr protocol=tcp checktype=negotiate checkport=80 request="index.html"
因为heartbeat是高可用套件,ipvsadm和ldirectord都是自动启动的,VIP也是自动添加的,所以不用手动添加;
对server2也作如上配置,完成后启动heartbeat;
测试
高可用测试:
启动heartbeat之后,server1上可以看到自动添加了VIP和LVS策略;当关闭server1的heartbeat之后,VIP和LVS策略会自动加到server2上,因为在配置文件中设置的自动回切,所以当server1重新启动后,VIP和LVS策略又会重新回到server1上;
RS健康检查测试
当关闭后端服务器的server3的httpd服务后,VS端的LVS策略上会自动取消server3的策略,当其重新开启,该策略又会加上去;根据测试结果可以看出,LVS-heartbeat可以解决LVS的单点问题和对后端服务器没有健康检查的问题,使得LVS在实际应用中具有更多的用途;
LVS-keepalived
LVS-keepalived是实现LVS高可用的另一种方式,该方式应用的较LVS-heartbeat多一点,且不需要借助其他软件来实现后端服务器的健康检查;
LVS-keepalived的配置所示,本此配置只代表个人,使用时可以根据实际情况配置;
本次配置采用server2为主VS,server1为备用VS,在server1和server2上均作如下配置,此处以server2为例,但是在server1中编辑配置文件时略有不同,会在配置文件中说明;
keepalived的安装
在官网上下载源码安装包,本次使用的是keepalived-1.3.5.tar.gz,解压后安装,源码包的安装不作赘述;
[root@server2 keepalived-1.3.5]# ./configure --prefix=/usr/local/keepalived --with-init=SYSV [root@server2 keepalived-1.3.5]# make [root@server2 keepalived-1.3.5]# make install
使用以下步骤复制配置文件和所需文件等;
[root@server2 keepalived]# cp -r /usr/local/keepalived/etc/keepalived/ /etc [root@server2 keepalived]# chmod +x /usr/local/keepalived /etc/rc.d/init.d/keepalived [root@server2 keepalived]# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/ [root@server2 keepalived]# cp /usr/local/keepalived/sbin/keepalived /sbin [root@server2 keepalived]# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
keepalived的配置
keepalived的配置文件是/etc/keepalived/keepalived.conf,server1的配置会有所不同,会在代码框中说明;
keepalived的配置文件编写是非常严格的,配置文件内容如下:
[root@server2 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
# vrrp_strict # 如果不注释,启动后会在iptables中加入策略,导致数据无法传入
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER # server1中此处应是 BACKUP
interface eth0
virtual_router_id 99
priority 100 # server1中此处应该小于100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.31.100/24/eth0 # 设置的VIP
}
}
virtual_server 172.25.31.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR # 工作模式为DR
# persistence_timeout 50 # 此处是持续连接,在需要连续访问时开启,如lftp、mysql等
protocol TCP
real_server 172.25.31.3 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.25.31.4 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
- 配置完成后开启keepalived,后端服务器server3和server4配置不变;
- 检测方式与LVS-heartbeat相同,可以检测出LVS-keepalived实现了LVS的高可用和健康检查;