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 &

  

Keepalived+Nginx高可用集群的更多相关文章

  1. Nginx(四):Keepalived+Nginx 高可用集群

    Keepalived+Nginx 高可用集群 (主从模式) 集群架构图 安装keepalived [root@localhost ~]# yum install -y keepalived 查看状态 ...

  2. keepalived+nginx 高可用集群

    一.什么是高可用?   nginx做负载均衡,能达到分发请求的目的,但是不能很好的避免单点故障. 1.nginx集群单点问题 分发器宕机怎么处理? 假如nginx服务器挂掉了,那么所有的服务也会跟着瘫 ...

  3. 集群相关、用keepalived配置高可用集群

    1.集群相关 2.keepalived相关 3.用keepalived配置高可用集群 安装:yum install keepalived -y   高可用,主要是针对于服务器硬件或服务器上的应用服务而 ...

  4. Linux centosVMware 集群介绍、keepalived介绍、用keepalived配置高可用集群

    一.集群介绍 根据功能划分为两大类:高可用和负载均衡 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 实现高可用的开源软件有:heartbeat. ...

  5. LVS+Keepalived实现高可用集群

    LVS+Keepalived实现高可用集群来源: ChinaUnix博客 日期: 2009.07.21 14:49 (共有条评论) 我要评论 操作系统平台:CentOS5.2软件:LVS+keepal ...

  6. 实战| Nginx+keepalived 实现高可用集群

    一个执着于技术的公众号 前言 今天通过两个实战案例,带大家理解Nginx+keepalived 如何实现高可用集群,在学习新知识之前您可以选择性复习之前的知识点: 给小白的 Nginx 10分钟入门指 ...

  7. 集群介绍 keepalived介绍 用keepalived配置高可用集群

    集群介绍 • 根据功能划分为两大类:高可用和负载均衡 • 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 • 实现高可用的开源软件有:heartb ...

  8. rabbitmq+ keepalived+haproxy高可用集群详细命令

    公司要用rabbitmq研究了两周,特把 rabbitmq 高可用的研究成果备下 后续会更新封装的类库 安装erlang wget http://www.gelou.me/yum/erlang-18. ...

  9. rabbitmq+haproxy+keepalived实现高可用集群搭建

    项目需要搭建rabbitmq的高可用集群,最近在学习搭建过程,在这里记录下可以跟大家一起互相交流(这里只是记录了学习之后自己的搭建过程,许多原理的东西没有细说). 搭建环境 CentOS7 64位 R ...

随机推荐

  1. PHP日期知识

    (1)date用法: date(格式,[时间]);如果没有时间参数,则使用当前时间. 格式是一个字符串,其中以下字符有特殊意义:U 替换成从一个起始时间(好象是1970年1月1日)以来的秒数 Y 替换 ...

  2. mysql中date_add()函数的使用?

    需求描述: 在使用mysql的过程中,需要对日期进行计算,比如对某个日期加上几天,几个小时等操作, 在此记录下,date_add()函数的使用. 操作过程: date_add()函数语法: DATE_ ...

  3. flume 增量上传日志文件到HDFS中

    1.采集日志文件时一个很常见的现象 采集需求:比如业务系统使用log4j生成日志,日志内容不断增加,需要把追加到日志文件中的数据实时采集到hdfs中. 1.1.根据需求,首先定义一下3大要素: 采集源 ...

  4. 关于redis连接池

    1.redis-py不需要显式使用连接池. 在幕后,redispy使用一个连接池来管理与Redis服务器的连接.默认情况下,每个Redis实例将依次创建自己的连接池.您可以通过将已创建的连接池实例传递 ...

  5. phpVirtualBox – 用浏览器操作虚拟机

    摘自:https://code.google.com phpVirtualBox 一个开源的,VirtualBox的用户界面,用PHP编写的AJAX实现.作为一个现代的Web界面,它允许你远程访问和控 ...

  6. 我的notepad++

    我觉得,做开发的一定要有一个简单,但功能强大的文本编辑器.我比较喜欢notepad++,而且一直使用.准备通过这篇文章分享一下我的notepad++配置. 希望广大notepad++用户,如果有好的配 ...

  7. 【ArcGIS】ArcGIS Data Store配置

    一.错误提示 Unable to configure the ArcGIS Data Store with the GIS Server. Please make sure that the GIS ...

  8. CMake设置输出目录

    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Lib)set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAK ...

  9. 在recycler中写的布局不起作用

    把 LinearLayout 改成 RelativeLayout   ok了 创建的两种方式 1.LayoutInflater.from(parent.getContext()).inflate(R. ...

  10. 51单片机的idata,xdata,pdata,data的详解(转)

    data: 固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小. bit :是指0x20-0x2f的可位寻址区idata:固定指前面0x00-0xff的2 ...