LVS_NAT和LVS_NR的实现模拟
四层负载均衡(LVS)才是实现keepalived的主要场景
Haproxy 既支持4层负载均衡又支持七层负载均衡。 支持,http。tcp
nginx,支持http,tcp。
LVS 只支持tcp
nat模型 配置
注意,nat模型 可以将内网的网关设置为lvs的vip地址。
客户端
只有一个公网ip
路由
- 开启路由的转发功能forward
sysctl -a | grep “forward” 过滤查看是否开启转发,1是开启,0是关闭
如果没有开启,vim /etc/sysctl.conf 将 net.ipv4.ip_forward = 1,粘贴到最底部。 - sysctl -p 加载参数
- 路由有两个网卡,一个走公网(需配置网关),一个走内网(需配置内网ip,成为lvs的网关)
- (虚拟机需要做地址映射):
iptables -t nat -A PREROUTING -d 10.0.0.200 -j DNAT --to 172.16.1.100
注:真实环境下,需要将路由器的公网ip映射到lLVS的vip
让内部主机可以上网:iptables -t nat -A POSTROUTING -s 172.16.1.0/24 - j SNAT --to 10.0.0.200
lvs
- 下载 ipvsadm
- 需要两个网卡,一个内网,一个vip(即虚拟ip,做高可用,以及集群服务的调度)。
- 开启路由转发功能forward,vim /etc/sysctl.conf 将 net.ipv4.ip_forward = 1。
- 将公网的ip根据调度算法替换为内网ip进行请求,需要做一个集群
- lvs 需要用到ipvsadm 创建集群,
ipvsadm -A -t 172.16.1.100:80 -s rr
# -A 是创建集群,
# -t 是 指定操作哪个节点和端口
# -s 是指定调度策略(轮询)
# rr 是轮询
ipvsadm -a -t 172.16.1.100:80 -r 172.16.1.6:80 -m
# -a 向集群内添加节点
# -r 指定后端rs节点的ip和端口
# -m 指定lvs的工作模型(-m是nat模型)
# -g 是NR模型
RS(real server(离lvs最近的服务器))
只需要一个内网ip,将网关指向lvs的内网ip
准备:
1台client
1台lvs
2台rs
RS配置
- 关闭公网ip(eth0)(实际生产,rs本身是没有公网ip的)
- rs 内网 ip(eth1)的网关指向 路由器 中的内网ip,并且要创建一个vip的网卡。
创建vip网卡
cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:0
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=172.16.1.100
NETMASK=255.0.0.0
ONBOOT=yes
NAME=loopback
- 重启eth1,重启lo:0
- 修改rs的arp广播应答机制
arp_ignore(控制系统在收到外部的 arp 请求时,是否需要应答。)
0 默认值,将本机所有接口的所有信息像每个连接的网络进行通告。
1 只应答本地主机访问网络接口( eth0–>lo ),才给予响应
arp_announce(控制系统是否对外宣布自己的地址。)
0 默认值,把本机所有接口的所有信息向每个接口的网络进行通告;
1 “尽量避免” 将接口信息向非直接连接网络进行通告;
2 “必须避免” 将接口信息向非本网络进行通告;
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "1" >/proc/sys/net/ipv4/conf/default/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/default/arp_announce
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
lvs
一个内网ip,网关指向路由的内网ip
一个vip,自己设定。
路由
一个公网IP+网关+掩码
一个内网IP
然后做地址映射
nat和nr的区别
nat做的是ip地址的替换,
nr做的是mac地址的替换
实现ipvsadm调动后端节点
首先创建一个集群
其次想集群中添加节点
ipvsadm -A -t 172.16.1.100:80 -s rr
ipvsadm -a -t 172.16.1.100:80 -r 172.16.1.5:80 -m(NAT)
ipvsadm -a -t 172.16.1.100:80 -r 172.16.1.6:80 -g(NR)
# -A 创建集群
# -t 指定操作的节点和端口
# -s 指定调度侧录
# -a 向集群内添加节点
# -r 指定要添加的后端(rs)节点
路由需要做地址映射
建议将lvs和后端(rs)的节点的网关都设置为 vip,这样在实现高可用以后,就能解决 第一台lvs的故障 导致后端网关失效,无法回应请求的问题。
地址映射
iptables -t nat -A PREROUTING -d 10.0.0.200 -j DNAT --to 172.16.1.100
使外部请求可以进来
dnat和snat的区别
dnat用于互联网访问局域网
snat用于局域网访问互联网