简介:

Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。这段话是截取自百科。既然说到这里一定要说说,keepalived特性:

1,keepalived的是利用vip功能实现服务漂移,这是一种VRRP虚拟路由技术。VRRP协议在linux主机上以守护进程方式的实现;

2,keepalived的主备node服务都需要启动。默认是高可用自身和你需要检查的服务。

但是有些场景可能不适用,例如dhcp或dns。一个网络中不能有两个dhcp或dns,所以适用是要注意了。另外值得注意的是他的LVS功能,这是一个LVS加强版,keepalived具有LVS没有的状态检测功能。

keepalived本身是没有资源管理层,只有心跳状态层。它实现管理管理是由脚本实现的

注意:

所有高可用的通性:ntp时间同步,本地dns相互解析。

HA Cluster配置前提:

1,本机的主机名与hosts中定义额主机名保持一致,要与hostname(uname -n)获得的名称保持一致

contos 6: /etc/sysconfig/network

contos 7:hostnamectl set-hostname HOSTNAME

各节点要能互相解析主机名:一般建议通过hosts文件进行解析:

2,各节点时间同步:

3,确保iptables及seliux

准备工作

web1|web2

编辑hosts文件

172.16.90.130   web1.test.com web1

172.16.90.140   web2.test.com web2

查看hostname   uname -n

date;ssh web2 ‘date’

高可用httpd示例:

global_defs {

notification_email {

nodesite1@163.com

}

notification_email_from nodesite1@163.com

smtp_server smtp.163.com

smtp_connect_timeout 30

router_id node1

vrrp_mcast_group4 224.0.0.18

}

vrrp_script chk_httpd {

script "killall -0 mysql"  #代码可以在复杂点

interval 2

weight -2

}

vrrp_instance VI_1 {

state MASTER

interface eth0

virtual_router_id 51

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass JXLGOkFnS+8=

}

virtual_ipaddress {

192.168.100.10/24 dev eth0 label eth0:0

}

track_script {

chk_mysql

}

}

启动日志

两个节点各都要做响应的设置。启动服务后

1,查看进程

ps aux

root       2232  0.0  0.2 110744  1212 ?        Ss   09:29   0:00 /usr/sbin/keepalived -D

root       2234  0.0  0.6 112980  2936 ?        S    09:29   0:00 /usr/sbin/keepalived -D

root       2235  0.0  0.4 112848  2020 ?        S    09:29   0:00 /usr/sbin/keepalived -D

2,查看ip

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:B5:52:67

inet addr:172.16.200.20  Bcast:0.0.0.0  Mask:255.255.0.0

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

3,启动keepalived的日志文件  默认是LOG_DOMAIN这个级别是没有的

[root@web1 ~]# keepalived -help

Usage: keepalived [OPTION...]

-f, --use-file=FILE          Use the specified configuration file

-P, --vrrp                   Only run with VRRP subsystem

-C, --check                  Only run with Health-checker subsystem

-l, --log-console            Log messages to local console

-D, --log-detail             Detailed log messages 详细的日志消息

-S, --log-facility=[0-7]     Set syslog facility to LOG_LOCAL[0-7]

-V, --dont-release-vrrp      Don't remove VRRP VIPs and VROUTEs on daemon stop

-I, --dont-release-ipvs      Don't remove IPVS topology on daemon stop

-R, --dont-respawn           Don't respawn child processes

-n, --dont-fork              Don't fork the daemon process

-d, --dump-conf              Dump the configuration data

-p, --pid=FILE               Use specified pidfile for parent process

-r, --vrrp_pid=FILE          Use specified pidfile for VRRP child process

-c, --checkers_pid=FILE      Use specified pidfile for checkers child process

-x, --snmp                   Enable SNMP subsystem

-v, --version                Display the version number

-h, --help                   Display this help message

[root@web1 ~]#

编辑/etc/sysconfig/keepalived

KEEPALIVED_OPTIONS="-D -S 3"

添加日志级别3   vim /etc/rsyslog.conf

# Provides UDP syslog reception

$ModLoad imudp

$UDPServerRun 514

# Provides TCP syslog reception

$ModLoad imtcp

$InputTCPServerRun 514

local3.*                                                /var/log/keepalived

查看进程

tcp    LISTEN     0      25                    :::514                  :::*

tcp    LISTEN     0      25                     *:514                   *:*

4,指定检查脚本实现手动主备切换

定义脚本两种不同的形式

vrrp_script chk_schedown {    #

script "[[ -f /etc/keepalived/down ] ] &&exit 1 || exit0 " #检查文件是否存在,存在返回为返回0权重-2

interval 2   每隔两秒钟执行一次

weight -2 一旦命令失败,权重降低2 (文件不存在返回1 就是失败)

}

vrrp_script chk_schedown {

script "/root/vpnjiance.sh"

interval 2

weight -2

}

#!/bin/bash

#

[[ -f /etc/keepalived/down ]] && exit 1 || exit 0

在虚拟路由实例中调用

vrrp_instance VI_1 {

track_script {  #这是一个检测脚本的方法

chk_schedown

}

}

说明:

track_script指定检查脚本,定期运行它们来改变优先级,并最终引发主备切换。

下面是手册中未更新的两个小功能:

1、vrrp_script和track_script

track_script指定检查脚本,定期运行它们来改变优先级,并最终引发主备切换。如果配过交换机的vrrp/hsrp部分的话,应该对这个功能比较熟悉

2、notify_stop

keepalived停止运行前运行notify_stop指定的脚本

下面是我这边应用上面两个功能介绍:

1、两台双master台数据库,用keepalivd的vrrp模式给客户端提供一个HA的虚拟IP

这个要求检查mysql数据库的状态,如果mysql出现问题,就降低优先级,这样虽然机器正常,也会引发新一轮的master选举,以保证mysql服务的高可用性

先定义两个检查脚本

vrrp_script chk_mysqld {

script "/usr/bin/mysqladmin -u ganglia extended-status -pganglia_status | grep -q Slave_running"

interval 10  # check every 10 seconds

weight -40   # if failed, decrease 40 of the priority

fall   3     # require 2 failures for failures

rise   1     # require 1 sucesses for ok

}

vrrp_script chk_schedown {  #chk_NAME名字可以自己定义

script "if [ -f /var/run/down ]; then exit 1; else exit 0; fi"  成功返回1  失败返回0

interval 10  # check every 10 seconds

weight -40   # if failed, decrease 40 of the priority

fall   1     # require 2 failures for failures

rise   1     # require 1 sucesses for ok

}

上面的chk_schedown脚本,给管理员提供一个切换的地方,如果管理员在master上手工touch /var/run/down,这样,流量会比这台机器上切走了。

在vrrp对应的地方使用它

vrrp_instance VI_1 {

track_script {

chk_mysqld

chk_schedown

}

}

2、为一些后台cron脚本提供高可用性

有些后台脚本,如给用户发短信或邮件,它需要在一台机器上运行,但是不能同时在多台机器上运行。如果只配在某台机器上,当它出现问题的时候,这些后台脚本就停止运行了。

这边的做法是,利用notify和notify_stop脚本,在MASTER机器上生成一个状态文件,所有机器都配同样的cron配置和定时运行同样的脚本,不同的是脚本在运行时首先检查是不是master,如果不是,则直接退出。这样多台机器都会定期运行后台脚本,但只有一台真正执行。

注意:做LVS时候一定要把把DIP和VIP统一接口,同时流动

LVS实现利用了同步组(同步组一般用于一次同步多个ip资源时)

定义同步组VRRP synchronization group

vrrp_sync_group VG_1 {  #定义一个同步组

group { #这个组调用了哪些实例

VI_1

VI_2

...

}

}

vrrp_instance VI_1 {

eth0

VIP

}

vrrp_instance VI_2{

eth1

DIP

}

keeplived配置文件详解

VRRP协议在linux主机上以守护进程方式的实现;

能够根据配置文件自动生成ipvs规则

对各RS做健康状态检测

组件

vrrp stack

checkers   检查

ipvs wrapper

配置文件

global configuration全局配置

vrrpd configuration

vrrp intstance  vrrp实例

vrrp synchonizayion group 同步组

lvs configuration

Global definitions

global_defs           # Block id  全局配置

{

notification_email    # 通知邮箱定义   三个邮箱

{

admin@example1.com

...

}

# From: from address that will be in header

notification_email_from admin@example.com   发件人

smtp_server 127.0.0.1        # IP   邮件服务器地址

smtp_connect_timeout 30      # integer, seconds

router_id my_hostname        # string identifying the machine, 物理设备名称。一般设置成主机名.设备名相同是没有问题的。

# (doesn’t have to be hostname).

vrrp_mcast_group4 224.0.0.18 # optional, default 224.0.0.18  定义了多播组地址

vrrp_mcast_group6 ff02::12   # optional, default ff02::12

enable_traps                 # enable SNMP traps

}

vrrp_instance VI_NAME {    #vrrp实例定义虚拟路由,如果有多个实例,实例名称应该不同

state MASTER           #Initial state, MASTER|BACKUP定义初始状态。优先级最高的将成为master

interface eth0   #vip配置在哪个接口别名上

use_vmac <VMAC_INTERFACE> #指定VMAC.默认固定格式前五段+VRID后

virtual_router_id 51   #定义了虚拟路由器的id(VRID)一组实例虚拟路由器应该唯一

priority 100           #定义优先级

advert_int 1   #通告广播心跳每个多秒发送一次心跳

mcast_src_ip <IPADDR>  #多播时指明多播源地址 224.0.0.0~239.255.255.255

unicast_src_ip <IPADDR>#单播时指明单播源地址

authentication {       #认证

auth_type PASS   #认证(简单字符认证)同一个实例密钥应该一样

auth_pass 1111     #8位密钥

}

track_interface {       #多接口监控,接口出现故障也可以转移

eth0

eth1

...

}

virtual_ipaddress {      #定义VRIP 多种不同的形式,可以定义多个 可以指定掩码 广播地址 设备 作用域 接口别名

<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>     #scope <SCOPE>作用域

192.168.200.17/24 dev eth1

192.168.200.18/24 dev eth2 label eth2:1

192.16.200.19

}

virtual_ipaddress_excluded {#被排除的VRIP地址

<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE>

<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE>

...

}

virtual_routes {#定义虚拟路由

# src <IPADDR> [to] <IPADDR>/<MASK> via|gw <IPADDR> [or <IPADDR>] dev <STRING> scope <SCOPE> tab

src 192.168.100.1 to 192.168.109.0/24 via 192.168.200.254 dev eth1

192.168.110.0/24 via 192.168.200.254 dev eth1

192.168.111.0/24 dev eth2

192.168.112.0/24  via  192.168.100.254       192.168.113.0/24  via  192.168.200.254  or   192.168.100.254   dev   eth1  blackhole 192.168.114.0/24

}

nopreempt     #工作在非抢占模式。默认是抢占模式

}

简单实现一个互为主备实例:

web1

vrrp_instance VI_1 {

state MASTER

interface eth0

virtual_router_id 51

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 8ab998cd

}

virtual_ipaddress {

172.16.200.20/16 dev eth0 label eth0:0

}

track_script {

chk_schedown1

}

}

vrrp_instance VI_2 {

state BACKUP

interface eth0

virtual_router_id 50

priority 99

advert_int 1

authentication {

auth_type PASS

auth_pass 8eb998cd

}

virtual_ipaddress {

172.16.200.30/16 dev eth0 label eth0:1

}

track_script {

chk_schedown2

}

}

--------------------

web2

vrrp_instance VI_1 {

state BACKUP

interface eth0

virtual_router_id 51

priority 99

advert_int 1

authentication {

auth_type PASS

auth_pass 8ab998cd

}

virtual_ipaddress {

172.16.200.20/16 dev eth0 label eth0:0

}

track_script {

chk_schedown1

}

}

vrrp_instance VI_2 {

state MASTER

interface eth0

virtual_router_id 50

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 8eb998cd

}

virtual_ipaddress {

172.16.200.30/16 dev eth0 label eth0:1

}

track_script {

chk_schedown2

}

}

注意:一定要设置一个状态检测方法,实现状态监管。

注意每一个实例要一个多播地址;如果你有两个实例,全局配置里面最好不要加多播地址,或者你在每一个实例里面设置一个多播地址。又或者不要设置多播地址,这样多播地址是会自动选择的。

web1 上监听web2 WRRv2报文

tcpdump -nn -i eth0 host web2 -n

邮件发送报警功能

可以定义通知组

VRRP synchronization group(s)

#string, name of group of IPs that failover together

vrrp_sync_group VG_1 {

# notify scripts and alerts are optional

#

# filenames of scripts to run on transitions

# can be unquoted (if just filename)

# or quoted (if has parameters)

# to MASTER transition

notify_master /path/to_master.sh

# to BACKUP transition

notify_backup /path/to_backup.sh

# FAULT transition

notify_fault "/path/fault.sh VG_1"

# for ANY state transition.

# "notify" script is called AFTER the

# notify_* script(s) and is executed

# with 3 arguments provided by keepalived

# (ie don’t include parameters in the notify line).

# arguments这个脚本能接受的三个参数

# $1 = "GROUP"|"INSTANCE"

# $2 = name of group or instance

# $3 = target state of transition

#     ("MASTER"|"BACKUP"|"FAULT")

notify /path/notify.sh

# Send email notifcation during state transition,

# using addresses in global_defs above.

smtp_alert

}

在VI中的主机状态发生改变时发送通知

vrrp_instance VI_NAME {

# notify scripts, alert as above

notify_master <STRING>|<QUOTED-STRING>   只有当前节点转换成MASTER才发送指定信息

notify_backup <STRING>|<QUOTED-STRING>

notify_fault <STRING>|<QUOTED-STRING>  fault出现故障

notify <STRING>|<QUOTED-STRING>只要状态发生改变就发送

smtp_alert

}

vrrp_instance VI_NAME {

# notify scripts, alert as above   #通告信息

notify_master "/etc/keepalived/notify.sh master"

notify_backup "/etc/keepalive/notify.sh backup"

notify_fault "/etc/keepalive/notify.sh fault"

}

LVS配置

LVS CONFIGURATION

contains subblocks of Virtual server group(s) and Virtual server(s)

Virtual server(s)

A virtual_server can be a declaration of one of

vip vport (IPADDR PORT pair)  #ip+端口

fwmark <INT>#防火墙标记

(virtual server) group <STRING>

#setup service

virtual_server IP port |

virtual_server fwmark int |

virtual_server group string

{

delay_loop <INT>向RS发送健康状态多少次探查命令

lb_algo rr|wrr|lc|wlc|lblc|sh|dh

ops   #Enable One-Packet-Scheduling for UDP#每一个UDP报文单独调度

lb_kind NAT|DR|TUN

persistence_timeout <INT> #持久时长。0就是不持久链接

protocol TCP  #支持哪种协议  如果要使用UDP就要ops

ha_suspend如果没有设置VS IP就不做健康状态监测

virtualhost <STRING>#定义虚拟主机 VirtualHost string for HTTP_GET or SSL_GET

sorry_server <IPADDR> <PORT>

real_server <IPADDR> <PORT> 定义虚拟服务中的RS

{

weight <INT>

inhibit_on_failure

notify_up <STRING>|<QUOTED-STRING>   #通告脚本

notify_down <STRING>|<QUOTED-STRING>

# pick one healthchecker几种健康状态监测

# HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK

# HTTP and SSL healthcheckers

HTTP_GET|SSL_GET    #http|https

{

url {

#eg path / , or path /mrtg2/

path <STRING>

# healthcheck needs status_code

# or status_code and digest

# Digest computed with genhash

# eg digest 9b3a0c85a887a256d6939da88aabd8cd

digest <STRING>  通过获取资源的md5效验码,进行检测

# status code returned in the HTTP header

# eg status_code 200

status_code <INT> 通过响应报文状态码,进行检测

}

nb_get_retry <INT> 重试多少次

delay_before_retry <INT>每一次重试等待多少时间

connect_ip <IP ADDRESS> 指明对哪个ip做健康状态检测

connect_port <PORT> 指明检测端口

bindto <IP ADDRESS> 通过ipvs的哪个ip去检测健康状态

bind_port <PORT>通过ipvs的哪个端口

connect_timeout <INTEGER>  链接超时时间

fwmark <INTEGER> 定义fwmark检测

warmup <INT>分散检测,每一次检测多少个节点

}

TCP_CHECK  基于tcp的健康状态监测

{

connect_ip <IP ADDRESS>

connect_port <PORT>

bindto <IP ADDRESS>

bind_port <PORT>

connect_timeout <INTEGER>

fwmark <INTEGER>

warmup <INT>

}

注意  real_server <IPADDR> <PORT>是有指定ip和端口的。但是检测的时候还是要指定ip和端口是为了日志记录不混淆

57336

定义sorry server

virtual_server IP port | {

sorry_server <IPADDR> <PORT>

}

本文转自 吃草的青蛙 51CTO博客,原文链接:http://blog.51cto.com/tlinux/1733314,如需转载请自行联系原作者

keepalived高可用mysql一:判断服务并vip相关推荐

  1. 基于HAProxy+Keepalived高可用负载均衡web服务的搭建

    一 原理简介 1.HAProxy HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的we ...

  2. 实践 | Centos 7搭建LVS+Keepalived高可用Web服务群集群

    LVS + Keepalived 高可用集群 Keepalived的设计目标是构建高可用的LVS负载均衡的集群,可以调用ipvsadm工具创建虚拟机,不仅仅用作双机热备,还可以使用keepalived ...

  3. 用keepalived配置高可用,监控NGINX服务

    2019独角兽企业重金招聘Python工程师标准>>> 用keepalived配置高可用集群-1 背景需求:用keepalived配置高可用,监控NGINX服务,现在企业用NGINX ...

  4. lvs服务器需要开启web服务么_Centos7搭建LVS+Keepalived高可用Web

    LVS + Keepalived 高可用集群 Keepalived的设计目标是构建高可用的LVS负载均衡的集群,可以调用ipvsadm工具创建虚拟机,不仅仅用作双机热备,还可以使用keepalived ...

  5. Nginx负载均衡配置+keepalived高可用

    1.什么是负载均衡? 随着应用各个核心模块业务量的提高,访问量和数据流量的快速增长,其处理能力和计算强度也相应地增大,使得单一的服务器设备根本无法承担.在此情况下,如果扔掉现有设备去做大量的硬件升级, ...

  6. keepalived高可用解决脑裂,nginx高可用配置详细篇

    第一章 keepalived介绍 keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点状态,后来又加入了可以实现高可用的VRRP功能.此,keepal ...

  7. keepalived高可用集群。

    keepalived故障切换转移原理 1vrrp协议:(vritual router redundancy protocol)虚拟路由冗余协议, 2故障转移. keepalived三大功能 1实现物理 ...

  8. LVS-DR+Keepalived 高可用群集

    LVS 实际上相当于基于IP地址的虚拟化应用, 为基于IP地址和内容请求分发的负载均衡提出了一种高效的解决方法 Keepalived 1.支持故障自动切换(Failover) 2.支持节点健康状态检查 ...

  9. Nginx反向代理,负载均衡,redis session共享,keepalived高可用

    本站点停止更新,请访问:blog.coocap.com 相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tom ...

最新文章

  1. CNN是靠什么线索学习到深度信息的?——一个经验性探索
  2. python常用的基本操作
  3. 整理blog,回味过去的点滴
  4. C语言 ,嵌入式 ,c++,数据结构 面试题目(4)
  5. jeecg开源社区近期版本发布计划
  6. mysql unauthenticated user原因分析以及解决方法
  7. Improvements of Job Scheduler and Query Execution on Flink OLAP
  8. 《点燃我,温暖你》理工男神李峋同款C语言版本爱心
  9. 阿里巴巴矢量图标批量下载
  10. JS、H5调用手机相册摄像头以及文件夹
  11. 1.49万件区块链专利全景:BATJP占26%,游戏类迎突破
  12. PyQt5 clicked和clicked[bool]信号区别
  13. 甲醛测量仪 DART WZ-S + stm32f103c + stmDuino IDE + I2C OLED
  14. 全国第三次土壤普查实验室筛选开始 实验室要求理化检测指标仪器一览
  15. DACAI串口屏使用
  16. 元旦节快乐,新的一年新的福利,给大家准备了高清无码的白虎图
  17. 历年茅台计算机招聘考试真题,2020贵州茅台招聘考试试题及答案(7)
  18. 金茂服务通过聆讯:9个月营收超10亿 中化与平安人寿是股东
  19. KDD‘20 | 如何建模互联网水军的对抗行为?
  20. phpstudy 配置全局的composer

热门文章

  1. java数组规定长度_为什么Java数组固定长度?
  2. 黄金点小游戏(微信小程序)
  3. 程序六原则及23种设计模式成诗随笔
  4. Android——浅析Activity过渡动画
  5. mysql表结构以及数据导入postgresql常见问题
  6. 学习笔记——12306 检测余票(3)
  7. 如何请求别人的接口(远程调用接口)
  8. 纯享版-Android AppBarLayout + CollapsingToolbarLayout丝滑自动折叠、吸顶
  9. 虚拟键盘挡住输入框的问题
  10. 第5天!争气!蒸汽!