【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)
【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手 ] 即可召唤小助手,欢迎试用!
使用 OceanBase社区版4.5.3,参考https://open.oceanbase.com/blog/2235967744#%E9%83%A8%E7%BD%B2%E5%90%AF%E5%8A%A8%20OceanBase 部署集群模式,三个zone部署在不同机器上,obproxy在部署集群的机器上面,经测试验证obproxy所在机器挂掉,会导致整个服务不可用。请问这是什么原因啊?我想要实现高可用应该怎么做配置?
2 个赞
论坛小助手
2025 年3 月 20 日 11:38
#3
日志采集场景: 集群无法连接
日志采集命令: obdiag gather scene run --scene=observer.cluster_down
另外,为了确定具体的问题,在此需要您提供一些信息:(下面提出几个问题)
当 obproxy 所在机器挂掉后,集群中的其他节点是否仍然正常运行?是否有任何错误日志或警告信息?
您的 OceanBase 集群当前的部署架构是怎样的?例如,是否使用了 OCP 或 OBD 进行管理?
您是否已经配置了多副本(如三副本)来确保高可用性?如果已配置,请提供具体的分区和副本分布情况。
您是否对 obproxy 进行了负载均衡或冗余配置?例如,是否有多台 obproxy 实例运行以避免单点故障?
您期望的高可用方案具体是什么?例如,是否需要自动切换主从或快速恢复服务的能力?
建议您使用上述 obdiag
命令采集日志并提供给我们,以便进一步分析问题的根本原因。同时,根据您的回答,我们可以为您设计更合适的高可用配置方案。
附上敏捷诊断工具 obdiag 使用帮助链接
2 个赞
其他节点不能做正常运行,没有错误日志,数据库连接超时
没有使用OCP和OBD进行管理
4. 目前只有一台obproxy实例。也可以告诉我一下怎么添加obproxy示例
5. 需要自动切换主从
2 个赞
论坛小助手
2025 年3 月 20 日 11:54
#5
根据您提供的信息和问题描述,以下是针对您的 OceanBase 集群无法实现高可用的问题分析及解决方案:
问题分析
其他节点不能正常运行,数据库连接超时
根据您提供的截图,_all_tenant
表显示了租户的 tenant_name
和 primary zone
。如果其他节点在 obproxy 所在机器挂掉后也无法正常工作,可能是以下原因之一:
网络分区问题 :obproxy 所在机器挂掉后,可能影响了集群内部的网络通信,导致其他节点无法正常提供服务。
主副本不可用 :如果主副本所在的 zone 或者 observer 节点不可用,OceanBase 数据库会进入只读模式或完全不可用状态。
没有使用 OCP 或 OBD 进行管理
OCP 和 OBD 是 OceanBase 的管理和部署工具,能够帮助您更方便地监控和维护集群健康状态。未使用这些工具可能导致您无法快速发现和解决潜在问题。
目前只有一台 obproxy 实例
单一的 obproxy 实例是单点故障的主要原因。当 obproxy 所在机器挂掉时,所有客户端请求都无法通过代理访问到 OceanBase 数据库。
需要自动切换主从
OceanBase 社区版支持多副本架构(如三副本),并通过 Paxos 协议实现高可用性。但要实现自动切换主从,需要正确配置分区和副本分布,并确保网络和硬件环境的稳定性。
解决方案
1. 增加 obproxy 实例以避免单点故障
您可以通过以下步骤添加多个 obproxy 实例:
安装 obproxy
在每台需要部署 obproxy 的机器上执行以下命令安装 obproxy:wget https://mirrors.oceanbase.com/obproxy/releases/{版本号}/obproxy-{版本号}-linux-x86_64.tar.gz
tar -xzf obproxy-{版本号}-linux-x86_64.tar.gz
cd obproxy-{版本号}-linux-x86_64
配置 obproxy
编辑 obproxy 的配置文件 config.conf
,指定 OceanBase 集群的连接信息。例如:[observer]
server=192.168.1.1:2881
user=root
password=
tenant=oceanbase
启动 obproxy
启动多个 obproxy 实例并将其注册到负载均衡器中:./bin/obproxy -c config.conf
建议 :将 obproxy 实例分布在不同的物理机器上,并通过负载均衡器(如 Nginx、HAProxy)分发流量。
2. 检查并优化分区和副本分布
确认分区和副本分布
使用以下 SQL 查询分区和副本分布情况:
SELECT partition_id, svr_ip, svr_port, role FROM __all_virtual_clog_stat;
确保每个分区的主副本和备副本分布在不同的 zone 中。
调整副本分布
如果发现某些 zone 的副本分布不均匀,可以手动调整副本分布。例如,将某个分区的主副本迁移到其他 zone:
ALTER SYSTEM MOVE UNIT UNIT_NAME TO ZONE zone_name;
3. 启用自动切换主从功能
OceanBase 社区版默认支持基于 Paxos 协议的自动切换主从功能。为了确保该功能正常工作,请检查以下配置:
4. 引入 OCP 或 OBD 进行管理
OCP
OCP 是 OceanBase 的图形化管理平台,可以帮助您更方便地监控集群状态、管理租户和配置高可用策略。您可以参考官方文档安装和配置 OCP:
OCP 安装指南
OBD
OBD 是 OceanBase 的命令行管理工具,支持集群部署、扩容和升级等操作。您可以参考以下命令接管现有集群:
obd cluster takeover {cluster_name}
总结
增加 obproxy 实例并使用负载均衡器分发流量,避免单点故障。
检查并优化分区和副本分布,确保主副本和备副本分布在不同的 zone 中。
确保集群配置满足 Paxos 协议要求,启用自动切换主从功能。
引入 OCP 或 OBD 工具进行集群管理,提升运维效率。
如果您按照上述步骤操作后仍然遇到问题,请使用 obdiag
工具采集日志并提供给我们进一步分析:
obdiag gather scene run --scene=observer.cluster_down
希望以上建议对您有所帮助!
详情请参考:
数据库应急概述
遇到问题如何向技术支持同学提问
分析诊断&决策流程
使用 obd 进行运维
OceanBase 云平台 Express (OCP Express)
连接租户
问题排查思路
(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)
1 个赞
Giant
2025 年3 月 20 日 14:26
#7
单个obproxy 可以实现observer的高可用 。
obproxy的高可用机制使用F5 ,slb 等高可用组件实现
如果通过2883端口进去数据库想实现高可用 , obproxy必须多个节点
1 个赞
高可用可以分为以下几点:
1、obproxy服务实现多个observer(集群)节点的高可用
2、负载+多个obproxy服务实现,程序到数据库的高可用
3、OCP服务上可以部署obproxy集群,添加多个obproxy服务(实例)
1 个赞
辞霜
2025 年3 月 21 日 17:31
#10
业务是通过obproxy进行连接ob的。
一般生产环境都是搭建个负载均衡+obproxy集群
1 个赞