一,LVS功能详解html
1.1 LVS(Linux Virtual Server)介绍前端
LVS是Linux Virtual Server 的简写(也叫作IPVS),意即Linux虚拟服务器,是一个虚拟的服务器集群系统,能够在UNIX/LINUX平台下实现负载均衡集群功能。linux
1.2 企业网站LVS集群架构图nginx
1.3 IPVS软件工做层次图web
从上图咱们看出,LVS负载均衡调度技术是在Linux内核中实现的,所以,被称之为Linux虚拟服务器(Linux Virtual Server)。咱们使用该软件配置LVS时候,不能直接配置内核中的ipbs,而须要使用ipvs管理工具ipvsadm进行管理,或者经过Keepalived软件直接管理ipvs。算法
1.4 LVS体系结构与工做原理简单描述数据库
1.5 LVS 基本工做过程图apache
LVS基本工做过程以下图所示:vim
为了方便你们探讨LVS技术,LVS社区提供了一个命名的约定,内容以下表:windows
名称 |
缩写 |
说明 |
虚拟IP |
VIP |
VIP为Director用于向客户端计算机提供服务的IP地址。好比:www.yunjisuan.com域名就要解析到vip上提供服务 |
真实IP地址 |
RIP |
在集群下面节点上使用的IP地址,物理IP地址 |
Dirctor的IP地址 |
DIP |
Director用于链接内外网络的IP地址,物理网卡上的IP地址。是负载均衡器上的IP |
客户端主机IP地址 |
CIP |
客户端用户计算机请求集群服务器的IP地址,该地址用做发送给集群的请求的源IP地址 |
LVS集群内部的节点称为真实服务器(Real Server),也叫作集群节点。请求集群服务的计算机称为客户端计算机。
与计算机一般在网上交换数据包的方式相同,客户端计算机,Director和真实服务器使用IP地址彼此进行通讯。
不一样架构角色命名状况以下图:
1.6 LVS集群的3种常见工做模式介绍与原理讲解
IP虚拟服务器软件IPVS
LVS的四种工做模式
1.6.1 NAT模式-网络地址转换<==收费站模式(了解便可)
Virtual Server via Network Address Translation(VS/NAT)
调度时:目的IP改为RIP(DNAT)
返回时:源IP改为VIP(SNAT)
NAT模式特色小结:
1.6.2 TUN模式-(了解便可)
增长一个IP头部。经过IP隧道进行通讯(能够跨网段找到RS节点)
TUN模式特色小结:
1.6.3 DR模式-直接路由模式(重点)
Virtual Server via Direct Routing(VS/DR)
VS/DR模式是经过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器将响应后的处理结果直接返回给客户端用户。同VS/TUN技术同样,VS/DR技术可极大地提升集群系统的伸缩性。并且,这种DR模式没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,可是要求调度器LB与正式服务器RS节点都有一块网卡连在同一物理网段上,即必须在同一个局域网环境。
只修改目标MAC地址,经过MAC找到RS节点(没法跨网段找到RS节点)
DR模式特色小结:
1.6.4 FULLNAT模式-(了解便可)
淘宝的LVS应用模式
FULLANT特色:
1,源IP改为不一样的VIP和目的IP改为RIP
2,RS处理完毕返回时,返回给不一样的LVS调度器
3,全部LVS调度器之间经过session表进行Client Address的共享
1.7 LVS的调度算法
10种调度算法见以下表格(rr,wrr,wlc重点):
算法 |
说明 |
rr |
轮循调度,它将请求依次分配不一样的RS节点,也就是在RS节点中均摊请求。这种算法简单,可是只适合于RS节点处理性能相差不大的状况 |
wrr |
权重轮循,它将依据不一样RS节点的权值分配任务。权值较高的RS将优先得到任务,而且分配到的链接数将比权值较低的RS节点更多。相同权值的RS获得相同数目的链接数 |
dh |
目的地址哈希调度,以目的地址为关键字查找一个静态hash表来得到须要的RS |
sh |
源地址哈希调度,以源地址为关键字查找一个静态hash表来得到须要的RS |
wlc |
加权最小链接数调度,实际链接数除以权值,最小的RS做为分配的RS |
lc |
最小链接数调度,链接数最小的RS做为分配的RS |
lblc |
基于地址的最小链接数调度,未来自同一目的地址的请求分配给同一台RS节点 |
lblcr |
基于地址带重复最小链接数调度。(略) |
SED |
最短的指望的延迟(不成熟) |
NQ |
最小队列调度(不成熟) |
1.8 LVS的调度算法的生产环境选型
通常的网络服务,如Http,Mail,MySQL等,经常使用的LVS调度算法为:
实际使用中,这些算法的适用范围不限于这些。咱们最好参考内核中的链接调度算法的实现原理,根据具体业务需求合理的选型。
1.9 LVS集群的特色
LVS集群的特色能够归结以下:
(1)功能:
实现三种IP负载均衡技术和10种链接调度算法的IPVS软件。在IPVS内部实现上,采用了高效的Hash函数和垃圾回收机制,能正确处理所调度报文相关的ICMP消息(有些商品化的系统反而不能)。虚拟服务的设置数目没有限制,每一个虚拟服务都有本身的服务器集。它支持持久的虚拟服务(如HTTP Cookie 和HTTPS等须要该功能的支持),并提供详尽的统计数据,如链接的处理速率和报文的流量等。针对大规模拒绝服务(Deny of service)攻击,实现了三种防卫策略:有基于内容请求分发的应用层交换软件KTCPVS,它也是在Linux内核中实现。有相关的集群管理软件对资源进行检测,能及时将故障屏蔽,实现系统的高可用性。主,从调度器能周期性地进行状态同步,从而实现更高的可用性。
(2)适用性
1)后端真实服务器可运行任何支持TCP/IP的操做系统,包括Linux,各类Unix(如FreeBSD,Sun Solaris,HP Unix等),Mac/OS和windows NT/2000等。
2)负载均衡调度器LB可以支持绝大多数的TCP和UDP协议:
协议 |
内容 |
TCP |
HTTP,FTP,PROXY,SMTP,POP3,IMAP4,DNS,LDAP,HTTPS,SSMTP等 |
UDP |
DNS,NTP,TCP,视频,音频流播放协议等 |
无需对客户机和服务做任何修改,可适用大多数Internet服务。
3)调度器自己当前不支持windows系统。支持大多数的Linux和UINIX系统。
(3)性能
LVS服务器集群系统具备良好的伸缩性,可支持几百万个并发链接。配置100M网卡,采用VS/TUN或VS/DR调度技术,集群系统的吞吐量可高达1Gbits/s;如配置千兆网卡,则系统的最大吞吐量可接近10Gbits/s
(4)可靠性
LVS服务器集群软件已经在不少大型的,关键性的站点获得很好的应用,因此它的可靠性在真实应用获得很好的证明。
(5)软件许可证
LVS集群软件是按GPL(GNU Public License)许可证发行的自由软件,这意味着你能够获得软件的源代码,有权对其进行修改,但必须保证你的修改也是以GPL方式发行。
1.10 LVS的官方中文阅读资料
标题 |
地址 |
LVS项目介绍 |
|
LVS集群的体系结构 |
|
LVS集群中的IP负载均衡技术 |
|
LVS集群的负载调度 |
二,手动实现LVS的负载均衡功能(DR模式)
2.1 安装LVS软件
2.1.1 LVS应用场景说明
1)数据库及memcache等对内业务的负载均衡环境
管理IP地址 |
角色 |
备注 |
10.1.1.141 |
LVS调度器(Director) |
对外提供服务的VIP为10.1.1.240 |
10.1.1.142 |
RS1(真实服务器) |
|
10.1.1.143 |
RS2(真实服务器) |
特别提示:上面的环境为内部环境的负载均衡模式,即LVS服务是对内部业务的,如数据库及memcache等的负载均衡
2)web服务或web cache等负载均衡环境
外部IP地址 |
内部IP地址 |
角色 |
备注 |
|
10.1.1.141 |
LVS调度器(Director) |
对外提供服务的VIP为10.1.1.240 |
|
10.1.1.142 |
RS1(真实服务器) |
|
|
10.1.1.143 |
RS2(真实服务器) |
提示:
这个表格通常是提供Web或Web cache负载均衡的状况,此种状况特色为双网卡环境。这里把192.168.0.0/24假设为内网卡,192.168.200.0/24假设为外网卡。
2.1.2 实验一律述
内部IP(eth0) |
外部IP(eth1) |
角色 |
备注 |
10.1.1.141 |
无 |
LVS负载均衡器 |
VIP: 10.1.1.240 网关为: 10.1.1.150 |
10.1.1.142 |
无 |
Web01节点 |
网关为:10.1.1.150 |
10.1.1.143 |
无 |
Web02节点 |
网关为:10.1.1.150 |
10.1.1.144 |
无 |
内网客户端 |
网关为:10.1.1.150 |
|
192.168.1.201 |
外网客户端 |
不配网关 |
10.1.1.150 |
192.168.1.201 |
网关型防火墙 |
双网卡均无网关 |
2.1.3 两台Web配置简单的http服务
为了方便,咱们能够用yum简单装一个apache提供httpd服务进行测试,过程略。
2.1.4 开始安装LVS
如下的安装都是在LVS LB 10.1.141上
1)下载相关软件包
2)安装准备命令
[root@LVS-Master ~]# lsmod | grep ip_vs
[root@LVS-Master ~]# mount /dev/sr0 /media/cdrom/
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@LVS-Master ~]# yum -y install kernel-devel
[root@LVS-Master ~]# ls -ld /usr/src/kernels/2.6.32-431.el6.x86_64/
drwxr-xr-x 22 root root 4096 Jan 3 02:29 /usr/src/kernels/2.6.32-431.el6.x86_64/
[root@LVS-Master ~]# ln -s /usr/src/kernels/2.6.32-431.el6.x86_64/ /usr/src/linux
[root@LVS-Master ~]# ll -d /usr/src/linux/
drwxr-xr-x 22 root root 4096 Jan 3 02:29 /usr/src/linux/
[root@LVS-Master ~]# ll /usr/src/
total 12
drwxr-xr-x. 2 root root 4096 Sep 23 2011 debug
drwxr-xr-x. 12 501 games 4096 Oct 2 21:39 httpd-2.2.9
drwxr-xr-x. 3 root root 4096 Jan 3 02:29 kernels
lrwxrwxrwx 1 root root 39 Jan 3 02:31 linux -> /usr/src/kernels/2.6
.32-431.el6.x86_64/
特别注意:
此ln命令的连接路径要和uname -r输出结果内核版本对应,工做中若是作安装虚拟化可能有多个内核路径
若是没有/usr/src/kernels/2.6.32-431.el6.x86_64/路径,极可能是由于缺乏kernel-devel软件包。可经过yum进行安装
centos5.x版本不能用ipvs1.26
3)安装lvs命令:
[root@LVS-Master ~]# yum -y install createrepo
[root@LVS-Master ~]# ls
anaconda-ks.cfg install.log ipvsadm-1.26.tar.gz
httpd-2.2.9.tar.gz install.log.syslog rpm
[root@LVS-Master ~]# cd rpm/
[root@LVS-Master rpm]# createrepo -v .
[root@LVS-Master ~]# cd /etc/yum.repos.d/
[root@LVS-Master yum.repos.d]# vim CentOS-Media.repo
[root@LVS-Master yum.repos.d]# cat CentOS-Media.repo | grep -v "#"
[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///media/CentOS/
file:///media/cdrom/
file:///media/cdrecorder/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
[rpm]
name=rpm
baseurl=file:///root/rpm/
gpgcheck=0
enabled=1
[root@LVS-Master yum.repos.d]# yum -y clean all && yum makecache
[root@LVS-Master rpm]# yum -y install libnl* popt*
[root@LVS-Master ~]# ls
anaconda-ks.cfg install.log ipvsadm-1.26.tar.gz
httpd-2.2.9.tar.gz install.log.syslog rpm
[root@LVS-Master ~]# tar xf ipvsadm-1.26.tar.gz -C /usr/src
[root@LVS-Master ~]# cd /usr/src/ipvsadm-1.26/
[root@LVS-Master ipvsadm-1.26]# make && make install
[root@LVS-Master ipvsadm-1.26]# which ipvsadm
/sbin/ipvsadm
[root@LVS-Master ipvsadm-1.26]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@LVS-Master ipvsadm-1.26]# /sbin/ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@LVS-Master ipvsadm-1.26]# lsmod | grep ip_vs
ip_vs 125220 0
libcrc32c 1246 1 ip_vs
ipv6 317340 270 ip_vs,ip6t_REJECT,nf_conntrack_ipv6,nf_
defrag_ipv6
出现这个内容就表示LVS已经安装好,并加载到了内核
LVS安装小结:
1,CentOS5.X安装lvs,使用1.24版本。
2,CentOS6.X安装lvs,使用1.26版本。
3,安装lvs后,要执行ipvsadm把ip_vs模块加载到内核。
2.2 手动配置LVS负载均衡服务
2.2.1 手工添加lvs转发
(1)配置LVS虚拟IP(VIP)
[root@LVS-Master ~]# ifconfig eth0:0 10.1.1.240/24
[root@LVS-Master ~]# ifconfig eth0:0
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:64:FB:85
inet addr:10.1.1.240 Bcast:10.1.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
(2)手工执行配置添加LVS服务并增长两台RS
[root@LVS-Master ~]# ipvsadm -C
[root@LVS-Master ~]# ipvsadm -A -t 10.1.1.240:80 -s rr
[root@LVS-Master ~]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.1.1.240:http rr
[root@LVS-Master ~]# ipvsadm -a -t 10.1.1.240:80 -r 10.1.1.142:80 -g -w 1
[root@LVS-Master ~]# ipvsadm -a -t 10.1.1.240:80 -r 10.1.1.143:80 -g -w 1
(3)查看lvs配置结果
[root@LVS-Master ~]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.1.1.240:http rr
-> 10.1.1.142:http Route 1 0 0
-> 10.1.1.143:http Route 1 0 0
(4)ipvs配置删除方法
此时,能够打开浏览器访问http://10.1.1.240体验结果,若是没意外,是没法访问的。(RS将包丢弃了)
2.2.2 手工在RS端绑定
在NginxWebB上操做
[root@NginxWebB ~]# ifconfig lo:0 10.1.1.240/32 up
[root@NginxWebB~]# ifconfig lo:0
lo:0 Link encap:Local Loopback
inet addr:10.1.1.240 Mask:0.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
在NginxWebA上操做
[root@NginxWebA ~]# ifconfig lo:0 10.1.1.240/32 up
[root@NginxWebA ~]# ifconfig lo:0
lo:0 Link encap:Local Loopback
inet addr:10.1.1.240 Mask:0.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
2.2.3 浏览器测试LVS转发效果
注意:
在测试时候你会发现刷新看的都是同一个RS节点
这是由于浏览器的缓存问题
等一段时间之后,刷新就会从新负载均衡到新RS节点了
2.2.4 关于DR模式RS节点的ARP抑制的问题
[root@NginxWebA ~]# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@NginxWebA ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@NginxWebA ~]# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@NginxWebA ~]# echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
[root@NginxWebB ~]# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@NginxWebB ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@NginxWebB ~]# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@NginxWebB ~]# echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
用命令curl作测试
[root@内网Client ~]# echo "10.1.1.240 www.yunjisuan.com" >> /etc/hosts
[root@内网Client ~]# curl www.yunjisuan.com
10.1.1.142 www.yunjisuan.com
[root@内网Client~]# curl www.yunjisuan.com
10.1.1.143 www.yunjisuan.com
实现了负载均衡
[root@LVS-Master ~]# echo "10.1.1.240 www.yunjisuan.com" >> /etc/hosts
可是咱们发现让LVS本身curl本身,就会卡那里,为何??
由于如今是在LVS上,可是DR模式的特色就是不会再回LVS了,因此在LVS那里是不行的
2.2.5 配置网关型防火墙
防火墙的双网卡都不要设置网关,由于本身的就是网关
ifup eth1
外网Client网卡信息
配置完以后重启网络服务
service network reload
特别提示:
NginxWebA,NginxWebB,LVS负载均衡器,以及内网Client均将网关设置成网关型防火墙的eth0:10.1.1.150
2.2.6 配置内网客户端
内网客户端用于模拟lvs应用于内网的负载均衡状况
好比lvs数据库读负载均衡,好比lvs memcached缓存组负载均衡
因为这类型的负载均衡请求都是由内网服务器发起,所以用内网客户端来模拟
从上面能够看出,内网客户端模拟访问lvs负载均衡器,成功
2.2.7 配置外网客户端
外网客户端模拟的是lvs转发外网用户访问需求给RS节点处理的状况
模拟外网客户端,要求客户端不能配置任何网关
[root@LVS-Master ~]# ifconfig eth0:0 10.1.1.240/24 up
[root@LVS-Master ~]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.1.1.240:http rr
-> 10.1.1.142:http Route 1 0 0
-> 10.1.1.143:http Route 1 0 0
[root@LVS-Master ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.1.1.240:80 rr
-> 10.1.1.142:80 Route 1 0 0
-> 10.1.1.143:80 Route 1 0 0
[root@NginxWebA ~]# ifconfig lo:0 10.1.1.240/32 up
[root@NginxWebB ~]# ifconfig lo:0 10.1.1.240/32 up
因为外网客户端要访问内网的LVS须要通过网关防火墙的跳转,所以须要在防火墙服务器上作iptables的DNAT,配置以下:
[root@iptables ~]# iptables -t nat -A PREROUTING -d 192.168.1.200 -p tcp --dport 80 -i eth1 -j DNAT --to-destination 10.1.1.240:80
[root@iptables ~]# vim /etc/sysctl.conf
[root@iptables ~]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
error: "net.bridge.bridge-nf-call-iptables" is an unknown key
error: "net.bridge.bridge-nf-call-arptables" is an unknown key
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
进行外网客户端访问LVS负载均衡器测试
[root@外网Client ~]# echo "192.168.1.200 www.yunjisuan.com" >> /etc/hosts
[root@外网Client ~]# curl www.yunjisuan.com
10.1.1.143 www.yunjisuan.com
[root@外网Client ~]# curl www.yunjisuan.com
10.1.1.142 www.yunjisuan.com
[root@外网Client ~]# curl www.yunjisuan.com
10.1.1.143 www.yunjisuan.com
[root@外网Client ~]# curl www.yunjisuan.com
10.1.1.142 www.yunjisuan.com
访问防火墙的外网网卡IP,通过iptables的跳转访问到了内网的LVS调度器,进而返回Web节点处理结果。
2.3 arp抑制技术参数说明
2.4 开发脚本配置LVS负载均衡器端
2.4.1 LVS负载均衡器端自动配置脚本:
2.4.2 RS节点Web服务器端自动配置脚本
三,企业LVS负载均衡高可用最优方案(LVS+Keepalived)
3.1 实验二概述
内部IP(eth0) |
外部IP(eth1) |
角色 |
备注 |
10.1.1.141 |
无 |
LVS负载均衡器(主) |
VIP:10.1.1.240 |
10.1.1.140 |
无 |
LVS负载均衡器(备) |
VIP:10.1.1.250 |
10.1.1.142 |
无 |
Web01节点 |
|
10.1.1.143 |
无 |
Web02节点 |
|
10.1.1.144 |
无 |
内网客户端 |
3.2 LVS负载均衡器主和备安装LVS软件
先给主再添加一个网络适配器(网卡),而后克隆LVS主当作LVS备
[root@LVS-Master ~]# cd /etc/sysconfig/network-scripts/
[root@LVS-Master network-scripts]# cp ifcfg-eth0 ifcfg-eth1
[root@LVS-Master network-scripts]# vim ifcfg-eth1
[root@LVS-Master network-scripts]# ifdown eth1;ifup eth1
[root@LVS-Master network-scripts]# cat ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=10.1.1.141
NETMASK=255.255.255.0
GATEWAY=10.1.1.150
[root@LVS-Master network-scripts]# cat ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=192.168.1.50
NETMASK=255.255.255.0
[root@LVS-Slave network-scripts]# cp ifcfg-eth0 ifcfg-eth1
[root@LVS-Slave network-scripts]# vim ifcfg-eth1
[root@LVS-Slave network-scripts]# cat ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=192.168.1.100
NETMASK=255.255.255.0
[root@LVS-Slave network-scripts]# ifdown eth1;ifup eth1
3.3 两台Web服务器安装Web服务
过程略
3.4 LVS负载均衡器主和备安装Keepalived软件
[root@LVS-Master ~]# yum -y install keepalived
3.5 仅实现LVS负载均衡器主和备的keepalived高可用功能
LVS负载均衡器主的keepalived配置文件内容以下
[root@LVS-Master ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
1409156706@qq.com
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_01
}
vrrp_instance VI_1 {
state MASTER
interface eth1
virtual_router_id 55
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.1.1.240/24 dev eth0 label eth0:240
}
}
vrrp_instance VI_2 {
state BACKUP
interface eth1
virtual_router_id 56
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.1.1.250/24 dev eth0 label eth0:250
}
}
virtual_server 10.1.1.240 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
# persistence_timeout 50
protocol TCP
real_server 10.1.1.142 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 10.1.1.143 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
virtual_server 10.1.1.250 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
# persistence_timeout 50
protocol TCP
real_server 10.1.1.142 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 10.1.1.143 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
[root@LVS-Master ~]# /etc/init.d/keepalived start
[root@LVS-Master ~]# scp /etc/keepalived/keepalived.conf root@10.1.1.140:/etc/keepalived/
root@10.1.1.140's password:
keepalived.conf 100% 1823 1.8KB/s 00:00
LVS负载均衡器备的keepalived配置文件内容以下
[root@LVS-Slave ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
1409156706@qq.com
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_02
}
vrrp_instance VI_1 {
state BACKUP
interface eth1
virtual_router_id 55
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.1.1.240/24 dev eth0 label eth0:240
}
}
vrrp_instance VI_2 {
state MASTER
interface eth1
virtual_router_id 56
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.1.1.250/24 dev eth0 label eth0:250
}
}
virtual_server 10.1.1.240 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
# persistence_timeout 50
protocol TCP
real_server 10.1.1.142 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 10.1.1.143 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
virtual_server 10.1.1.250 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
# persistence_timeout 50
protocol TCP
real_server 10.1.1.142 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 10.1.1.143 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
[root@LVS-Slave ~]# /etc/init.d/keepalived start
将两个实例中的id设为同样,同为55
[root@LVS-Slave ~]# /etc/init.d/keepalived stop
[root@LVS-Master ~]# /etc/init.d/keepalived restart
测试失败,上下是不能同样的。。
再将配置都改回来
[root@LVS-Master ~]# /etc/init.d/keepalived restart
[root@LVS-Slave ~]# /etc/init.d/keepalived start
内网客户端进行访问测试
因为节点尚未绑定新的VIP,因此curl不过去
[root@NginxWebA ~]# ifconfig lo:1 10.1.1.250/32 up
[root@NginxWebB ~]# ifconfig lo:1 10.1.1.250/32 up
综上,至此基于LVS的keepalived高可用功能实验完毕。