阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

LVS简单实现NAT&DR模型

260次阅读
没有评论

共计 4063 个字符,预计需要花费 11 分钟才能阅读完成。

LVS:Linux Virtual Server 

一个由章文嵩博士发起的自由软件项目,它的官方站点是 www.linuxvirtualserver.org。

现在 LVS 已经是 Linux 标准内核的一部分,在 Linux2.4 内核以前,使用 LVS 时必须要重新编译内核以支持 LVS 功能模块,但是从 Linux2.4 内核以后,已经完全内置了 LVS 的各个功能模块,无需给内核打任何补丁,可以直接使用 LVS 提供的各种功能。

LVS 是 LB 集群的一种软件实现方案,类似的有 haproxy,nginx,ats(apache traffice server),perbal 等。

硬件实现方法:F5 公司的 BIG-IP(中高端 60W+ 一台),Citrix 的 Netscaler,A10 公司的 A10 等。

LVS 的组成:ipvs/ipvsadm

ipvs: 工作于内核空间 netfilter 中的 INPUT 链上的程序,可根据用户定义的集群实现请求转发

ipvsadm: 用户空间的命令行工具,用于管理集群服务及集群服务上的 real server

ipvsadm 命令的用法:由于此命令的选项很多,可归纳为两类,

①管理集群服务:

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
/*
   -A: 添加
   -E: 修改
   -t:TCP
   -u:UDP
   -f:firewall mark 
   service-address:
        -t,tcp,vip:port
        -u,udp,vip:port
        -f,fwm,mark 
   -s scheduler: 调度方法,默认是 wlc  
*/
ipvsadm -D -t|u|f service-address
//  -D: 删除

②管理集群上的 RS:

ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
/*            
    -a: 增加
    -e: 修改
    -r server-address:RS 的地址,rip[:port]
    -g:gateway,dr(默认)
    -i:ipip,tun
    -m:masquerade,nat
*/

③查看

ipvsadm -L|l [options]
/*           
    -n,--numeric: 数字格式显示 IP 和 PORT
    --exact: 精确值
    -c,--connection: 显示 IPVS 连接
    --stats: 统计数据
    --rate: 速率
*/

 ④保存和重载

//保存:
ipvsadm -S > /PATH/TO/SOME_RULE_FILE
ipvsadm-save > /PATH/TO/SOME_RULE_FILE
//重载:
ipvsadm -R < /PATH/TO/SOME_RULE_FILE
ipvsadm-restore < /PATH/TO/SOME_RULE_FILE

⑤清空

//清空规则
ipvsadm -C
//清空计数器
ipvsadm -Z [-t|u|f service-address]

LVS-NAT 模型实现

Director: 双网卡

外网地址:192.168.1.102(VIP)

内网地址:172.18.100.6(DIP)

RS1:装载 httpd 做测试

内网地址:172.18.100.11

RS2:装载 httpd 做测试

内网地址:172.18.100.12

部署:

(1)关闭防火墙,Selinux;RS1,RS2 安装 httpd,并写好测试页面,开启服务,确保服务可用。

(2)Director 关闭防火墙,Selinux; 清空 iptables 规则,开启内核 ipv4_forward 功能

echo 1 >> /proc/sys/net/ipv4/ip_forward

(3)安装 ipvsadm 命令行工具

yum -y install ipvsadm

(4)设定集群规则

ipvsadm -A -t 192.168.1.102:80 -s rr
ipvsadm -a -t 192.168.1.102:80 -r 172.18.100.11 -m -w 1
ipvsadm -a -t 192.168.1.102:80 -r 172.18.100.12 -m -w 1

(5)查看指定的规则

ipvsadm -Ln

LVS 简单实现 NAT&DR 模型

(6)启动另外一个主机开始测试,效果如下:

LVS 简单实现 NAT&DR 模型

总结:

LVS-NAT 设计要点:

(1)VIP 和 RIP 必须在同一 IP 网络,RIP 的网关要指向 DIP

(2)支持端口映射

LVS-NAT 的缺点:

在 LVS/NAT 的集群系统中,请求和响应的数据报文都需要通过负载调度器 (Director),当真实服务器(RealServer) 的数目在 10 台和 20 台之间时,负载调度器 (Director) 将成为整个集群系统的新瓶颈。


LVS-DR 模型实现

  Director:

eno16777736:192.168.1.102(DIP)设置 DIP 目的:如果是用了 keepalived 等工具做 HA 或者 Load Balance, 则在健康检查时需要用到 DIP。

eno16777736:0:192.168.1.100(VIP)

RS1:192.168.1.103

RS2:192.168.1.104

部署:

(1)关闭防火墙,Selinux;RS1,RS2 安装 httpd,并写好测试页面,开启服务,确保服务可用。

(2)Director 上设置 VIP:

ifconfig eno16777736:0 192.168.1.100 netmask 255.255.255.255
route add -host 192.168.1.100 dev eno16777736:0

/*
lvs/dr 里,director 的 vip 的 netmask 没必要一定设置为 255.255.255.255,也不需要再去
route add -host $VIP dev eth0:0
director 的 vip 本来就是要像正常的 ip 地址一样对外通告的, 不要搞得这么特殊.
*/

(3)Director 上设置规则:

ipvsadm -A -t 192.168.1.100:80 -s wrr
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.103 -g -w 1
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.104 -g -w 2

(4)RS1 和 RS2 的设置: 主要是调整内核参数和物理接口 lo 的地址绑定,通过脚本实现:

#!/bin/bash
#
VIP=$2
case "$1" in
start)
    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore            
    echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
    ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
    route add -host $VIP dev lo:0
    ;; 
stop)
    echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore            
    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
    route del  $VIP
    ;; 
*)
    echo "Tips:$0{start|stop}"
    ;;
esac

(5)用另外一个主机去访问 VIP,可以看到效果了

 总结:

核心要点

(1)调度器与实际服务器都有一块网卡连在同一物理网段上。

(2)RIP 和 DIP 一般在同一网络(因为转发是在数据链路层实现的,必须保证 MAC 不会变),且 RIP 的网关不能指向 DIP; 但两者未必和 VIP 在同一网络。

(3)各 RS 需先设置内核参数,再设置物理接口 lo 的 VIP 和路由。

(4)不支持端口映射

(5)Director 的 ip_forward 不需要开启转发,因为 Director 和 RS 在同一网络。

(6)Director 的 VIP 一般设置在网卡的别名上,如 eth0:0 或 eno16777736:0 上

学习 LVS+Keepalived 必须阅读的三个文档。

1、《Keepalived 权威指南》下载见 http://www.linuxidc.com/Linux/2012-05/60951.htm

2、《LVS 手册》http://www.linuxidc.com/Linux/2016-03/129233.htm

3、《Red_Hat_Enterprise_Linux-5-Virtual_Server_Administration-zh-CN》http://www.linuxidc.com/Linux/2016-03/129234.htm

4、通过 LVS 实现 WEB 站点的 MySQL 高可用 http://www.linuxidc.com/Linux/2013-06/86390.htm

5、LVS+Apache+PHP+MySQL 读写分离 http://www.linuxidc.com/Linux/2012-12/77027.htm

6、MySQL LVS 负载均衡 http://www.linuxidc.com/Linux/2012-09/69862.htm

企业 Web 高可用集群实战之 LVS+Keepalived+MySQL HA http://www.linuxidc.com/Linux/2012-09/70097.htm

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-12/138707.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4063字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中