1): 请求报文, 相应报文, 都需要经过我们分发器, 如果数据量大, 分发器将是我们的瓶颈
2): 只需要一个公网IP就可以完成集群的构建, 相对来说, 安全性还不错
3): VIP DIP RIP CIP
4): director是一个单点的, 如果director挂了, 这个集群就完蛋了
5): ip_vs在低版本中, 是不具有健康状态监测, 在高版本中, 有非常弱的监测功能, 不适合生产使用
1.1 实例1: LVS NAT模式
实验前期准备:
1、准备3台主机
2、iptables -F , 清除规则
3、/etc/selinux/config,关SELinux
#getenforce
Disabled
1.2 真实环境中的拓扑图
1.3 集群各节点IP注解:
客户端计算机的IP(CIP):
可能是一个本地的、与VIP在同一网络的私有ip地址,或者是一个因特网上的公共ip地址。用作向集群发送请求的源ip地址
虚拟IP(VIP):
Director用于向客户端提供服务的ip地址
Director的IP(DIP):
在Director的VIP上接收访问集群服务的请求,这些请求通过DIP转发出去抵达各个集群节点
真实real server IP(RIP):
在LVS术语中,向外部世界提供服务的节点叫做真实服务器,因此在真实服务器上使用的ip地址叫做真实ip地址(RIP)。
精简版,实验拓扑图:
1.4 配置LVS:
k8s02配置成分发器:
1、打开路由转发功能
[root@k8s02 sysctl.d]# cat /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
让配置生效:
sysctl -p
2、配置网络环境:
添加一个网卡(需要两张网卡), 配置成以下网络环境:
ens37 192.168.20.129 模式:br0 模拟公网
ens33 192.168.10.132 模式:vmnet4 模拟内网
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens37
[root@k8s02 network-scripts]# cat ifcfg-ens37
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
DEFROUTE=yes
BOOTPROTO=static
IPADDR=192.168.20.129
NETMASK=255.255.255.0
GATEWAY=192.168.20.2
DNS1=192.168.1.1
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens37
DEVICE=ens37
ONBOOT=yes
systemctl restart network
Director分发器:需不需要开启80(服务的)端口 ?
1.5 安装: LVS管理工具: ipvsadmin
rpm -ivh ipvsadm-1.25-9.el6.x86_64.rpm
或:
yum install ipvsadm
1.6 使用ipvsadm命令设置规则:
ipvsadm -A -t 192.168.20.129:80 -s rr rr代表轮循
选项:
-A 添加虚拟服务器
-t 表示TCP的服务 VIP:PORT
-s 指定调度算法 rr表示round-robin 轮循
ipvsadm -a -t 192.168.20.129:80 -r 192.168.10.133 -m
ipvsadm -a -t 192.168.20.129:80 -r 192.168.10.134 -m
选项:
-a 表示添加real server的地址
-r 指定real server的IP地址
-m 表示masquerade 也就是NAT方式的LVS
1.7 查看
Ipvsadm命令,用于配置及查看内核IPVS表和算法的工具,类似于iptables
[root@k8s02 network-scripts]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.20.129:80 rr
-> 192.168.10.133:80 Masq 1 0 0
-> 192.168.10.134:80 Masq 1 0 0
1.8 保存配置或规则
[root@k8s02 ~]# ipvsadm --save >/etc/sysconfig/ipvsadm
[root@k8s02 ~]# cat !$
cat /etc/sysconfig/ipvsadm
-A -t k8s02:http -s rr
-a -t k8s02:http -r k8s03:http -m -w 1
-a -t k8s02:http -r k8s04:http -m -w 1
1.9 配置真实服务器
RealServer:在k8s03和k8s04上面配置:
准备:
1、配置IP:REAL SERVER自己的网络相关信息配置成如下:
k8s03: ens33:192.168.10.133 网关: 192.168.10.132
k8s04: ens33:192.168.10.134 网关: 192.168.10.132
##网关配置为k8s02的ip
cat /etc/sysconfig/network-scripts/ifcfg-ens33
GATEWAY=192.168.10.132
2、配置k8s03为realserver, 并启web服务
yum install -y httpd
systemctl restart httpd
echo "192.168.10.133" > /var/www/html/index.html #(实验期间,各个服务器的页面不同)
3、配置k8s04为realserver, 并启web服务
yum install -y httpd
systemctl restart httpd
echo "192.168.10.134" > /var/www/html/index.html #(实验期间,各个服务器的页面不同)
1.10 测试:
在k8s02上测试:
yum install -y elinks
测试realserver :
[root@k8s02 ~]# elinks 192.168.10.133 --dump
192.168.10.133
[root@k8s02 ~]# elinks 192.168.10.134 --dump
192.168.10.134
1.11 测试VIP
[root@k8s02 network-scripts]# elinks 192.168.20.129 --dump
192.168.10.134
[root@k8s02 network-scripts]# elinks 192.168.20.129 --dump
192.168.10.133
1.12 扩展ipvsadm 更多参数说明
-L -n ==> 查看规则,显示内核虚拟服务器表
-L -n -c ==> 查看客户端连接分发器和real server 的情况
例1:
[root@k8s02 network-scripts]# ipvsadm -L -n -c
IPVS connection entries
pro expire state source virtual destination
TCP 01:59 FIN_WAIT 192.168.20.1:51184 192.168.20.129:80 192.168.10.134:80
TCP 00:36 TIME_WAIT 192.168.20.1:51153 192.168.20.129:80 192.168.10.134:80
TCP 00:38 TIME_WAIT 192.168.20.1:51103 192.168.20.129:80 192.168.10.134:80
TCP 01:38 TIME_WAIT 192.168.20.1:51132 192.168.20.129:80 192.168.10.133:80
TCP 01:07 TIME_WAIT 192.168.20.1:51166 192.168.20.129:80 192.168.10.133:80
选项:
-L -n --stats ==> 查看分发情况
-L -n --rate ==> 查看速率
-Z --zero 虚拟服务表计数器清零(清空当前的连接数量等)
例2:
ipvsadm -Z
ipvsadm -L -n --stats
IP Virtual Server version 1.2.1 (size=4096)
选项:
-Z --clear 清空IPVS的数据、等信息
例3:
ipvsadm -C
选项:
-C 清空所有规则
LVS的规则配置文件:/etc/sysconfig/ipvsadm
附录:ipvsadm命令选项解释:
-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 地址和端口的数字形式
超时时间用ipvsadm --set tcp tcpfin udp设置,比如
#ipvsadm --set 120 20 100
表示tcp空闲等待时间为120 秒
客户端关闭链接等待时间为20秒
udp空闲等待为100秒