lvs 进阶 第二章
linux virtual server
一 . lvs
lvs 对数据进行四层转发,根据目标地址和目标端口对请求数据进行转发。
lvs 包含ipvsadm 和ipvs:
ipvsadm :用户空间的命令行工具,用于管理集群服务;
ipvs :工作在内核空间的 netfilter 模块的 INPUT 钩子函数上。
[root@localhost /]# cat /boot/config-3.10.0-862.el7.x86_64 |grep 'IPVS' #查看系统是否支持IPVS 功能
CONFIG_NETFILTER_XT_MATCH_IPVS=m
# IPVS transport protocol load balancing support
# IPVS scheduler
# IPVS SH scheduler
# IPVS application helper
[root@localhost /]#
二 . IPVS
IPVS
IPVS是LVS集群系统的核心软件,它的主要作用是: 安装在Load Balancer上,把发往Virtual IP的请求转发到Real Server上。
IPVS的负载均衡机制有三种,这里使用IP Tunneling机制: Virtual Server via NAT
Virtual Server via IP Tunneling
Virtual Server via Direct Routing
负载均衡器可以运行在以下三种模式下:
(1)Virtual Server via NAT(VS-NAT):用地址翻译实现虚拟服务器。地址转换器有能被外界访问到的合法IP地址,它修改来自专有网络的流出包的地址。外界看起来包是来自地址转换器本身,当外界包送到转换器时,它能判断出应该将包送到内部网的哪个节点。优点是节省IP 地址,能对内部进行伪装;缺点是效率低,因为返回给请求方的流量经过转换器。 (2)Virtual Server via IP Tunneling (VS-TUN):用IP隧道技术实现虚拟服务器。这种方式是在集群的节点不在同一个网段时可用的转发机制,是将IP包封装在其他网络流量中的方法。为了安全的考虑,应该使用隧道技术中的VPN,也可使用租用专线。 集群所能提供的服务是基于TCP/IP的Web服务、Mail服务、News服务、DNS服务、Proxy服务器等等. (3)Virtual Server via Direct Routing(VS-DR):用直接路由技术实现虚拟服务器。当参与集群的计算机和作为控制管理的计算机在同一个网段时可以用此法,控制管理的计算机接收到请求包时直接送到参与集群的节点。优点是返回给客户的流量不经过控制主机,速度快开销少。
(4) Virtual Server via full-NAT : 在NAT 时同时修改源地址
IPVS 的负载调度算法有十种:
轮叫(Round Robin)
加权轮叫(Weighted Round Robin)
最少链接(Least Connections)
加权最少链接(Weighted Least Connections)
基于局部性的最少链接(Locality-Based Least Connections)
带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)
目标地址散列(Destination Hashing )
源地址散列(Source Hashing)
最短期望延迟(Shortest Expected Delay)
无须队列等待(Never Queue)
三种IP负载均衡技术的优缺点比较: 杂项 VS/NAT VS/TUN VS/DR
服务器操作系统 任意 支持隧道 多数(支持Non-arp )
服务器网络 私有网络 局域网/广域网 局域网
服务器数目(100M网络) - 多()
服务器网关 负载均衡器 自己的路由 自己的路由
效率 一般 高 最高
三. ipvsadm命令参考
ipvsadm命令参考 为了更好的让大家理解这份命令手册,将手册里面用到的几个术语先简单的介绍
一下:
,virtual-service-address:是指虚拟服务器的ip 地址
,real-service-address:是指真实服务器的ip 地址
,scheduler:调度方法 ipvsadm 的用法和格式如下:
ipvsadm -A|E -t|u|f virutal-service-address:port [-s scheduler] [-p
[timeout]] [-M netmask]
ipvsadm -D -t|u|f virtual-service-address
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port
[-g|i|m] [-w weight]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]
ipvsadm --set tcp tcpfin udp
ipvsadm --start-daemon state [--mcast-interface interface]
ipvsadm --stop-daemon
ipvsadm -h
命令选项解释:
有两种命令选项格式,长的和短的,具有相同的意思。在实际使用时,两种都可
以。
-A --add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也
就是增加一台新的虚拟服务器。
-E --edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。
-D --delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。
-C --clear 清除内核虚拟服务器表中的所有记录。
-R --restore 恢复虚拟服务器规则
-S --save 保存虚拟服务器规则,输出为-R 选项可读的格式
-a --add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器
记录。也就是在一个虚拟服务器中增加一台新的真实服务器
-e --edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录
-d --delete-server 删除一条虚拟服务器记录中的某条真实服务器记录
-L|-l --list 显示内核虚拟服务器表
-Z --zero 虚拟服务表计数器清零(清空当前的连接数量等)
--set tcp tcpfin udp 设置连接超时值
--start-daemon 启动同步守护进程。他后面可以是master 或backup,用来说
明LVS Router 是master 或是backup。在这个功能上也可以采用keepalived 的
VRRP 功能。
--stop-daemon 停止同步守护进程
-h --help 显示帮助信息
其他的选项:
-t --tcp-service service-address 说明虚拟服务器提供的是tcp 的服务
[vip:port] or [real-server-ip:port]
-u --udp-service service-address 说明虚拟服务器提供的是udp 的服务
[vip:port] or [real-server-ip:port]
-f --fwmark-service fwmark 说明是经过iptables 标记过的服务类型。
-s --scheduler scheduler 使用的调度算法,有这样几个选项
rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
默认的调度算法是: wlc.
-p --persistent [timeout] 持久稳固的服务。这个选项的意思是来自同一个客
户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。
-M --netmask netmask persistent granularity mask
-r --real-server server-address 真实的服务器[Real-Server:port]
-g --gatewaying 指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式)
-i --ipip 指定LVS 的工作模式为隧道模式
-m --masquerading 指定LVS 的工作模式为NAT 模式
-w --weight weight 真实服务器的权值
--mcast-interface interface 指定组播的同步接口
-c --connection 显示LVS 目前的连接 如:ipvsadm -L -c
--timeout 显示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout
--daemon 显示同步守护进程状态
--stats 显示统计信息
--rate 显示速率信息
--sort 对虚拟服务器和真实服务器排序输出
--numeric -n 输出IP 地址和端口的数字形式
四 . lvs 测试
[root@localhost ~]# cat /proc/sys/net/ipv4/ip_forward #开启核心路由转发 [root@localhost ~]# vim /etc/sysctl.conf
[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 1
Virtual Server via NAT(VS-NAT)
1.添加虚拟虚拟服务和后端服务组
[root@localhost ~]# ipvsadm -A -t 10.2.61.21: -s rr
[root@localhost ~]# ipvsadm -a -t 10.2.61.21: -r 10.2.61.23: -m
[root@localhost ~]# ipvsadm -a -t 10.2.61.21: -r 10.2.61.22: -m
[root@localhost ~]# ipvsadm -L -n
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.2.61.21: rr
-> 10.2.61.22: Masq
-> 10.2.61.23: Masq
[root@localhost ~]#
2.查看配置目录
[root@localhost ~]# cat /usr/lib/systemd/system/ipvsadm.service
[Unit]
Description=Initialise the Linux Virtual Server
After=syslog.target network.target [Service]
Type=oneshot
ExecStart=/bin/bash -c "exec /sbin/ipvsadm-restore < /etc/sysconfig/ipvsadm"
ExecStop=/bin/bash -c "exec /sbin/ipvsadm-save -n > /etc/sysconfig/ipvsadm"
ExecStop=/sbin/ipvsadm -C
RemainAfterExit=yes [Install]
WantedBy=multi-user.target [root@localhost ~]#
[root@localhost ~]# ipvsadm -S >/etc/sysconfig/ipvsadm #保存配置文件
[root@localhost ~]# cat /etc/sysconfig/ipvsadm
-A -t localhost.localdomain:ddi-tcp- -s rr
-a -t localhost.localdomain:ddi-tcp- -r 10.2.61.22:http -m -w
-a -t localhost.localdomain:ddi-tcp- -r 10.2.61.23:http -m -w
[root@localhost ~]#
[root@localhost ~]# ipvsadm -C #清空配置
[root@localhost ~]# ipvsadm -L -n
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@localhost ~]#
[root@localhost ~]# ipvsadm-restore </etc/sysconfig/ipvsadm #重载配置
[root@localhost ~]# ipvsadm -L -n
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 127.0.0.1: rr
-> 10.2.61.22: Masq
-> 10.2.61.23: Masq
[root@localhost ~]#
[root@localhost ~]# ipvsadm -E -t 10.2.61.21:8888 -s sh #修改虚拟服务配置
[root@localhost ~]# ipvsadm -Lnc
IPVS connection entries
pro expire state source virtual destination
TCP : SYN_RECV 10.3.120.243: 10.2.61.21: 10.2.61.23:
TCP : SYN_RECV 10.3.120.243: 10.2.61.21: 10.2.61.23:
TCP : SYN_RECV 10.3.120.243: 10.2.61.21: 10.2.61.23:
TCP : SYN_RECV 10.3.120.243: 10.2.61.21: 10.2.61.23:
TCP : SYN_RECV 10.3.120.243: 10.2.61.21: 10.2.61.23:
TCP : SYN_RECV 10.3.120.243: 10.2.61.21: 10.2.61.22:
TCP : SYN_RECV 10.3.120.243: 10.2.61.21: 10.2.61.23:
TCP : SYN_RECV 10.3.120.243: 10.2.61.21: 10.2.61.23:
TCP : SYN_RECV 10.3.120.243: 10.2.61.21: 10.2.61.23:
[root@localhost ~]# ipvsadm -Ln
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.2.61.21: sh
-> 10.2.61.22: Masq
-> 10.2.61.23: Masq
TCP 10.2.61.21: rr
-> 10.2.61.23: Masq
[root@localhost ~]#
[root@localhost ~]# ipvsadm -e -t 10.2.61.21:8888 -r 10.2.61.23:8080 #编辑后端服务 [root@localhost ~]# ipvsadm -d -t 10.2.61.21:8888 -r 10.2.61.23:80 @删除后端服务
[root@localhost ~]# ipvsadm -Ln
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.2.61.21: sh
-> 10.2.61.22: Masq
TCP 10.2.61.21: rr
-> 10.2.61.23: Masq
[root@localhost ~]#
Virtual Server via Direct Routing(VS-DR): DR 模式不支持端口转换
一 . lvs 的DR 模式也称作三角传输模式,在LVS 中需要关闭回环地址的ARP 响应功能和ARP 请求功能。
两个内核参数:
arp_ignore :
当arp_ignore参数配置为1时,网卡上收到目的IP为环回网卡IP的arp请求,发现请求的IP不是自己网卡上的IP,不会回arp响应。 为 时响应arp 请求 arp_announce : 确定arp 请求时的源地址 :
:允许使用任意网卡上的IP地址作为arp请求的源IP,通常就是使用数据包a的源IP。
:尽量避免使用不属于该发送网卡子网的本地地址作为发送arp请求的源IP地址。
:忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为arp请求的源IP地址。
arp_ignore = 1
arp_announce 2
修改arp_ignore 和 arp_announce 参数的两种方式: 1. 修改/etc/sysctl.conf文件,然后sysctl -p刷新到内存。 net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.lo.arp_announce=2
. 使用sysctl -w直接写入内存: sysctl -w net.ipv4.conf.all.arp_ignore=
sysctl -w net.ipv4.conf.lo.arp_ignore=
sysctl -w net.ipv4.conf.all.arp_announce=
sysctl -w net.ipv4.conf.lo.arp_announce=
. 修改/proc文件系统: echo "">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "">/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "">/proc/sys/net/ipv4/conf/all/arp_announce
echo "">/proc/sys/net/ipv4/conf/lo/arp_announce
二. loopback 地址配置
loopback接口的功能 用于网络服务测试,避免由于远程网络接入带来的安全问题;
一般用作client/server类的网络服务的测试,在测试时,client与server运行在同一台主机上,client通过使用loopback地址访问server。最常见的例子就是web服务的测试,一般我们用http://127.0.0.1/或者http://localhost/来访问本地的web服务。 测试IP协议栈
我们通过ping loopback地址的方式来测试操作系统中IP协议栈是否正常。 在网络中,所有源地址属于loopback地址的数据包将会被丢弃
IP协议规定loopback数据包是不允许在网络中传输的。网络网络接口必须丢弃接收到的loopback数据包。
修改回环地址:
[root@nginx network-scripts]# cp ifcfg-lo ifcfg-lo:
[root@nginx network-scripts]# vim ifcfg-lo:
[root@nginx network-scripts]# cat ifcfg-lo:
DEVICE=lo:
IPADDR=10.2.61.21
NETMASK=255.255.255.255
#NETWORK=127.0.0.0
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
#BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback1
[root@nginx network-scripts]#
[root@localhost ~]# ipvsadm -A -t 10.2.61.21:8888 -s rr
[root@localhost ~]# ipvsadm -a -t 10.2.61.21:8888 -r 10.2.51.22:80 -g
[root@localhost ~]# ipvsadm -a -t 10.2.61.21:8888 -r 10.2.51.23:80 -g
[root@localhost ~]#
[root@localhost ~]# ipvsadm -L -n
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.2.61.21: rr
-> 10.2.51.22: Route
-> 10.2.51.23: Route
[root@localhost ~]#
root@localhost yum.repos.d]# ipvsadm -E -t 192.168.100.102:80 -s sh #修改负载算法为源地址哈希
[root@localhost yum.repos.d]#
[root@localhost ~]# ipvsadm -E -t 192.168.100.102:80 -s rr -p #使用会话持久性连接功能
[root@localhost ~]# ipvsadm -L -n
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.100.102:80 rr persistent 360
-> 192.168.100.101: Route
-> 192.168.100.103: Route
[root@localhost ~]#
lvs 进阶 第二章的更多相关文章
- javascript进阶课程--第二章--对象
javascript进阶课程--第二章--对象 学习要点 理解面向对象的概念 掌握对象的创建方法 掌握继承的概念和实现方法 基本概念 对象究竟是什么?什么叫面向对象编程? 对象是从我们现实生活中抽象出 ...
- javascript进阶教程第二章对象案例实战
javascript进阶教程第二章对象案例实战 一.学习任务 通过几个案例练习回顾学过的知识 通过案例练习补充几个之前没有见到或者虽然讲过单是讲的不仔细的知识点. 二.具体实例 温馨提示 面向对象的知 ...
- Hibernate初探之单表映射——第二章:Hibernate进阶
第二章:Hibernate进阶 1.hibernate.cfg.xml常用配置 2.session 简介 3.transaction简介 4.session详解 5.对象关系映射常用配置 1.hibe ...
- Unity 游戏框架搭建 2019 (九~十二) 第一章小结&第二章简介&第八个示例
第一章小结 为了强化教程的重点,会在合适的时候进行总结与快速复习. 第二章 简介 在第一章我们做了知识库的准备,从而让我们更高效地收集示例. 在第二章,我们就用准备好的导出工具试着收集几个示例,这些示 ...
- Unity 游戏框架搭建 2019 (十八~二十) 概率函数 & GameObject 显示、隐藏简化 & 第二章 小结与快速复习
在笔者刚做项目的时候,遇到了一个需求.第一个项目是一个跑酷游戏,而跑酷游戏是需要一条一条跑道拼接成的.每个跑道的长度是固定的,而怪物的出现位置也是在跑道上固定好的.那么怪物出现的概率决定一部分关卡的难 ...
- Java程序设计(2021春)——第二章笔记与思考
Java程序设计(2021春)--第二章笔记与思考 本章概览: 面向对象方法的特征 抽象:从同类型对象中抽象出共同属性 封装:把数据和处理数据的方法封到一个类中 继承:在已有的类的基础上开发新的类 多 ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库
在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...
- 《Django By Example》第二章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:翻译完第一章后,发现翻译第二章的速 ...
- Jenkins入门系列之——02第二章 Jenkins安装与配置
2014-12-08:已不再担任SCM和CI的职位,Jenkins的文章如无必要不会再维护. 写的我想吐血,累死了. 网页看着不爽的,自己去下载PDF.有问题请留言! Jenkins入门系列之——03 ...
随机推荐
- iOS - 高德地图步行线路规划多点多条线路
项目集成高德地图遇到的问题: 高德地图的官方步行导航只针对单个起始点单条线路,驾车导航才有途径点多线路.现在项目是要步行导航多个点多条线路
- J Press the Button
BaoBao and DreamGrid are playing a game using a strange button. This button is attached to an LED li ...
- linux基础操作1
date #查看日期cal #查看当月日历cal 2017 #查看某年全年的日历whoami #查看当前登录的用户 #修改网卡,可以上网的步骤vi /etc/sysconfig/network-scr ...
- elk-logstash-kibana(三)
一.修改logstash.yml unzip logstash-6.3.2 vim config/logstash.yml #添加:检查所有ip http.host: "0.0.0.0&qu ...
- Jupyter notebook安装
之前就装了jupyter notebook,但今天打开来发现是python2,并且似乎没法转换到python3??? so,再把python3的版本安装一下 打开CMD pip install jup ...
- eclipse与hadoop-eclipse-plugin之间的版本对应关系
eclipse与hadoop-eclipse-plugin之间,版本互相不兼容,或者说,版本要求严格. 把hadoop-eclipse-plugin复制到eclipse的plugins目录下以后,如果 ...
- post body 传输参数
postman 示例: 请求地址:http://member-system-api.dd01.work/api/inApp 设置headers头:Content-Type applicat ...
- git的简单玩法
本篇笔记参考廖雪峰的git教程,为方便查看将命令部分提取并记录下来. 无意对原作的版权侵犯,如需要学习请到廖雪峰网站学习git 创建git仓库 # mkdir learngit && ...
- Docker入门3------手动编辑自定义镜像
手动编辑自定义镜像 查看本地现有镜像: 基于centos创建一个,会自动下载centos最新原始镜像 docker run -it --name=web centos /bin/bash 然后在容器内 ...
- 20.0-uC/OS-III移植
1.CPU移植要求: 1) 处理器有对应的能产生可重入代码的C编译器2) 处理器支持中断且能提供周期性的中断(通常介于10到1000Hz之间). 3) 可以关中断和开中断4) 处理器支持存储和载入堆栈 ...