Hadoop高可用集群

news2024/11/24 8:56:29

HA高可用集群

HA介绍

什么是HA

HA: High Availability,高可用集群,指的是集群7*24小时不间断服务。

为什么需要HA

在HDFS中,有NameNode、DataNode和SecondaryNameNode角色的分布,客户端所有的操作都是要与NameNode交互的,同时整个集群的命名空间信息也都保存在NameNode节点。但是,现在的集群配置中只有一个NameNode,于是就有一个问题: 单点故障

那么,什么是单点故障呢?现在集群中只有一个NameNode,那么假如这个NameNode意外宕机、升级硬件等,导致NameNode不可用了,整个集群是不是也就不可用了?这就是单点故障的问题。

为了解决这样的问题,就需要高可用集群了。

高可用的备份方式

  • 主从模式(冷备)

    准备两台服务器, 准备相同的程序。 一台服务器对外提供服务, 称为主节点(Active节点); 另外一台服务器平时不对外提供服务, 主要负责和Active节点之间进行数据的同步, 称为备份节点(Standby节点). 当主节点出现故障, Standby节点可以自动提升为Active节点, 对外提供服务。
    ZooKeeper实现的集群高可用, 采用的就是这种模式。

  • 双主互备(热备)(了解)

    准备两台服务器, 准备相同的程序. 同时对外提供服务(此时, 这两台服务器彼此为对方的备份), 这样, 当一台节点宕机的时候, 另外一台节点还可以继续提供服务.

  • 集群多备(了解)

    基本上等同于双主互备, 区别就在于同时对外提供服务的节点数量更多, 备份数量更多

高可用的实现

我们在这里采用的是主从模式的备份方式,也就是准备两个NameNode,一个对外提供服务,称为Active节点;另外一个不对外提供服务,只是实时的同步Active节点的数据,称为Standby的节点。

为了提供快速的故障转移,Standby节点还必须具有集群中块位置的最新信息。为了实现这一点,DataNodes被配置了两个NameNodes的位置,并向两者发送块位置信息和心跳信号。也就是说,DataNode同时向两个NameNode心跳反馈。

高可用架构图

JournalNode

  • JournalNode的功能

    Hadoop2.x版本之后, Clouera提出了QJM/QuromJournal Manager, 这是一个基于Paxos算法实现的HA的实现方案

    1. 基本的原理就是使用2N+1台JN存储EditLog, 每次写入数据的时候, 有半数以上的JN返回成功的信息, 就表示本次的操作已经同步到了JN

    2. 在HA中, SecondaryNameNode这个角色已经不存在了, 保证Standby节点的元数据信息与Active节点的元数据信息一致, 需要通过若干个JN

    3. 当有任何的操作发生在Active节点上的时候, JN会记录这些操作到半数以上的节点中. Standby节点检测JN中的log日志文件发生了变化, 会读取JN中的数据到自己的内存中, 维护最新的目录树结构与元数据信息

    4. 当发生故障的时候, Active节点挂掉, 此时Standby节点在成为新的Active节点之前, 会将读取到的EditLog文件在自己的内存中进行推演, 得到最新的目录树结构. 此时再升为Active节点, 可以无缝的继续对外提供服务.

  • 防止脑裂的发生

    对于HA群集的正确操作至关重要,一次只能有一个NameNode处于Active状态。否则,名称空间状态将在两者之间迅速分散,从而有数据丢失或其他不正确结果的风险。为了确保该属性并防止所谓的“裂脑情况”,JournalNode将一次仅允许单个NameNode成为作者。在故障转移期间,变为活动状态的NameNode将仅承担写入JournalNodes的角色,这将有效地防止另一个NameNode继续处于活动状态,从而使新的Active可以安全地进行故障转移。

    • 怎么理解脑裂?
      就是Active节点处于网络震荡状态,假死状态,Standby就转为Active。等网络震荡过后,就有两个Active了,这就是脑裂。
  • JournalNode集群正常工作的条件

    • 至少3个Journalnode节点
    • 运行个数建议奇数个(3,5,7等)
    • 满足(n+1)/2个以上,才能正常服务。即能容忍(n-1)/2个故障。
  • JournalNode的缺点

    在这种模式下,即使活动节点发生故障,系统也不会自动触发从活动NameNode到备用NameNode的故障转移,必须需要人为的操作才行。要是有一个能监视Active节点的服务功能就好了。
    这个时候,我们就可以使用zookeeper集群服务,来帮助我们进行自动容灾了。

自动容灾原理

如果想进行HA的自动故障转移,那么需要为HDFS部署两个新组件:ZooKeeper quorum和ZKFailoverController进程(缩写为ZKFC)

Zookeeper quorum

Apache ZooKeeper是一项高可用性服务,用于维护少量的协调数据,将数据中的更改通知客户端并监视客户端的故障。HDFS自动故障转移的实现依赖ZooKeeper进行以下操作:

  • 故障检测
    集群中的每个NameNode计算机都在ZooKeeper中维护一个持久性会话。如果计算机崩溃,则ZooKeeper会话将终止,通知另一个NameNode应触发故障转移。

  • 活动的NameNode选举(HA的第一次启动)
    ZooKeeper提供了一种简单的机制来专门选举一个节点为活动的节点。如果当前活动的NameNode崩溃,则另一个节点可能会在ZooKeeper中采取特殊的排他锁,指示它应成为下一个活动的NameNode。

ZKFC

ZKFailoverController(ZKFC)是一个新组件,它是一个ZooKeeper客户端,它监视和管理namenode的状态。运行namenode的每台机器都会运行一个ZKFC,该ZKFC负责以下内容:

  • 运行状况监视
    ZKFC使用运行状况检查命令定期ping其本地NameNode。只要NameNode以健康状态及时响应,ZKFC就会认为该节点是健康的。如果节点崩溃,冻结或以其他方式进入不正常状态,则运行状况监视器将其标记为不正常。

  • ZooKeeper会话管理
    当本地NameNode运行状况良好时,ZKFC会在ZooKeeper中保持打开的会话。如果本地NameNode处于活动状态,则它还将持有一个特殊的“锁定” znode。该锁使用ZooKeeper对“临时”节点的支持。如果会话到期,则锁定节点将被自动删除。

  • 基于ZooKeeper的选举
    如果本地NameNode运行状况良好,并且ZKFC看到当前没有其他节点持有锁znode,则它本身将尝试获取该锁。如果成功,则它“赢得了选举”,并负责运行故障转移以使其本地NameNode处于活动状态。故障转移过程类似于上述的手动故障转移:首先,如有必要,将先前的活动节点隔离,然后将本地NameNode转换为活动状态。

自动容灾的过程描述

ZKFC(是一个进程,和NN在同一个物理节点上)有两只手,分别拽着NN和Zookeeper。(监控NameNode健康状态,并向Zookeeper注册NameNode);集群一启动,2个NN谁是Active?谁又是Standby呢?
2个ZKFC先判断自己的NN是否健康,如果健康,2个ZKFC会向zoopkeeper集群抢着创建一个节点,结果就是只有1个会最终创建成功,从而决定active地位和standby位置。如果ZKFC1抢到了节点,ZKFC2没有抢到,ZKFC2也会监控watch这个节点。如果ZKFC1的Active NN异常退出,ZKFC1最先知道,就访问ZK,ZK就会把曾经创建的节点删掉。删除节点就是一个事件,谁监控这个节点,就会调用callback回调,ZKFC2就会把自己的地位上升到active,但在此之前要先确认ZKFC1的节点是否真的挂掉?这就引入了第三只手的概念。

ZKFC2通过ssh远程连接NN1尝试对方降级,判断对方是否挂了。确认真的不健康,才会真的 上升地位之active。所以ZKFC2的步骤是:
1.创建新节点。
2.第三只手把对方降级。
3.把自己升级
那如果NN都没毛病,ZKFC挂掉了呢?Zoopkeeper有一个客户端session机制,集群启动之后,2个ZKFC除了监控自己的NN,还要和Zoopkeeper建立一个tcp长连接,并各自获取自己的session。只要一方的session失效,Zoopkeeper 就会删除该方创建的节点,同时另一方创建节点,上升地位。

HA的配置

守护进程布局

qianfeng01: NameNode、DataNode、JournalNode、QuorumPeerMain、ZKFC
qianfeng02: NameNode、DataNode、JournalNode、QuorumPeerMain、ZKFC
qianfeng03: DataNode、JournalNode、QuorumPeerMain
复制代码

现在,先停止HDFS的进程,修改如下的配置文件吧!

hdfs-site.xml

<!-- 注意: 高可用的集群,没有SecondaryNameNode的存在,因此在这个文件中之前存在的SecondaryNameNode的配置需要删除 -->
<configuration>
    <!-- 配置NameNode的逻辑名称 -->
    <!-- 注意: 后面的很多参数配置都是需要使用到这个名称的 -->
    <property>
        <name>dfs.nameservices</name>
        <value>supercluster</value>
    </property>

    <!-- 配置两个NameNode的唯一标识符 -->
    <property>
        <name>dfs.ha.namenodes.supercluster</name>
        <value>nn1,nn2</value>
    </property>

    <!-- 针对每一个NameNode,配置自己的RPC通信地址和端口 -->
    <property>
        <name>dfs.namenode.rpc-address.supercluster.nn1</name>
        <value>qianfeng01:9820</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.supercluster.nn2</name>
        <value>qianfeng02:9820</value>
    </property>

    <!-- 针对每一个NameNode,配置WebUI的地址和端口 -->
    <property>
        <name>dfs.namenode.http-address.supercluster.nn1</name>
        <value>qianfeng01:9870</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.supercluster.nn2</name>
        <value>qianfeng02:9870</value>
    </property>
    
    <!-- 定义journalnode进程的数据存储的父路径, 目录在上面已经定义好了的:journalData -->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/usr/local/hadoop-3.3.1/tmp</value>
    </property>

    <!-- 配置journalnode的服务器地址和存储目录(数目为奇数个) -->
    <!-- 服务器地址使用分号“;”作为分隔符-->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://qianfeng01:8485;qianfeng02:8485;qianfeng03:8485/journalData</value>
    </property>

    <!-- 指定客户端连接Active的namenode节点的java类型 -->
    <property>
        <name>dfs.client.failover.proxy.provider.supercluster</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>

    <!--为了保证系统的正确性,在任何时间只有一个NameNode处于Active状态,需要配置一个防护机制 -->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>
    <!--为了使该防护选项起作用,它必须能够在不提供密码的情况下SSH到目标节点。因此,还必须配置以下属性-->
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/root/.ssh/id_rsa</value>
    </property>
    <!-- 免密登陆超时时间,超过此时间未连接上,则登陆失败,此配置可选-->
    <property> 
        <name>dfs.ha.fencing.ssh.connect-timeout</name> 
        <value>30000</value> 
    </property>

    <!-- 支持自动容灾属性 -->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    
    <!-- 块的副本数量 -->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
</configuration>
复制代码

core-site.xml

<configuration>
    <!--注意:使用到的是在hdfs-site.xml中配置的逻辑名称 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://supercluster</value>
    </property>
    
    <!-- hdfs的数据保存的路径,被其他属性所依赖的一个基础路径 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop-3.3.1/tmp</value>
    </property>

    <!-- ZooKeeper服务的地址 -->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>qianfeng01:2181,qianfeng02:2181,qianfeng03:2181</value>
    </property>

</configuration>
复制代码

hadoop-env.sh

# 添加两行
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root
复制代码

分发配置文件到其他节点

[root@qianfeng01 ~]# cd $HADOOP_HOME/etc
[root@qianfeng01 hadoop]# scp -r hadoop qianfeng02:$PWD
[root@qianfeng01 hadoop]# scp -r hadoop qianfeng03:$PWD
复制代码

启动集群

现在,集群已经搭建成为了高可用的集群了。在启动集群之前,我们需要先明确一件事情: 集群现在的状态有两种:

  • 这个集群我之前使用过,NameNode已经存储有数据了(fsimage和edits已生成)
  • 这个集群是我新搭建的,我直接搭建集群的时候就搭建的高可用的集群,之前从来没有启动过

如果你是第一种情况,请跳转到 启动: 普通集群转HA

如果你是第二种情况,请跳转到 启动: 直接搭建HA

个人建议:最好是直接搭建HA这样可以避免不必要的麻烦

启动: 普通集群转HA

# 1. 启动集群的JournalNode服务。
#    注意事项: 如果之前集群还在运行,需要先将其停止!使用命令 stop-dfs.sh
[root@qianfeng01 ~]# hdfs --daemon start journalnode
[root@qianfeng02 ~]# hdfs --daemon start journalnode
[root@qianfeng03 ~]# hdfs --daemon start journalnode

# 2. 启动以前节点上的namenode进程
[root@qianfeng01 ~]# hdfs --daemon start namenode

# 3. 在新的namenode节点上拉取镜像文件
[root@qianfeng02 ~]# hdfs namenode -bootstrapStandby

# 4. 同步日志到journalnode集群上,再启动集群
#    先关namenode
[root@qianfeng01 ~]# hdfs --daemon stop namenode
# 再同步日志
[root@qianfeng01 ~]# hdfs namenode -initializeSharedEdits

# 5. 格式化zkfc
# 5.1. 前提QuorumPeerMain服务必须处于开启状态,客户端zkfc才能格式化成功
[root@qianfeng01 ~]# zkServer.sh start
[root@qianfeng02 ~]# zkServer.sh start
[root@qianfeng03 ~]# zkServer.sh start
# 5.2. 选择其中一个namenode节点进行格式化zkfc
[root@qianfeng01 ~]# hdfs zkfc -formatZK

# 6. 你就可以快乐的开启HA集群进行测试了
[root@qianfeng01 ~]# start-all.sh

# 查看NameNode的状态
[root@qianfeng01 ~]# hdfs haadmin -getServiceState nn1

# 注意: 以后开HA集群时,要先开zookeeper服务,再开HDFS。
复制代码

启动: 直接搭建HA

# 1. 启动三个节点上的journalnode服务
[root@qianfeng01 ~]# hdfs --daemon start journalnode
[root@qianfeng02 ~]# hdfs --daemon start journalnode
[root@qianfeng03 ~]# hdfs --daemon start journalnode

# 2. 格式化namenode
#    - 先删除所有节点的${hadoop.tmp.dir}/tmp/的数据(可选,这一步表示弃用fsimage.)
#    - 选择其中一个namenode进行格式化
[root@qianfeng01 ~]# hdfs namenode -format
#    - 并启动namenode进程
[root@qianfeng01 ~]# hdfs --daemon start namenode

# 3. 在另一台namenode上拉取已格式化的那台机器的镜像文件(数据的一致性)
[root@qianfeng02 ~]# hdfs namenode -bootstrapStandby

# 4. 然后关闭已经启动的namenode
[root@qianfeng01 ~]# hdfs --daemon stop namenode

# 5. 格式化zkfc
# 5.1. 前提QuorumPeerMain服务必须处于开启状态,客户端zkfc才能格式化成功
[root@qianfeng01 ~]# zkServer.sh start
[root@qianfeng02 ~]# zkServer.sh start
[root@qianfeng03 ~]# zkServer.sh start
# 5.2. 选择其中一个namenode节点进行格式化zkfc
[root@qianfeng01 ~]# hdfs zkfc -formatZK

# 6. 你就可以快乐的开启HA集群进行测试了
[root@qianfeng01 ~]# start-all.sh

# 注意:以后开HA集群时,要先开zookeeper服务,再开HDFS。
复制代码

自动容灾测试

由于CentOS7的minimal版本缺少容灾切换ActiveNameNode节点时所需要的组件,因此需要手动安装一下:

yum install -y psmisc
复制代码
  1. 首先查看当前活跃的Active节点是谁
  2. Kill掉活跃节点上的NameNode进程,模拟宕机
  3. 观察另外一个节点,是否已经变成Active的状态

API操作

对于HA集群来说,如果想要使用JavaAPI进行集群的访问,需要在Configuration中设置好每一个属性,也就是再上方配置集群时进行的各种配置。如果觉得麻烦,最简单的方法就是将core-site.xml、hdfs-site.xml拷贝到项目的Resources目录下。

也可以观看大数据相关视频:
 

千锋大数据Hadoop全新增强版-先导片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/601139.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PG数据库提示: FATAL: sorry, too many clients already

目录 场景&#xff1a; idea启动提示如下错误 翻译&#xff1a; 连接数相关查询&#xff1a; 原因分析&#xff1a; 解决方法&#xff1a; 场景&#xff1a; idea启动提示如下错误 org.postgresql.util.PSQLException: FATAL: sorry, too many clients alreadyat org.pos…

运维小白必学篇之基础篇第四集:vim文本编辑器实验

vim文本编辑器实验 1、创建a.txt文件&#xff0c;并复制到/tmp/file/目录下 2、创建1.txt文件的软链接文件11.txt 3、移动a.txt文件到/mnt目录下并改名为abc.txt 4、创建d1、d2目录&#xff0c;并在d1目录中创建文件a1、a2 5、删除d1目录和d2目录 6、查看/etc/man_db.conf文件的…

DPCNN:深度金字塔 CNN 文本分类网络

DPCNN&#xff08;Deep Pyramid CNN&#xff09;&#xff0c;是2017年腾讯AI-Lab提出的一种用于文本分类的网络&#xff0c;可以称之为"深度金字塔卷积神经网络"。 论文&#xff1a;Deep Pyramid Convolutional Neural Networks for Text Categorization 在之前的博…

运维小白必学篇之基础篇第五集:用户和组实验

用户和组实验 实验者&#xff1a;胡 阳 1、创建u1用户&#xff0c;指定UID为1050&#xff0c;并为该用户设置密码 2、创建u2用户&#xff0c;设置其不能登录操作系统 3、创建u3用户&#xff0c;指定其家目录为/mnt/u3 4、将u1用户改名为s1 5、创建用户u1&#xff0c;指定其UID…

为什么企业都需要一个ERP系统?对公司管理和业务增长都太重要了

什么是ERP系统&#xff1f; ERP&#xff08;Enterprise Resource Planning&#xff0c;企业资源计划&#xff09;系统是一种应用软件&#xff0c;它通过集成管理企业内部系统和外部合作伙伴系统的各种业务过程&#xff0c;来实现企业资源的最优化配置和利用。ERP系统涵盖了企业…

VMware vSphere 8.0 Update 1a 正式版发布 - 企业级工作负载平台

VMware vSphere 8.0 Update 1a 正式版发布 - 企业级工作负载平台 ESXi 8.0 U1 & vCenter Server 8.0 U1 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-vsphere-8-u1/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sy…

基于java SpringBoot和Vue uniapp的校园信息交流小程序

随着信息社会的网络化和计算机科学的广泛普及和迅速普及应用&#xff0c;具有综合智能的我国校园信息教育网络已成为推动中小学科学教育及其实践科学发展的信息技术手段。迅速推进了信息化改革&#xff0c;改善了高校信息交流的网络环境&#xff0c;提高了信息教育平台的管理水…

利用云服务器搭建云盘(搭建自己的在线存储可上传下载可共享)

Docker部署seafile 背景 由于学校最近有一个需求&#xff0c;搭建一个可供老师使用的在线存储&#xff0c;最后我自己就尝试这搭建。这过程中也出现了不少问题&#xff0c;下面我会说明&#xff01;&#xff01;&#xff01; 准备 需要一台云服务器&#xff08;如果你本地有…

chatgpt赋能python:Python写POC:提高网络安全攻防技能的利器

Python写POC&#xff1a;提高网络安全攻防技能的利器 随着信息化进程的发展&#xff0c;计算机网络的应用越来越广泛&#xff0c;网络安全问题也日益突出。针对网络安全问题的POC&#xff08;Proof Of Concept&#xff0c;概念验证代码&#xff09;作为一种低成本的、快速验证…

chatgpt赋能python:Python冒泡排序法详解

Python冒泡排序法详解 介绍 Python是一种高级编程语言&#xff0c;它设计简洁、易于学习&#xff0c;受到越来越多程序员的欢迎。 在Python编程中&#xff0c;排序算法是非常重要的一部分。其中&#xff0c;冒泡排序法是一种纯粹的比较排序算法&#xff0c;它是大多数排序算…

元宇宙应用领域-运动

元宇宙作为互联网的下一个阶段&#xff0c;目前已经发展成为一个多领域的“平行宇宙”&#xff0c;其中就包括体育。从体育的角度来看&#xff0c;元宇宙将是一个集运动、娱乐、社交、生活、学习于一体的“平行宇宙”&#xff0c;可以让人们在元宇宙中进行更好的运动&#xff0…

ChatGPT下的网站建设会收到哪些影响?

近日&#xff0c;微软发布了人工智能语言模型 ChatGPT&#xff0c;该模型可以理解人类的语言并生成响应式文本。与其他自然语言处理模型不同&#xff0c; ChatGPT具有出色的语言理解能力&#xff0c;并能够生成自然、流畅的文本。 ChatGPT不仅能够回答用户问题&#xff0c;还能…

有关计算机科学与技术论文

有关计算机科学与技术论文篇一 《 计算方法在计算机科学与技术专业教学改革与实践 》 摘要&#xff1a;介绍了对计算机科学与技术专业的计算方法课程教学改革进行的尝试和探索&#xff0c;结合该专业提出了计算方法课程教学改革的几个重点及策略&#xff0c;优化了教学内容、…

CUDA编程中的HANDLE_ERROR( )和book.h-2023

最近个人正在学习cuda编程&#xff0c;这个帖子作为一个经验记录。 第一呢&#xff0c;这本书里面很明显面对的是一些有编程基础的同学准备的&#xff0c;因此他很多细节都是跳过&#xff0c;这就给我们一些初学者带来了困扰。 个人读下来&#xff0c;建议这个文章可以作为参…

T5的整体介绍【代码实战】

T5的整体介绍【代码实战】 0、前言1.Header2.summary3 T5 model3.1 forward3.2 预训练任务3.2.1 multi sentence pairs 3.3 完成 tasks 0、前言 本文是对T5预训练模型的一个介绍&#xff0c;以及能够用来做任务测试&#xff0c;完整的代码稍后挂上链接。 1.Header import torc…

地震勘探基础(四)之地震干扰波

地震记录的干扰波 如下图所示&#xff0c;图上有坏道&#xff0c;面波这样的干扰波。 什么是有效波和干扰波&#xff1f; 有效波&#xff08;Signal&#xff09;&#xff1a;可用来解决所提出的地质任务的波。干扰波&#xff08;Noise&#xff09;&#xff1a;所有妨碍辨认…

于Python的分布式多主题网络爬虫的研究与设计

本文旨在研究和设计一种基于Python的分布式多主题网络爬虫&#xff0c;以实现高效、快速、准确地获取互联网上的信息资源。 一、研究背景 随着互联网的快速发展&#xff0c;信息资源的数量和种类不断增加&#xff0c;如何高效地获取和利用这些信息资源成为了一个重要的问题。…

MySQL 恢复误删数据

文章目录 1、查看是否启用 binlog 日志2、查看所有 binlog 日志3、查看正在使用的日志4、查找日志所在文件夹5、log 日志转 sql6、delete 转 insert 恢复误删 MySQL 恢复误删数据&#xff0c;针对 window 和 Linux 均适用&#xff0c;只需要找到对应的 binlog 目录文件&#xf…

【5G PHY】5G SLIV(Start and Length Indicator Value)介绍

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

玩转服务器之应用篇:从零开始构建小型高可用环境

高可用环境介绍 搭建高可用环境&#xff0c;可以消除单点故障的影响&#xff0c;使系统在出现故障时自动地切换到其它节点&#xff0c;保障系统的平稳运行&#xff0c;提高系统的可靠性和可用性&#xff0c;同时保证数据的安全性&#xff0c;高可用环境已经是现代企业应用的标…