lvs集群案例

lvs集群案例

集群搭建

lvs-nat

基于端口的集群,可根据不同端口,定义成不同的服务集群

节点 ip
VS 内网:1.1.1.25,公网:2.2.2.25
RS 1.1.1.10
RS 1.1.1.20
例1: rr算法
ipvsadm -A -t 2.2.2.25:80 -s rr 		#添加VS主机,tcp协议,2.2.2.25:80,用rr算法
ipvsadm -a -t 2.2.2.25:80 -r 1.1.1.10 -m	#添加RS1,-t指定VS主机,-r指定RS主机,-m指定采用nat地址隐藏

#测试访问
for i in {1..10}; do curl http://2.2.2.25; done

ipvsadm -ln		#查看
例2: wrr算法
ipvsadm -E -t 2.2.2.25:80 -s wrr
ipvsadm -e -t 2.2.2.25:80 -r 1.1.1.10 -m -w 3
ipvsadm -e -t 2.2.2.25:80 -r 1.1.1.20 -m -w 2

#删除一台RS,模拟故障
#一般RS故障,可设置VS上的http服务,给一个错误页面,当所有RS不可用时,可用来给访问者提示。 RS恢复后要删掉这个
ipvsadm -d -t 2.2.2.25:80 -r 1.1.1.20
ipvsadm -a -t 2.2.2.25 -r 127.0.0.1 -g
例3: wlc算法做ssh登录,可随机登录
ipvsadm -A -t 2.2.2.25:22 -s wlc 		#默认算法wlc
ipvsadm -a -t 2.2.2.25:80 -r 1.1.1.10 -m
ipvsadm -a -t 2.2.2.25:80 -r 1.1.1.20 -m

lvs-dr

所有主机只需要一张网卡,所有主机须在同一网络(能ping),同一网络时不需要网关
RIP使用私网时,要确保RS指向的网关能把VIP数据发出去

节点 ip
vs vip:1.1.1.254,dip:1.1.1.25
rs 1.1.1.10
rs 1.1.1.20
1)在RS设置内核参数、路由
cat > lvs-dr-conf.sh <<eof
#!/bin/bash

LO=1.1.1.254
MK=255.255.255.255

case \$1 in
	start)
		echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
		echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
		echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
		echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
		ifconfig lo:0 \$LO netmask \$MK broadcast \$LO up
		route add -host \$LO dev lo:0
		;;
	back)
		echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
		echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
		echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
		echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
		ifconfig lo:0 down
		route del -host \$LO
		;;
	*)
		exit
		;;
esac
eof
2)VS主机改网卡设置
#nmcli connection modify ens160 ipv4.addresses 1.1.1.25
ifconfig ens160:0 1.1.1.254 netmask 255.255.255.255 broadcast 1.1.1.254 up 
3)VS主机添加ipvs规则
ipvsadm -A -t 1.1.1.254:80 -s rr
ipvsadm -a -t 1.1.1.254:80 -r 1.1.1.10 -g 		#dr模式不用映射端口,VS端口是什么,RS端口是什么
ipvsadm -a -t 1.1.1.254:80 -r 1.1.1.20 -g

实战情景/案例

lvs基于防火墙标记实现多服务统一调度:

使用场景
lvs本身对集群的管理,是单独分端口管理的,并不能把多个不同端口的服务,进行统一管理,如80.443两个一起调度,为了ssl会话保持、避免lvs的持久连接分开,导致客户端访问一致性被打乱,可使用iptables完成多个端口统一调度

方法
实现反向代理,客户端访问VIP是https,lvs跳转RS是http。需要在rs主机配置证书
本次使用lvs-dr模型

节点 ip
vs 1.1.1.25(DIP) 1.1.1.254(VIP)
rs 1.1.1.10
rs 1.1.1.20
1)基于lvs-dr实现,可参考上个案例步骤搭建
2)vs配置nginx的ssl证书

由于模拟环境,没有域名,现用自建ca模拟

cd /etc/pki/CA;mkdir {certs,newcerts,private};touch index.txt;echo 01 > serial
(umask 077;openssl genrsa -out private/cakey.pem 2048)
openssl req -new -x509 -key private/cakey.pem  -out cacert.pem -days 365

cd ~
openssl genrsa -out httpd.key 2048
openssl req -new -key httpd.key -out httpd.csr
penssl ca -in http.csr -out httpd.crt -days 365

yum install -y nginx
vim nginx.conf
...
  server {
    listen 443 http2;
    server_name 域名;
	ssl_certificate_key key文件;
	ssl_certificate crt文件;
  }
5) VS主机使用防火墙标记,对服务端口标记

借助防火墙功能,标记定义集群服务,可将多个不同应用使用同一个集群服务进行调度

iptables -t mangle -A PREROUTING -d 1.1.1.254 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 1	#标记名自定义,设为1
6)VS配置ipvs规则
ipvsadm -A -f 1 -s rr
ipvsadm -a -f 1 -r 1.1.1.10 -g 
ipvsadm -a -f 1 -r 1.1.1.20 -g 

ipvs的持久连接

实现无论使用任何调度算法,在同一时间内,能够实现将来自同一地址的请求始终发往同一RS
一段时间内,一个ip访问的是同一个RIP,第一次会根据算法交给一台RS主机,后面的超时时间以内,再次访问,都会绑定在这台RS。超时时间过了再次根据算法分配,不在必须使用sh算法。
持久连接状态下的,所有访问都是同一台RS,包括80.22、443等

持久连接三种模式

  • 端口持久: 每个端口定义一个服务,单独集群调度
  • 防火墙标记持久: 根据防火墙标记,多端口统一调度
  • 客户端持久: 基于0端口的定义集群服务,所有端口通配,必须定义为持久连接
例:在vs配置ipvs规则
ipvsadm -A -t 1.1.1.254:0 -s rr -p 		#:0端口作用于*一样,通配所有端口,只要是VIP地址,所有端口都可访问,只可用在加了 -p选项时(默认360s)
ipvsadm -a -t 1.1.1.254:0 -r 1.1.1.10 -g 
ipvsadm -a -t 1.1.1.254:0 -r 1.1.1.20 -g 
posted @ 2023-11-25 16:34  suyanhj  阅读(25)  评论(0)    收藏  举报