lvs

调度算法:
rr,wrr

hardware:
F5,BIGIP
Citrix,Netscaler
A10
software:
四层:lvs
七层反向代理:nginx(http,smtp,pop3,imap),hapoxy(http,tcp(mysql,smtp))

iptables/netfilter
netfilter,rule,iptables
lvs:
ipvsadm:管理集群服务命令行工具
ipvs:内核
lvs(Linux virtual server)四层
director,realserver
lvs和iptables不能同时运行

DNAT:多目标

三种模式:
NAT:地址转换
DR:直接路由
TUN:隧道

NAT(必须要有两块网卡):集群节点跟director必须在同一IP网络中;
rip通常是私有地址,仅用于各集群节点的通信;
director位于client和real server之间,并负责处理进出的所有通信;
readserver必须将网关指向DIP;
支持端口映射;
realserver可以使用任意OS;
较大规模应用场景中,director易成为系统瓶颈;

DR(一块网卡就可以):
集群节点跟director必须在同一个物理网络中;
rip可以使用公网地址,实现便捷的流程管理和监控;
director仅负责处理进入站请求,响应报文则有realserver直接发往客户端;
realserver不能将网关指向DIP;
director不支持端口映射;

TUN(一块网卡就可以):
集群可以跨越互联网;
rip必须是公网地址;
director仅负责处理进入站请求,响应报文则有realserver直接发往客户端;
realserver不能将网关指向director;
只有支持隧道功能的OS才能用于realserver;
不支持端口映射;

LB
HA
HP

LB:
hardware:
F5,BIG-IP
Citrix netscaler
A10
software:
四层:
LVS
七层:
nginx
haproxy

LVS:Linux virtual server

type:
NAT:类似DNAT
DR
TUN

固定调度
rr:轮叫,轮询
wrr:weight,加权
sh:source hash,源地址hash

http stateless
cookie(在客户端)
session(在服务器端保存用户的信息)
session affinity(session绑定)

四种静态:
rr:
wrr:
dh:
sh:

动态调度算法:
lc:最小连接
active256+innative
谁的小,挑谁
wlc:加权最小连接
(active
256+inactive)/weight
sed:最短期望延迟
(active+1)*256/weight
nq:never queue
lblc:基于本地的最小连接
lblcr:基于本地的带复制功能的最小连接

默认方法:wlc

调度算法:
rr(轮叫,轮询):依次分发
wrr(权重轮询):按权重的大小进行分发
sh(来源地址hash):如果某一客户端通过调度器分发到一台服务器上面,则当客户再次访问的时候,同样被分发到上一次访问过的服务器上面。
dh(目标地址hash):当很多客户端访问通过调度器访问相同的资源时,就被分发到同一台服务器
lc(最小连接):谁连接数少就用那台服务器
wlc(权重):按权重(active*256+inactive)/weight
sed:最短期望延迟(inactive+1)/weight
ng:never queue
lblc:基于本地的最小连接
lblcr:基于本地带复制功能的最小连接

ipvsadm:管理集群服务的命令行工具
ipvs:内核模块

grep -i ‘vs’/boot/config-2.6.18-308.e15

yum install ipvsadm

ipvsadm:
定义集群服务(可以理解为定义分发器):
添加:-A -t|u|f service=address [-s schedluer]
-t:TCP协议的集群
-u:UDP协议的集群
service-address:IP:PORT
-f:FWM防火墙标记
service-address:mark number
修改:-E
删除:-D -t|u|f service-address

ipvsadm -A -t 172.16.100.1:80 -s rr

管理集群服务中的RS
    添加:-a -t|u|f service=address -r server-address [-g|i|m] [-w weight]
    -t|u|f server-address:事先定义好的某集群服务
            -r server-address: 某RS的地址,在NAT模型中,可使用IP:PORT实现端口映射
  [-g|i|m]:lvs类型
    -g:DR
    -i:TUN
    -m:NAT
   [-w weight]:定义服务器权重
    修改:-e
    删除:-d -t|u|f service-address -r server-address

ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 -m
ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -m
查看:-L|l
-n:数字格式显示主机地址和端口
--stats:统计数据
--rate:速率
--timeout:显示tcp,tcpfin和tcp的会话超时时长
-c:显示当前的ipvs连接状况

ipvsadm -L -n --stats
ipvsadm -L -n --rate
ipvsadm -L -n --timeout
ipvsadm -L -n --damon
ipvsadm -L -n -c

删除所有集群服务 :
-C:清空ipvs规则
保存规则:
-S:ipvsadm -S > /path/to/somefile
载入此前的规则:
-R:ipvsadm -R > /path/form/somefile

各节点之间的时间偏差不应该超出1秒钟
NTP:network time protocol
ntpdate serverip

ipvsadm -A -t 172.16.100.1:80 -s rr
ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 -m
ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -m

ipvsadm -L -n

ipvsadm -E -t 172.16.100.1:80 -s wrr
ipvsadm -e -t 172.16.100.1:80 -r 192.168.10.8 -m -w 3
ipvsadm -e -t 172.16.100.1:80 -r 192.168.10.9 -m -w 1

ab -n 1000 -c 100 http://172.16.100.1/index.html

service ipvsadm save

LVS:ipvsadm/ipvs
input:-->postrouting

ipvsadm:
管理服务:
-A
-E
-D
管理RS:
-a
-e
-d
查看:
-L|l
-n
--stats
--rate
--timeout
--sort
--daemon
规则管理:
-C
-S
-R

DR:
vip:mac(dvip)
arptables:
kernel paraneter:
arp_ignore:定义接收到ARP请求时的响应级别;
0:只要本地配置有相应地址,就给予响应
1:仅在请求的目标地址配置请求到达的接口上的时候,才给予响应

arp_announce:定义将自己地址向外通告级别;
    0:将本地任何接口上的任何地址向外通告
    1:试图仅向目标网络通告与其网络匹配的地址
    2:仅向与本地接口上地址的网络进行通告

VIP:172.16.100.1
DIP:172.16.100.2
RIP:172.16.100.8

director:
eth0,DIP:172.16.100.2
eth0:0,vip:172.16.100.1
route add -host 172.16.100.1 dev eth0:0

RS1:
eth0,rip:172.16.100.7
lo:0,vip:172.16.100.1

RS2:
eth0,rip:172.16.100.8
lo:0,vip:172.16.100.1

必须要先关闭arp_ignore和arp_annoce之后才能配置vip地址

sysctl -w net.ipv4.conf.eth0.arp_announce=2
sysctl -w net.ipv4.conf.eth0.all.arp_announce=2

echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

ifconfig lo:0 172.16.100.1 broadcast 172.16.100.1 netmask 255.255.255.255
route add -host 172.16.100.1 dev lo:0

ipvsadm -A -t 172.16.100.1:80 -s wlc
ipvsadm -a -t 172.16.100.1:80 -r 172.16.100.7 -g -w 2
ipvsadm -a -t 172.16.100.1:80 -r 172.16.100.8 -g -w 1

iptables -A INPUT -p tcp --dport 88 -j REJECT

DR:
vip:192.168.10.3
dip:192.168.10.5

RS1:
192.168.10.7
RS2:
192.168.10.8

service ipvsadm save
ipvsadm -S

VIP,路由

elinks -dump http://192.168.10.7
echo $?

curl --connect-timeout 1 http://192.168.10.7

数组索引
array_name[index]
array_name=("element1" "element2")

array_name[0]="element1"
array_name[1]="element2"

echo ${RS[0]}
echo ${RS[1]}
echo $RS
echo ${#RS}
echo ${#RS[]}
echo ${RS[
]}

脚本实现lvs后端服务健康状态检查:
vim health_check
#! /bin/bash
#
vip=192.168.10.3
cport=80
fall_back=127.0.0.1
rs=(192.168.10.7 192.168.10.8)
rstatus=(1 1)
rw=(2 1)
rport=80
let count=0
type=g

add() {
ipvsadm -a -t $vip:$cport -r $1:$rport
[ $? -eq 0 ] && return 0 || return 1
}

del() {
ipvsadm -d -t $vip:$port -r $1:$rport -$type -w $2
[ $? -eq 0 ] && return 0 || return 1
}

while :; do
let count=0
for i in ${RS[*]}; do
if curl --connect-timeout 1 http://$i &> /dev/null; then
if [ ${rstatus[$count]} -eq 0 ]; then
add $i $rw{[$count]}
[ $? -eq 0 ] && rstatus[$count]=1
fi
else
if [ ${rstatus[$count]} -eq 1 ]; then
del $i
[$? -eq 0 ] && rstatus[$count]=0
fi
fi
done
sleep 5
done

DR:
arp_ignore=1
arp_announce=2

数组:变量阵列
array_name=(“” “” “”)

declare -a A

lvs持久连接:
无论使用何种算来自同一客户端请求派发至此前选定rs。

持久连接模板(内存缓存区域)
每一个客户端 及分配给他的rs映射关系。

ipvsadm -A|-E ... -p timeout:
timeout:持久连接时长,默认300秒:单位是秒

使用命令ipvsadm -A .... -p timeout
timeout: 持久连接时长,默认300秒:单位是秒;

在基于SSL,需要用到持久连接:
PPC:将来自于同一个客户端对于一个集群服务的请求,始终定向至此前选定的rs;持久端口连接
ipvsadm -A -t 192.168.10.3:80 -s rr -p 600
ipvsadm -E -t 192.168.10.3:80 -s rr
ipvsadm -L -n --persistent
ipvsadm -A -t 192.168.10.3:23 -s rr -p 3600

PCC:将来自于同一客户端对所有端口的请求,始终定向至此前选定的rs;持久客户端连接:ipvsadm -A -t 192.168.10.3:0 -s rr -p 600 注意端口一定要是零
ipvsadm -a -t 192.168.10.3:0 -r 192.168.10.7 -g -w 2
ipvsadm -a -t 192.168.10.3:0 -r 192.168.10.8 -g -w 2

把所有端口统统定义为集群服务,一律向同一rs转发
PNMPP:持久防火墙标记连接:iptables -t mangle -A PREROUTING -d 192.168.10.3 -i eth0 -p tcp --dport 80 -j MARK --set-mark 8
iptables -t mangle -A PREROUTING -d 192.168.10.3 -i eth0 -p tcp --dport 23 -j MARK --set-mark 8
ipvsadm -A -f 8 -s rr -p 600
ipvsadm -a -f 8 -r 192.168.10.7 -g -w 2
ipvsadm -a -f 8 -r 192.168.10.8 -g -w 5
选择几个端口定义为集群服务:要采用防火墙的标记功能。

rsync server(inotify+rsync server)
sersync:多线程同步

DR模型中如果群节点跟director不在同一个物理网络中;
例如:director IP地址为:202.1.1.1 VIP:202.1.1.2
realserver IP地址:192.168.1.25 VIP:202.1.1.2
如果是这样的情况就意味着路由器就必须要有两个网络接口;一个为:202.1.1.3 另一个为:192.168.1.20

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章