搭建NTP服务集群、高可用
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服务集群、高可用的更多相关文章
- Eureka 集群高可用配置.
SERVER:1 server: port: 1111 eureka: instance: hostname: ${spring.cloud.client.ip-address} instance-i ...
- hadoop+zookeeper集群高可用搭建
hadoop+zookeeper集群高可用搭建 Senerity 发布于 2 ...
- Rabbitmq集群高可用测试
Rabbitmq集群高可用 RabbitMQ是用erlang开发的,集群非常方便,因为erlang天生就是一门分布式语言,但其本身并不支持负载均衡. Rabbit模式大概分为以下三种:单一模式.普通模 ...
- 浅谈MySQL集群高可用架构
前言 高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.对于一个系统而言,可能包含很多模块,比如前端应用,缓存,数据库,搜索,消息队列等,每个模块都需要做到高可用,才能 ...
- bitmq集群高可用测试
Rabbitmq集群高可用 RabbitMQ是用erlang开发的,集群非常方便,因为erlang天生就是一门分布式语言,但其本身并不支持负载均衡. Rabbit模式大概分为以下三种:单一模式.普通模 ...
- 集群高可用之lvs+keepalive
集群高可用之lvs+keepalive keepalive简介: 负载均衡架构依赖于知名的IPVS内核模块,keepalive由一组检查器根据服务器的健康情况动态维护和管理服务器池.keepalive ...
- mysql集群高可用架构
前言 高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.对于一个系统而言,可能包含很多模块,比如前端应用,缓存,数据库,搜索,消息队列等,每个模块都需要做到高可用,才能 ...
- RabbitMQ从零到集群高可用(.NetCore5.0) -高可用集群构建落地
系列文章: RabbitMQ从零到集群高可用(.NetCore5.0) - RabbitMQ简介和六种工作模式详解 RabbitMQ从零到集群高可用(.NetCore5.0) - 死信队列,延时队列 ...
- openstack pike 集群高可用 安装 部署 目录汇总
# openstack pike 集群高可用 安装部署#安装环境 centos 7 史上最详细的openstack pike版 部署文档欢迎经验分享,欢迎笔记分享欢迎留言,或加QQ群663105353 ...
随机推荐
- oracle 游标分析与理解(基础)
--------------坚持写一点 慢慢成长 希望对大家有所帮助(小白的理解) 也是自己学习后的理解(只是一小部分,需要更深沉的还需日后成长) 接下来就是我们的重点 --游标 提供了一种对从表中 ...
- 【XAF问题】多个属性验证RuleUniqueValue
一.问题 1. 在XAF中如何验证多个属性唯一值? 二.解决方法 使用RuleCombinationOfPropertiesIsUnique [RuleCombinationOfPropertiesI ...
- BUAA_OO第二单元作业总结——多线程
OO第二单元作业总结——多线程 单元任务 本单元主要的内容是通过模拟电梯的运行来熟悉多线程的实现,从简单的单部FAFS电梯开始,ALS电梯,到最后的多部ALS电梯. 一.设计策略分析总结 1.1 多线 ...
- MySQL数据库(2)
上一篇我们讲述过MySQL创建数据库,数据表的内容,其中涉及到了几个约束: NOT NULL 非空约束 PRIMARY KEY 主键约束 UNIQUE KEY 唯一约束 其实还有两个约束 ...
- mysql innodb 唯一键里的字段为什么不能为NULL
mysql 唯一键失效 CREATE TABLE `studnet_unique` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(100 ...
- js 浏览器判断
获取浏览器类型 function getBrowser() { var userAgent = navigator.userAgent //取得浏览器的userAgent字符串 var isOpera ...
- MSDN订户下载权限被屏蔽的办法
使用Chrome浏览器,在加载完成页面之后,按F12,在控制台选项卡当中输入下面代码,即可解除屏蔽. $("#SubMigratedMessageArea").remove(); ...
- MySQL—概念,用户的创建,主键,外键,数据类型,表格创建
MySQL DBMS,MySQL的概念,数据库分类,以前MySQL的部署中的一些概念 #DBMS:数据库管理系统,用于管理数据库的大型软件.mysql就是dbms的一种 #Mysql:是用于管理文件的 ...
- Spring IoC和AOP使用扩展
Spring提供了设值注入,构造注入等依赖注入方式. 使用p命令空间可以简化属性注入的配置. Spring提供的增强处理类型包括前置增强,异常抛出增强,环绕增强,最终增强等. 通过Schema形式将P ...
- 关于node_js的比较
node_js的比较是我自己初学遇到的第一个绕脑的事情. 在比较的函数多了之后,一些函数的调用和变量提升, 搞得自己头晕,有时候函数是没有返回值的,自己还在 用变量值去比较,实际上却是undefine ...