37了解高可用技术方案,如冗余容灾
Posted 玩机科技社
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了37了解高可用技术方案,如冗余容灾相关的知识,希望对你有一定的参考价值。
高可用性技术方案是指在系统设计和架构中采用一系列措施来确保系统在遇到各种故障和问题时仍能保持持续的可用性,避免因单点故障而导致系统宕机、数据丢失等问题。其中包括冗余和容灾技术。
- 冗余技术:
冗余技术是指通过增加系统组件的冗余来提高系统可靠性。常用的冗余技术有以下几种:
-
硬件冗余:包括热备插槽、多路磁盘阵列、双机热备等技术,可保障硬件出现故障时,系统能够继续运行。
-
软件冗余:包括数据镜像、负载均衡、集群等技术,可保障软件出现故障时,系统能够继续运行。
以下是一个简单的负载均衡的示例代码:
import http.server
import socketserver
PORT = 80
Handler = http.server.SimpleHTTPRequestHandler
# 创建一个TCPServer对象,监听端口80,可以处理HTTP请求
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("serving at port", PORT)
# 启动HTTP服务
httpd.serve_forever()
- 容灾技术:
容灾技术是指在系统发生故障时,保障业务能够在短时间内切换到备份系统上,确保业务的可用性和连续性。常用的容灾技术有以下几种:
-
备份中心:备份中心作为主站的备份站点,实时同步主站的数据,一旦主站出现故障,备份中心能够立即接管业务。
-
多机房部署:将业务部署在多个机房,可以避免单个机房发生故障导致业务中断。
以下是一个简单的数据库主从复制的示例代码
import pymysql
# 连接主数据库
master_conn = pymysql.connect(
host='master.example.com',
user='root',
password='password',
database='test',
)
# 连接备用数据库
slave_conn = pymysql.connect(
host='slave.example.com',
user='root',
password='password',
database='test',
)
# 开启主从复制
with master_conn.cursor() as cursor:
cursor.execute('SHOW MASTER STATUS')
result = cursor.fetchone()
binlog_file = result[0]
binlog_pos = result[1]
cursor.execute(f'CHANGE MASTER TO MASTER_LOG_FILE=\\'binlog_file\\', MASTER_LOG_POS=binlog_pos')
cursor.execute('START SLAVE')
# 插入数据到主数据库
with master_conn.cursor() as cursor:
cursor.execute
插入数据到主数据库
with master_conn.cursor() as cursor: cursor.execute('INSERT INTO user (id, name) VALUES (1, "Alice")') master_conn.commit()
从备用数据库读取数据
with slave_conn.cursor() as cursor: cursor.execute('SELECT * FROM user') result = cursor.fetchall() print(result)
上面的代码中,我们通过主从复制的方式将主数据库的数据实时同步到备用数据库中,以保障在主数据库故障时,备用数据库可以接管业务。
除了以上示例代码,高可用技术还涉及到很多其他的技术方案和实现细节,具体实现需要根据具体的业务场景和需求进行选择和配置。
以下是一些其他常用的高可用技术方案:
-
双机热备:通过两个完全一样的系统,其中一个系统作为主节点,另一个系统作为备节点。主节点出现故障时,备节点能够接管业务,实现系统的高可用。
-
数据库集群:将数据库数据分散到多个节点上,每个节点都具备独立的读写能力,当其中某一个节点出现故障时,其他节点可以接替其职责,保证数据的高可用性。
-
负载均衡:将请求分发到多个服务器上,均衡每个服务器的负载,当其中某一个服务器出现故障时,其他服务器可以继续接收和处理请求,确保业务的可用性。
-
分布式文件系统:将文件分散到多个服务器上进行存储,每个服务器都具备独立的读写能力。当其中某一个服务器出现故障时,其他服务器可以继续提供文件的读写服务,确保文件的可用性。
-
云服务:将业务部署在云端,通过云服务提供商的高可用技术方案,确保业务的可用性。
需要注意的是,高可用技术方案不是一成不变的,不同的业务场景和需求需要选择不同的技术方案和实现细节。同时,高可用技术方案也不是万无一失的,还需要考虑到如何监控系统状态、如何应对灾难事件等方面的问题,才能够真正保证系统的高可用性。
针对高可用技术方案的监控和灾难应对,以下是一些常用的实践方法:
-
监控系统状态:可以通过一些监控工具,如Zabbix、Nagios等,对系统的状态进行监控和预警。当系统出现异常时,及时发出警报,以便及时进行响应和处理。
-
配置备份策略:对关键数据进行定期备份,并将备份数据存放在不同的地方,以避免备份数据丢失的情况发生。同时还可以通过灾难恢复测试来验证备份策略的有效性。
-
配置灾难应对方案:在系统出现故障时,需要有相应的灾难应对方案,如在数据库出现故障时,可以切换到备用数据库;在服务器出现故障时,可以通过自动化的方式将请求切换到备用服务器。
-
进行定期演练:为了验证高可用技术方案的有效性和灾难应对方案的可行性,可以定期进行演练。通过模拟真实的灾难情况,来测试高可用技术方案和灾难应对方案是否能够有效地保障系统的稳定性和可用性。
总之,高可用技术方案是一个综合性的系统工程,需要在架构设计、实现细节、监控和灾难应对等方面进行全面的考虑和规划,才能够保障系统的高可用性。
RocketMq容灾、高可用方案
参考技术A 即Master/Slaver模式。该模式在过去使用的最多,RocketMq之前也是使用这样的主从模式来实现的。主从模式分为同步模式和异步模式,区别是在同步模式下只有主从复制完毕才会返回给客户端;而在异步模式中,主从的复制是异步的,不用等待即可返回。和M/S模式相比zookeeper模式是自动选举的主节点,不过rocketMq暂时不支持zookeeper,且基于ZooKeeper的服务也带来一个比较严重的问题:依赖加重。因为运维ZooKeeper是一件很复杂的事情。
相比zookeeper,raft自身就可以实现选举,raft通过投票的方式实现自身选举leader。去除额外依赖。目前RocketMq 4.5.0已经支持
GitHub地址: https://github.com/openmessaging/openmessaging-storage-dledger/blob/master/docs/cn/introduction_dledger.md#dledger-%E7%9A%84%E5%AE%9E%E7%8E%B0
Dledger是一个基于Raft的 Commitlog 存储 Library。DLedger 定位是一个工业级的 Java Library,可以友好地嵌入各类 Java 系统中,满足其高可用、高可靠、强一致的需求。Dledger是基于日志实现的,只拥有日志的写入和读出接口,且对顺序读出和随机读出做了优化。
DLedger 的实现大体可以分为以下两个部分: 1.选举 Leader 2.复制日志
实现方式:
一下主要介绍如何部署自动容灾切换的 RocketMQ-on-DLedger Group。
每个 RocketMQ-on-DLedger Group 至少准备三台机器(本文假设为 3)。
编写 3 个配置文件,建议参考 conf/dledger 目录下的配置文件样例。
关键配置介绍:
这里贴出 conf/dledger/broker-n0.conf 的配置举例。
目前RocketMq主要有两种选择
1.M/S
2.Dledger模式
两种的优缺点:
经过上文的分析。推荐使用Dledger
以上是关于37了解高可用技术方案,如冗余容灾的主要内容,如果未能解决你的问题,请参考以下文章