不为有趣之事,何遣有涯之生
不失其所者久,死而不亡者寿

Keepalived简明介绍

介绍

一款用于保障服务高可用的软件,自动侦测服务器状态,移除故障服务器,切换到正常服务器,添加恢复后的服务器到集群

实现的基本思路

基于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配置节点中端口必须一致

未经允许不得转载:菡萏如佳人 » Keepalived简明介绍

欢迎加入极客江湖

进入江湖关于作者