如何保证vip对内可见,对外隐藏?
kernel parameter:
目标mac地址为全F,交换机触发广播
/proc/sys/net/ipv4/conf/*IF*/
arp_ignore: 定义接收到ARP请求时的响应级别;
0:只要本地配置的有相应地址,就给予响应;
1:仅在请求的目标(MAC)地址配置请求
到达的接口上的时候,才给予响应;
arp_announce:定义将自己地址向外通告时的通告级别;
0:将本地任何接口上的任何地址向外通告;
1:试图仅向目标网络通告与其网络匹配的地址;
2:仅向与本地接口上地址匹配的网络进行通告;
os可以给一个网卡配置多个ip地址同时使用,对于2:接口上配置了很多ip,指向匹配的那个网络去通知自己匹配的ip地址。
负载均衡调度算法的使用
LVS会记录请求的数据包记录下来,当三次握手建立之后,server的连接会+1,LVS能偷窥服务的连接,负载均衡调度算法把请求负载到对应的服务器上。
搭建
负载均衡在内核模块是ipvs
要使用负载均衡首先要安装一个连接包ipvsadm
yum install ipvsadm -y
管理集群服务(接受包规则)
添加:-A -t|u|f service-address [-s scheduler]
-t: TCP协议的集群
-u: UDP协议的集群
service-address: IP:PORT
-f: FWM: 防火墙标记
service-address: Mark Number
修改:-E
删除:-D -t|u|f service-address
ipvsadm -A -t 192.168.9.100:80 -s rr
管理集群服务中的RS(把包发给realServer)
添加:-a -t|u|f service-address -r server-address [-g|i|m] [-w weight]
-t|u|f service-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 –g
# ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -g
查看
-L|l
-n: 数字格式显示主机地址和端口
--stats:统计数据
--rate: 速率
--timeout: 显示tcp、tcpfin和udp的会话超时时长
-:c 显示当前的ipvs连接状况
删除所有集群服务
-C:清空ipvs规则
保存规则
-S
# ipvsadm -S > /path/to/somefile
载入此前的规则:
-R
# ipvsadm -R < /path/form/somefile
DR模式实验手册
LVS配置命令
node01:
配置负载均衡服务器的VIP
ifconfig eth0:8 192.168.150.100/24
如果要撤销
ifconfig eth0:8 down
node02~node03:
1)修改内核(配置arp协议):
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
2)设置隐藏的vip:
ifconfig lo:3 192.168.150.100 netmask 255.255.255.255
RS中的服务:
node02~node03:
安装http服务
yum install httpd -y
启动http服务
service httpd start
添加一个主页,便于访问演示
vi /var/www/html/index.html
from 192.168.150.1x
LVS服务配置
node01:
安装ipvs工具
yum install ipvsadm
配置接收请求包
ipvsadm -A -t 192.168.150.100:80 -s rr
配置包转发到server
ipvsadm -a -t 192.168.150.100:80 -r 192.168.150.12 -g -w 1
ipvsadm -a -t 192.168.150.100:80 -r 192.168.150.13 -g -w 1
查看当前ipvs模块中记录的连接(可用于观察转发情况)
ipvsadm -ln
验证:
浏览器访问 192.168.150.100 看到负载 疯狂F5
node01:
netstat -natp 结论看不到socket连接
node02~node03:
netstat -natp 结论看到很多的socket连接
node01:
ipvsadm -lnc 查看偷窥记录本
TCP 00:57 FIN_WAIT 192.168.150.1:51587 192.168.150.100:80 192.168.150.12:80
FIN_WAIT: 连接过,偷窥了所有的包
SYN_RECV: 基本上lvs都记录了,证明lvs没事,一定是后边网络层出问题
Keepalived
keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
Keepalived配置命令
主机: node01~node04
node01:
ipvsadm -C //清空LVS配置
ifconfig eth0:8 down //清空网卡配置
----------------------------
node01,node04:
yum install keepalived ipvsadm -y //安装keepalived
配置:
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak //备份配置文件
vi keepalived.conf //编辑配置文件
node01:
vrrp:虚拟路由冗余协议!
vrrp_instance VI_1 {
state MASTER //主备标识 node04 BACKUP
interface eth0 //网卡配置
virtual_router_id 51 //集群标识
priority 100 //权重 node04 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.150.100/24 dev eth0 label eth0:3
}
}
virtual_server 192.168.150.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 0 //保活时间
protocol TCP
real_server 192.168.150.12 80 { //服务检查
weight 1
HTTP_GET {
url { //请求路径,返回正常的状态码
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3 //重试此时
delay_before_retry 3 /重试时间间隔
}
}
real_server 192.168.150.13 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
scp ./keepalived.conf root@node04:`pwd` //两台机器间拷贝配置文件