LVS-学习总结(ipvsadm工具)

文章目录

  • ipvsadm简介
  • 查询内核是编译IPVS
  • ipvsadm相关文件
  • ipvsadm命令
  • ipvsadm策略文件/etc/sysconfig/ipvsadm
    • 没有策略文件通常启动服务会报错
    • ipvsadm-config配置文件关于策略文件的内容

ipvsadm简介

  • LVS的结构主要分为两部分:
    • 工作在内核空间的IPVS模块。LVS的能力实际上都是由IVPS模块实现。
    • 工作在用户空间的ipvsadm管理工具。其作用是向用户提供一个命令接口,用于将配置的虚拟服务、真实服务等传给IPVS模块。
  • IPVS:通常在Kernel 2.4.28和2.6.10及以上版本已内置IPVS,有些Linux发行版也在其内核里编译了IPVS,所以不需要在内核中再次编译IPVS功能,仅需要使用管理工具调用内核功能即可。
  • ipvsadm:IPVS功能使用的管理工具
    • ipvsadm工具支持rpm安装,也可以编译源码安装。下载地址:
      http://www.linuxvirtualserver.org/software/ipvs.html
    • rhel仓库中含有ipvsadm软件包可以直接安装

查询内核是编译IPVS

[root@node1 ~]# cat /boot/config-3.10.0-862.el7.x86_64 | grep -i ipvs -A 10
#/boot/config-* 根据内核版本不同定义名称,内核配置文件,y表示已编译模块,m表示可加载的模块
# grep 根据关键词查询内容
#-i:查询内容不区分大小写 
#-A -B -C 后面都跟阿拉伯数字
#-A:是显示匹配后和它后面的n行。
#-B:是显示匹配行和它前面的n行。
#-C:是匹配行和它前后各n行。
CONFIG_NETFILTER_XT_MATCH_IPVS=m
#ipvs
#此处应显示10行内容,但与IPVS不相关,就删除了
....
--
# IPVS transport protocol load balancing support
#IPVS支持的协议
CONFIG_IP_VS_PROTO_TCP=y
CONFIG_IP_VS_PROTO_UDP=y
CONFIG_IP_VS_PROTO_AH_ESP=y
CONFIG_IP_VS_PROTO_ESP=y
CONFIG_IP_VS_PROTO_AH=y
CONFIG_IP_VS_PROTO_SCTP=y

#
# IPVS scheduler
#IPVS调度算法
CONFIG_IP_VS_RR=m
CONFIG_IP_VS_WRR=m
CONFIG_IP_VS_LC=m
CONFIG_IP_VS_WLC=m
CONFIG_IP_VS_LBLC=m
CONFIG_IP_VS_LBLCR=m
CONFIG_IP_VS_DH=m
CONFIG_IP_VS_SH=m
CONFIG_IP_VS_SED=m
--
# IPVS SH scheduler
#IPVS sh算法调度
CONFIG_IP_VS_SH_TAB_BITS=8

#
# IPVS application helper
#
CONFIG_IP_VS_FTP=m
CONFIG_IP_VS_NFCT=y
CONFIG_IP_VS_PE_SIP=m
...

ipvsadm相关文件

[root@node1 ~]# rpm -ql ipvsadm
/etc/sysconfig/ipvsadm-config
#ipvs配置文件
/usr/lib/systemd/system/ipvsadm.service
#守护进程服务
/usr/sbin/ipvsadm
#主程序
/usr/sbin/ipvsadm-restore
#ipvs规则重载工具
/usr/sbin/ipvsadm-save
#ipvs规则保存工具
/usr/share/doc/ipvsadm-1.27
/usr/share/doc/ipvsadm-1.27/README
/usr/share/man/man8/ipvsadm-restore.8.gz
/usr/share/man/man8/ipvsadm-save.8.gz
/usr/share/man/man8/ipvsadm.8.gz
#其他文档

ipvsadm命令

[root@node1 ~]# ipvsadm -h
ipvsadm v1.27 2008/5/15 (compiled with popt and IPVS v1.2.1)
# ipvsadm 版本信息 包括IPVS版本
Usage:
  ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags]
  #添加|修改一条虚拟服务格式
  ipvsadm -D -t|u|f service-address
  #删除一个一条虚拟服务格式
  ipvsadm -C
  #清除内核虚拟服务器表中的所有记录的格式
  ipvsadm -R
  #从标准输入中还原虚拟服务列表的格式
  ipvsadm -S [-n]
  #保存虚拟服务规则至标准输出的格式
  ipvsadm -a|e -t|u|f service-address -r server-address [options]
  #添加|修改一条真实服务器记录的格式
  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
  #更改用于IPVS连接的超时值,tcp表示TCP会话,tcpfin表示接收到FIN数据包后的TCP会,udp表示UDP数据包的超时值(均以秒为单位)
  ipvsadm --start-daemon state [--mcast-interface interface] [--syncid sid]
  #启动同步守护进程,state的值可以是master或backup,用来说明调度服务器是master或是backup
  ipvsadm --stop-daemon state
  #停止同步进程
  ipvsadm -h

Commands:
Either long or short options are allowed.
  --add-service     -A        add virtual service with options|添加一个虚拟服务,使用ip地址、端口号、协议来唯一定义一个虚拟服务,添加内容保存在内核虚拟服务器列表中
  --edit-service    -E        edit virtual service with options|编辑内核虚拟服务器表中的一条虚拟服务器记录
  --delete-service  -D        delete virtual service|删除内核虚拟服务器表中的一条虚拟服务器记录,并删除所有与该虚拟服务器相关联的真实服务器
  --clear           -C        clear the whole table|清除内核虚拟服务器表中的所有记录
  --restore         -R        restore rules from stdin|从标准输入中还原虚拟服务列表
  --save            -S        save rules to stdout|保存虚拟服务规则至标准输出
  --add-server      -a        add real server with options|在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器
  --edit-server     -e        edit real server with options|编辑一条虚拟服务器记录中的某条真实服务器记录
  --delete-server   -d        delete real server|删除一条虚拟服务器记录中的某条真实服务器记录
  --list            -L|-l     list the table|如果没有指定参数,则列出虚拟服务器表。如果选择了虚拟服务器地址,则仅列出该虚拟服务器的信息。如果选择-c选项,则显示连接表。输出内容受到其他参数的影响
  --zero            -Z        zero counters in a service or all services|虚拟服务表计数器清零(清空当前的连接数量等)
  --set tcp tcpfin udp        set connection timeout values|更改用于IPVS连接的超时值。该命令始终使用3个参数,分别表示TCP会话,接收到FIN数据包后的TCP会话和UDP数据包的超时值(以秒为单位)。超时值0表示保留相应条目的当前超时值
  --start-daemon              start connection sync daemon|启动同步守护进程
  --stop-daemon               stop connection sync daemon|停止同步守护进程
  --help            -h        display this help message|显示帮助信息

Options:
  --tcp-service  -t service-address   service-address is host[:port] 
  #说明虚拟服务器提供的是tcp 的服务。服务器地址的形式为 主机[:端口]。
  #主机可以是IP地址也可以是主机名。
  #端口可以是普通的端口号,也可以是端口的服务名称。端口可以被省略,在这种情况下,默认端口号为0。当端口号为0时,需要指定服务器提供持久稳固的服务(也即是使用了-p | --persistent选项)才有效,在这种情况下,它是一个通配符端口,即访问任何端口的连接都将被接受。
  --udp-service  -u service-address   service-address is host[:port]
  #虚拟服务器提供的是udp 的服务。服务器地址的形式为 主机[:端口]。
  --fwmark-service  -f fwmark         fwmark is an integer greater than zero
  #使用fwamrk(fwmark是一个大于0的整数值)来防火墙标识集群服务,而不是地址、 端口和协议使用它,fwmark可以通过结合IPtables将多个以调度器为目标的端口定义成一个防火墙标识,由ipvsdam通过此项关联标识,则可以实现对一个IP多端口调度,即实现后端服务器可以开放多个服务
  --ipv6         -6                   fwmark entry uses IPv6
  #与-f一起使用表示fwmark规则使用IPv6地址
  --scheduler    -s scheduler         one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
                                      the default scheduler is wlc.
  #指定集群服务使用的调度算法。10种调度算法被实现为内核模块。默认的调度算法是wlc
  --pe            engine              alternate persistence engine may be sip,
                                      not set by default.
  #设置持久化引擎如源IP,默认不设置
  --persistent   -p [timeout]         persistent service
  #开启持久化服务,开启它则表示在指定时间内,来自同一IP的请求都会转发到后端同一台真实服务器上进行处理,默认时间为300秒
  #此选项可以与SSL或FTP等协议结合使用,这对客户端始终与同一台真实服务器保持连接至关重要
  --netmask      -M netmask           persistent granularity mask
  #使用网络掩码来屏蔽持久化来源IP的地址范围,默认值为255.255.255.255,即所有来源IP请求都会享受持久化服务
  --real-server  -r server-address    server-address is host (and port)
  #指定真实服务器的主机IP与端口
  --gatewaying   -g                   gatewaying (direct routing) (default)
  #指定IPVS的工作模式为DR模式,DR为默认模式
  --ipip         -i                   ipip encapsulation (tunneling)
  #指定IPVS的工作模式为IP隧道模式
  --masquerading -m                   masquerading (NAT)
  #指定IPVS的工作模式为NAT模式
  --weight       -w weight            capacity of real server
  #指定真实服务器的权重值
  --u-threshold  -x uthreshold        upper threshold of connections
  #设置转发请求的最大上连接阀值,范围为0~65535,当连接数超过指定上限时,LVS则不会转发请求
  --l-threshold  -y lthreshold        lower threshold of connections
  #设置转发请求的下连接阀值,范围为0~65535,当连接数降低至指定值时,LVS则继续提供服务,默认值为0
  --mcast-interface interface         multicast interface for connection sync
  #设置用于连接同步守护进程的组播接口
  --syncid sid                        syncid for connection sync (default=255)
  #设置连接同步守护进程的SID号,用于标识,范围0~255,默认为255
  --connection   -c                   output of current IPVS connections
  #显示连接信息,一般与"-l"连用
  --timeout                           output of timeout (tcp tcpfin udp)
  #显示TCP、TCPFIN、UDP超时时间信息,一般与"-l"连用
  --daemon                            output of daemon information
  #显示连接同步守护信息,一般与"-l"连用
  --stats                             output of statistics information
  #显示统计信息,一般与"-l"连用
  --rate                              output of rate information
  #显示转发速率信息,一般与"-l"连用
  --exact                             expand numbers (display exact values)
  #显示数据包和字节计数器的确切值,扩大字符长度
  --thresholds                        output of thresholds information
  #显示阀值信息,一般与"-l"连用
  --persistent-conn                   output of persistent connection info
  #显示持久化连接信息,一般与"-l"连用
  --nosort                            disable sorting output of service/server entries
  #不要对虚拟服务和真实服务器的列表进行排序
  --sort                              does nothing, for backwards compatibility
  #排序虚拟服务和真实服务器的列表。虚拟服务条目按照升序排列。真实的服务器条目按<地址,端口>升序排列。
  --ops          -o                   one-packet scheduling
  #指定一个虚拟服务使用单包调度。该选项只能用于UDP服务。如果指定了此选项,则创建的所有连接都仅用于转发一个数据包。选项对于将UDP数据包从相同的客户端端口调度到不同的真实服务器很有用
  --numeric      -n                   numeric output of addresses and ports
  #地址和端口以数字格式显示,一般与"-l"连用
  --sched-flags  -b flags             scheduler flags (comma-separated)
  #设置调度算法的范围标识,用于SH算法,有两个标识:sh-fallback,如果真实服务器不可用,则将其转发到其他真实服务器上。sh-port,将源地址的端口号也添加到散列键=值中

ipvsadm策略文件/etc/sysconfig/ipvsadm

没有策略文件通常启动服务会报错

#第一次启动ipvsadm服务,会报错
[root@node1 network-scripts]# systemctl start ipvsadm
Job for ipvsadm.service failed because the control process exited with error code. See "systemctl status ipvsadm.service" and "journalctl -xe" for details.

#报错显示信息
[root@node1 network-scripts]# systemctl status ipvsadm.service
● ipvsadm.service - Initialise the Linux Virtual Server
   Loaded: loaded (/usr/lib/systemd/system/ipvsadm.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Thu 2020-02-06 10:59:31 EST; 35s ago
  Process: 16139 ExecStart=/bin/bash -c exec /sbin/ipvsadm-restore < /etc/sysconfig/ipvsadm (code=exited, status=1/FAILURE)
 Main PID: 16139 (code=exited, status=1/FAILURE)

Feb 06 10:59:31 node1 systemd[1]: Starting Initialise the Linux Virtual Server...
Feb 06 10:59:31 node1 bash[16139]: /bin/bash: /etc/sysconfig/ipvsadm: No such file or directory
Feb 06 10:59:31 node1 systemd[1]: ipvsadm.service: main process exited, code=exited, status=1/FAILURE
Feb 06 10:59:31 node1 systemd[1]: Failed to start Initialise the Linux Virtual Server.
Feb 06 10:59:31 node1 systemd[1]: Unit ipvsadm.service entered failed state.
Feb 06 10:59:31 node1 systemd[1]: ipvsadm.service failed.
[root@node1 network-scripts]# touch /etc/sysconfig/ipvsadm
[root@node1 network-scripts]# systemctl status ipvsadm.service
● ipvsadm.service - Initialise the Linux Virtual Server
   Loaded: loaded (/usr/lib/systemd/system/ipvsadm.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Thu 2020-02-06 10:59:31 EST; 2min 49s ago
  Process: 16139 ExecStart=/bin/bash -c exec /sbin/ipvsadm-restore < /etc/sysconfig/ipvsadm (code=exited, status=1/FAILURE)
 Main PID: 16139 (code=exited, status=1/FAILURE)

Feb 06 10:59:31 node1 systemd[1]: Starting Initialise the Linux Virtual Server...
Feb 06 10:59:31 node1 bash[16139]: /bin/bash: /etc/sysconfig/ipvsadm: No such file or directory
Feb 06 10:59:31 node1 systemd[1]: ipvsadm.service: main process exited, code=exited, status=1/FAILURE
Feb 06 10:59:31 node1 systemd[1]: Failed to start Initialise the Linux Virtual Server.
Feb 06 10:59:31 node1 systemd[1]: Unit ipvsadm.service entered failed state.
Feb 06 10:59:31 node1 systemd[1]: ipvsadm.service failed.

报错信息:Feb 06 10:59:31 node1 bash[16139]: /bin/bash: /etc/sysconfig/ipvsadm: No such file or directory
报错原因:因为是第一次启动还没有此文件
解决方式:生成一个此文件

#方式1,使用ipvsadm命令:
[root@node1 network-scripts]# ipvsadm --save > /etc/sysconfig/ipvsadm
#方式2,直接touch一个文件
[root@node1 network-scripts]# touch /etc/sysconfig/ipvsadm

ipvsadm-config配置文件关于策略文件的内容

[root@node1 network-scripts]# vim /etc/sysconfig/ipvsadm-config 
# Unload modules on restart and stop
#   Value: yes|no,  default: yes
# This option has to be 'yes' to get to a sane state for a ipvs
# restart or stop. Only set to 'no' if there are problems unloading ipvs
# modules.
IPVS_MODULES_UNLOAD="yes"

# Save current ipvs rules on stop.
#   Value: yes|no,  default: no
# Saves all ipvs rules to /etc/sysconfig/ipvsadm if ipvsadm gets stopped
# (e.g. on system shutdown).
IPVS_SAVE_ON_STOP="no"						#服务关闭,是否保存将现有策略到策略文件中

# Save current ipvs rules on restart.
#   Value: yes|no,  default: no
# Saves all ipvs rules to /etc/sysconfig/ipvsadm if ipvsadm gets
# restarted.
IPVS_SAVE_ON_RESTART="no"					#服务重启,是否保存将现有策略到策略文件中

# Numeric status output
#   Value: yes|no,  default: yes
# Print IP addresses and port numbers in numeric format in the status output.
IPVS_STATUS_NUMERIC="yes"

建议将IPVS_SAVE_ON_STOP和IPVS_SAVE_ON_RESTART改为yes,保证服务重启或者停止下配置策略不丢失

你可能感兴趣的:(Linux运维-企业实战)