1、原理

Keepalived 的作用是检测后端服务器的状态,如果有一台服务器死机,或工作出现故障,Keepalived 将检测到,并将有故障的服务器从系统中剔除。当服务器工作正常后 Keepalived 自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

2、keepalived的作用

1.管理 VIP

VIP 会在 LVS 之间漂移

运行在主分发的 Keepalived 会以组播的形式向网络中宣告自己,即主分发器还活着,备用节点能收到。当备用节点,在一个时间单位中收不到组播,备用节点会认为主 LVS 挂了,开始接手主分发器工作,把 VIP 配给自己。

2.管理 RS

Keepalived 会每隔一个时间段去做一次类似于访问的操作如:

Udp端口检测,使用nc 命令,跟相关参数实现。

3、使用Keepalived构建LVS-DR模式的高可用集群

机器列表

主机名

ip

网关

作用

Dr1

Vip:10.1.19.50

主Dr

Dr2

Vip:10.1.19.50

备Dr

RS1

RIP:10.1.8.1

NTP Server1

RS2

RIP:10.1.18.21

NTP Server2

RS3

RIP:10.1.13.13

NTP Server3

4、Dr安装ipvsadm、keepalived

两台Dr都要安装

yum -y install ipvsadm

安装完成不需要做任何配置,启动方式由keepalived控制

yum install –y keepalived

5、主节点Dr1配置

# cp  keepalived.conf  keepalived.conf.bak

用MISC_CHECK来调用外部的脚本去判断UDP端口是否开启来做到UDP健康状态检查.

# mkdir -p /usr/local/scripts/keepalived/

# vim /usr/local/scripts/keepalived/UDP_CHECK.sh

#!/bin/bash

/bin/nc -uz -w1 $1 $2 >/dev/null

exit $?

 

# vim  /etc/keepalived/keepalived.conf

global_defs {

router_id Dr1                       #标识当前节点名字,两个节点的此项需要不相同。

}

vrrp_instance ntp {    #定义一个实例,一个集群就是一个实例。 默认VI_1 可以随意改

state MASTER        #指定 A 节点为主节点 备用节点上设置为 BACKUP 即可

interface eth0        #绑定虚拟 IP 的网络接口

virtual_router_id 51   #VRRP 组名,两个节点的设置必须一样,以指明各个节点属于同一 VRRP 组

priority 100          #主节点的优先级(1-254 之间),备用节点必须比主节点优先级低

advert_int 1          #组播信息发送间隔,两个节点设置必须一样

authentication {      #设置验证信息,两个节点必须一致

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

10.1.19.50     #指定虚拟 IP, 两个节点设置必须一样

}

}

virtual_server 10.1.19.50 123 {    #对虚拟IP63添加LVS相关内容

delay_loop 6                   #Keepalived 多长时间监测一次 RS

lb_algo rr                      #分发算法

lb_kind DR                     #DR 模式

protocol UDP

real_server 10.1.8.1 123 {  

weight 1

MISC_CHECK {

misc_path "/usr/local/scripts/keepalived/UDP_CHECK.sh 10.1.8.1 123"

misc_timeout 10

}

  }

real_server 10.1.18.21 123 {

weight 1

MISC_CHECK {

misc_path "/usr/local/scripts/keepalived/UDP_CHECK.sh 10.1.18.21 123"

misc_timeout 10

}

}

real_server 10.1.13.13 123 {

weight 1

MISC_CHECK {

misc_path "/usr/local/scripts/keepalived/UDP_CHECK.sh 10.1.13.13 123"

misc_timeout 10

}

}

}

启动keepalived服务

# systemctl restart keepalived

# systemctl enable keepalived

6、备节点Dr2配置

和主节点Dr1配置差不多,直接从Dr1上scp拷贝配置文件

# mkdir -p /usr/local/scripts/keepalived/

# vim /usr/local/scripts/keepalived/UDP_CHECK.sh

#!/bin/bash

/bin/nc -uz -w1 $1 $2 >/dev/null

exit $?

# scp /etc/keepalived/keepalived.conf 192.168.1.63:/etc/keepalived/

复制过来之后,还要做一定的修改:

#  vim /etc/keepalived/keepalived.conf

注:红色为改动项值

router_id Dr1               #运行 keepalived 的机器标示符

}

vrrp_instance apache {

state BACKUP            #当前 LVS 状态为备用分发器

interface ens32

virtual_router_id 51

priority 90               #LVS 优先级,备的要比主的小

……

启动keepalived服务

# systemctl restart keepalived

# systemctl enable keepalived

7、RealServer配置

三台设备配置步骤类似,故只列出一台的配置。Ntp服务器已经搭建完成,ip都是配置好的,故只需要配置回环接口和关闭arp转发。

# vim /etc/init.d/add-vip

#!/bin/bash

VIP=10.1.19.50

. /etc/rc.d/init.d/functions

case "$1" in

start)

ifconfig ens160:1 $VIP netmask 255.255.255.255 broadcast $VIP up

/sbin/route add -host $VIP dev ens160:1

echo "1" >/proc/sys/net/ipv4/conf/ens160/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/ens160/arp_announce

echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

sysctl -p >/dev/null 2>&1

echo "RealServer Start OK"

;;

stop)

ifconfig ens160:1 down

route del $VIP >/dev/null 2>&1

echo "0" >/proc/sys/net/ipv4/conf/ens160/arp_ignore

echo "0" >/proc/sys/net/ipv4/conf/ens160/arp_announce

echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore

echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce

echo "RealServer Stoped"

;;

*)

echo "Usage: $0 {start|stop}"

exit 1

esac

exit 0

# chmod +x /etc/init.d/add-vip

关闭ARP转发  注意:在三台RS上都需要同样的操作
# echo 1 > /proc/sys/net/ipv4/conf/ens160/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/ens160/arp_announce


永久生效: (注意 realserver 的实际 link ok 的网卡是不是 eth0)
# vim /etc/sysctl.conf              #最后添加。
net.ipv4.conf.ens160.arp_ignore = 1
net.ipv4.conf. ens160.arp_announce = 2
或:
net.ipv4.conf.ens160.arp_ignore = 1
net.ipv4.conf.ens160.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

# sysctl -p

搭建NTP服务集群、高可用的更多相关文章

  1. Eureka 集群高可用配置.

    SERVER:1 server: port: 1111 eureka: instance: hostname: ${spring.cloud.client.ip-address} instance-i ...

  2. hadoop+zookeeper集群高可用搭建

                                                                  hadoop+zookeeper集群高可用搭建 Senerity 发布于 2 ...

  3. Rabbitmq集群高可用测试

    Rabbitmq集群高可用 RabbitMQ是用erlang开发的,集群非常方便,因为erlang天生就是一门分布式语言,但其本身并不支持负载均衡. Rabbit模式大概分为以下三种:单一模式.普通模 ...

  4. 浅谈MySQL集群高可用架构

    前言 高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.对于一个系统而言,可能包含很多模块,比如前端应用,缓存,数据库,搜索,消息队列等,每个模块都需要做到高可用,才能 ...

  5. bitmq集群高可用测试

    Rabbitmq集群高可用 RabbitMQ是用erlang开发的,集群非常方便,因为erlang天生就是一门分布式语言,但其本身并不支持负载均衡. Rabbit模式大概分为以下三种:单一模式.普通模 ...

  6. 集群高可用之lvs+keepalive

    集群高可用之lvs+keepalive keepalive简介: 负载均衡架构依赖于知名的IPVS内核模块,keepalive由一组检查器根据服务器的健康情况动态维护和管理服务器池.keepalive ...

  7. mysql集群高可用架构

    前言 高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.对于一个系统而言,可能包含很多模块,比如前端应用,缓存,数据库,搜索,消息队列等,每个模块都需要做到高可用,才能 ...

  8. RabbitMQ从零到集群高可用(.NetCore5.0) -高可用集群构建落地

    系列文章: RabbitMQ从零到集群高可用(.NetCore5.0) - RabbitMQ简介和六种工作模式详解 RabbitMQ从零到集群高可用(.NetCore5.0) - 死信队列,延时队列 ...

  9. openstack pike 集群高可用 安装 部署 目录汇总

    # openstack pike 集群高可用 安装部署#安装环境 centos 7 史上最详细的openstack pike版 部署文档欢迎经验分享,欢迎笔记分享欢迎留言,或加QQ群663105353 ...

随机推荐

  1. Eclipse下运行maven项目失败且Tomcat服务器也启动不了

    今天遇到一个神奇的问题,在eclipse中创建一个maven项目后,Run on server 时说服务器启动失败.我以为是Eclipse配置tomcat的问题.找了一大堆没找到想要的答案!!! 我还 ...

  2. 《R语言入门与实践》第一章:R基础

    前言 本章介绍了 R 语言的基础知识 界面: 使用命令 “ R “进行命令行的实时编译 对象 定义: 用于储存数据的,设定一个名称 格式: a <- 1:6 命名规则: 规则1:不能以数字开头规 ...

  3. lua调用不同lua文件中的函数

    a.lua和b.lua在同一个目录下 a.lua调用b.lua中的test方法,注意b中test的写法 _M 和 a中调用方法: b.lua local _M = {}function _M.test ...

  4. 记录Sql2012附加Sql2008的数据库出错的解决方案

    只需要对要附加的数据文件[右键]->[属性]->[安全]->(选择“Authenticated Users”用户)[编辑]->让“Authenticated Users”用户具 ...

  5. selenium、UA池、ip池、scrapy-redis的综合应用案例

    案例: 网易新闻的爬取: https://news.163.com/ 爬取的内容为一下4大板块中的新闻内容 爬取: 特点: 动态加载数据  ,用 selenium 爬虫 1. 创建项目 scrapy ...

  6. Java语言中的奇淫技巧

    variable length parameter list(可变长度参数列表) 很久之前了解过有这么一种写法,但转眼即忘.今天在公司项目的代码里看到,有点小惊讶,写这代码的同事还是有点水平的...

  7. python下基于sokcet的tcp通信——入门篇

    环境 python版本:2.7 IDE:pycharm TCP/UDP协议均为传输层的协议,绝大部分应用程序之间的通信都是使用TCP或UDP,故而在网络通信中及其重要,想详细了解他们之间的差异,可参考 ...

  8. JQuery的常用选择器 转

    JQuery的常用选择器 刚开始学JQuery写的如有错误欢迎批评指正 JQuery拥有的选择器可以让我们更快更方便找到想要的元素,然后对相应的元素进行操作 简单介绍一下一些常用的选择器: 1.基本选 ...

  9. 阿里云 oss 上传文件,js直传,.net 签名,回调

    后台签名 添加引用 string dir = string.Format("{0:yyyy-MM-dd}", date) + "/"; OssClient cl ...

  10. 错误处理:error(0) error portability:3 this xilinx application has run out of memory has encountered a memory conflict

    在FPGA侧提供了一个gp0,gp1各占1m内存的版本后.生成mcs版本,在下载版本时报错: error(0) error portability:3 this xilinx application ...