介绍
一款用于保障服务高可用的软件,自动侦测服务器状态,移除故障服务器,切换到正常服务器,添加恢复后的服务器到集群
实现的基本思路
基于VRRP协议的实现,主要用在IP层,TCP层,应用层
VRRP协议解决问题
在现实网路中,两台服务器之间通常不会直连,那A和B如何路由呢?
1. 在A上使用动态路由协议(问题:管理维护成本大,设备需要支持动态路由协议)不推荐
2. 在A上配置静态路由(问题:路由器或默认的网关成单点,需重启网络)
VRRP(Virtual Router Redundancy Protocol 虚拟路由冗余协议)解决你的单点故障问题
1.它是一个选择协议,把一个虚拟路由器的职责,动态转移给Master进行处理
2.是一种路由容错协议或备份路由协议。当Master宕机后,虚拟路由将启用备份路由器
名词解释
1.VRRP路由器 物理路由器,上面运行着实现VRRP协议的程序
2.VRRP虚拟路由器 逻辑上的路由器,通常由多台物理路由器组成,可以看成一个路由器池 由VRID来标示,范围0-255
3.Master和Backup: 一个虚拟路由里的多个路由器并不是同时工作的,工作的叫Master,其他的为Backup
工作机制
1.路由器开启VRRP功能后,会根据优先级确认Master
2.Master会通过IP多播包的形式来发送公告报文,Backup会接收到这些报文
3.如果是抢占式:Backup会跟Master比较优先级,如果大于Master,互换身份
4.如果是非抢占式,只要Master能正常工作,不会出现新Master (一般使用该种)
5.如果备份服务器在连续三个公告间隔内收不到VRRP公告,或收到优先级为0的公告,会按照竞选协议选出新的Master,以保证服务可用
VRRP负载分担
多台路由器同时承担业务,避免设备闲置
让同一台路由器可以加入到备份组,在不同组中优先级不同。使其在不同组担任不同角色。
安装演示Keepalived
一:下载并安装IPVS
下载的版本要和自己主机内核一致
内核查看 cat /proc/version
下载地址: http://www.linuxvirtualserver.org/software/ipvs.html
安装之前要创建一个软连接 In -sv /usr/src/kernels/3.10.0-123.9.3.el7.x86_64 /usr/src/linux
然后make && make install
ipvsadm 命令被安装到/sbin下面
输入ipvsadm 命令 检查是否安装成功
二.下载并安装Keepalived
下载地址:http://www.keepalived.org/
下载源码来安装
1. ./configure --prefix=/usr/java/keepalived
如果出现NO SO_MARK in headers 这样的错误提示,可以在命令上添加 --disable-fwmark
如果要使用LVS,还需要指定内核的目录,添加 --with-kernel-dir=具体内核路径,以指定使用内核源码里的文件
2.make && make install
3.验证安装
a.到sbin下,执行keepalived 命令
b.查看进程 ps -aux|grep keepalived 应该有三个进程
c.查看内核模块ip_vs是否被加载到内核空间, lsmod |grep ip_vs
d.执行 tail -f /var/log/messages来查看日志
e.执行pkill keepalived来关闭
注意:keepalived 配置文件是没有语法检查的,修改的时候千万要小心
Keepalived 体系结构图
keepalived配置
分为:全局配置、VRRPD配置、LVS配置
全局配置:全局定义与静态路由 关键是routerid配置,其他一般很少配置
VRRPD配置:同步组,实例配置
LVS配置:如果启用LVS就需要配置,不启用就无需配置。
keepalived+nginx的HA
让Keepalived监控Nginx的状态,当某台Nginx宕机后切换到其他的Nginx上
需要使用到shell脚本,监听本地端口的80端口,如果本地80端口不通,那么keepalived就自杀,这样master自动就会切换到其他Bankup上,升级为Master
上面脚本尝试了一次重启
需要在keepalived.conf配置中增加上面脚本的调用,在VRRP实例配置前 ,在实例配置之后,增加脚本检查的配置,这样Keepalived在启动的时候就会检查一次
keepalived 做HA思路
和具体的应用和服务没有关系,仿造keepalived和nginx的思路,可以实现:
1.keepalived + varnish
2.keepalived + tomcat
3.keepalived + redis
4.keepalived + mysql
.... ...
示例varnish的检测脚本
LVS+ Keepalived介绍
LVS可用来实现LINUX下的简单负载均衡
工作在四层,其转发依赖于四层协议的特征进行转发的, 需要内核的TCP/IP协议栈进行过滤筛选,而这样的过滤转发规则可由管理员对内核进行定义
三种负载均衡转发机制
1.NAT (Network Address Translation)网络地址翻译技术
类似IP的负载均衡技术
2.TUN (IP Tunneling) IP隧道技术
类似数据链路负载均衡策略
3.DR(Direct Routing) 直接路由技术
通过改写请求报文的Mac地址,一般采用该种,要求:调度器与真实服务器在同一物理网段上
负载均衡调度算法
1.RR (Round Robin) 轮询
2.wrr (Weight Round Robin) 加权轮询
3.lc(Least Connections)最少连接
4.wlc(weight Least Connections)加权最小连接
5.dh(Destination hashing) 目标地址hash
6.sh(Source hashing) 源地址hash
7.sed (Shortest Expected Delay)最短期望的延迟
8.NQ(Never Queue) 最少排队
9.LBLC(Location-Based Least-Connection) 基于局部的最少连接,优先使用上一次的
10.LBLCR(Location-Based Least-Connection with replication Scheduling) 使用上次使用的服务器同一组中的
注意点
KVS+Keepalived其实就是把LVS看做是Nginx或者varnish
配置的时候只需要在keepalived中去配置,无需单独配置LVS
全局配置和VRRP配置是一样的,增加关于LVS配置
主、备服务器配置是一样的
LVS+DR模式中,只支持IP的转发,不支持端口转发。virtual_server和real_server配置节点中端口必须一致