目录
链接博文
实验环境
Hostname | IP | 说明 |
---|---|---|
lb01 | 10.0.0.5 | Nginx主负载均衡器 |
lb02 | 10.0.0.6 | Nginx辅负载均衡器 |
web01 | 10.0.0.8 | web01服务器 |
web02 | 10.0.0.7 | web02服务器 |
1 实验配置
# 在上一篇博文的基础之上进行下面操作
# 安装keepalived软件
yum install keepalived -y
rpm -qa keepalived
# 编辑keepalived备配置文件
[root@lb02 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL1
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24 dev eth0 label eth0:1
}
}
# 相当于ipvsadm -A -t 10.0.0.3:80 -s wrr
virtual_server 10.0.0.3 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
# 相当于ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.7:80 -g -w 1
real_server 10.0.0.7 80 {
weight 1
TCP_CHECK {
connect_timeout 5
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
# 相当于ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.8:80 -g -w 1
real_server 10.0.0.8 80 {
weight 1
TCP_CHECK {
connect_timeout 5
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
# 删除ipvsadm的配置表
ipvsadm -C
# 删除手动配置的虚拟VIP
ip addr del 10.0.0.3/24 dev eth0
# 启动keepalived服务,可自动健康检查节点状态
/etc/init.d/keepalived start
# 主节点keepalived配置,只需要修改router_id、state为MASTER、优先级设置高一点即可
[root@lb01 keepalived]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24 dev eth0 label eth0:1
}
}
# 相当于ipvsadm -A -t 10.0.0.3:80 -s wrr
virtual_server 10.0.0.3 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
# 相当于ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.7:80 -g -w 1
real_server 10.0.0.7 80 {
weight 1
TCP_CHECK {
connect_timeout 5
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
# 相当于ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.8:80 -g -w 1
real_server 10.0.0.8 80 {
weight 1
TCP_CHECK {
connect_timeout 5
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
测试
2 负载不均衡的原因
当我们第一次访问VIP的时候,负载均衡器会把请求随机分配到后端的RS服务器上,那么由于我们是在电脑上虚拟了整个过程,故电脑上会有arp缓存,即使再次访问VIP的时候也不会经过LB,而会直接访问后端RS。由于ARP缓存的存在,所以在一定的时间内不会出现负载均衡。
我么可以在每次访问后,清空arp缓存(arp -d)。就会出现1:1的负载均衡(仅适合单机测试)
Keepalived进行节点健康检查
# 随便停掉一台web节点,keepalived会自动检查节点状态。
[root@lb01 keepalived]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.0.0.3:80 rr persistent 50
-> 10.0.0.7:80 Route 1 0 0
-> 10.0.0.8:80 Route 1 0 2
[root@lb01 keepalived]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.0.0.3:80 rr persistent 50
-> 10.0.0.7:80 Route 1 0 0
-> 10.0.0.8:80 Route 1 0 2
[root@lb01 keepalived]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.0.0.3:80 rr persistent 50
-> 10.0.0.8:80 Route 1 0 2
3 LVS集群下代码发布方案
LVS集群下的代码发布方案详解(代码一般会放在svn/git)
- 开发人员本地测试+>办公室内部测试(开发个人,测试人员)–(配置管理员)–>IDC机房测试(测试人员)–>正式服务器。
- 上传的代码可大致分为两类代码,一种是不用重启服务就可以实现的代码(如php、html等),还有一种就是必须要重启服务的代码(java、tomcat等)。
如php代码上传时不需要重启服务的,但为了不影响用户体验,所以有以下两种比较好的上传代码方案:
1、需要在统一文件系统下,即在同一目录层级,创建一个别的目录,如正常的访问代码是在/application/nginx/html/目录下,那么我们会创建/application/nginx/tmp目录,然后用mv命令把代码移动到html目录下,这样延迟几乎可以忽略,用户体验还是很好的。
2、或者是在同一层级目录下创建其它目录,然后创建软链接把html目录链接至创建的目录
/application/nginx/html/ # 用户访问代码位置
/application/nginx/html123 # 手动创建的目录
ln -s /application/nginx/html/ /application/nginx/html123/
若是JAVA代码或者是tomcat resin之类的代码,需要服务重启才能生效。
- 这样的代码上传需要分组上传,比如有6台服务器提供web服务,这样先把其中三台在LVS中踢掉,即下线,然后把代码上传至其中,上传完之后需要把这三台服务器挂到同环境下的内网测试机上,进行内部测试,无误后把这三台服务器正式上线,然后再把另外三台服务器下线,进行同样操作。