Keepalived 配置实例
Keepalived 是一款轻量级HA集群应用,它的设计初衷是为了做LVS集群的HA,即探测LVS健康情况,从而进行主备切换,不仅如此,还能够探测LVS代理的后端主机的健康状况,动态修改LVS转发规则。
当LVS进行主备切换的时候,对外提供服务的IP是如何做到切换的呢?这就依赖于keepalived 所应用的vrrp协议,即Virtual Reduntant Routing Protocol,虚拟冗余路由协议。简单来讲,此协议是将IP设置在虚拟接口之上,根据一定的规则实现IP在物理主机上流动,即哪台主机可以占有该IP。
而且keepalived具有脚本调用接口,可通过脚本完成拓展功能。
1.Keepalived
术语:
默认为抢占式。当优先级高的主机恢复正常状态时,将夺回IP,重新成为MASTER。
这样两台主机,能通过两个对外IP同时工作。即主主模式。
组件:
HA Cluster的配置前提:
2.Keepalived配置前需要了解的事
本文演示的环境为centos7.2。keepalived软件安装,配置好yum源,软件包已在base仓库中收录。
# yum install keepalived 安装即可
程序环境:
配置文件组件部分:
TOP HIERACHY
配置语法:
3.Keepalived 双主虚拟路由配置实例
演示前说明:
2台centos7.2 主机:node-00,node-01
VIP1:10.1.38.19预定node-00占有
VIP2:10.1.38.20 预定node-01占有
2台主机安装好keepalived之后,开始编辑配置文件
node-00的配置如下
! Configuration File for keepalived global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost #定义来信人
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node-00
vrrp_mcast_group4 224.0.38.12
} vrrp_instance VI_1 {
state MASTER
interface team0
virtual_router_id 38
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass x1er44q
}
virtual_ipaddress {
10.1.38.19/16 dev team0
} smtp_alert #状态切换,使用邮件通知
} vrrp_instance VI_2 {
state BACKUP
interface team0
virtual_router_id 39
priority 97
advert_int 1
authentication {
auth_type PASS
auth_pass x1er44q
}
virtual_ipaddress {
10.1.38.20/16 dev team0
}
smtp_alert
}
复制要把备注删掉
node-01配置如下
! Configuration File for keepalived global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node-01
vrrp_mcast_group4 224.0.38.12
} vrrp_instance VI_1 {
state BACKUP
interface bond0
virtual_router_id 38
priority 97
advert_int 1
authentication {
auth_type PASS
auth_pass x1er44q
}
virtual_ipaddress {
10.1.38.19/16 dev bond0
}
smtp_alert
} vrrp_instance VI_2 {
state MASTER
interface bond0
virtual_router_id 39
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass x1er44q
}
virtual_ipaddress {
10.1.38.20/16 dev bond0
}
smtp_alert
}
配置完成后,启动服务
#systemctl start keepalived
使用ip命令查看ip地址情况
#ip address show
node-00情况
node-01情况
此时,我们模拟node-00宕机,将node-00的keepalived服务停掉,那么10.1.38.19此ip会流动到node-01上
#systemctl stop keepalived
至此此部分演示完毕。
4.Keepalived ipvs 高可用集群配置实例
同样先科普的配置说明
虚拟服务器:
配置结构:
virtual_server IP port 或者virtual_server fwmark int
{
...
real_server {
...
}
...
}
常用参数:
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>:备用服务器地址;当后端主机都失败时,由此主机提供友好提示页面。
real_server <IPADDR> <PORT>
{
weight <INT>
notify_up <STRING>|<QUOTED-STRING>
notify_down <STRING>|<QUOTED-STRING>
HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK { ... }:定义当前主机的健康状态检测方法;
}
HTTP_GET|SSL_GET {
url {
path <URL_PATH>:定义要监控的URL;
status_code <INT>:判断上述检测机制为健康状态的响应码;
digest <STRING>:判断上述检测机制为健康状态的响应的内容的校验码;
}
nb_get_retry <INT>:重试次数;
delay_before_retry <INT>:重试之前的延迟时长;
connect_ip <IP ADDRESS>:向当前RS的哪个IP地址发起健康状态检测请求
connect_port <PORT>:向当前RS的哪个PORT发起健康状态检测请求
bindto <IP ADDRESS>:发出健康状态检测请求时使用的源地址;
bind_port <PORT>:发出健康状态检测请求时使用的源端口;
connect_timeout <INTEGER>:连接请求的超时时长;
}
TCP_CHECK {
connect_ip <IP ADDRESS>:向当前RS的哪个IP地址发起健康状态检测请求
connect_port <PORT>:向当前RS的哪个PORT发起健康状态检测请求
bindto <IP ADDRESS>:发出健康状态检测请求时使用的源地址;
bind_port <PORT>:发出健康状态检测请求时使用的源端口;
connect_timeout <INTEGER>:连接请求的超时时长;
}
开始演示实例
演示说明:
node-00,node-01 作为ipvs主机,做HA。对外服务IP为10.1.38.15,即VIP。
node-02,node-03 作为后端主机,提供web服务。
node-02 IP:10.1.38.13
node-03 IP:10.1.38.14
node-00配置如下
! Configuration File for keepalived global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node-00
vrrp_mcast_group4 224.0.38.12
} vrrp_instance VI_1 {
state MASTER
interface team0
virtual_router_id 38
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass x1er44q
}
virtual_ipaddress {
10.1.38.15/16 dev team0
} smtp_alert
}
virtual_server 10.1.38.15 80 {
delay_loop 3
lb_algo rr
lb_kind DR
protocol TCP sorry_server 127.0.0.1 80 real_server 10.1.38.13 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 1
nb_get_retry 3
delay_before_retry 1
}
}
real_server 10.1.38.14 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 1
nb_get_retry 3
delay_before_retry 1
}
}
}
node-01 配置如下
! Configuration File for keepalived global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node-01
vrrp_mcast_group4 224.0.38.12
} vrrp_instance VI_1 {
state BACKUP
interface bond0
virtual_router_id 38
priority 97
advert_int 1
authentication {
auth_type PASS
auth_pass x1er44q
}
virtual_ipaddress {
10.1.38.15/16 dev bond0
} smtp_alert
}
virtual_server 10.1.38.15 80 {
delay_loop 3
lb_algo rr
lb_kind DR
protocol TCP sorry_server 127.0.0.1 80 real_server 10.1.38.13 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 1
nb_get_retry 3
delay_before_retry 1
}
}
real_server 10.1.38.14 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 1
nb_get_retry 3
delay_before_retry 1
}
}
}
两台后端主机做好lvs dr模式集群设置,并开启web服务。启动ipvs两台主机keepalived服务。
一切正常情况下,此时node-00拥有VIP,使用其他主机来访问 10.1.38.15
测试1:
#for i in {1..6};do curl 10.1.38.15;done
轮询调度正常。
测试2:
停掉node-00 keepalived服务,模拟宕机,测试冗余性
正常结果还是正常轮询的。
测试3:
两台ipvs主机正常运行,停掉node-02上web服务,模拟后端主机宕机,测试keepalived动态调整后端主机列表功能
测试结果,前端调度器只将服务调度至node-03上。
再将node-02 web服务启动,再测试
结果显示恢复正常轮询,至此keepalived动态调整能力测试完毕。
其实以上结果,再ipvs主机直接查看lvs规则也可看出
#ipvsadm -Ln
5.Keepalived 做nginx 高可用集群配置实例
再学习一个新知识,脚本调用
keepalived调用外部的辅助脚本进行资源监控,并根据监控的结果状态能实现优先动态调整;
分两步:(1) 先定义一个脚本;(2) 调用此脚本;
vrrp_script <SCRIPT_NAME> {
script "" #定义一个判定语句,如果退出状态码为非0,则执行减优先级操作。
interval INT #测试间隔
weight -INT #降低优先级,是其释放VIP所有权
}
track_script {
SCRIPT_NAME_1 #检测的脚本列表
SCRIPT_NAME_2
...
}
开始演示实例
演示说明:
node-00,node-01 为nginx服务器,代理后端web服务器,使用keepalived做HA集群。
node-02,node-03 为后端web服务器。
node-00配置如下
! Configuration File for keepalived global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node-00
vrrp_mcast_group4 224.0.38.12
} vrrp_script check_ngx { #脚本在引用前定义好
script "killall -0 nginx " #探测nginx服务是否正常
interval 1
weight -5
}
vrrp_instance VI_1 {
state MASTER
interface team0
virtual_router_id 38
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass x1er44q
}
virtual_ipaddress {
10.1.38.15/16 dev team0
}
track_script { #在路由实例中引用自定义脚本
check_ngx
}
smtp_alert
}
node-01配置如下
! Configuration File for keepalived global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node-01
vrrp_mcast_group4 224.0.38.12
} vrrp_script check_ngx {
script "killall -0 nginx"
interval 1
weight -5
}
vrrp_instance VI_1 {
state BACKUP
interface bond0
virtual_router_id 38
priority 97
advert_int 1
authentication {
auth_type PASS
auth_pass x1er44q
}
virtual_ipaddress {
10.1.38.15/16 dev bond0
}
track_script {
check_ngx
}
smtp_alert
}
node-00,node-01 启动nginx服务,并已设置好代理两台后端web服务器;启动keepalived 服务。
node-02,node-03 启动web服务。
如果配置正确,会有以下结果。
测试1:使用另一台主机访问VIP,轮询响应结果正常,VIP在node-00。
测试2:停止node-00 nginx服务,模拟nginx服务异常,访问VIP,轮询响应结果正常,VIP在node-01。
测试3:恢复node-00 nginx 服务,VIP 流动回 node-00上。
完~
Keepalived 配置实例的更多相关文章
- Keepalived 双主虚拟路由配置实例
Keepalived 双主虚拟路由配置实例 演示前说明: 2台centos7.2 主机:node-00,node-01 VIP1:10.1.38.19预定node-00占有 VIP2:10.1.38. ...
- 干货 | Keepalived高可用服务配置实例
一个执着于技术的公众号 Keepalived系列导读 Keepalived入门学习 keepalived安装及配置文件详解 前言 在前面的章节中,我们学习了Keepalived简介.原理.以及Keep ...
- Keepalived 配置和使用
keepalived主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现.keepalived主要目的在于,其自身启动一个服务,能够实现 ...
- keepalived配置主从备份
keepalived配置主从备份 keepalived是一个用于做双机热备(HA)的软件,常和haproxy联合起来做热备+负载均衡,达到高可用. 运行原理 keepalived通过选举(看服务器 ...
- centso 7 Keepalived 配置脚本
#!/bin/bash #This is keepalived bashshell. #MASTER/BACKUP yum install -y openssl openssl-devel keepa ...
- 二、Nginx配置实例
Nginx配置实例 一.反向代理 实例一 1.实现效果 打开浏览器,在浏览器地址栏输入地址 www.123.com ,跳转到linux系统tomcat主页面中. 2.准备工作 在linux系统中安装t ...
- nginx配置实例及多服务器负载
目录 nginx配置实例 多服务器负载 nginx配置实例 nginx.conf worker_processes 1; events { worker_connections 1024; } htt ...
- Nginx 配置实例-配置高可用
Nginx 配置实例-配置高可用 1. 实现效果 2. 两台机器 nginx 的安装 2.1 192.168.25.120 中 nginx 的安装 2.1.1 安装 pcre 依赖 2.1.2 安装其 ...
- Keepalived配置重载(reload)实现方法
一.前言 Keepalived运行过程中,可能存在更改配置的需求,例如修改virtual_ipaddress,virtual_router_id,priority等参数.在keepalived不重启, ...
随机推荐
- Robotframework框架AndroidLibrary库安装
1.Ruby官网(http://rubyinstaller.org/)下载系统对应安装包进行安装 2.Ruby官网(http://rubyinstaller.org/)下载对应DevKit,运行解压到 ...
- sql2000添加表注释,列注释 及修改 删除 注释
--创建表--create table 表(a1 varchar(10),a2 char(2)) --为表添加描述信息EXECUTE sp_addextendedproperty 'MS_Descri ...
- 浅谈 JS 创建对象的 8 种模式
1.Object 模式 var o1 = {};//字面量的表现形式 var o2 = new Object; var o3 = new Object(); var o4 = new Object(n ...
- php工作笔记8-并发和数据类型
1.mysql在进行数据的修改时,并发情况下: $RoundsRows=$modelRounds->where("id=$roundsID and (sendMoney + $amou ...
- CentOS安装NodeJS及Express开发框架
http://zhaohe162.blog.163.com/blog/static/38216797201402234212981/ express 命令行工具 npm install -g ex ...
- 《CoffeeScript应用开发》学习: 第四章-改进应用程序
检查值是否存在 使用存在运算符 CoffeeScript中有一个非常有用的存在运算符?,它能正确地处理值是否存在(存在的意思为变量不为undefined或者null)的情况.在变量后添加?来判断它是否 ...
- 深入理解jQuery中的Deferred
引入 1 在开发的过程中,我们经常遇到某些耗时很长的javascript操作,并且伴随着大量的异步. 2 比如我们有一个ajax的操作,这个ajax从发出请求到接收响应需要5秒,在这5秒内我们可以 ...
- zookeeper dubbo 问题解决录
问题1: 运行起来不报错,不过在Console没有zookeeper的心跳信息,也就是说没有配置上zookeeper,而出错的原因是下面蓝色这段解析不了 spring-dubbo-provider.x ...
- Abstract Factory Step by Step --- 抽象工厂
抽象工厂是创建型模式的代表,其他的还有单件(Singleton).生成器(Builder).工厂方法(Factory Method)以及原型(Prototype),模式本身没有好坏之分,只有适用不适用 ...
- 使用C#的反射机制读取类的字段名称及值
using System.Windows.Forms;using System.Reflection; foreach (FieldInfo fi in typeof(SystemInformatio ...