项目环境
这里我们使用四台机器,一台主服务器,一台备用代理服务器,两台后端服务器
master ip:192.168.126.140
backup ip:192.168.126.133
nginx-web1 ip:192.168.126.139
nginx-web2 ip:192.168.126.142
我们会用到的虚拟的vip :192.168.126.178 注意要在同一个网段内
实战部署
1.环境设置
四台机器都要关闭防火墙和selinux,然后两台后端服务器先部署安装nginx,yum安装即可,这里就不再进行操作,如有需要请看之前的文章:http://t.csdn.cn/H0TkG
这是部署好的nginx测试访问页面
2.安装高可用软件keepalived
两台代理机器master和backup都要安装,ipvsadm是LVS的命令包
[root@master ~]# yum -y install ipvsadm keepalived
[root@backup ~]# yum -y install ipvsadm keepalived
3.配置master的keepalived
修改配置文件 [root@master ~]# vim /etc/keepalived/keepalived.conf
这里我们不用再给LVS制定分配规则,因为keepalived和LVS的适配度非常高,所以我们直接把分配规则蟹道乐keepalived的配置文件里
! Configuration File for keepalived
global_defs {
router_id lvs-keepalived-master #备用的backup改为lvs-backup
}
vrrp_instance VI_1 {
state MASTER #备用的机器可改为BACKUP
interface ens33 #VIP绑定接口
virtual_router_id 80 #VRID 同一组集群,主备一致
priority 100 #本节点优先级,备用节点改为50
advert_int 1 #检查间隔,默认为1s
authentication {
auth_type PASS
auth_pass 1111 #密码可以修改,但要和备用机器的一致
}
virtual_ipaddress {
192.168.126.178/24 # 在ens33网卡添加的虚拟vip 切记要在同一网段内
}
}
virtual_server 192.168.126.178 80 { #LVS配置 要访问的虚拟vip
delay_loop 3 #启动3个进程
lb_algo rr #LVS调度算法
lb_kind DR #LVS集群模式(路由模式)
nat_mask 255.255.255.0
protocol TCP #健康检查使用的协议
real_server 192.168.126.139 80 { #这是做负载均衡的后端服务器nginx-web1的ip
weight 1
inhibit_on_failure #当该节点失败时,把权重设置为0,而不是从IPVS中删除
TCP_CHECK { #健康检查
connect_port 80 #检查的端口
connect_timeout 3 #连接超时的时间
}
}
real_server 192.168.126.142 80 {
weight 1
inhibit_on_failure
TCP_CHECK {
connect_timeout 3
connect_port 80
}
}
}
我们先可以启动keepalived测试一下是否能访问后端服务器
我们先让后端服务器nginx-web1、nginx-web2 在网卡上添加代理服务器的vip,两台机器都要执行
[root@ansible-web1 ~]# ip addr add dev lo 192.168.126.178/32
临时添加 如果要删除把add改成del即可
[root@ansible-web1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
忽略arp广播
[root@ansible-web1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
匹配精确ip地址回包
如果我们要立即看到效果的话我们要把nginx的长连接调小,两台机器都调
测试
4.配置backup的keepalived
在backup机器上修改配置文件
! Configuration File for keepalived
global_defs {
router_id lvs-keepalived-slave
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
nopreempt #不抢占资源
virtual_router_id 80
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.126.178/24
}
}
virtual_server 192.168.126.178 80 {
delay_loop 3
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
protocol TCP
real_server 192.168.126.139 80 {
weight 1
inhibit_on_failure
TCP_CHECK {
connect_port 80
connect_timeout 3
}
}
real_server 192.168.126.142 80 {
weight 1
inhibit_on_failure
TCP_CHECK {
connect_timeout 3
connect_port 80
}
}
}
开启keepalived的服务之后我们会发现没有vip,因为vip在master上面,master的优先级高
我们先关闭master的keepalived,然后对backup进行测试,看vip是否能漂移
在backup上查看ip
可以查看到vip已经漂移到backup上了,我们进行浏览器访问
测试成功,就算master服务器宕机,用户也能访问服务器,这就实现了高可用
我们再次开启master的keepalived,可以看到vip又回到了master上,如果你的机器在vip漂移的时候没有,可以把优先级的差距调大一点
部署成功