LVS-NAT + LVS-DR

LVS

现在lvs已经是linux内核标准的一部分,使用lvs可以达到的技术目标是:通过linux达到负载均衡技术和linux操作系统实现一个高性能高可用的linux服务器集群,他具有良好的可靠性,可延展性和可操作性,从而以低廉的成本实现最优的性能,Lvs是一个实现负载均衡集群开源软件项目,lvs从逻辑上可以分为调度层, server集群层,和共享存储

一个调度主机,有两个网卡

lvs的工作原理

  1. 当用户向负载均衡调度器(director server)发起请求,调度器将请求发往内核空间
  2. prerouting链首先会接受到用户请求,判断目标ip确定是本机ip,将数据包发往input链
  3. IPVS是工作在input链上的,当用户请求到达input时,ipvs会将用户请求和自己定义好的集群服务器进行比对,如果用户请求就是定义的集群服务,那么此时ipvs会强行修改数据包里的目标ip地址以及端口,并将新的数据包发往POSTROUTING链
  4. POSTROUTING链接收到数据包后,发现目标ip地址刚好是自己的后端服务器,那么通过选路,将数据包最终发送给后端服务器

lvs组成及术语

1.ipvs:
ip virtual server,一段代码工作在内核空间,ipvs,是真正生效实现
调度的代码(类似nginx中的proxy_pass)

2.ipvsadm
另一段是工作在用户空间,ipvsadm,负责为ipvs内核框架编写规则,定义
谁是集群服务,谁是后端真正的服务器(real server)类似nginx中的
upstrean

DS:前端负责均衡节点(负载均衡服务器)

RS:后端真实工作服务器(web服务器)
vip向外部直接面向用户请求,作为用户请求的目标ip地址(负载均衡的ip地址,提供给用户)

DIP Director Server Ip 和内部主机通讯的ip地址(负责与Real Server交互的内部Ip)
RIP Real Server Ip 后端服务器ip地址
CIP client IP 访问客户端ip地址

vip:对外,公网

dip:对内,局域网

lvs的工作模式

LVS-NAT模式

nat模式工作原理
  1. 用户请求ds,此时请求的报文会先到内核空间prerouting链,此时报文ip为cip,目标ip为vip
  2. prerouting检测发现数据包目标ip是本机,将数据包送到input链
  3. ipvs对比数据包请求的服务是否为集群服务,如果是,修改数据包的目标ip地址为后端服务器的IP地址,然后将数据包发送给POSTROUTING链,此时报文ip为cip,目标ip为rip
  4. POSTROUTING通过选路,将数据发送给Real Server
  5. RealServer对比发现目标ip为自己的ip,开始构建响应报文发回给Director Server此时报文的源ip为RIP,目标ip为CIP
  6. Derector Server在响应客户端前,会将源ip地址修改为自己的VIP,然后响应给客户端,目标ip为cip,此时报文源IP为VIP,目标ip为cip
nat模式的特性
  1. Rs应该是私有地址,Rs网关必须指向DIP
  2. DIP和RIP必须在同一个网段内
  3. 请求和响应报文都应该经过Director Server,高负载场景中Director Server容易成为性能瓶颈
  4. 支持端口映射
  5. Rs可是使用任意操作系统
  6. 缺陷,对Ds压力会比较大,请求和响应都需要经过ds,
nat环境搭建

|-------|---------------------------------------|---------------------------|
| 主机名称 | ip地址 | 功能 |
| web01 | 192.168.118.200 | rs |
| web02 | 192.168.118.201 | realserver |
| nat | vip:192.168.10.100 dip:192.168.118.10 | 负载均衡调度器directorserver,ntp |
| dns | 192.168.118.110 | dns |

web服务器:

下载nginx,在index.html写入内容,启动nginx,编写计划任务

yum -y install nginx

echo "web-----01" > /usr/share/nginx/html/index.html

root@web01 \~\]# nginx \[root@web01 \~\]# crontab -e 30 3 \* \* \* /usr/sbin/ntpdate 192.168.118.10 //时间服务器的IP ###### nat服务器: 需要两块网卡,再添加一块网卡 配置vip网卡: 1. 在编辑虚拟网络中创建桥接模式的网卡,并且桥接到有网的适配器上 2. 在vmware的虚拟主机资源管理器找到虚拟主机,右键菜单,设置 3. 添加新的网卡,自定义为刚才创建的桥接模式网卡 4. 此时在虚拟主机中使用ifconfig无法找到新的网卡 5. ip a能够查看到新的ens36网卡,没有路由 6. 编辑网卡配置 7. 重启network服务 同步时间,编写计划任务,配置时间服务器,启动服务,设置开机自启动 142 yum -y install ntpdate.x86_64 143 ntpdate cn.ntp.org.cn 144 which ntpdate 145 crontab -e \* 2 \* \* \* /usr/sbin/ntpdate cn.ntp.org.cn 147 yum -y install ntp 148 systemctl start ntpd 149 systemctl enable ntpd ###### dns服务器: \[root@dns \~\]# yum -y install bind \[root@dns \~\]# vim /etc/named.conf //添加any \[root@dns \~\]# vim /etc/named.rfc1912.zones zone "yuanyu.zhangmin" IN { type master; file "yuanyu.zhangmin.zone"; allow-update { none; }; }; \[root@dns \~\]# cd /var/named/ \[root@dns named\]# cp -p named.localhost yuanyu.zhangmin.zone \[root@dns named\]# vim yuanyu.zhangmin.zone ![](https://i-blog.csdnimg.cn/direct/1e5d562f2f054588a97e603fc500e2b0.png) \[root@dns named\]# named-checkconf /etc/named.conf \[root@dns named\]# named-checkconf /etc/named.rfc1912.zones \[root@dns named\]# named-checkzone yuanyu.zhangmin.zone yuanyu.zhangmin.zone \[root@dns named\]# systemctl restart named ###### client客户端: \[root@allow \~\]# echo "nameserver 192.168.118.110" \> /etc/resolve.conf \[root@allow \~\]# ping nat.yuanyu.zhangmin -c2 PING nat.yuanyu.zhangmin (192.168.118.135) 56(84) bytes of data. 64 bytes from 192.168.118.135 (192.168.118.135): icmp_seq=1 ttl=64 time=0.639 ms 64 bytes from 192.168.118.135 (192.168.118.135): icmp_seq=2 ttl=64 time=0.305 ms ###### nat配置规则:在nat服务器配置 安装ipvsadm \[root@nat \~\]# yum -y install ipvsadm.x86_64 查看所有的规则,如果已经配置好规则,重启之后也就没有了 # 清空以往的规则 \[root@nat \~\]# ipvsadm -C # 查看规则 \[root@nat \~\]# ipvsadm -L -n # 新增规则 \[root@nat \~\]# ipvsadm -A -t 192.168.10.100:80 -s rr # 添加主机,即添加rs web01,web02添加规则 \[root@nat \~\]# ipvsadm -a -t 192.168.10.100:80 -r 192.168.118.200:80 -m \[root@nat \~\]# ipvsadm -a -t 192.168.10.100:80 -r 192.168.118.201:80 -m # 设置ip转发 \[root@nat \~\]# vim /etc/sysctl.conf net.ipv4.ip_forward=1 # 设置生效 \[root@nat \~\]# sysctl -p net.ipv4.ip_forward = 1 //支持IP转发了 ###### web服务器网关配置: 临时修改web01和web02的网关,网关必须指向dip(调度服务器的对内的ip) 这也要求了rs ip和dip要在同一个网段,因为dip是要作为网关存在的 \[root@web01 \~\]# route del default \[root@web01 \~\]# route add default gw 192.168.118.100 \[root@web02 \~\]# route del default \[root@web02 \~\]# route add default gw 192.168.118.100 ### 升级 lvs-nat模式的优点配置简单,缺点是请求和响应都必须经过ds,容易成为性能瓶颈 希望有这样的模式,请求的时候使用input链进行负载均衡,响应的时候就不要经过ds,直接由rs响应给客户端 在nat模式的时候,请求vip,接收vip的响应 构想 请求vip,接受rip响应,这是不允许 lvs-dr模式,但是我们可以在rs上也配置vip ### LVS-DR模式 1.性能更优,回路不再经过ds 2.ds和rs为了保证用户响应,都要求配置统一的vip 3.由于rs是直接响应client,网关一定不能设置为ds 的dip 4.对rs的vip进行抑制,让ds的vip接收请求,rs的vip不接受请求 5.rs的vip绑定点lo回路网卡上 ##### 设置ds主机:192.168.118.202 1.在ens33上挂一个IP地址(vip)192.168.118.203,在rs上的vip和这个vip相同 9 ifconfig ens33:0 192.168.118.203 broadcast 192.168.118.203 netmask 255.255.255.255 up 2.设置主机路由 11 route add -host 192.168.118.203 dev ens33:0 3. 安装ipvsadm 13 yum -y install ipvsadm 4.配置规则 ipvsadm -C //清空规则 14 ipvsadm -A -t 192.168.118.203:80 -s rr 15 ipvsadm -a -t 192.168.118.203:80 -r 192.168.118.200 -g 17 ipvsadm -a -t 192.168.118.203:80 -r 192.168.118.201 -g 18 ipvsadm -Ln 注意: rs不在需要指定端口,dr不支持端口映射,vip上是80端口,最终就是80端口 -m nat -g gateway ##### 设置rs主机 1.在lo接口上绑定vip 2.设置主机路由 3.抑制rs接收请求 web01: \[root@web01 \~\]# ifconfig lo:0 192.168.118.203 broadcast 192.168.118.203 netmask 255.255.255.255 up \[root@web01 \~\]# route add -host 192.168.118.203 dev lo:0 \[root@web01 \~\]# ifconfig 抑制rs的vip接收请求 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 web02的操作与web01一样,可以使用脚本来操作: \[root@web02 \~\]# cat arp.sh ifconfig lo:0 192.168.118.203 broadcast 192.168.118.203 netmask 255.255.255.255 up route add -host 192.168.118.203 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 ##### 测试使用,查看状态 在浏览器上访问vip 192.168.118.203,在dr上查看详情 \[root@dr \~\]# ipvsadm -Ln --stats IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes -\> RemoteAddress:Port TCP 192.168.118.203:80 6 140 0 39432 0 -\> 192.168.118.200:80 3 12 0 518 0 -\> 192.168.118.201:80 3 128 0 38914 0

相关推荐
緣起緣落23 分钟前
Linux(CentOS 7) 部署 redis 集群
linux·运维·服务器·redis·centos·集成学习
无名之逆1 小时前
[特殊字符] Hyperlane 框架:高性能、灵活、易用的 Rust 微服务解决方案
运维·服务器·开发语言·数据库·后端·微服务·rust
运维开发小白1 小时前
使用夜莺 + Elasticsearch进行日志收集和处理
运维·c#·linq
小宁爱Python1 小时前
Python从入门到精通4:计算机网络及TCP网络应用程序开发入门指南
网络·python·tcp/ip·计算机网络
发财哥fdy1 小时前
4.2-3 fiddler抓取手机接口
网络
404BrainNotFound1 小时前
Dokploy部署Net服务,打造CI/CD开发环境
运维·全栈
tjsoft2 小时前
Nginx配置伪静态,URL重写
android·运维·nginx
无名之逆2 小时前
探索轻量高性能的 Rust HTTP 服务器框架 —— Hyperlane
服务器·开发语言·windows·后端·http·rust
zyx没烦恼2 小时前
Linux 进程信号
linux·运维·服务器·开发语言·c++
佬乔2 小时前
xml中配置AOP织入
java·服务器·前端