1、LVS介绍
LVS集群有DR、TUN、NAT三种配置模式,可以对www服务、FTP服务、MAIL服务等做负载均衡,下面通过搭建www服务的负载均衡实例,讲述基于DR模式的LVS集群配置。
1 lvs
[root@gb_pre_lvs_180_54 lvs]# vimlvs-dr-client.sh
2、Real server 的配置
在lvs的DR和TUn模式下,用户的访问请求到达真实服务器后,是直接返回给用户的,而不再经过前端的Director Server,
因此,就需要在每个Real server节点上增加虚拟的VIP地址,这样数据才能直接返回给用户,增加VIP地址的操作可以通过创建
脚本的方式来实现,创建文件/etc /init.d/lvsrs,脚本内容如下:
#!/bin/bash VIP=192.168.180.55 case "$1" in start) # 通过ipvsadm命令行方式配置LVS echo "start LVS real server" # 安装IPVS后,就可以配置LVS集群了,首先在Director Server上绑定一个虚拟IP(也叫VIP),此IP用于对外提供服务,执行如下命令: /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
# 然后给设备eth0:0指定一条路由,执行如下指令: /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
# 使前面的设置的参数生效 /sbin/sysctl -p
# 此操作是在回环设备上绑定了一个虚拟IP地址,并设定其子网掩码为255.255.255.255,与Director Server上的虚拟IP保持互通,然后禁止了本机的ARP请求。
;; stop) echo "stop LVS real server" /sbin/ifconfig lo:0 down echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce ;; *)exit 1 esac
|
lvs是通过在keepalived里面启动来着的。
3、源码安装 ipvsadm
安装配置ipvsadm,编写启动脚本
# version版本号码 wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz tar -xvf ipvsadm-1.26.tar.gz cd ipvsadm-1.26 make make install
|
启动脚本:
[root@/root/nagios/check_lvs lvs]# pwd /usr/local/lvs [root@/root/nagios/check_lvs lvs]# cat lvs-dr-server.sh #!/bin/bash VIP=10.254.3.17 RIP1=10.254.3.27 RIP2=10.254.3.28 PORT=80 case "$1" in start) echo "start LVS of DirectorServer" #Set the Virtual IP Address /sbin/ifconfig em1:1 $VIP broadcast $VIP netmask 255.255.255.255 up /sbin/route add -host $VIP dev em1:1 #Clear IPVS Table /sbin/ipvsadm -C #Set Lvs /sbin/ipvsadm -A -t $VIP:$PORT -s wlc /sbin/ipvsadm -a -t $VIP:$PORT -r $RIP1:$PORT -g /sbin/ipvsadm -a -t $VIP:$PORT -r $RIP2:$PORT -g #Run Lvs #/sbin/service ipvsadm start /sbin/ipvsadm ;;
stop) echo "stop LVS Directorserver" /sbin/ifconfig em1:1 down /sbin/ipvsadm -C #/sbin/service ipvsadm stop ;;
*) echo "Usage: $0 {start|stop}" exit 1 esac [root@/root/nagios/check_lvs lvs]# |
4、配置 keepalived 使其生效
安装keepalived:
[root@gb_pre_lvs_180_54 ~]#
wget http://www.keepalived.org/software/keepalived-1.2.8.tar.gz tar -xvf keepalived-1.2.8.tar.gz cd keepalived-1.2.8 ./configure --prefix=/usr/local/keepalived make make install cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/ mkdir /etc/keepalived |
配置keepadlived参数:
cat /etc/keepalived/keepalived.conf ############################################################## # global define # ##############################################################
global_defs { router_id LVS_PRE_NET_MASTER # 设置lvs的id,在一个网络内应该是唯一的 }
vrrp_sync_group VGM { group { VI_PRE_NET # 设置vrrp组 } }
################################################################ # vvrp_instance define # ################################################################
vrrp_instance VI_PRE_NET { state MASTER #设置lvs的状态,报错MASTER和BACKUP两种,必须大写 interface eth0 #设置对外服务的接口 lvs_sync_daemon_inteface eth0 #设置lvs监听的接口 virtual_router_id 16 #设置虚拟路由表示 priority 180 #设置优先级,数值越大,优先级越高 advert_int 5 #设置同步时间间隔 authentication { #设置验证类型和密码 auth_type PASS auth_pass LVSPRENET } virtual_ipaddress { #设置lvs vip 192.168.180.55 } } ############################################################## # virtual server setting # ##############################################################
virtual_server 192.168.180.55 80 { delay_loop 6 #健康检查时间间隔 lb_algo wlc #负载均衡调度算法 lb_kind DR #负载均衡转发规则
protocol TCP #协议 real_server 192.168.180.50 80 { weight 100 #设置权重 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.180.53 80 { weight 100 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }
#虚拟IP地址 virtual_server 192.168.180.55 443 { delay_loop 6 lb_algo wlc lb_kind DR
#2台真实IP地址 protocol TCP real_server 192.168.180.50 443 { weight 100 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 443 } } real_server 192.168.180.53 443 { weight 100 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 443 } } }
|
BTY:三台客户端的脚本都一样!
5、测试lVS+Keepalived
1) 首先测试各个readserver,确定各个readserver都能正常访问,测试realserver.sh脚本,看启动后能不能绑定lvs vip,停止后能不能去除绑定的vip
2) 测试lvs能否进行负载均衡转发,利用ipvsadm命令查看,如果想只当当前的请求转发到哪个服务器去了,可以用ipvsadm加选项来查看,其完整形式为:ipvsadm –lcn | grep 192.168.1.115
3) 停掉主lvs看lvs backup是否接管!
[root@gb_pre_lvs_180_54 software]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.180.55:http wlc
-> 192.168.180.50:http Route 100 1 0
-> 192.168.180.53:http Route 100 0 0
TCP 192.168.180.55:https wlc
-> 192.168.180.50:https Route 100 0 0
-> 192.168.180.53:https Route 100 0 0
[root@gb_pre_lvs_180_54 software]#