keepalived搭建HA集群
一、集群服务简述
- 有2个电脑及以上完成的任务
1、集群分类
1、LB集群
- 负载均衡
2、HA集群(高可用)
不间断的提供服务,主备模式
出现问题,能自动快速切换到另一个节点
为了解决单点故障问题
3、HPC集群(高性能集群)
软硬件协同工作的系统
航天工作,气象局等等
上
二、构建HA集群
1、部署HA集群的软件
keepalived,轻量级高可用部署软件,最初是为LVS设计的,随后加入VRRP功能
heartbeat
pacemaker
2、术语
1、vip
虚拟ip,不是固定的,可以切换的
vip地址在a主机上,a主机坏了的话,vip地址转移到b主机上
2、地址漂移
- vip从一台主机迁移到另一个主机上
3、心跳
主备角色,监控对方的状态。以决定哪台主机提供服务
判断是否存活等状态
4、脑裂
网络,数据延迟等问题,在做心跳检查时,双方都检查失败,都认为对方是坏的,那么就都要去抢ip地址,强主角色
解决方法
- 仲裁,自己配置第三方程序,在发生这种情况的时候,决定哪一个主机关机(类似这种说法),决定哪一个主机充当master
三、实验
1、实验规划
- 实现7*24小时不断为用户提供网站服务
# 主机1 httpd-61 192.168.200.61
# 主机2 httpd-62 192.168.200.62
# 都装上httpd,不同的网站页面
# 思路就是61能提供服务,突然61不提供服务,62提供服务
vip存放在61上面,61坏掉的话,飘移到62上面
vip的地址为192.168.200.201
2、部署HA高可用集群

- 高可用,一个坏了,另一个可以接管,服务正常运行
1、2台机器安装keepalived
- 哪几台机器要配置高可用,就要在几台机器上面安装即可
[root@httpd-61 /]# yum -y install keepalived
[root@httpd-62 /]# yum -y install keepalived
2、备份,删除一些不用的行
- 备份keepalived配置文件
[root@httpd-61 keepalived]# cp keepalived.conf keepalived.conf.bak
# 36行之后的配置没有用,删除掉
[root@httpd-61 keepalived]# sed -i '36,$d' keepalived.conf
[root@httpd-61 keepalived]# wc -l keepalived.conf
35 keepalived.conf
3、配置参数
! Configuration File for keepalived
global_defs { # 全局配置
notification_email {
acassen@firewall.loc # 工作邮箱
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1 # 邮件服务器的ip
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1(vi_1是起的集群名字,可以修改的) { # 调用的是vrrp协议
state MASTER # 状态 master
interface eth0 # 当前的机器的网卡名,vip地址要配置在哪个网卡上面
virtual_router_id 51
priority 100 # 优先级,必须比备用的高
advert_int 1
authentication { # 心跳检查的时候
auth_type PASS # 通过密码类型来检查
auth_pass 1111 # 密码可以修改,2台机器的类型和密码必须是相同的
}
virtual_ipaddress { # 分配的vip地址(公网的ip)
192.168.200.16 # 可以写域名,dns服务写一个A记录绑定即可
192.168.200.17
192.168.200.18
}
}
- master修改完的配置
[root@httpd-61 keepalived]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance web-group {
state MASTER # 角色
interface ens33 # 网卡名
virtual_router_id 51
priority 150 # 优先级
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.201 # vip地址
}
}
# 重启keepalived服务,就会获取到vip地址
[root@httpd-61 keepalived]# systemctl restart keepalived.service
# 就会发现vip地址配置在ens33上面了
# ip a显示所有的ip地址
[root@httpd-61 keepalived]# ip a | grep 192
inet 192.168.200.61/24 brd 192.168.200.255 scope global noprefixroute ens33
inet 192.168.200.201/32 scope global ens33
- 备用配置
[root@httpd-62 keepalived]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance web-group {
state BACKUP # 角色
interface ens33 # 网卡名
virtual_router_id 51
priority 100 # 优先级
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.201
}
}
- 优先级高的获取了vip地址
4、测试一下(vip地址漂移)
停下master的keepalived服务
bakcup就会获取到vip地址
[root@httpd-61 keepalived]# systemctl stop keepalived.service
[root@httpd-62 keepalived]# ip a | grep 192
inet 192.168.200.62/24 brd 192.168.200.255 scope global noprefixroute ens33
inet 192.168.200.201/32 scope global ens33
开启原master的keepalived服务,发现vip又获取到了
通过优先级来获取到的vip地址
[root@httpd-61 keepalived]# systemctl start keepalived.service
[root@httpd-61 keepalived]# ip a |grep 192
inet 192.168.200.61/24 brd 192.168.200.255 scope global noprefixroute ens33
inet 192.168.200.201/32 scope global ens33
5、发现访问不了vip地址,解决措施(要先做这个)
- 在新版本的中,要添加2个参数
#vrrp_strict # 默认禁止不能接收arp请求,所以访问不了vip地址,作用,接收arp协议
vrrp_iptables # master机器故障后,vip地址会释放,能够迁移到备用机器上 作用,允许vip漂移
# 就能访问vip地址
[root@httpd-61 keepalived]# ping 192.168.200.201
PING 192.168.200.201 (192.168.200.201) 56(84) bytes of data.
64 bytes from 192.168.200.201: icmp_seq=1 ttl=64 time=0.029 ms
64 bytes from 192.168.200.201: icmp_seq=2 ttl=64 time=0.058 ms
6、访问网站服务
- 在生成环境中,网页内容是一样的,这样才能保持高可用
[root@httpd-61 /]# curl 192.168.200.201
192.168.200.61
# 停止keepalived服务
[root@httpd-61 /]# systemctl stop keepalived.service
[root@httpd-61 /]# curl 192.168.200.201
192.168.200.62
[root@httpd-61 /]# systemctl start keepalived.service
# 重新启动后,vip地址获取到了
[root@httpd-61 /]# curl 192.168.200.201
192.168.200.61
7、认证流程和整个过程
正常运行的状态
master机器持有vip,并定义发送心跳包
backup机器,监听master机器心跳包,不持有vip
心跳包检查
心跳包发送,master定期发送心跳包,包含认证类型和密码
心跳包接收,验证其中的认证信息是否与自己的配置一样
认证的过程
Backup机器在一定时间内未收到心跳包,认为Master机器不可用
认证信息验证,backup在尝试接管vip之前,Backup机器验证自己的认证信息,确认一致
认证都通接管vip,切换为master
整个过程
首先master发送自己的心跳包给backup,然后检测认证信息是否正确
当master故障了,backup在一定时间内没有收到心跳包,就会自己校验自己的认证信息是否正确,从而获取到了vip地址,成为了master,然后发送心跳包给其他backup
当之前的master恢复后,如果优先级大于backup的话,会重新获取到vip地址,成为master,之前的master会切换为backup
发送给其他的backup
VRRP的工作过程是这样的:
虚拟路由器中的路由器根据优先级选举出Master,Master路由器通过发送免费ARP报文,将自己的虚拟MAC地址通告给与它连接的设备。
Master路由器周期性发送VRRP报文,以公布自己的配置信息(优先级等)和工作状态
如果Master故障,虚拟路由器中的Backup路由器将根据优先级重新选举新的Master
虚拟路由器状态切换时,Master路由器由一台设备切换会另外一台设备,新的Master路由器只是简单的发送一个携带虚拟MAC地址和虚拟IP的免费ARP报文,这样就可以更新其他设备中缓存的ARP信息
Backup路由器的优先级高于Master时,由Backup的工作方式(抢占式或者非抢占式)决定是否重新选举Master。
8、为什么访问vip地址会显示网页了
# vip地址一般是公网ip地址
# 访问vip地址到达了master机器上面后
# httpd就要处理这个请求了,因为httpd监听80或者443端口
# 但是httpd不知道这个请求是通过vip地址到达的master上面的
# vip地址绑定在master网络接口上面在
# master机器的ip用于内部通信
四、keepalived理论知识
1、核心组件
watchdog 用于进程监控
checkers 对rs进行监看检查
vrrp vip消息通告,通过这个协议处理负载均衡集群的故障切换

五、问题
- master上面的keepalived服务是开启的,但是网站服务停止了,backup上面都是正常的运行的,那么vip是否会漂移呢?
# 不会进行漂移,keepalvied服务不会检查对方的80端口是否存活的,只有keepalived服务停止了,心跳检查,vip地址才会漂移
# 那么解决方法就是
# keepalived健康检查,监测本机的网站服务是否正常,或者其他的服务
# 监测到本机的网址服务停掉了,那么就把master上面的keepalvied停掉,vip地址就会转换了

keepalived搭建HA集群的更多相关文章
- Hadoop集群搭建:用三台云服务器搭建HA集群(过程记录和分享)
该文主要记录了自己用云服务器搭建集群的过程,也分享一些自己遇到的问题和解决方法.里面可能提及一些自己的理解,可能不够准确,希望大家能够指正我,谢谢. 1.什么是HA集群 HA :High Availa ...
- Canalv1.1.4版本搭建HA集群
前提 Canal上一个正式版是于2019-9-2发布的v1.1.4,笔者几个月前把这个版本的Canal推上了生产环境,部署了HA集群.过程中虽然遇到不少的坑,但是在不出问题的前提下,Canal的作用还 ...
- hadoop搭建HA集群之后不能自动切换namenode
在搭好HA集群之后,想测试一下集群的高可用性,于是先把active的namenode给停掉: hadoop-daemon.sh stop namenode 或者直接kill掉该节点namenode的对 ...
- 架构之高可用性(HA)集群(Keepalived)
Keepalived简介 Keepalived是Linux下一个轻量级别的高可用解决方案.高可用(High Avalilability,HA),其实两种不同的含义:广义来讲,是指整个系统的高可用行,狭 ...
- ZooKeeper学习之路 (九)利用ZooKeeper搭建Hadoop的HA集群
Hadoop HA 原理概述 为什么会有 hadoop HA 机制呢? HA:High Available,高可用 在Hadoop 2.0之前,在HDFS 集群中NameNode 存在单点故障 (SP ...
- hadoop namenode HA集群搭建
hadoop集群搭建(namenode是单点的) http://www.cnblogs.com/kisf/p/7456290.html HA集群需要zk, zk搭建:http://www.cnblo ...
- Hadoop HA集群的搭建
HA 集群搭建的难度主要在于配置文件的编写, 心细,心细,心细! ha模式下,secondary namenode节点不存在... 集群部署节点角色的规划(7节点)------------------ ...
- hadoop ha集群搭建
集群配置: jdk1.8.0_161 hadoop-2.6.1 zookeeper-3.4.8 linux系统环境:Centos6.5 3台主机:master.slave01.slave02 Hado ...
- rabbitmq+haproxy+keepalived高可用集群环境搭建
1.先安装centos扩展源: # yum -y install epel-release 2.安装erlang运行环境以及rabbitmq # yum install erlang ... # yu ...
- hadoop2.8 ha 集群搭建
简介: 最近在看hadoop的一些知识,下面搭建一个ha (高可用)的hadoop完整分布式集群: hadoop的单机,伪分布式,分布式安装 hadoop2.8 集群 1 (伪分布式搭建 hadoop ...
随机推荐
- 【ROS】3.1 Turtlebot3汉堡Burger建SLAM地图并导航
原视频 SLAM地图构建和导航 准备 本实验新用的功能包: 注意ros版本. sudo apt-get install ros-noetic-map-server # 用到map_server中的ma ...
- 信息资源管理综合题之“公钥密码体系中同一个用户拥有的密钥特点 和 如何使用密钥加解密才能保证传输数据的机密性 和 如何身份认证 和 CA的作用”
一.公钥密码体制在认证技术中是广泛使用的.结合加密和认证技术知识回答以下问题: 1.公钥密码体系中同一个用户拥有的密钥的特点是什么? 2.假设A.B是公钥密码体系的用户,A向B发送数据,A.B之间如何 ...
- 创建mysql容器
docker run -d --name node2 -e "container=docker" --privileged=true new/centos_sshd /usr/ ...
- SQL 日常练习 (十四)
最近的项目都比较忙, 没太有时间来做练习, 不过 sql 这块, 还是始终要保持良好的手感, 我已经渐渐感觉到, 随着写得越来越多, 当然不只是在这里, 更多是在工作中, 不过涉及信息安全不能共享. ...
- JavaScript环境搭建与调试
JavaScript的环境搭建非常简单,一个Chrome浏览器(实际上任何浏览器都自带有JavaScript解释器,Chrome对调试更友好,下载链接:http://www.51xiazai.cn/s ...
- Comparator.reverseOrder() 和 reversed()的区别
摘要:Comparator.reverseOrder() 和 reversed()的区别是前者以某字段进行倒序排列,而reversed是针对已排序数据进行处理,常常用于比较器的末尾. 在使用Str ...
- 一文搞懂K8s中的RBAC认证授权
概述 官方文档: https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/authorization/ https://kubern ...
- SpringBoot集成openGauss
1.pom依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId& ...
- Web前端入门第 66 问:JavaScript 作用域应用场景(闭包)
什么是作用域? 就像孙悟空给唐僧画个圈圈一样,这个圈圈就可以称之为作用域,这个比喻可能不太形象. 作用域和孙悟空的圈圈还是有点区别,作用域内部可以获得作用域外部的变量,而内部的变量无法逃逸到作用域外面 ...
- 未能加载文件或程序集“System.Runtime.WindowsRuntime, Version=4.0.14.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”或它的某一个依赖项。不应出于执行的目的加载引用程序集。只能在仅限反射的加载程序上下文中加载引用程序集。 (异常来自 HRESULT:0x80131058)
VS项目编译时报错: 未能加载文件或程序集"System.Runtime.WindowsRuntime, Version=4.0.14.0, Culture=neutral, PublicK ...