源码安装步骤
安装依赖包
sudo yum install -y gcc-c++
sudo yum install libnl* libpopt*
sudo yum install -y popt-static
下载源码包
wget https://mirrors.edge.kernel.org/pub/linux/utils/kernel/ipvsadm/ipvsadm-1.31.tar.gz
编译安装
tar xzvf ipvsadm-1.31.tar.gz
cd ipvsadm-1.31
make
sudo make install
验证是否可用
[ec2-user@etcd1 ipvsadm-1.31]$ sudo ipvsadm -h
ipvsadm v1.31 2019/12/24 (compiled with popt and IPVS v1.2.1)
Usage:
ipvsadm -A|E virtual-service [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags]
ipvsadm -D virtual-service
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
ipvsadm -a|e virtual-service -r server-address [options]
ipvsadm -d virtual-service -r server-address
ipvsadm -L|l [virtual-service] [options]
ipvsadm -Z [virtual-service]
ipvsadm --set tcp tcpfin udp
ipvsadm --start-daemon {master|backup} [daemon-options]
ipvsadm --stop-daemon {master|backup}
ipvsadm -h
Commands:
Either long or short options are allowed.
--add-service -A add virtual service with options
--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
--zero -Z zero counters in a service or all services
--set tcp tcpfin udp set connection timeout values
--start-daemon start connection sync daemon
--stop-daemon stop connection sync daemon
--help -h display this help message
virtual-service:
--tcp-service|-t service-address service-address is host[:port]
--udp-service|-u service-address service-address is host[:port]
--sctp-service service-address service-address is host[:port]
--fwmark-service|-f fwmark fwmark is an integer greater than zero
Options:
--ipv6 -6 fwmark entry uses IPv6
--scheduler -s scheduler one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq|fo|ovf|mh,
the default scheduler is wlc.
--pe engine alternate persistence engine may be sip,
not set by default.
--persistent -p [timeout] persistent service
--netmask -M netmask persistent granularity mask
--real-server -r server-address server-address is host (and port)
--gatewaying -g gatewaying (direct routing) (default)
--ipip -i ipip encapsulation (tunneling)
--masquerading -m masquerading (NAT)
--tun-type type one of ipip|gue|gre,
the default tunnel type is ipip.
--tun-port port tunnel destination port
--tun-nocsum tunnel encapsulation without checksum
--tun-csum tunnel encapsulation with checksum
--tun-remcsum tunnel encapsulation with remote checksum
--weight -w weight capacity of real server
--u-threshold -x uthreshold upper threshold of connections
--l-threshold -y lthreshold lower threshold of connections
--connection -c output of current IPVS connections
--timeout output of timeout (tcp tcpfin udp)
--daemon output of daemon information
--stats output of statistics information
--rate output of rate information
--exact expand numbers (display exact values)
--thresholds output of thresholds information
--persistent-conn output of persistent connection info
--tun-info output of tunnel information
--nosort disable sorting output of service/server entries
--sort does nothing, for backwards compatibility
--ops -o one-packet scheduling
--numeric -n numeric output of addresses and ports
--sched-flags -b flags scheduler flags (comma-separated)
Daemon Options:
--syncid sid syncid for connection sync (default=255)
--sync-maxlen length Max sync message length (default=1472)
--mcast-interface interface multicast interface for connection sync
--mcast-group address IPv4/IPv6 group (default=224.0.0.81)
--mcast-port port UDP port (default=8848)
--mcast-ttl ttl Multicast TTL (default=1)
[ec2-user@etcd1 ipvsadm-1.31]$
异常处理
fatal error: netlink/netlink.h: No such file or directory错误,具体错误日志信息
[ec2-user@etcd1 ipvsadm-1.31]$ make
make -C libipvs
make[1]: Entering directory '/home/ec2-user/ipvsadm-1.31/libipvs'
gcc -Wall -Wunused -Wstrict-prototypes -g -fPIC -DLIBIPVS_USE_NL -DHAVE_NET_IP_VS_H -c -o libipvs.o libipvs.c
In file included from libipvs.h:13,
from libipvs.c:23:
ip_vs.h:15:10: fatal error: netlink/netlink.h: No such file or directory
15 | #include <netlink/netlink.h>
| ^~~~~~~~~~~~~~~~~~~
compilation terminated.
make[1]: *** [Makefile:39: libipvs.o] Error 1
make[1]: Leaving directory '/home/ec2-user/ipvsadm-1.31/libipvs'
make: *** [Makefile:87: libs] Error 2
[ec2-user@etcd1 ipvsadm-1.31]$
解决方法:需要安装sudo yum install libnl* libpopt*后修复
fatal error: popt.h: No such file or directory错误,具体错误信息
[ec2-user@etcd1 ipvsadm-1.31]$ make
make -C libipvs
make[1]: Entering directory '/home/ec2-user/ipvsadm-1.31/libipvs'
gcc -Wall -Wunused -Wstrict-prototypes -g -fPIC -DLIBIPVS_USE_NL -I/usr/include/libnl3 -DHAVE_NET_IP_VS_H -c -o libipvs.o libipvs.c
gcc -Wall -Wunused -Wstrict-prototypes -g -fPIC -DLIBIPVS_USE_NL -I/usr/include/libnl3 -DHAVE_NET_IP_VS_H -c -o ip_vs_nl_policy.o ip_vs_nl_policy.c
ar rv libipvs.a libipvs.o ip_vs_nl_policy.o
ar: creating libipvs.a
a - libipvs.o
a - ip_vs_nl_policy.o
gcc -shared -Wl,-soname,libipvs.so -o libipvs.so libipvs.o ip_vs_nl_policy.o
make[1]: Leaving directory '/home/ec2-user/ipvsadm-1.31/libipvs'
gcc -Wall -Wunused -Wstrict-prototypes -g -DVERSION=\"1.31\" -DSCHEDULERS=\""rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq|fo|ovf|mh"\" -DPE_LIST=\""sip"\" -DHAVE_NET_IP_VS_H -c -o ipvsadm.o ipvsadm.c
ipvsadm.c:114:10: fatal error: popt.h: No such file or directory
114 | #include "popt.h"
| ^~~~~~~~
compilation terminated.
make: *** [Makefile:142: ipvsadm.o] Error 1
[ec2-user@etcd1 ipvsadm-1.31]$
解决方法:执行sudo yum install -y popt-static修复