keepalived的主要功能
 1. healthcheck:
           检查后端节点是否正常工作
           如果发现后端节点异常,就将该异常节点从调度规则中删除;
           如果发现后端的异常节点恢复正常了,就将该节点重新加入到调度规则中;
2. failover
                 是对调度器的主节点做健康检测。
                  将备用节点升级为主节点
                   接管主节点上的资源(vip、lvs规则)
3.keepalived实现故障切换的原理
                     1.keepalived是基于vrrp写于实现的故障切换
                      2.正常情况下,主节点会每隔一段时间向备节点发送一个心跳信息,这个就是告诉备节点自己正常。
                      3.当主节点发生故障,那么备节点无法接收都心跳信息,就认定主节点故障,那么就会接收主节点的业务和资源(包括vip)
                       4.当主节点又恢复的时候,那么备节点释放所接收到资源和业务

vrrp协议
                1. VRRP((Virtual Router Redundancy Protocol),虚拟路由冗余协议,为了解决静态路由的单点故障问题
                  2. VRRP的工作机制是基于竞选机制选择一个路由来完成任务处理
                 3. VRRP协议是通过发送多播数据包实现竞选的(Multicat)
                 4. 竞选出来主节点会一直发送广播包,backup节点一直监听这些广播包(处于监听状态)
                 5. 当备用节点无法接收到广播包的是时候,就会重新进行竞选,选出一个新的节点作为主节点
keepalived可以完成如下工作
                       1. 自动生成vip(vip给用户提供服务)
                        2. 自动配置lvs规则
                        3. 可以实现各种服务的高可用
                        4. failover的时候,做vip的漂移

案例:实现64(master) 和 65(backup) 两个主机上的web服务的高可用,提供服务的IP 233

第一步:在实现高可用的节点的上安装keepalived(都需要安装)

[root@ ~]# yum install keepalived -y

第二步:配置keepalived

[root@ ~]#  vim /etc/keepalived/keepalived.conf
global_defs {                  <<<全局配置段
notification_email {
@qq.com
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout
router_id LVS_DEVEL <<< 当前主机的ID值,这个值必须是唯一的

} vrrp_instance VI_1 { <<< 指定实例的名称
state MASTER <<<指定节点的状态,MASTER表示主,BACKUP表示备用节点
interface eth0 <<< 指定将VIP绑定在哪个网卡上
virtual_router_id 51 <<< 虚拟路由ID,用于标识哪些个节点是一组,同一组的主机的虚拟id需要相同
priority 100 <<< 指定该节点的优先级(主这节点的优先级大于备节点)
advert_int 1 <<< 指定备节点在几秒之内没有接收到主节点的心跳信息,就接管其业务和资源
authentication {
auth_type PASS    <<< 指定keepalived集群中各个主备节点做认证的方式
auth_pass
}
virtual_ipaddress {
10.220.5.233 <<< 指定用于提供服务的ip地址(也就是VIP)
}

} virtual_server 10.220.5.233 { <<<指定实例对应的VIP
delay_loop 6 <<<对后端节点做健康检查的时间间隔
lb_algo rr <<<指定负载均衡调度算法
lb_kind DR
persistence_timeout 50 <<<同一IP的请求50秒内被分配到同一台真实主机
protocol TCP <<<用TCP协议对真实节点做健康检查 real_server 10.220.5.64 { <<< 指定一台真实服务器的IP和端口
weight 1 <<<设置权重
TCP_CHECK{ <<<用建立tcp连接的方式做健康检测
connect_timeout 10 <<<设置建立tcp连接的超时时间
delay_before_retry 3 <<<超时后多久重试
nb_get_retry 3 <<<重试次数
connect_port 80 <<<健康检查使用的端口号j
real_server 10.220.5.65 80 {  <<< 指定一台真实服务器的IP和端口
weight 1 <<<设置权重
TCP_CHECK{ <<<用建立tcp连接的方式做健康检测
connect_timeout 10 <<<设置建立tcp连接的超时时间
delay_before_retry 3 <<<超时后多久重试
nb_get_retry 3 <<<重试次数
connect_port 80 <<<健康检查使用的端口号 }
}

} 解决监听的ip不存在的问题(nginx,httpd)
在/etc/sysctl.conf增加一个选项
net.ipv4.ip_nolocal_bind =1
这是在启动服务的时候不检查所绑定的vip是否存在

keepliave的更多相关文章

  1. Nginx - keepliave 相关知识点

    目录 - 1. 前言- 2. keepalive 介绍- 3. Nginx 与 keepalive 的关系    - 3.1 Nginx - keepalive_timeout    - 3.2 Ng ...

  2. Nginx学习总结:proxy与rewrite模块(三)

    斜体下划线,表示建议采用默认配置,无需显式的配置 一.ngx_http_upstream_module 此模块中可配置的指令并不是很多.nginx的负载均衡算法包括: 1)round-robin:轮询 ...

随机推荐

  1. Skin Microstructure Deformation with Displacement Map Convolution项目小结

    经常有人问我你最近在干什么,但一句话真的很难说明白,最近两个月一直在尝试将Skin Microstructure Deformation with Displacement Map Convoluti ...

  2. 使用 random() 生成礼包码

    需求:生成100个游戏礼包码 具体如下 # 1.构造100个5位随机数 listNumA = [] for n in range(100): listNumA.append(random.randin ...

  3. Mybatis中 Integer 值为0时,默认为空字符串的解决办法。

    需求是查询级别为0的用户 User对象里的level字段的值为0,查询时居然没有查到为level为0的用户. <select id="selectSelective" par ...

  4. 记一次gitlab-ce数据恢复过程

    使用的gitlab是用docker启动的,数据目录的owner/group信息被意外全部更改成了root:root导致服务不可用.最终通过复原文件所有者的方式恢复了服务. 步骤如下: 1. 打包备份g ...

  5. Elasticsearch-6.7.0系列-Joyce博客总目录

     官方英文文档地址:https://www.elastic.co/guide/index.html Elasticsearch博客目录 Elasticsearch-6.7.0系列(一)9200端口 . ...

  6. SpringCloudConfig配置中心git库以及refresh刷新

    基于git库的Spring Cloud Config配置中心代码demo下载地址:https://gitlab.com/mySpringCloud/config-git SpringBoot版本: 1 ...

  7. Mock测试接口

    Mock使用场景: (1)创建所需的DB数据可能需要很长时间,如:调用别的接口,模拟很多数据,确保发布版本接口可用 (2)调用第三方API接口,测试很慢, (3)编写满足所有外部依赖的测试可能很复杂, ...

  8. Galaxy2D Game Engine 4.2 开发版发布

    Update: ◆删除Graph_GetRenderTarget()函数,添加Graph_CopyBackBuffer()/Graph_CopyRanderTarget()函数 ◆Graph_EndS ...

  9. 部分视图 - partial

    对于partia来说,可以理解为组件化的运用,即将对应的html/js/css进行封装,然后通过模板引擎直接进行调用 1.partial的注册 //可以直接写在app.js,也可以写在之前所说的hel ...

  10. 基于kettle的简单HTTP接口监控

        需求:监控系统中使用的所有http接口,要求简单,易用. 一般的思路也就是发送get/post请求,然后检查接口的响应结果. 如果写代码,要处理http请求,检查http响应,实现发邮件,写d ...