一、LVS的作用
备份冗余、负载均衡等
LVS负责选择闲置的RS,并把Client请求发给闲置的RS,让其处理请求。。。
二、LVS分类
NAT、DR、TUN三种
2.1、NAT具体配置
拓扑图
Client192.168.18.254/24
192.168.18.250/24LVS (router)192.168.19.250/24
Serverpool RS1 192.168.19.1/24
RS2 192.168.19.2/24
拓扑图讲解,当客户端访问服务时,则先把请求送到18.250,LVS接收到客户端请求,则指定闲置的RS,处理ARP请求,RS接受到请求后,则返回ARP应答。。
LVS上的RS(RealServer)
RS1 192.168.19.1/24 GW:192.168.19.250
echo “123”> /var/www/html/index.html
RS2 192.168.19.2/24 GW:192.168.19.250
echo “456”> /var/www/html/index.html
LVS上配置
LVS_18/19_250#rpm -ivh/mnt/Cluster/ipvsadm-1.24-10.i386.rpm
LVS_18/19_250#ipvsadm -A -t 192.168.18.250:80 -s rr
LVS_18/19_250#ipvsadm -a -t 192.168.18.250:80 -r192.168.19.1 -m
LVS_18/19_250#ipvsadm -a -t 192.168.18.250:80 -r192.168.19.2 –m
打开路由功能
echo 1 > /proc/sys/net/ipv4/ip_forward
客户端配置、
Client:192.168.18.254/24 GW:192.168.18.250
TEST方式:
客户端访问:
Elinks http://192.168.18.250 -dump
123
Elinks http://192.168.18.250 -dump
456
NAT缺点:
1、LVS需要解析两次,负载过大,来回需要ARP解析两次
2.2、Ipvsadm 参数详解
-A 是添加一个虚拟服务
-E 编辑这个虚拟服务
-D 删除这个虚拟服务
-S 保存这个虚拟服务
-a 增加一台RS
-e 从虚拟服务里编辑RS
-d 从虚拟服务里删除一台RS
-l 显示虚拟服务里的RS
-n 不解析域名显示虚拟服务里的RS
-c 显示客户端访问RS的详细信息
-C 清除虚拟服务里的RS
-t TCP协议
-m nat模式
-g DR模式
-i TUN模式
-s 是选择分发方式 分发方式主要的可分为以下几种
rr:最古板的算法
wrr:基于权重的最古板的算法
lc:对于新加入的RS,先把访问数量分配到和目前的RS的负载均衡值,再次进行rr分发
wlc:基于权重的lc
lblc:尽可能分发到同一台RS上面
sh:基于一个源ip,源ip首次被分发到哪台RS上,接下来就依次分发到这台RS上,直到这台RS无法承受压力时,再次选择其他的RS
dh:基于目标ip,永远分到同一个RS上
2.3、DR 直连路由
如何解决NAT中LVS分发器的负载过重问题?
下面我们就通过一个拓扑图进行讲解,以补充NAT LVS负载过重的缺点。。
拓扑图
Client192.168.18.254/24
192.168.18.250/24(router)192.168.19.250/24
LVS 192.168.19.200/24 GW: 192.168.19.250
VIP:192.168.19.254/24
Server pool RS1 192.168.19.1/24 VIP 192.168.19.254/24 GW 19.254
RS2 192.168.19.2/24 VIP 192.168.19.254/24 GW 19.254
想解决LVS单点负载过重的问题,首要解决2个问题
此问题已经决定LVS和RS必须在同一局域网内。。
第一、 把ARP应答包封为同一虚拟ip(19.254),供客户端进行访问,这样返回的信息客户端才能进行接收
第二、 如果都是同一ip,那么同一局域网内,则出现ARP混杂应答,当客户端访问服务时,则会出现多个同样的虚拟ip地址,因此则必须让RS闭嘴,让LVS发言,根据实际情况,让闲置的RS去提供服务,然后被命中的RS,则通过适当的ip地址19.254通过Router进行回包。
1、客户端配置
192.168.18.254/24 GW 192.168.18.250
2、路由上配置
192.168.18.250/24 (router)192.168.19.250/24
打开路由功能
echo 1 > /proc/sys/net/ipv4/ip_forward
3、LVS配置
LVS_18/19_250#rpm -ivh/mnt/Cluster/ipvsadm-1.24-10.i386.rpm
LVS_18/19_250#ipvsadm -A -t 192.168.18.250:80 -s rr
LVS_18/19_250#ipvsadm -a -t 192.168.18.250:80 -r192.168.19.1 –g
LVS_18/19_250#ipvsadm -a -t 192.168.18.250:80 -r192.168.19.2 –g
Ifconfig eth0 192.168.19.200/24
route add default gw 192.168.19.250
ifconfig lo:1 192.168.19.254/24 broadcast192.168.19.255
route –n 显示路由信息
4、RS1配置
Ifconfig eth0 192.168.19.1/24
ifconfig lo:1 192.168.19.254/24 broadcast192.168.19.255
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
arp_ignore 0 正常的ARP应答请求
1 问我的我就回答,不是问我的广播的我就不回答,忽略ARP应答
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
arp_announce 2用最恰当的ip地址去回复arp应答请求
route add default gw 192.168.19.250
echo “123” > /var/www/html/index.html
5、RS2配置
Ifconfig eth0 192.168.19.2/24
ifconfig lo:1 192.168.19.254/24 broadcast192.168.19.255
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
arp_ignore 0 正常的ARP应答请求
1 问我的我就回答,不是问我的广播的我就不回答
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
arp_announce 2用最恰当的ip地址去回复arp应答请求
route add default gw 192.168.19.250
echo “456” /var/www/html/index.html
TEST测试:
TEST方式:
客户端访问:
Elinks http://192.168.18.250 -dump
123
Elinks http://192.168.18.250 -dump
456
DR缺点:
1、 DR不能解决广域网上的LVS架构
2、 LVS宕机时则无法完成架构
3、 RS宕机时,客户端访问时则会出现时好时坏的情况,而LVS则傻瓜式的仍在继续着轮流分发
2.4、TUN
应用背景:如果DR中,不在同一地域内,则会出现无法实现不同局域网无法通信通信的状况,因此TUN则应运而生。
拓扑图
Client192.168.18.254/24
192.168.18.250/24(router)192.168.19.250/24
LVS 192.168.19.200/24 GW: 192.168.19.250
VIP:192.168.19.254/24
Server pool RS1 192.168.19.1/24 VIP 192.168.19.254/24 GW 19.254
RS2 192.168.19.2/24 VIP 192.168.19.254/24 GW 19.254
1、客户端配置
192.168.18.254/24 GW 192.168.18.250
2、路由上配置
192.168.18.250/24 (router)192.168.19.250/24
打开路由功能
echo 1 > /proc/sys/net/ipv4/ip_forward
3、LVS配置
LVS_18/19_250#rpm -ivh/mnt/Cluster/ipvsadm-1.24-10.i386.rpm
LVS_18/19_250#ipvsadm -A -t 192.168.18.250:80 -s rr
LVS_18/19_250#ipvsadm -a -t 192.168.18.250:80 -r192.168.19.1 –i
LVS_18/19_250#ipvsadm -a -t 192.168.18.250:80 -r192.168.19.2 –i
Ifconfig eth0 192.168.19.200/24
route add default gw 192.168.19.250
ifconfig tunl0 192.168.19.254/24 broadcast192.168.19.255
route –n 显示路由信息
4、RS1配置
Ifconfig eth0 192.168.19.1/24
ifconfig tunl0 192.168.19.254/24 broadcast192.168.19.255
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
arp_ignore 0 正常的ARP应答请求
1 问我的我就回答,不是问我的广播的我就不回答
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
arp_announce 2用最恰当的ip地址去回复arp应答请求
route add default gw 192.168.19.250
echo “123” > /var/www/html/index.html
5、RS2配置
Ifconfig eth0 192.168.19.2/24
ifconfig tunl0 192.168.19.254/24 broadcast192.168.19.255
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
arp_ignore 0 正常的ARP应答请求
1 问我的我就回答,不是问我的广播的我就不回答
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
arp_announce 2用最恰当的ip地址去回复arp应答请求
route add default gw 192.168.19.250
echo “456” /var/www/html/index.html
TEST测试:
TEST方式:
客户端访问:
Elinks http://192.168.18.250 -dump
123
Elinks http://192.168.18.250 -dump
三、高可用性LVS架构
3.1、架构展现
管理VIP(发放和回收)
2个LVS+keeplived 监控LVS状态 224.0.0.18组播地址每1秒钟都发送侦听数据包
监控RS,探针监控,LVS会每隔几秒钟会定时向RS请求服务。
LVS119.200+keepalived GW19.250 RS1 (19.1) GW:19.250
C18.254 router 18/19.250
GW 18.250 LVS219.201+keepalived GW19.250 RS2 (19.2) GW:19.250
3.2、LAB步骤
3.2.1、装keepalived软件
1、做链接文件
Kernel-devel 内核可发工具包,装keepailived时,系统会自动找/usr/src/linux这个链接文件
所以,kernel-devel必须要装
Ln –s /usr/src/kernels/2.6.18……./ /usr/src/linux
2、装oepnssl
Yum –y install oepnssl*
4、 解压
tar -zxvf keepalived-1\[1\].1.17.tar.gz
5、 检测配置文件
./configure –prefix –prefix=/usr/lcaol/keepalived
Keepalivedconfiguration
------------------------
Keepalivedversion : 1.1.17
Compiler : gcc
Compilerflags : -g -O2
ExtraLib : -lpopt -lssl-lcrypto
Use IPVS Framework : Yes
IPVS sync daemon support : Yes
Use VRRP Framework : Yes
UseLinkWatch : No
Use Debug flags : No
6、 make && make install
7、 cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
copy 主程序文件到/etc/init.d/下
8、 cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
copy 第一个配置文件到/etc/sysconfig/下
9、 建立mkdir/etc/keepalived/存放配置文件的目录,并上传配置文件到该目录
10、Ln -s /usr/local/keepalived/sbin/* /sbin/
建立存放keepalived.conf主配置文件的目录
3.2.2、LVS1上编辑主配置文件
! Configuration File for keepalived
global_defs {
router_id lvs
}
vrrp_sync_group http {
group {
apache
}
}
###以上是全局配置参数
###局部配置 pool1
vrrp_instance apache {
state MASTER ; 定义类型
interfaceeth0 ; 使用接口
virtual_router_id 51 ;虚拟路由id,每组一个
priority 100 ;优先级
advert_int 1 ;每隔1秒钟通告一次
authentication { ;验证
auth_type PASS ;验证类型
auth_pass 1111 ;验证密码
}
virtual_ipaddress { ;VIP
192.168.19.254 ;VIP
}
}
virtual_server 192.168.19.254 80 {
delay_loop 6 ;探针时间间隔
lb_algo rr ;分发方式为rr
lb_kind DR ;LVS种类
nat_mask255.255.255.0
# persistence_timeout 50
protocol TCP ;所使用协议
real_server192.168.19.1 80 { ;真是服务器ip地址
weight 1 ;权重
TCP_CHECK {
connect_timeout 3 ;超时时间
connect_port 80 ;虚拟端口
}
}
real_server192.168.19.2 80 {
weight 1
TCP_CHECK {
connect_timeout 3
connect_port80
}
}
}
####备份apache1
vrrp_instance apache1 {
state BACKUP ; 定义类型
interfaceeth0 ; 使用接口
virtual_router_id 51 ;虚拟路由id,每组一个
priority 80 ;优先级
advert_int 1 ;每隔1秒钟通告一次
authentication { ;验证
auth_type PASS ;验证类型
auth_pass 1111 ;验证密码
}
virtual_ipaddress { ;VIP
192.168.19.253 ;VIP
}
}
virtual_server 192.168.19.253 80 {
delay_loop 6 ;探针时间间隔
lb_algo rr ;分发方式为rr
lb_kind DR ;LVS种类
nat_mask255.255.255.0
# persistence_timeout 50
protocol TCP ;所使用协议
real_server192.168.19.3 80 { ;真是服务器ip地址
weight 1 ;权重
TCP_CHECK {
connect_timeout 3 ;超时时间
connect_port 80 ;虚拟端口
}
}
real_server192.168.19.4 80 {
weight 1
TCP_CHECK {
connect_timeout 3
connect_port80
}
}
}
3.2.3、LVS2上编辑主配置文件
! Configuration File for keepalived
global_defs {
router_id lvs
}
vrrp_sync_group http {
group {
apache
}
}
###以上是全局配置参数
###局部配置 apache
vrrp_instance apache {
state BACKUP ; 定义类型
interfaceeth0 ; 使用接口
virtual_router_id 51 ;虚拟路由id,每组一个
priority 80 ;优先级
advert_int 1 ;每隔1秒钟通告一次
authentication { ;验证
auth_type PASS ;验证类型
auth_pass 1111 ;验证密码
}
virtual_ipaddress { ;VIP
192.168.19.254 ;VIP
}
}
virtual_server 192.168.19.254 80 {
delay_loop 6 ;探针时间间隔
lb_algo rr ;分发方式为rr
lb_kind DR ;LVS种类
nat_mask255.255.255.0
# persistence_timeout 50
protocol TCP ;所使用协议
real_server192.168.19.1 80 { ;真是服务器ip地址
weight 1 ;权重
TCP_CHECK {
connect_timeout 3 ;超时时间
connect_port 80 ;虚拟端口
}
}
real_server192.168.19.2 80 {
weight 1
TCP_CHECK {
connect_timeout 3
connect_port80
}
}
}
####备份apache1
vrrp_instance apache1 {
state MASTER ; 定义类型
interfaceeth0 ; 使用接口
virtual_router_id 52 ;虚拟路由id,每组一个
priority 100 ;优先级
advert_int 1 ;每隔1秒钟通告一次
authentication { ;验证
auth_type PASS ;验证类型
auth_pass 1111 ;验证密码
}
virtual_ipaddress { ;VIP
192.168.19.253 ;VIP
}
}
virtual_server 192.168.19.253 80 {
delay_loop 6 ;探针时间间隔
lb_algo rr ;分发方式为rr
lb_kind DR ;LVS种类
nat_mask255.255.255.0
# persistence_timeout 50
protocol TCP ;所使用协议
real_server192.168.19.3 80 { ;真是服务器ip地址
weight 1 ;权重
TCP_CHECK {
connect_timeout 3 ;超时时间
connect_port 80 ;虚拟端口
}
}
real_server192.168.19.4 80 {
weight 1
TCP_CHECK {
connect_timeout 3
connect_port80
}
}
}
RS1上配置
Ifconfig eth0 192.168.19.1/24
ifconfig lo:1 192.168.19.254/24 broadcast192.168.19.255
echo “111”>/var/www/html/index.html
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
arp_ignore 0 正常的ARP应答请求
1 问我的我就回答,不是问我的广播的我就不回答
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
arp_announce 2用最恰当的ip地址去回复arp应答请求
route add default gw 192.168.19.250
RS2上配置
Ifconfig eth0 192.168.19.2/24
ifconfig lo:1 192.168.19.254/24 broadcast192.168.19.255
echo “222”>/var/www/html/index.html
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
arp_ignore 0 正常的ARP应答请求
1 问我的我就回答,不是问我的广播的我就不回答
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
arp_announce 2用最恰当的ip地址去回复arp应答请求
route add default gw 192.168.19.250
R3上配置
Ifconfig eth0 192.168.19.3/24
ifconfig lo:1 192.168.19.253/24 broadcast192.168.19.255
echo “333”>/var/www/html/index.html
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
arp_ignore 0 正常的ARP应答请求
1 问我的我就回答,不是问我的广播的我就不回答
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
arp_announce 2用最恰当的ip地址去回复arp应答请求
route add default gw 192.168.19.250
R4上配置
Ifconfig eth0 192.168.19.4/24
ifconfig lo:1 192.168.19.253/24 broadcast192.168.19.255
echo “444”>/var/www/html/index.html
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
arp_ignore 0 正常的ARP应答请求
1 问我的我就回答,不是问我的广播的我就不回答
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
arp_announce 2用最恰当的ip地址去回复arp应答请求
route add default gw 192.168.19.250
测试
Elinks http://192.168.19.254 –dump
会出现111
Elinks http://192.168.19.254 –dump
会出现222
测试
Elinks http://192.168.19.253 –dump
会出现333
Elinks http://192.168.19.253 –dump
会出现444
Lvs1上,down掉eth0会自动切换到LVS2上
Ifconfig eth0 down