lvs使用进阶
Posted ckh2014
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lvs使用进阶相关的知识,希望对你有一定的参考价值。
之前lvs基础篇(https://www.cnblogs.com/ckh2014/p/10855002.html)中介绍了lvs-dr的搭建,下面我们再复习一下,架构如下:
相关配置
director:
# ip addr add 192.168.1.111/32 dev/eth0
RS:
写一个脚本:vim setka.sh
#!/bin/bash
#
vip=192.168.1.111
case $1 in
start)
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
ifconfig lo:0 $vip netmask 255.255.255.255 broadcast $vip
;;
stop)
ifconfig lo:0 down
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/eth0/arp_announce
;;
esac
director写ipvsadm管理命令:
# ipvsadm -A -t 192.168.1.111:80 -s rr
# ipvsadm -a -t 192.168.1.111:80 -r 192.168.1.102 -g
# ipvsadm -a -t 192.168.1.111:80 -r 192.168.1.103 -g
测试:浏览器访问http://192.168.1.111
那我们如何开放两个端口的服务都做集群调度呢
比如我们再添加ssh服务进行调度
清空上面写的ipvsadm管理命令
# ipvsadm -C
添加80端口web服务集群:
# iptables -t mangle -A PREROUTING -d 192.168.1.111 -p tcp -dport 80 -j MARK --set-mark 10
# ipvsadm -A -f 10 -s rr
# ipvsadm -a -f 10 -r 192.168.1.192 -g
# ipvsadm -a -f 10 -r 192.168.1.103 -g
添加ssh服务到集群:
# iptables -t mangle -A PREROUTING -d 192.168.1.111 -p tcp -dport 22 -j MARK --set-mark 10
再添加一个ssl也受集群管理:
首先我们创建私有CA,给Real Server发证书,这里就简单介绍下创建证书的过程了,之前openssl博客已经写得很详细了,不了解的可以去参考(https://www.cnblogs.com/ckh2014/p/10772175.html):
CA自签证书:
# cd /etc/pki/CA
# 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 7300
RS生成证书请求:
# cd /etc/httpd
# mkdir ssl
# yum install mod_ssl
#(umask 077;openssl genrsa -out ssl/httpd.key 1024)
# openssl req -new -key ssl/httpd.key -out ssl/httpd.csr -days 365
传给ca签证:
# scp ssl/httpd.csr [email protected]:/tmp
CA签证:
# openssl ca -in /tmp/httpd.csr -out certs/httpd.crt -days 365
证书传给RS:
# scp certs/httpd.crt 192.168.1.102:/etc/httpd/ssl
RS修改ssl配置文件:
# vim /etc/httpd/conf.d/ssl.conf
具体配置就不详细描述了
证书都发完后,写ipvsadm进行管理:
# ipvsadm -A -t 192.168.1.111:443 -s rr # ipvsadm -a -t 192.168.1.111:443 -r 192.168.1.102 -g # ipvsadm -a -t 192.168.1.111:443 -r 192.168.1.103 -g
测试: 浏览器访问https://192.168.1.111
或者iptables规则中打标:
# iptables -t mangle -A PREROUTING -d 192.168.1.111 -p tcp -dport 443 -j MARK --set-mark 10
# ipvsadm -A -f 10 -s rr
# ipvsadm -a -f 10 -r 192.168.1.192 -g
# ipvsadm -a -f 10 -r 192.168.1.103 -g
测试:浏览器访问https://192.168.1.111
总结:
通过FWM定义集群的方式:
(1)在director上netfilter的mangle表的PREROUTNG定义用于”打标“的规则
# iptables -t mangle -A PREROUTING -d $vip -p $protocol --dports $port -j MARK --set-mark #
$vip: VIP地址
$protocol:协议
$port: 协议端口
(2)基于FWM定义集群服务
# ipvsadm -A -f # -s scheduler
# ipvsadm -a -f # $RS_IP $context
$context:上下文,有-m(masquerade,nat),-g(gateway,dr), -i(ipip,tun)
功用:将共享一组RS的集群服务统一进行调度;
session保持:
session绑定
session复制
session服务器
session绑定:lvs sh算法
对某一特定服务;
lvs persistence: lvs的持久连接
功能:无论ipvs使用何种调度方法,其都能实现将来自于同一个Client的请求始终定向至第一次调度时挑选出的RS;
持久连接模板:独立于算法
sourceip rs timer
对多个共享同一组RS的服务器,需要统一进行绑定?
持久连接的实现方式:
每端口持久: PPC,单服务持久调度
每FWM持久: PFWMC,单FWM持久调度
PORT AFFINITY
每客户端持久: PCC,单客户端持久调度
director会将用户的任何请求都识别为集群服务,并向RS进行调度:
TCP:0-65535
UDP:0-65535
HA:
SPOF: Single Point Of Failure
director: 高可用集群 realserver: 让director对其做健康状态监测,并且根据监测的结果自动完成添加或移除等管理功能 1. 基于协议层次 ip: icmp 传输层:检测端口的开放状态 应用层:请求获取关键性的资源
2. 检查频度
3. 状态判断
下线: ok --> failure --> failure --> failure
上线: failure --> ok --> ok
4. back server,sorry server
以上是关于lvs使用进阶的主要内容,如果未能解决你的问题,请参考以下文章
我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情
我的C语言学习进阶之旅解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.(代码片段