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

浙公网安备 33010602011771号