负载均衡集群实验
一、构建NAT模式的负载均衡集群
1、实验环境
四台服务器,一台作为负载调度器以及路由,两台作为real server,负载调度器有一个外网网卡(192.168.47.128)和一个内网ip(192.168.169.128),两个real server上只有内网ip(192.168.169.150)和(192.168.169.250),并且要把两个real server的内网网关设置为负载调度器的内网ip(192.168.169.128),外加一台测试机
2、实验搭建步骤
(1)两台real server 服务器安装httpd服务
yum -y install httpd
(2)修改两台real server 服务器httpd服务默认网页内容,使访问可区分开
apache服务器1
echo "for apache1" > /var/www/html/index.html
apache服务器2
echo "for apache2" > /var/www/html/index.html
(3)修改real server 服务器的内网网关,设置为负载调度器的内网IP(192.168.169.128)
vim /etc/sysconfig/network-scripts/ifcfg-ens33
GATEWAY=192.168.169.128
或者使用命令临时修改网关
route add default gw 192.168.169.128
(4)配置负载调度器
①查看内核是否支持IPVS
grep -i "ip_vs" /boot/config-3.10.0-957.el7.x86_64
②安装ipvsadm工具
yum -y install ipvsadm
③创建集群——指定vip(集群虚拟IP)
ipvsadm -A -t 192.168.47.128:80 -s rr
-A #创建集群
-t #过滤条件,是否为tcp协议
#判断数据包的目标IP是否为VIP,并且判断数据包的目标端口是否是TCP 的80端口
④向已存在的集群中添加真实服务器
ipvsadm -a -t 192.168.47.128:80 -r 192.168.169.150:80 -m
ipvsadm -a -t 192.168.47.128:80 -r 192.168.169.250:80 -m
-a #添加真实服务器
-t 192.168.47.128:80 #指定集群
-r 192.168.169.150:80 #指定真实服务器 #-r,--real-server server-address
-m #Use masquerading (network access translation, or NAT)#开启网络访问地址转换(NAT)
补充:
ipvsadm 命令
#是编写规则的工具命令
查看集群:
ipvsadm -ln
-l #列出规则
-n #数字化显示
创建集群:即编写规则将多台服务器组建成一个集群
ipvsadm -A -t 192.168.10.120:80 -s rr
-A #创建集群
-t #过滤条件,是否是tcp协议
#判断数据包的目标IP是否是VIP,并且判断数据包的目标端口是否是TCP的80端口
向已存在的集群中添加真实服务器
ipvsadm -a -t 192.168.10.120:80 -r 192.168.11.130:80 -m
ipvsadm -a -t 192.168.10.120:80 -r 192.168.11.140:80 -m
-a #添加真实服务器
-m #使用LVS的NAT模式
-w #指定权重,只有在算法是wrr时才使用
修改集群:
ipvsadm -E -t 192.168.10.120:80 -s wrr
-E #修改集群的配置,算法...
修改真实服务器:
ipvsadm -e -t 192.168.10.120:80 -r 192.168.11.130:80 -m -w 1
删除真实服务器:
ipvsadm -d -t 192.168.10.120:80 -r 192.168.11.130:80
删除集群:
ipvsadm -D -t 192.168.10.120:80
#删除整个集群,不许写算法,并且集群内的真实服务器一并删除
备份和恢复规则:
ipvsadm-save -n > filename
ipvsadm-restore < filename
#注意事项:备份规则时,一定要使用-n选项数字化保存。
⑤负载调度器开启路由转发功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
#sysctl -p 重新加载配置
(5)测试机测试(实现刷新一次变一次)
#curl 192.168.47.1128
#可见访问网页内容来自两个不同real server服务器
#可在负载调度服务器上使用ipvsadm -ln 查看两台真实机处理的请求次数
查看real server服务器上访问日志,查看访问来源ip
#tailf /var/log/httpd/access_log
(6)拓展—修改算法
ipvsadm -E -t 192.168.47.128 -s wrr #修改集群的算法为加权轮询
ipvsadm -e -t 192.168.47.128:80 -r 192.168.169.150:80 -m -w 5 #修改集群中一个节点的权重
ab -c 100 -n 1000 http://192.169.47.128/index.html
-c #指定并发量
-n #指定线程数
http://192.169.47.128/index.html #指定访问的文件
二、构建DR模式的负载均衡集群
拓展:APR
arp_annouce 通告
0 将本机任何接口上的任何地址都向外通告
1 尽可能避免向目标网络通告其网络不匹配的地址信息
2 仅向目标网络通告与其网络匹配的地址信息
arp_ignore 响应
0 只要本机配置有该ip就响应
1 仅在请求的目标地址配置在请求到达的接口上时,才给予响应。
1、实验环境
Director节点: (ens33 192.168.169.128 vip ens33:0 192.168.169.140)
Real server1: (ens33 192.168.169.150 vip lo:0 192.168.169.140)
Real server2: (ens33 192.168.169.250 vip lo:0 192.168.169.140)
路由机 (ens33 192.168.47.130 ens34 192.168.169.130)
测试机 (ens33 192.168.47.xx)
2、安装和配置
(1)两个real server安装网站服务
yum -y install httpd
2、Director server安装ipvsadm
yum -y install ipvsadm
3、配置DS
①添加集群的虚拟接口VIP
cp -a /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens33:0
vim /etc/sysconfig/network-scripts/ifcfg-ens33:0
IPADDR=192.168.169.140
NAME=ens33:0
DEVICE=ens33:0
ifup ens33:0
ifconfig #查看网卡和IP信息
②优化配置(关闭路由重定向,防止向路由器发送路由表,导致访问无法在两个real server服务器之间跳转)
vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0 #所有访问路径
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
注:三个级别all,default以及某网卡,这里单选择all即可
sysctl -p #重载配置
③配置负载调度器
检查内核是否支持IPVS
grep -i "ip_vs" /boot/config-3.10.0-957.el7.x86_64
构建集群—并添加服务器到集群中
ipvsadm -A -t 192.168.169.140:80 -s rr
ipvsadm -a -t 192.168.169.140:80 -r 192.168.169.150:80 -g
ipvsadm -a -t 192.168.169.140:80 -r 192.168.169.250:80 -g
ipvsadm ln #查看集群配置情况
④配置RS1
添加虚拟网卡接口
cp -a /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:0
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.169.140
NETMASK=255.255.255.255#使一个ip地址为一个广播域,避免与其他网卡抢IP
systemctl restart network #重启网络服务,更新网卡设置
优化配置,调整内核参数
vim/etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1 #系统只响应目的IP为本地IP的ARP请求
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2 #系统不适用IP包的原地址来设置ARP请求的源地址,而选择发送接口的IP地址
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
创建首页文件
vim index.html
For apache1
⑤配置RS2
添加虚拟网卡接口
cp -a /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:0
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.169.140
NETMASK=255.255.255.255
NAME=lo:0
优化配置,调整内核参数
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
sysctl -p
创建首页文件
vim index.html
For apache2
⑥设置路由规则
防火墙规则:
iptables -t nat -A PREROUTING -d 192.168.10.130 -p tcp --dport 80 -j DNAT --to-destination 192.168.11.200
位置:
-A PREROUTING #防火墙规则所在的位置,即从哪里过滤数据包
条件:
-d 192.168.10.130 #判断数据包的目标地址
-p tcp #判断数据包的传输协议
--dport 80 #判断数据包的目标端口
#注意事项:写端口作为条件时,必须先声明协议类型
策略:
-j DNAT --to-destination 192.168.11.200
DNAT #目标地址转换
--to-destination #声明转换对象
iptables -t nat -A PREROUTING -i ens33 -d 192.168.47.130(路由公网网卡IP地址) -p tcp --dport 80 -j DNAT --to-destination 192.168.169.140(集群虚拟IP地址VIP)##进站规则
##数据出站规则
iptables -t nat -A POSTROUTING -o ens33 -s 192.168.169.140(集群虚拟IP地址VIP) -p tcp --sport 80 -j SNAT --to-source 192.168.47.130(路由公网网卡IP地址)
位置:
-t nat -A PREROUTING
nat #表
PREROUTING #链
规则:
-i ens33 #匹配数据包入站网卡
-o ens33 #匹配数据包出站网卡
Iptables -t nat -L 查看NAT防火墙规则
⑦测试机测试(访问刷新看效果)
三、高可用性集群
1、实验环境
Keepalived1+lvs1(DS1):192.168.169.140
Keepalived2+lvs2(DS2):192.168.169.140
Real server1 :192.168.169.150
Real server2 :192.168.169.250
测试机
2、实验搭建
在DR集群的基础上搭建
(1)主调度器:
①主负载调度器上,配置集群
创建集群
ipvsadm -A -t 192.168.47.128:80 -s rr
-A #创建集群
-t #过滤条件,是否为tcp协议
#判断数据包的目标IP是否为VIP,并且判断数据包的目标端口是否是TCP 的80端口
向已存在的集群中添加真实服务器
ipvsadm -a -t 192.168.47.128:80 -r 192.168.169.150:80 -m
ipvsadm -a -t 192.168.47.128:80 -r 192.168.169.250:80 -m
-a #添加真实服务器
-t 192.168.47.128:80 #指定集群
-r 192.168.169.150:80 #指定真实服务器 #-r,–real-server server-address
-m #Use masquerading (network access translation, or NAT)#开启网络访问地址转换(NAT)
ipvsadm -ln 查看集群信息
a.安装gcc编译环境
b.安装支持软件kernel-devel、openssl-devel、popt-devel、ipvsadm
c.再编译安装keepalived,需指定内核路径
make&&make install
d.编辑vim /etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf
global_defs {
router_id DR1#本服务器的名称
}
vrrp_instance VI_1 {
state MASTER#本服务器的性质
interface ens33#心跳监听的网卡名称
virtual_router_id 51#虚拟路由的ID号
priority 100#优先级,数值越大优先级越高
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.169.140#指定负载调度器的VIP
}
}
virtual_server 192.168.169.140 80#集群的IP {
delay_loop 6
lb_algo rr#负载均衡算法
lb_kind DR#lvs的模式
persistence_timeout 0 #连接保持时间(访问连接成功后多少秒内,收到相同请求,连接至上一访问的服务器)
protocol TCP#指定TCP协议
real_server 192.168.169.150 80#集群中RS1服务器地址 {
weight 1
TCP_CHECK {
connect_timeout 3#连接检测次数
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.169.250 80#集群中RS2服务器地址 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
2、备份调度器–配置为负载调度器
①配置子网卡
cp -a ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0
DEVICE=ens33:0
IPADDR=192.168.169.140 #集群VIP
②使子网卡IP可以与主调度器子网卡同IP且可生效
vim ifup-eth
将网卡IP地址判断相同时的下一步操作注释
③配置内核参数
vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0 #所有访问路径
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p
④配置备份负载调度器
a.安装gcc编译环境
b.安装支持软件kernel-devel、openssl-devel、popt-devel、ipvsadm
yum -y install kernel-devel、openssl-devel、popt-devel、ipvsadm
c.安装keepalived软件
yum -y install keepalived
d.将主负载调度器的配置文件keepalived.conf传给从调度器上,然后修改
scp /etc/keepalived/keepalived.conf 192.168.169.130:/etc/keepalived/
vim /etc/keepalived/keepalived.conf
global_defs {
router_id DS2
}
vrrp_instance VI_1 {
state SLAVE
interface ens33
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.169.140
}
}
virtual_server 192.168.169.140 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 0
protocol TCP
real_server 192.168.169.150 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.169.250 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
3、测试机测试
curl 192.168.169.140
访问成功,且为轮询
补充:
身份:
MASTER #主服务器
BACKUP #备用服务器
Keepalived的工作模式:
抢占模式:(修改配置文件中的priority 50数字,修改优先级)
-
两台服务器都设置为MASTER状态,则取决于优先级
优先级高的会自动认定为主(MASTER),优先级低的则认定为备(BACKUP)
当主出现故障时,备会提升身份MASTER,当主修复后会抢回MASTER身份。
#此种配置永远是抢占模式 -
两台服务器一台:MASTER,另一台是:BACKUP
MASTER优先级高,BACKUP优先级低 -
两台服务器一台:MASTER,另一台是:BACKUP
MASTER优先级低,BACKUP优先级高
非抢占模式: -
两台都是BACKUP状态时,仍旧是通过优先级进行身份认定,但故障出现和恢复后,不进行抢占
配置文件中添加该选项:nopreempt
总结:前三种模式,均为抢占模式,第四种为非抢占模式
优先级功能实现原理:PRI(最终值)=PRI(初始值)+NI(可调整优先级)