lvs架构

news/2024/7/7 7:03:50

lvs 4种模式
1、nat(网络地址转换模式)
2、dr(直接路由模式)
3、tun(隧道模式)
4、full-nat(双向转换模式)

1,nat(网络地址转换模式架构)
1、nat模式优势是,后端可以是任意支持tcp/ip的操作系统,缺点是响应时回包必须经过负载均衡器

3台服务器 lvs-server web1 web2
lvs-server 的网卡配置为net和桥接两个网卡
web1 和 web2 为net 网卡

(1) 准备服务器,关闭防火墙 selinux

(2) lvs-server: 配置
下载 ipvsadm
yum install -y ipvsadm
(3) lvs-server: 本地解析
10.11.67.37 lvs-server #这里是lvs机器的vip
192.168.182.130 web1
192.168.182.131 web2
(4) lvs-server: 开启路由转发模式(让本机的两块网卡可以通信)
永久开启: echo “net.ipv4.ip_forward = 1” >> /etc/sysctl.conf && sysctl -p
临时开启: echo 1 > /proc/sys/net/ipv4/ip_forward
(5) lvs-server: 配置相应的lvs规则
ipvsadm -A -t lvs-server:80 -s rr
ipvsadm -a -t lvs-server:80 -r web1:80 -m
ipvsadm -a -t lvs-server:80 -r web2:80 -m

######web服务器两台一样配置
(6) web: 配置后端服务,记得端口是80
(7) 添加默认路由
ip r add default via 192.168.182.133
#(这个ip liv-server 是DIP)

命令选项
-A --add-service #在服务器列表中新添加一条新的虚拟服务器记录
-s --scheduler #使用的调度算法, rr | wrr | lc | wlc | lblb | lblcr | dh | sh | sed | nq 默认调度算法是 wlc rr 轮询 wrr 加权轮询
例:ipvsadm -A -t 192.168.1.2:80 -s wrr

-a --add-server #在服务器表中添加一条新的真实主机记录
-t --tcp-service #说明虚拟服务器提供tcp服务
-u --udp-service #说明虚拟服务器提供udp服务
-r --real-server #真实服务器地址
-m --masquerading #指定LVS工作模式为NAT模式
-w --weight #真实服务器的权值
-g --gatewaying #指定LVS工作模式为直接路由器模式(也是LVS默认的模式)
-i --ip #指定LVS的工作模式为隧道模式
-p #会话保持时间,定义流量被转到同一个realserver的会话存留时间
例:ipvsadm -a -t 192.168.1.2:80 -r 192.168.2.10:80 -m -w 1

-E -edit-service #编辑内核虚拟服务器表中的一条虚拟服务器记录。
-D -delete-service #删除内核虚拟服务器表中的一条虚拟服务器记录。
-C -clear #清除内核虚拟服务器表中的所有记录。
-R -restore #恢复虚拟服务器规则
-S -save #保存虚拟服务器规则到标准输出,输出为-R 选项可读的格式
-e -edit-server #编辑一条虚拟服务器记录中的某条真实服务器记录
-d -delete-server #删除一条虚拟服务器记录中的某条真实服务器记录
-L|-l –list #显示内核虚拟服务器表

–numeric, -n:#以数字形式输出地址和端口号
–exact: #扩展信息,精确值
–connection,-c: #当前IPVS连接输出
–stats: #统计信息
–rate : #输出速率信息

参数也可以从/proc/net/ip_vs*映射文件中查看
-Z –zero #虚拟服务表计数器清零(清空当前的连接数量等)

程序包:ipvsadm(LVS管理工具)

主程序:/usr/sbin/ipvsadm

规则保存工具:/usr/sbin/ipvsadm-save > /path/to/file

配置文件:/etc/sysconfig/ipvsadm-config

定义LVS分发策略

-A:添加VIP
-t:用的是tcp协议
-a:添加的是lo的vip地址
-r:转发到realserverip
-s:算法
-L|-l –list #显示内核虚拟服务器表
–numeric, -n:#以数字形式输出地址和端口号
-g --gatewaying #指定LVS工作模式为直接路由器模式(也是LVS默认的模式)
-S -save #保存虚拟服务器规则到标准输出,输出为-R 选项可读的格式
rr:轮循
如果添加ip错了,删除命令如下:
#ip addr del 172.16.147.200 dev ens33

2,NR(直接路由模式架构)

1,环境准备
准备3台服务器 lvs-server web1 web2 都为net网卡
关闭防火墙seLinux
2,lvs-server 的配置
配置vip
[root@localhost ~]# ip addr add dev ens33 192.168.21.123/32 #设置VIP
[root@localhost ~]# yum install -y ipvsadm #RHEL确保LoadBalancer仓库可用
定义LVS分发策略
[root@localhost ~]# ipvsadm -A -t 192.168.21.123:80 -s rr
[root@localhost ~]# ipvsadm -a -t 192.168.21.123:80 -r web1:80 -g
[root@localhost ~]# ipvsadm -a -t 192.168.21.123:80 -r web2:80 -g
[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.21.123:80 rr
-> web1ip地址:80 Route 1 0 0
-> web2ip地址:80 Route 1 0 0

定义LVS分发策略
-A:添加VIP
-t:用的是tcp协议
-a:添加的是lo的vip地址
-r:转发到realserverip
-s:算法
-L|-l –list #显示内核虚拟服务器表
–numeric, -n:#以数字形式输出地址和端口号
-g --gatewaying #指定LVS工作模式为直接路由器模式(也是LVS默认的模式)
-S -save #保存虚拟服务器规则到标准输出,输出为-R 选项可读的格式
rr:轮循
如果添加ip错了,删除命令如下:
#ip addr del 172.16.147.200 dev ens33

web1配置
[root@localhost ~]# yum install -y nginx #下载nginx
[root@localhost ~]# echo “web1” >> /usr/share/nginx/html/index.html #向nginx的网站发布目录添加内容
[root@localhost ~]# ip addr add dev lo 192.168.21.123/32 #在lo接口上绑定VIP
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #忽略arp广播
[root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #匹配精确ip地址回包
[root@localhost ~]# systemctl start nginx

ps:
因为:realServer的vip有了,接着就是同一个网段中拥有两个vip, 客户端在网关发送arp广播需找vip时需要让realServer不接受响应.
解决:
echo 1 >/proc/sys/net/ipv4/conf/eth0/arp_ignore
arp_ignore 设置为1,意味着当别人的arp请求过来的时候,如果接收的设备没有这个ip,就不做出响应(这个ip在lo上,lo不是接收设备的进口)
echo 2 >/proc/sys/net/ipv4/conf/eth0/arp_announce
使用最好的ip来回应,什么是最好的ip?同一个网段内子网掩码最长的

web2 配置和web1 一样

直接访问添加的ip 192.168.21.123 就okl了

3、tun(隧道模式)

准备三天虚拟机 lvs-server web1 web2

在lvs-server上面
#添加隧道模块
[root@lvs-server ~]# modprobe ipip
#在新网卡上面添加虚拟ip
[root@lvs-server ~]# ip addr add 192.168.21.123/32 dev tunl0
#这里我们用ip -a 看到 tunl0的网卡是DOWN的状态,现在我们激活它
[root@lvs-server ~]# ip link set up tunl0 # 激活tunl0网卡
[root@lvs-server ~]# ip addr show tunl0 #查看网卡状态
[root@lvs-server ~]# yum install -y ipvsadm
[root@lvs-server ~]# ipvsadm -A -t 192.168.181.200:80 -s rr
[root@lvs-server ~]# ipvsadm -a -t 192.168.21.123:80 -r web1:80 -i # -i隧道模式
[root@lvs-server ~]# ipvsadm -a -t 192.168.21.123:80 -r web2:80 -i
[root@lvs-server ~]# ipvsadm -Ln #查看是否添加成功

web1 两台web机器添加的配置相同
[root@web1 ~]# yum -y install nginx
[root@web1 ~]# echo “web1” /usr/share/nginx/html/index.html
[root@web1 ~]# modprobe ipip
[root@web1 ~]# ip addr add 192.168.21.123/32 dev tunl0
[root@web1 ~]# ip link set up tunl0
[root@web1 ~]# ip addr show
[root@web1 ~]# sysctl -a | grep rp_filter # 查看反向检验参数,-a表示显示
net.ipv4.conf.all.arp_filter = 0
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.arp_filter = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.ens33.arp_filter = 0
net.ipv4.conf.ens33.rp_filter = 1
net.ipv4.conf.lo.arp_filter = 0
net.ipv4.conf.lo.rp_filter = 0
net.ipv4.conf.tunl0.arp_filter = 0
net.ipv4.conf.tunl0.rp_filter = 1
[root@web1 ~]# sysctl -w net.ipv4.conf.all.rp_filter=0
[root@web1 ~]# sysctl -w net.ipv4.conf.lo.rp_filter=0
[root@web1 ~]# sysctl -w net.ipv4.conf.ens33.rp_filter=0
[root@web1 ~]# sysctl -w net.ipv4.conf.tunl0.rp_filter=0
[root@web1 ~]# echo “net.ipv4.conf.default.rp_filter = 0” >> /etc/sysctl.conf
net.ipv4.conf.default.rp_filter = 0
[root@web1 ~]# sysctl -p
net.ipv4.conf.default.rp_filter = 0
[root@web1 ~]# sysctl -a | grep rp_filter
#检查是否全部为0
[root@web1 ~]# systemctl start nginx #启动nginx

然后去网页访问添加的vip网卡192.168.21.123 是否成功


http://www.niftyadmin.cn/n/3585847.html

相关文章

容器:用empty来代替检查size()是否为0

对于任意容器c,写下 if (c.size() 0)... 本质上等价于写下 if (c.empty())... 这就是例子。你可能会奇怪为什么一个构造会比另一个好,特别是事实上empty的典型实现是一个返回size是否返回0的内联函数。 你应该首选empty的构造,而且理由很…

nginx 代理 负载均衡 网站转接的用法

反向代理 1,准备两台nginx真实服务器 a、nginx-1 启动网站(内容)(作为网站服务器) b、nginx-2 启动代理程序 一、编辑nginx-2的配置文件 [rootnginx-server ~]# vim /etc/nginx/conf.d/default.conf server {server {listen 80; ser…

LNMP+zabbix监控平台搭建

前言 由于某个项目需要新搭建zabbix监控平台。于是就抽时间总结了zabbix搭建的流程及排错的详细流程。由于每个人的生产环境的差异,本文适用于参考。 实际上,使用yum安装配置LAMPzabbix更加的方便,快捷。但是,为了便于管理&#…

PHP生成图像验证码的方法小结(2种方法)

本文实例讲述了PHP生成图像验证码的方法。分享给大家供大家参考,具体如下: 1、生成加法运算验证码图片 ?123456789101112131415161718192021222324252627282930session_start ();/*定义头文件为图片*/header("Content-type: image/png");/*生…

尽量使用区间成员函数代替它们的单元素兄弟

尽量使用区间成员函数来代替单元素兄弟的三个可靠的论点: 1、区间成员函数更容易写, 2、它们更清楚地表达你的意图, 3、而且它们提供了更高的性能。 快!给定两个vector,v1和v2,使v1的内容和v2的后半部分…

源码安装软件参数查询

前言 下面总结的是对部分已源码安装的软件,查看其编译参数的方法。 常用于软件升级或安装扩展模块 【1】Nginx 编译参数查询 命令: /apk/install/nginx/sbin/nginx -V注意:nginx命令位置取决于nginx的安装目录 nginx version: nginx/1.17.1 …

linux提示Warning: imagettftext(): Could not find/open font错误

在php中imagettftext — 用 TrueType 字体向图像写入文本了,在其它版本中没有问题唯独在linux中使用imagettftext时出现imagettftext(): Could not find/open font错误了,具体我们来看解决办法。(PHP 4, PHP 5, PHP 7) imagettftext — 用 TrueType 字体…

xtrabackup备份失败问题解决

前言 下面总结的是部分常见的报错及解决方法。 常见报错及解决 【1】使用的xtrabackup安装失败或软件版本与系统不适配 报错如下: 解决方法: 通常是xtrabackup未安装成功或未配置环境变量,建议重新安装。 同时还要注意安装方式和不同软件包适…