一、集群服务简述

  • 有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集群的更多相关文章

  1. Hadoop集群搭建:用三台云服务器搭建HA集群(过程记录和分享)

    该文主要记录了自己用云服务器搭建集群的过程,也分享一些自己遇到的问题和解决方法.里面可能提及一些自己的理解,可能不够准确,希望大家能够指正我,谢谢. 1.什么是HA集群 HA :High Availa ...

  2. Canalv1.1.4版本搭建HA集群

    前提 Canal上一个正式版是于2019-9-2发布的v1.1.4,笔者几个月前把这个版本的Canal推上了生产环境,部署了HA集群.过程中虽然遇到不少的坑,但是在不出问题的前提下,Canal的作用还 ...

  3. hadoop搭建HA集群之后不能自动切换namenode

    在搭好HA集群之后,想测试一下集群的高可用性,于是先把active的namenode给停掉: hadoop-daemon.sh stop namenode 或者直接kill掉该节点namenode的对 ...

  4. 架构之高可用性(HA)集群(Keepalived)

    Keepalived简介 Keepalived是Linux下一个轻量级别的高可用解决方案.高可用(High Avalilability,HA),其实两种不同的含义:广义来讲,是指整个系统的高可用行,狭 ...

  5. ZooKeeper学习之路 (九)利用ZooKeeper搭建Hadoop的HA集群

    Hadoop HA 原理概述 为什么会有 hadoop HA 机制呢? HA:High Available,高可用 在Hadoop 2.0之前,在HDFS 集群中NameNode 存在单点故障 (SP ...

  6. hadoop namenode HA集群搭建

    hadoop集群搭建(namenode是单点的)  http://www.cnblogs.com/kisf/p/7456290.html HA集群需要zk, zk搭建:http://www.cnblo ...

  7. Hadoop HA集群的搭建

    HA 集群搭建的难度主要在于配置文件的编写, 心细,心细,心细! ha模式下,secondary namenode节点不存在... 集群部署节点角色的规划(7节点)------------------ ...

  8. hadoop ha集群搭建

    集群配置: jdk1.8.0_161 hadoop-2.6.1 zookeeper-3.4.8 linux系统环境:Centos6.5 3台主机:master.slave01.slave02 Hado ...

  9. rabbitmq+haproxy+keepalived高可用集群环境搭建

    1.先安装centos扩展源: # yum -y install epel-release 2.安装erlang运行环境以及rabbitmq # yum install erlang ... # yu ...

  10. hadoop2.8 ha 集群搭建

    简介: 最近在看hadoop的一些知识,下面搭建一个ha (高可用)的hadoop完整分布式集群: hadoop的单机,伪分布式,分布式安装 hadoop2.8 集群 1 (伪分布式搭建 hadoop ...

随机推荐

  1. 【ROS】3.1 Turtlebot3汉堡Burger建SLAM地图并导航

    原视频 SLAM地图构建和导航 准备 本实验新用的功能包: 注意ros版本. sudo apt-get install ros-noetic-map-server # 用到map_server中的ma ...

  2. 信息资源管理综合题之“公钥密码体系中同一个用户拥有的密钥特点 和 如何使用密钥加解密才能保证传输数据的机密性 和 如何身份认证 和 CA的作用”

    一.公钥密码体制在认证技术中是广泛使用的.结合加密和认证技术知识回答以下问题: 1.公钥密码体系中同一个用户拥有的密钥的特点是什么? 2.假设A.B是公钥密码体系的用户,A向B发送数据,A.B之间如何 ...

  3. 创建mysql容器

    docker run -d  --name node2  -e "container=docker" --privileged=true new/centos_sshd /usr/ ...

  4. SQL 日常练习 (十四)

    最近的项目都比较忙, 没太有时间来做练习, 不过 sql 这块, 还是始终要保持良好的手感, 我已经渐渐感觉到, 随着写得越来越多, 当然不只是在这里, 更多是在工作中, 不过涉及信息安全不能共享. ...

  5. JavaScript环境搭建与调试

    JavaScript的环境搭建非常简单,一个Chrome浏览器(实际上任何浏览器都自带有JavaScript解释器,Chrome对调试更友好,下载链接:http://www.51xiazai.cn/s ...

  6. Comparator.reverseOrder() 和 reversed()的区别

    摘要:Comparator.reverseOrder() 和 reversed()的区别是前者以某字段进行倒序排列,而reversed是针对已排序数据进行处理,常常用于比较器的末尾.   在使用Str ...

  7. 一文搞懂K8s中的RBAC认证授权

    概述 官方文档: https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/authorization/ https://kubern ...

  8. SpringBoot集成openGauss

    1.pom依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId& ...

  9. Web前端入门第 66 问:JavaScript 作用域应用场景(闭包)

    什么是作用域? 就像孙悟空给唐僧画个圈圈一样,这个圈圈就可以称之为作用域,这个比喻可能不太形象. 作用域和孙悟空的圈圈还是有点区别,作用域内部可以获得作用域外部的变量,而内部的变量无法逃逸到作用域外面 ...

  10. 未能加载文件或程序集“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 ...