在业务量达到一定量的时候,往往单机的服务是会出现瓶颈的。
此时最常见的方式就是通过负载均衡来进行横向扩展。其中我们最常用的软件就是 Nginx。
通过其反向代理的能力能够轻松实现负载均衡,
当有服务出现异常,也能够自动剔除。但是负载均衡服务自身也可能出现故障,
因此需要引入其他的软件来实现负载均衡服务的高可用。
介绍了一种基于 LVS+Keepalived 的方式,来实现高可用 Web 集群。
1、keepalived是什么
keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。
2、keepalived工作原理
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy
Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议:可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
3、Keepalived模块
keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。
4、keepalived的配置文件
keepalived只有一个配置文件keepalived.conf,里面主要包括以下几个配置区域,分别是global_defs、static_ipaddress、static_routes、vrrp_script、vrrp_instance和virtual_server。
总结:Keepalived可以配合其他一起使用,实现服务器之间的相互转换,当客户端访问服务器的虚拟ip地址时,即使一台服务器出现故障,Keepalived可以立马切换至另一台服务器,避免单点故障的产生!在实际工作环境中也很有用处!
机器
192.168.64.135 前端调度器+keepalived
192.168.64.136 真实服务器
192.168.64.140 真实服务器
192.168.64.137 用户访问端
开始
135安装keepalived
yum -y install keepalived
rpm -qc keepalived
命令执行结果
/etc/keepalived/keepalived.conf
/etc/sysconfig/keepalived
vim /etc/keepalived/keepalived.conf
点击查看代码
vrrp_instance VI_1 {
state MASTER # 两个 DS,一个为 MASTER 一个为 BACKUP
interface ens32 # 我这边是ens32 可通过 ip -a 查看
virtual_router_id 51 # 虚拟路由 ID(0-255),在一个 VRRP 实例中主备服务器 ID 必须一样
priority 100 # 优先级值设定:MASTER 要比 BACKUP 的值大
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.64.200 # VIP,可配置多个
}
}
virtual_server 192.168.64.200 80 {
delay_loop 6 #服务健康检查周期,单位是秒
lb_algo wrr #调度算法
lb_kind DR #模式
nat_mask 255.255.255.0
persistence_timeout 5 #回话保持时间,单位是秒
protocol TCP #TCP协议转发
#添加后端realserver
#相当于 ipvsadm -a -t 192.168.64.200:80 -r 192.168.64.136:80 -w 1
real_server 192.168.64.136 80 { #realserver的真实IP
weight 1 #权重
#健康检查
TCP_CHECK {
connect_timeout 8 #超时时间
nb_get_retry 3 #重试次数
delay_before_retry 3 #重试间隔
connect_port 80 #检查realserver的80端口,如果80端口没监听,就会从集群中剔除
}
}
real_server 192.168.64.140 80 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}