基本概念
LVS
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。目的是使用集群技术和Linux操作系统实现一个高性能、高可用的服务器,目前主要有三种负载均衡方式:NAT、TUN和DR。本文以DR方式来简单了解其构建过程,结构图参考如下:
Keepalived
Keepalived是一个类似于layer3, 4 & 7交换机制的软件,也就是我们平时说的第3层、第4层和第7层交换。主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现。
基础环境部署
包含四台服务器,两台RealServer、两台LVS(MASTER、BACKUP)
1、环境简介
操作系统:CentOS 7
Keepalived版本:Keepalived-1.2.13
ipvsadm版本:1.27
2、服务器地址
VIP:192.168.0.100
DR1:192.168.0.101
DR2:192.168.0.102
RS1:192.168.0.103
RS2:192.168.0.104
3、关闭防火墙(所有服务器)
systemctl stop firewalld.service
RealServer部署
RS1服务器部署
1、在 /etc/init.d 目录下创建realserver服务,代码如下:
#!/bin/bash VIP=192.168.0.100 /etc/rc.d/init.d/functions case "$1" in start) ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP 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 echo "RealServer Start OK" ;; stop) ifconfig lo:0 down /sbin/route del $VIP >/dev/null 2>&1 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 echo "RealServer Stoped" ;; *) echo "Usage:$0 {start|stop}" exit 1 esac exit 0
注:由于脚本中使用到 ifconfig 命令,但Centos7默认没有安装,可以通过 yum -y install net-tools
2、运行realserver服务
#添加执行权限 chmod 755 /etc/init.d/realserver #运行服务 service realserver start
3、部署httpd
#安装 httpd yum -y install httpd #启动httpd服务 service start httpd #生成测试页面 echo "From RealServer1 192.168.0.103" >/var/www/html/index.html
RS2服务器生成测试页面改成:
echo "From RealServer2 192.168.0.104" >/var/www/html/index.html
部署完毕,在本地主机访问 http://192.168.0.103,查看输出结果是否正确。
LVS部署
DR1部署
1、部署ipvsadm
#安装ipvsadm
yum -y install ipvsadm
<pre class="plain" name="code">#测试是否安装成功 ipvsadm -ln #出现以下内容代表安装成功 IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn
2、部署Keepalived
#安装keepalived yum -y install keepalived
#测试是否安装成功 keepalived -v #出现以下内容表示成功 Keepalived v1.2.13 (03/06,2015)
#配置keepalived
#打开配置文件 vi /etc/keepalived/keepalived.conf
<pre class="plain" name="code">! Configuration File for keepalived global_defs { router_id LVS_DEVEL #设置LVS的id,在一个网络内应该是唯一的 } vrrp_instance VI_1 { state MASTER #指定Keepalived的角色:MASTER、BACKUP interface eth0 virtual_router_id 51 priority 100 #定义使用优先级,越大级别越高,MASTER必须大于BACKUP advert_int 1 #设置MARSTER、BACKUP检查间隔,单位是秒 authentication { auth_type PASS #设置验证类型,主要有PASS和AH两种 auth_pass 1111 #验证密码 } virtual_ipaddress { 192.168.0.100 #设置DR的VIP,可多设,每行一个 } } virtual_server 192.168.0.100 80 { delay_loop 2 #设置健康检查时间,单位是秒 lb_algo wrr #设置负载算法 lb_kind DR #设置LVS实现LB机制,有NAT、TUN和DR三种 persistence_timeout 10 #会话保持时间,单位是秒 protocol TCP #指定转发协议类型、有TCP和UDP real_server 192.168.0.103 80 { weight 3 #配置节点权值,数字越大权值越高 TCP_CHECK { connect_timeout 3 #设置连接超时时间 nb_get_retry 3 #设置重试次数 delay_before_retry 1#设置重试间隔 connect_port 80 #设置端口号 } } real_server 192.168.0.104 80 { weight 3 TCP_CHECK { connect_timeout 1 nb_get_retry 1 delay_before_retry 1 connect_port 80 } } }
#重启keepalived服务 service keepalived restart
#查看ipvs结果 ipvsadm -ln #显示结果 IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.0.100:80 wrr persistent 10 -> 192.168.0.103:80 Route 3 0 0 -> 192.168.0.104:80 Route 3 0 0
<pre class="plain" name="code">#开启IPV4的转发功能 echo "net.ipv4.ip_forward=1" >>/etc/sysctl.conf
DR2部署
将配置文件中 state 改为BACKUP,priority 改为90
测试
负载均衡测试
1、本机上输入:http://192.168.0.100 ,查看输出结果:From RealServer2 192.168.0.104 ;
2、隔两分钟左右,刷新一下,查看结果:From RealServer1 192.168.0.103
高可用性测试
目前状态为MASTER ,停止DR1上的keepalived服务service keepalived stop
刷新访问页面,出现结果:From RealServer2 192.168.0.104
故障发生转移,BACKUP接管,页面访问正常,出现结果:From RealServer2 192.168.0.104