一、基于FireWall Mark防火墙标记调度
1、FireWall Mark防火墙标记调度
- 借助于防火墙标记来分类报文,而后基于标记定义集群服务;可将多个不同的应用使用同一个集群服务进行调度;
- 打标记方法(在Director主机):
格式: iptables -t mangle -A PREROUTING -d vip -pproto --dport $port -j MARK --set-mark NUMBER - 基于标记定义集群服务:
格式: ipvsadm -A -f NUMBER [options]
2、应用场景和实现
- 基于防火墙标记调度实现两种请求,一个服务响应方案
客户端浏览http和https,请求80和443端口响应,场景要求不管访问那个,都由一个服务响应。
设置vs调度服务器:
- vs调度服务器关闭selinux和防火墙
因为要用到https协议,所以把vs安装CA成服务器
[root@vs ~]# cd /etc/pki/CA#切换到ca目录
[root@vs CA]# (umask 077; openssl genrsa -out private/cakey.pem 2048)#生成自签证书
[root@vs CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365#生成自签证书
[root@vs CA]# ll #查询是否生成
-rw-r--r-- 1 root root 1318 7月 16 23:27 cacert.pem
...
[root@vs CA]# touch index.txt
[root@vs CA]# echo 01 > serial
[root@vs CA]# cd
[root@vs ~]# openssl genrsa -out httpd.key 2048#生成本机公钥
[root@vs ~]# chmod 600 httpd.key #设置权限
[root@vs ~]# openssl req -new -key httpd.key -out httpd.csr#生成一个证书
[root@vs ~]# openssl ca -in httpd.csr -out httpd.crt -days 365#签署证书
[root@vs ~]# ll #查询
-rw-r--r-- 1 root root 4452 7月 16 23:36 httpd.crt
-rw-r--r-- 1 root root 1005 7月 16 23:32 httpd.csr
-rw------- 1 root root 1675 7月 16 23:29 httpd.key
[root@vs ~]# scp -p httpd.crt httpd.key 192.168.1.11:/etc/httpd/conf.d/#拷贝证书到rs1
[root@vs ~]# scp -p httpd.crt httpd.key 192.168.1.12:/etc/httpd/conf.d/#拷贝证书到rs2
[root@vs ~]# vim /etc/hosts #设置解析
192.168.1.99 www.hehe.com
[root@vs ~]# ifconfig ens33:0 192.168.1.99 netmask 255.255.255.255 broadcast 192.168.1.99 up#设置广播地址
[root@vs ~]# ifconfig #查询IP地址配置
.......
ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.99 netmask 255.255.255.255 broadcast 192.168.1.99
ether 00:0c:29:8e:29:6a txqueuelen 1000 (Ethernet)
......
[root@vs ~]# yum -y install ipvsadm#安装lvs
[root@vs ~]# iptables -t mangle -A PREROUTING -d 192.168.1.99 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 3 #设定防火墙规则,标记为3
[root@vs ~]# iptables -t mangle -vnL#查询
Chain PREROUTING (policy ACCEPT 7213 packets, 1062K bytes)
pkts bytes target prot opt in out source destination
93 5088 MARK tcp -- * * 0.0.0.0/0 192.168.1.99 multiport dports 80,443 MARK set 0x3
[root@vs ~]# ipvsadm -A -f 3 -s sh#引用防火墙标记生成调度规则,sh绑定跟踪源地址算法
[root@vs ~]# ipvsadm -a -f 3 -r 192.168.1.11 -g#把rs1服务器加入调度规则
[root@vs ~]# ipvsadm -a -f 3 -r 192.168.1.12 -g#把rs1服务器加入调度规则
[root@vs ~]# ipvsadm -ln#查询
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
FWM 3 sh
-> 192.168.1.11:0 Route 1 0 0
-> 192.168.1.12:0 Route 1 0 0
rs1服务器配置
- rs1和rs2分别关闭防火墙,安装httpd.server,更改ip地址,网关指向路由器。
配置测试页面:
[root@rs1 ~]# yum -y install mod_ssl #安装ssl模块
[root@rs1 ~]# cd /etc/httpd/conf.d/
[root@rs1 conf.d]# ls #查看是否有.key文件
autoindex.conf httpd.key README userdir.conf
httpd.crt php.conf ssl.conf welcome.conf
[root@rs1 conf.d]# vim /etc/httpd/conf.d/ssl.conf#编辑ssl配置文件
# General setup for the virtual host, inherited from global configuration
DocumentRoot "/var/www/html"
ServerName www.hehe.com #修改服务名
# Server Certificate:
SSLCertificateFile /etc/httpd/conf.d/httpd.crt #修改目录
# Server Private Key:
SSLCertificateKeyFile /etc/httpd/conf.d/httpd.key #修改目录
[root@rs1 conf.d]# httpd -t #语法检查
[root@rs1 conf.d]# systemctl restart httpd
[root@rs1 conf.d]# ss -tnl #查询433端口是否打开
State Recv-Q Send-Q Local Address:Port
LISTEN 0 128 :::443 :::*
[root@rs1 conf.d]# scp ssl.conf 192.168.1.12:/etc/httpd/conf.d/#ssl配置文件拷贝到rs2服务器上
[root@rs1 ~]# vim /var/www/html/test.html#rs1服务器测试页
<h1>RS1 172.16.1.11</h1>
[root@rs1 ~]# vim setparam.sh#编辑脚本
#!/bin/bash
#
vip=192.168.1.99
mask='255.255.255.255'
case $1 in
start)#开始设置值
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig lo:0 $vip netmask $mask broadcast $vip up
route add -host $vip dev lo:0#设置本地地址广播
;;
stop)#停止还原成0值
ifconfig lo:0 down
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
;;
*)#其他
echo "Usage $(basename $0) start|stop"
exit 1
;;
esac
[root@rs1 ~]# bash -n setparam.sh #检查脚本语法
[root@rs1 ~]# bash -x setparam.sh start#启动脚本
+ vip=192.168.1.99
+ mask=255.255.255.255
+ case $1 in
+ echo 1
+ echo 1
+ echo 2
+ echo 2
+ ifconfig lo:0 192.168.1.99 netmask 255.255.255.255 broadcast 192.168.1.99 up
+ route add -host 192.168.1.99 dev lo:0
[root@rs1 ~]# scp setparam.sh 192.168.1.12:/tmp#把脚本传给rs2服务器
[root@rs1 ~]#systemctl start httpd
rs2服务器配置
[root@rs2 ~]# yum -y install mod_ssl #安装ssl模块
[root@rs2 ~]# vim /var/www/html/test.html#rs2服务器
<h1>RS2 172.16.1.12</h1>
[root@rs2 ~]# cd /tmp
[root@rs2 tmp]# ls
setparam.sh
[root@rs2 tmp]# bash -x setparam.sh start#执行脚本
+ vip=192.168.1.99
+ mask=255.255.255.255
+ case $1 in
+ echo 1
+ echo 1
+ echo 2
+ echo 2
+ ifconfig lo:0 192.168.1.99 netmask 255.255.255.255 broadcast 192.168.1.99 up
+ route add -host 192.168.1.99 dev lo:0
[root@rs2 ~]#systemctl start httpd
客户端测试:
http请求测试 https请求测试
二、lvs persistence:持久连接
1、持久连接
- 持久连接模板:实现无论使用任何调度算法,在一段时间内,能够实现将来自同一个地址的请求始终发往同一个RS;
格式:ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
port Affinity:
每端口持久:每个端口对应定义为一个集群服务,每集群服务单独调度;
[root@vs ~]# ipvsadm -E -f 3 -s rr -p
[root@vs ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
FWM 3 rr persistent 360 #持久连接默认360秒
-> 192.168.1.11:0 Route 1 0 0
-> 192.168.1.12:0 Route 1 0 0
每防火墙标记持久:基于防火墙标记定义集群服务;可实现将多个端口上的应用统一调度,即所谓的port Affinity;
每客户端持久:基于0端口定义集群服务,即将客户端对所有应用的请求统统调度至后端主机,必须定义为持久模式;
2、保存及重载规则:
保存:建议保存至/etc/sysconfig/ipvsadm
ipvsadm-save > /PATH/TO/IPVSADM_FILE
ipvsadm -S > /PATH/TO/IPVSADM_FILE
systemctl stop ipvsadm.service
3、重载:
ipvsadm-restore < /PATH/FROM/IPVSADM_FILE
ipvsadm -R < /PATH/FROM/IPVSADM_FILE
systemctl restart ipvsadm.service
网友评论