LVS安装配置

来自Linux78|wiki
Bob讨论 | 贡献2019年11月25日 (一) 15:34的版本 →‎Tun模式测试
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

ipvsadm命令详解

ipvsadm是ipvs的管理器,需要yum install ipvsadm安装。

基本用法:

ipvsadm COMMAND [protocol] service-address [scheduling-method] [persistence options]

ipvsadm COMMAND [protocol] service-address server-address [packet-forwarding-method] [weight options]

第一条命令用于向LVS系统中添加一个用于负载均衡的virtual server(VS);第二条命令用来修改已经存在的VS的配置,service address用来指定涉及的虚拟服务即虚拟地址,server-address指定涉及的真实地址。


命令参数

-A, --add-service: 为ipvs虚拟服务器添加一个虚拟服务,即添加一个需要被负载均衡的虚拟地址。虚拟地址需要是ip地址,端口号,协议的形式。

-E, --edit-service: 修改一个虚拟服务。

-D, --delete-service: 删除一个虚拟服务。

-C, --clear: 清除所有虚拟服务。

-R, --restore: 从标准输入获取ipvsadm命令。一般结合下边的-S使用。

-S, --save: 从标准输出输出虚拟服务器的规则。可以将虚拟服务器的规则保存,在以后通过-R直接读入,以实现自动化配置。

-a, --add-server: 为虚拟服务添加一个real server(RS)

-e, --edit-server: 修改RS

-d, --delete-server: 删除

-L, -l, --list: 列出虚拟服务表中的所有虚拟服务。可以指定地址。添加-c显示连接表。

-Z, --zero: 将所有数据相关的记录清零。这些记录一般用于调度策略。

--set tcp tcpfin udp:修改协议的超时时间。

--start-daemon state:设置虚拟服务器的备服务器,用来实现主备服务器冗余。(注:该功能只支持ipv4)

--stop-daemon: 停止备服务器。

-h, --help: 帮助。


参数:以下参数可以接在上边的命令后边。

-t, --tcp-service service-address:

指定虚拟服务为tcp服务。service-address要是host[:port]的形式。端口是0表示任意端口。如果需要将端口设置为0,还需要加上-p选项(持久连接)。

-u, --udp-service service-address:

使用udp服务,其他同上。

-f, --fwmark-service integer:

用firewall mark取代虚拟地址来指定要被负载均衡的数据包,可以通过这个命令实现把不同址、端口的虚拟地址整合成一个虚拟服务,可以让虚拟服务器同时截获处理去往多个不同地址的数据包。fwmark可以通过iptables命令指定。如果用在ipv6需要加上-6。

-s, --scheduler scheduling-method:

指定调度算法。调度算法可以指定以下8种:rr(轮询),wrr(权重),lc(最后连接),wlc(权重),lblc(本地最后连接),lblcr(带复制的本地最后连接),dh(目的地址哈希),sh(源地址哈希),sed(最小期望延迟),nq(永不排队)

-p, --persistent [timeout]:

设置持久连接,这个模式可以使来自客户的多个请求被送到同一个真实服务器,通常用于ftp或者ssl中。

-M, --netmask netmask:

指定客户地址的子网掩码。用于将同属一个子网的客户的请求转发到相同服务器。

-r, --real-server server-address:

为虚拟服务指定数据可以转发到的真实服务器的地址。可以添加端口号。如果没有指定端口号,则等效于使用虚拟地址的端口号。

[packet-forwarding-method]:

此选项指定某个真实服务器所使用的数据转发模式。需要对每个真实服务器分别指定模式。

-g, --gatewaying: 使用网关(即直接路由),此模式是默认模式。

-i, --ipip: 使用ipip隧道模式。

-m, --masquerading: 使用NAT模式。

-w, --weight weight:

设置权重。权重是0~65535的整数。如果将某个真实服务器的权重设置为0,那么它不会收到新的连接,但是已有连接还会继续维持(这点和直接把某个真实服务器删除时不同的)。

-x, --u-threshold uthreshold:

设置一个服务器可以维持的连接上限。0~65535。设置为0表示没有上限。

-y, --l-threshold lthreshold:

设置一个服务器的连接下限。当服务器的连接数低于此值的时候服务器才可以重新接收连接。如果此值未设置,则当服务器的连接数连续三次低于uthreshold时服务器才可以接收到新的连接。(PS:笔者以为此设定可能是为了防止服务器在能否接收连接这两个状态上频繁变换)

--mcast-interface interface:

指定使用备服务器时候的广播接口。

--syncid syncid:

指定syncid,同样用于主备服务器的同步。

以下选项用于list命令:

-c, --connection:

列出当前的IPVS连接。

--timeout:

列出超时

--daemon:

--stats:

状态信息

--rate:

传输速率

--thresholds:

列出阈值

--persistent-conn:

坚持连接

--sor:

把列表排序。

--nosort:

不排序

-n, --numeric:

不对ip地址进行dns查询

--exact:

单位

-6:

如果fwmark用的是ipv6地址需要指定此选项。

其他注意事项:

如果使用IPv6地址,需要在地址两端加上“[]”。例如:ipvsadm -A -t [2001:db8::80]:80 -s rr

可以通过设置以下虚拟文件的值来防御DoS攻击:/proc/sys/net/ipv4/vs/drop_entry /proc/sys/net/ipv4/vs/drop_packet /proc/sys/net/ipv4/vs/secure_tcp 对于某一目的地址,对应有一个RS子集。对此地址的请求,为它分配子集中连接数最小的RS;如果子集中所有的服务器均已满负荷,则从集群中选择一个连接数较小的服务器,将它加入到此子集并分配连接;若一定时间内,这个子集未被做任何修改,则将子集中负载最大的节点从子集删除。

NAT模式测试

测试环境

Director:         centos       VIP:192.168.1.111

                                DIP:192.168.229.133

RealServer1: centos            RIP:192.168.229.132

RealServer2: centos            RIP:192.168.229.134

Director配置

安装ipvsadm:

yum install ipvsadm –y

编辑脚本:/LVS/install.sh

director设置 nat 防火墙

iptables -t nat -F
#!/bin/bash
VIP=192.168.1.111
DIP=192.168.229.133
RIP1=192.168.229.132
RIP2=192.168.229.134

director服务器上开启路由转发功能:

echo 1 > /proc/sys/net/ipv4/ip_forward

关闭 icmp 的重定向

echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects

director设置 ipvsadm

IPVSADM='/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t $VIP:80 -s rr
$IPVSADM -a -t $VIP:80 -r $RIP1:80 -m
$IPVSADM -a -t $VIP:80 -r $RIP2:80 -m

RealServer配置

配置RealServer1和RealServer2的网关为DIP。如:

vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=00:0C:29:46:3B:8C
TYPE=Ethernet
UUID=e2fa0e51-7240-4ef9-8572-bf82ef8bb6a8
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.229.132
NETMASK=255.255.255.0
GATEWAY=192.168.229.133                #配置网关为DIP

安装httpd

yum –y install httpd

标记网页:

RealServer1:echo ”I am RealServer1 192.168.229.132”>/var/www/html/index.html
RealServer2:echo “I am RealServer2 192.168.229.134”>/var/www/html/index.html

4)验证 多次访问http://192.168.1.111

会轮询得到“I am RealServer1 192.168.229.132”“I am RealServer2 192.168.229.134”

注意:关闭Director的防火墙iptables,不然访问不成功。

DR模式测试

1)测试环境

Director:    centos            VIP:eth0:0:192.168.229.111

                                DIP:eth0:192.168.229.133

RealServer1: centos           RIP:eth0:192.168.229.132

                               VIP:lo:0:192.168.229.111

RealServer2: centos           RIP:eth0:192.168.229.134

                                VIP:lo:0:192.168.229.111

2)Director配置

#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/sbin/ipvsadm
vip=192.168.229.111
rs1=192.168.229.132
rs2=192.168.229.134
ifconfig eth0:0 down
ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.0 up
route add -host $vip dev eth0:0
$ipv -C
$ipv -A -t $vip:80 -s rr
$ipv -a -t $vip:80 -r $rs1:80 -g
$ipv -a -t $vip:80 -r $rs2:80 –g

3)RealServer配置

#!/bin/bash
vip=192.168.229.111
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip 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

4)验证

多次访问http://192.168.1.111

会轮询得到“I am RealServer1 192.168.229.132” “I am RealServer2 192.168.229.134”

注意:关闭Director的防火墙iptables,不然访问不成功。

Tun模式测试

1)测试环境

Director:        centos    VIP:eth0:0:192.168.299.111
 
                            DIP:eth0:192.168.229.133

RealServer1: centos        RIP:eth0:192.168.229.132

                            VIP:tunl0:192.168.229.111

RealServer2: centos        RIP:eth0:192.168.229.134

                            VIP:tunl0:192.168.229.111

2)Director配置

#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/sbin/ipvsadm
vip=192.168.229.111
rs1=192.168.229.132
rs2=192.168.229.134
ifconfig eth0:0 down
ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.0 up
route add -host $vip dev eth0:0
iptables -t nat -F
setenforce 0
$ipv -C
$ipv -A -t $vip:80 -s rr
$ipv -a -t $vip:80 -r $rs1:80 -i
$ipv -a -t $vip:80 -r $rs2:80 -i

3)RealServer配置 a、加载ipip模块

modprobe ipip

b、配置VIP:

# cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-tunl0
vi ifcfg-tunl0
DEVICE=tunl0
IPADDR=192.168.229.111
NETMASK=255.255.255.0
ONBOOT=yes
NAME=tunl0
service network restart

c、关闭arp转发:

echo '0'>/proc/sys/net/ipv4/ip_forward
vi /etc/sysctl.conf                #加入以下行
net.ipv4.conf.tunl0.arp_ignore = 1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tunl0.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
sysctl -p                           #永久生效
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.tunl0.arp_ignore = 1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tunl0.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0

d、关闭selinux

setenforce 0或者修改/etc/selinux/config 配置文件中SELINUX=disabled然后重启系统。

4)验证

多次访问http://192.168.1.111

会轮询得到“I am RealServer1 192.168.229.132”“I am RealServer2 192.168.229.134”

注意:关闭Director的防火墙iptables,不然访问不成功。