Linux集群实现高可用--keepalived

高可用:
lvs本身不支持高可用;

在lvs集群中,可能有两种故障:
    1.Director故障不可用;
        keepalived:原生的lvs的Director高可用解决方案;
        heartbeat
        corosync/pacemaker:通用的高可用解决方案;

    2.后端RS故障不可用;
        lvs的Director不考虑后端RS的可用与否,只是按照调度算法进行客户端请求调度;
        完整的实现:周期性的对各个RS进行健康状态检测;
            检测失败:应该从lvs集群服务中将对应的RS移除;
            检测成功:将对应RS重新加入lvs集群服务中;重新创建lvs集群服务;
            所有的RS检测均失败:临时删除lvs集群服务,并使调度器本地的web服务能够响应一个相对比较友好的错误页面,sorry_server;

        检测方式:
            网络层检测;ping
            传输层检测:端口探测,nmap
            应用层检测:文件资源的存在性检测;文件访问权限检测;文件内容有效性检测;

        keepalived:后端RS的健康状态检测;

可用性:
    A=MTBF/(MTBF+MTTR)
    A ∈ (0,1)
    50%, 90%, 95%
    99%, 99.9%, 99.99%, 99.999%

    提高可用性的有效的方案:降低MTTR;
        方法:冗余 + 自动故障倒换;

高可用的内容:
    服务高可用;
    资源高可用;

HA Cluster实现方案:
基于VRRP协议的实现:
keepalived,专用于高可用lvs的Director;

基于AIS的实现:完备的HA集群;
    heartbeat
    corosync + pacemaker

keepalived:
VRRP协议:Virtual Redundancy Router Protocol,虚拟路由器冗余协议;
VRRP技术术语:
虚拟路由器:虚拟的路由器的接口;
VRID:虚拟路由器标识符,描述路由器的分组;并且可以确定虚拟路由器的虚拟MAC地址,取值范围为:0-255(00-ff);
MASTER:虚拟IP地址的拥有者,可以利用虚拟IP地址接收用户请求,并且能够完成数据转发功能;
BACKUP:不参与数据转发,仅检测MASTER的健康状态;
虚拟IP地址:VIP,虚拟路由器接口的IP地址;
虚拟MAC地址:VMAC,00-00-5e-00-01-{VRID}
优先级:选举成为MASTER的主要的参考标准,取值范围为:0-255;
0:放弃MASTER选举;
255:虚拟IP地址和某个路由器接口的IP地址相同,则该路由器会自动获得255的优先级,从而直接成为MASTER;
1-254:越大越有可能成为MASTER;
非抢占式:如果MASTER故障导致状态发生变化,则所有的BACKUP会重新选举产生新的MASTER;此时,如果原来的MASTER从故障中恢复,则直接成为BACKUP状态,直到当前的MASTER故障之后,所有的BACKUP重新选举MASTER时,其才能重新称为新的MASTER;
抢占式:如果MASTER故障导致状态发生变化,则所有的BACKUP会重新选举产生新的MASTER;此时,如果原来的MASTER从故障中恢复,则立即通告自己的优先级并启动新一轮选举,之后重新成为MASTER;

VRRP的认证方式:
    无认证
    简单字符串认证
    MD5

VRRP的工作模式:
    单个实例:MASTER/BACKUP
    多个实例:MASTER/BACKUP, MASTER/MASTER

keepalived:
VRRP协议在linux系统中的应用实现;最初的设计目的就是为了高可用ipvs调度器;某些场合,简称其为"ka";

keepalived通过调用内核中的系统调用接口完成ipvs的规则编写,从而可以用于管理lvs集群服务;所有的规则,都定义在其配置文件中;

keepalived还可以对VIP地址进行浮动设置;

keepalived还可以为后端各RS提供健康状态检测,可以基于传输层及应用层实现;

keepalived还可以基于外部脚本调用接口完成脚本中定义的功能,甚至可以高可用其他的非lvs服务;

keepalived在RHEL 6.4+或CentOS 6.4+的发行版本的操作系统中,被收录到官方系统光盘镜像之中,直接基于本地Base源使用yum命令完成安装即可;

keepalived的组件:
控制面板:配置文件分析器;
内存管理组件;
IO复用器组件;
核心组件:
VRRP Stack:实现VRRP协议功能的组件;
Checkers:后端RS做健康状态检测的组件;
SMTP:调用SMTP协议,将路由器状态转换的消息以邮件的形式发送到指定管理员邮箱;
Watch Dog:监控Checkers和VRRP Stack的工作状态;如果异常,负责重新启动keepalived进程;
ipvs wrapper:向内核中的ipvs框架传输ipvs规则,用于构建、管理、移除lvs集群服务及集群中的RS的组件;
netlink reflactor:管理虚拟路由器接口;

配置HA Cluster的前期准备:
1.各个节点主机之间时间必须同步,可以使用时间服务器,如ntp或chrony;
2.确保iptables和SELinux的规则不会阻碍各个节点之前的数据通信;
3.各个节点主机之间需要通过主机名互相通信(对ka并非必须);
4.出于安全考量,各个节点主机之间可以以root用户的身份,基于密钥认证的方式进行ssh通信(对于ka非必须);

keepalived安装:
在CentOS 7.2中,直接使用光盘镜像yum仓库,使用yum install keepalived安装即可;

程序环境:
    主配置文件:/etc/keepalived/keepalived.conf
    主程序文件:/usr/sbin/keepalived
    Unit File:/usr/lib/systemd/system/keepalived.service

主配置文件的结构:
    GLOBAL CONFIGURATION
        Global definitions
    global_defs {
        notification_email {
               [email protected] //配置接收邮件通知的邮箱地址;
        }
        notification_email_from [email protected]
        smtp_server 127.0.0.1  //设定用于发送电子邮件的邮件服务器;
        smtp_connect_timeout 30      # integer, seconds
        router_id my_hostname //设置路由器ID,仅仅为了区分不同的设备而已;如果不修改,也不会影响keepalived服务本身;
        vrrp_mcast_group4 224.0.0.18 //设置发送VRRP协议通过的目标组播通信地址;必须保证所有参数选举的路由器都必须有相同的组播通信地址;
    }

    VRRPD CONFIGURATION
        vrrp_instance inside_network { //定义VRRP的实例及实例名称;
            state MASTER  //指定当前设备的初始状态;
            interface eno16777736
                //指定被VRRP协议绑定的网络接口,即发送VRRP通过信息的网络接口;
            virtual_router_id 51 //指定虚拟路由器标识,用于确定VRRP备份组;
            priority 100 //指定当前节点的优先级,指定的范围为:1-254;
            advert_int 1 //发送VRRP通过的时间间隔,单位是秒;
            authentication {
                auth_type PASS //设置VRRP协议各节点之间的认证方式,PASS表示简单密码
                auth_pass MTUwPBjd //设置认证密码,不超过8个字符;
            }
            virtual_ipaddress {
                <IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
            } //设置虚拟IP地址的专用上下文
            nopreempt //设置当前节点为非抢占模式,默认为抢占模式;
            preempt_delay 300 //抢占模式开始前的延迟时间;
            notify_master <STRING>|<QUOTED-STRING>
            notify_backup <STRING>|<QUOTED-STRING>
            notify_fault <STRING>|<QUOTED-STRING>
                //设置当当前服务器状态发生变化时,所触发的脚本文件的路径及相关参数;
            track_script {
                SCRIPT_NAME
            }
        }

    LVS CONFIGURATION

        virtual server vip vport | fwmark <INT> {
            delay_loop <INT>  //服务轮询的时间间隔设定;
            lb_algo rr|wrr|lc|wlc|lblc|sh|dh //指定负载均衡调度算法;
            lb_kind NAT|DR|TUN //指定负载均衡集群的类型;
            persistence_timeout <INT> //启用持久连接并设置超时时间;
            protocol TCP //负载均衡服务支持的协议;目前仅支持TCP;
            sorry_server <IPADDR> <PORT>  //如果后端RS全部不可用,则需要临时删除lvs集群服务,并设置本地的http服务为sorry-server,提供友好的错误页面;
            real_server <IPADDR> <PORT> {
                weight <INT>  //指定当前RS的权重;
                notify_up <STRING>|<QUOTED-STRING>
                notify_down <STRING>|<QUOTED-STRING>
                    //当RS的状态转为UP或DOWN时,发送通知所使用的脚本路径及参数设定;
                HTTP_GET|SSL_GET {
                    url {
                        path <STRING> //指定进行后端RS健康状态检测的URL地址;
                        digest <STRING> //比较被检测资源的md5值是否发生变化;
                        status_code <INT> //根据响应报文的状态码进行后端RS的健康状态检测;
                    }
                    nb_get_retry <INT>  //指定对后端RS进行健康状态检测重试的次数上限;
                    delay_before_retry <INT> //每次重试之前的延迟时间;
                    connect_ip <IP ADDRESS>
                    connect_port <PORT>
                        //向后端RS的哪个IP地址和哪个端口发出健康状态检测请求;
                    bindto <IP ADDRESS>
                    bind_port <PORT>
                        //向后端RS发出健康状态检测请求的源IP地址和源端口号;
                    connect_timeout <INTEGER>  //连接超时时间;
                }
                TCP_CHECK {
                    connect_ip <IP ADDRESS>
                    connect_port <PORT>
                        //向后端RS的哪个IP地址和哪个端口发出健康状态检测请求;
                    bindto <IP ADDRESS>
                    bind_port <PORT>
                        //向后端RS发出健康状态检测请求的源IP地址和源端口号;
                    connect_timeout <INTEGER>  //连接超时时间;
                }
            }
        }

原文地址:http://blog.51cto.com/chenliangdeeper/2125796

时间: 2024-10-13 20:30:27

Linux集群实现高可用--keepalived的相关文章

Linux集群之高可用负载均衡lvs+keepalived

LVS简介 LVS介绍 LVS是Linux Virtual Server的缩写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统,属于4层负载均衡 ipvs和ipvsadm的关系 我们使用配置LVS的时候,不能直接配置内核中的ipvs,需要使用ipvs的管理工具ipvsadm进行管理 LVS术语 LVS转发原理 LVS负载均衡器接受所有入站请求,并根据调度算法决定哪个realserver处理该请求 LVS调度算法 轮询(rr):按照请求顺序轮流分发到后端RS 加权轮询(wrr):权值高的获得

Linux集群系列——高可用集群之corosync基础概念及安装配置.

高可用衡量标准 :corosync : 集群管理引擎 SA Forum -->OpenAIS-->Wilson-->corosync 向后延伸为衍生出来的版本REHL 6.x RHCS :corosyncREHL 5.x RHCS :OpenAIS , cman ,rgmanager corosync : Messaging Layer 需要CRM (+ pacemaker)SUSE Linux Enterprise server Hawk WEB GUILCMC : Linux Clu

keepalived结合nginx状态检测脚本实现对web服务器集群的高可用

实验环境 两台CentOS-7.5虚拟机web1:10.0.11.203web2:10.0.11.204VIP :10.0.11.210web类型:nginx客户端:自用笔记本(win10)nginx状态检测脚本:ck_nginx.sh 实验一.使用keepalived简单实现web集群的高可用功能 1.准备两台web服务器 1)web1网卡情况[[email protected] ~]# [[email protected] ~]# ip a 2)web2网卡情况[[email protect

keepalived实现LVS集群的高可用(1)

HA集群:高可用集群: 实现方式:vrrp协议和ais完备HA集群 vrrp可以由keepalived实现 ais可以由heartbeat和corosync vrrp协议:虚拟冗余路由协议 VRRP为虚拟路由冗余协议,目的就是为了解决静态路由单点故障问题.在一个VRRP虚拟路由器中,有多台物理的VRRP路由器,但是这多台的物理的机器并不能同时工作,而是由一台称为MASTER的负责路由工作,其它的都是BACKUP,MASTER并非一成不变,VRRP让每个VRRP路由器参与竞选,最终获胜的就是MAS

keepalived实现WEB服务集群的高可用负载均衡

要求:利用keepalived实现WEB服务集群的高可用负载均衡,即在lvs_dr模型中扮演director的角色,对来自用户的请求按照一定的算法分配至后端服务器中:且keepalived服务器可实现高可用. keepalived是vrrp协议的一种实现,专门为lvs设计,以实现对lvs高可用就集群中的dirctor进行冗余以及对realserver进行健康检测.当一台主机(MASTER)出现问题后,keepalived能够将VIP自动的分配到备用的主机上(BACKUP),从而实现了自身(dir

浅谈web应用的负载均衡、集群、高可用(HA)解决方案(转)

1.熟悉几个组件 1.1.apache     —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代理服务器,支持安 全Socket层(SSL)等等,目前互联网主要使用它做静态资源服务器,也可以做代理服务器转发请求(如:图片链等),结合tomcat等 servlet容器处理jsp.1.2.ngnix     —— 俄罗斯人开发的一个高性能的 HTTP和反向代理服务器.由于Nginx 超越 Apache 的高性能和稳

java架构师大型分布式综合项目实战,高并发,集群,高可用,程序设计,性能优化,架构设计,负载均衡,大数据量

* { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩 展.高性能.高并发.性能优化.Spring boot.Redis.ActiveMQ.Nginx.Mycat.Netty.Jvm大型分布 式项目实战视频教程 视频课程包含: 高级Java架构师包含:Spring boot.Spring  cloud.Dubbo.Redis.ActiveMQ.Nginx.Mycat

15套java架构师、集群、高可用、高可扩 展、高性能、高并发、性能优化大型分布 式项目实战视频教程

2017-08-09 * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩 展.高性能.高并发.性能优化.Spring boot.Redis.ActiveMQ.Nginx.Mycat.Netty.Jvm大型分布 式项目实战视频教程 视频课程包含: 高级Java架构师包含:Spring boot.Spring  cloud.Dubbo.Redis.ActiveMQ.

java架构师、集群、高可用、高可扩展、高性能、高并发、性能优化

15套java架构师.集群.高可用.高可扩展.高性能.高并发.性能优化.Spring boot.Redis.ActiveMQ.Nginx.Mycat.Netty.Jvm大型分布式项目实战视频教程 视频课程内容包含: 高级Java架构师包含:Spring boot.Spring  cloud.Dubbo.Redis.ActiveMQ.Nginx.Mycat.Spring.MongoDB.ZeroMQ.Git.Nosql.Jvm.Mecached.Netty.Nio.Mina.性能调优.高并发.to