Keepalived简介

  Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

  keepalived工作原理

  keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议

虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级选举一个backup当master。这样的话就可以保证路由器的高可用了。

keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。

  

  keepalived三个主要功能

  管理LVS负载均衡软件

  实现LVS集群节点的健康检查中

  作为系统网络服务的高可用性(failover)

  PS:本次主要介绍高可用功能

  

  Keepalived安装配置

  安装环境查看

  本次试验使用yum安装

yum -y install keepalived

  查看版本

  配置文件为/etc/keepalived/keepalived.conf

  全局配置文件

lobal_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id lb01
vrrp_skip_check_adv_addr
# vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}

  用来配置router_id(全局唯一) 以及邮箱等信息

  PS:配置邮件用于出现故障发送邮件,工作中这个工作一般交由监控软件zabbix等负责,可以不配置

  vrrp配置部分

vrrp_instance VI_1 {
state MASTER            #设备状态是主
interface eth0           #绑定的网络接口是eth0
virtual_router_id 55        #虚拟路由ID 主备这个ID必须一致 
priority 150 #优先级数值越高优先级越高,备的优先级需低于此数值
advert_int 1            #主备同步间隔单位是秒
authentication {
auth_type PASS
auth_pass 1111         #主备认证方式,主备密码需要一致
}
virtual_ipaddress {        #虚拟IP地址以及绑定的网卡
192.168.56.22/24 dev eth0 label eth0:1
}
}

  用于配置主备状态,接口,优先级,认证方式IP信息等

  

  高可用服务单实例实战

  图示

  192.168.56.11的keepalived配置

! Configuration File for keepalived

global_defs {
notification_email {
liuym@abc.com
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id lb01
# vrrp_strict
} vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 55
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.56.22/24 dev eth0 label eth0:1
}
}

  192.168.56.12的keepalived配置

! Configuration File for keepalived

global_defs {
notification_email {
liuym@abc.com
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id lb02
# vrrp_strict
} vrrp_instance VI_1 {
state BACKEND
interface eth0
virtual_router_id 55
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.56.22/24 dev eth0 label eth0:1
}
}

  说明:router_id不一样

            主备状态不一样(一台是MASTER一台是BACKEDN在配置文件里必须是大写)

     优先级不一样

  PS:vrrp_strict是默认的配置需要注释,否则会导致VIP不通

  

  启动keepalived验证两台主机均启动

 systemctl start keepalived

  192.168.56.11生产了虚拟IP

  192.168.56.12没有虚拟IP

  停止主keepalived责备机接管虚拟VIP

  主节点没有了虚拟VIP

  主节点再次启动keepalived 因为主节点优先级别高又会自动接管虚拟VIP

  keepalived+nginx实现高可用集群

  图示如下

  1,对外提供的VIP是192.168.56.22

  2,其中正常工作是由11提供服务

  3,11宕机的情况VIP会漂移至22主机,用户无感知

  

  11和12主机分别安装nginx并设置反向代理,这里为了方便仅仅反向代理一台主机,生产中是有多台主机的

  nginx.conf配置如下(两台主机nginx配置一样反向代理了11的8080生产中是其他应用的多台主机)

worker_processes  1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format access_log_json '{"user_ip":"$http_x_forwarded_for","lan_ip":"$remote_addr","log_time":"$time_iso8601","user_rqp":"$request","http_code":"$status","body_bytes_sent":"$body_bytes_sent","req_time":"$request_time","user_ua":"$http_user_agent"}';
sendfile on;
keepalive_timeout 65;
upstream www_server_pools {
server 192.168.56.11:8080;
}
server {
listen 192.168.56.22:80;
server_name www.liuym.com;
access_log /data/logs/nginx/http-access.log access_log_json;
error_log /data/logs/nginx/http-error.log;
location / {
proxy_pass http://www_server_pools;
proxy_set_header Host $host;
proxy_set_header x-Forwarded-For $remote_addr;
}
}
}

  注意这里server_name指定了VIP加端口进行绑定,其他配置为nginx基础知识

  客户端设置hosts指向的ip是VIP192.168.56.22 生产中是DNS地址

  web界面通过域名访问(这里使用一个8080端口启动的jenkins作为示例)

  测试VIP漂移

  在master停止keepalived客户端还是可以继续访问该页面

  PS:备节点nginx配置了VIP绑定,但是实际主机并没有该VIP在启动nginx的时候会报错

  解决办法,修改内核参数/etc/sysctl.conf增加一条

net.ipv4.ip_nonlocal_bind = 1

  执行生效

sysctl -p

  

  默认情况下是keepalived软件是在对方宕机或者keepalived停止情况下才接管业务,假如是主节点的Nginx业务有问题呢

  可以写一个脚本监控Nginx如果nginx停止服务就停止keepalived

  check_nginx.sh

#!/bin/bash
while true
do
if [ ` netstat -lntup|grep nginx|wc -l` -ne 1 ];then
systemctl stop keepalived
fi
sleep 5
done

  检测如果nginx宕机则停止keepalived

  后台运行即可

 sh check_nginx.sh &

  

最新文章

  1. nginx下rewrite参数超过9个的解决方法
  2. Sql Server系列:索引维护
  3. 【转发】Html5 File Upload with Progress
  4. ethtool 命令详解
  5. OOP 7大原则
  6. js获取,设置FCKeditor内容
  7. UIView的frame和bounds的含义
  8. FastDFS源代码分析之tracker协议分析
  9. Internet History, Technology and Security (Week1)
  10. 更改Xcode的缺省公司名
  11. download plugin update site for offline installation
  12. JFreeChart的使用(转)
  13. windbg蓝屏调试
  14. Swift 结构体的使用
  15. API接口通讯参数规范
  16. WEB 性能测试用例设计以及总结
  17. 【.net】获取网页CDM的下载链接的地址
  18. Angular4.x 创建组件|绑定数据|绑定属性|数据循环|条件判断|事件|表单处理|双向数据绑定
  19. android之发送Get或Post请求至服务器接口
  20. 20171126--fragment的小项目

热门文章

  1. selenium chrome登陆手机 pc淘宝
  2. PMP用语集
  3. Nexus5 破解电信关键步骤
  4. GoF--适配器设计模式
  5. SaltStack 批量执行脚本
  6. VS无法导航到插入点F12失败
  7. [OSX] 使用 MacPorts 安装 Python 和 pip 指南
  8. 【译】Kafka学习之路
  9. java上传并压缩图片(等比例压缩或者原尺寸压缩)
  10. Android设计和开发系列第二篇:Navigation Drawer(Develop)