
作者:姚嵩,外星人,舍利小王子。
爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
本文约 600 字,预计阅读需要 3 分钟。

1. 背景
升级 NLB 所在主机的 glibc,但是升级失败😏,导致 NLB 主机不可访问。进而导致使用 NLB 作为负载均衡的多节点 OCP 集群访问报错。需要安装新的 NLB 节点,并重新配置负载均衡。
OCP 架构
多节点 OCP + NLB 负载均衡
2. 操作
打开 OCP 页面,准备登录 OCP 时(还未输入账号密码)报错。
2.1 报错内容
Unhandled exception, type=CannotCreateTransactionException, message=Could not open JPA EntityManager for transaction
2.2 报错截图
截图为直接使用 OCP 节点 IP:8080
方式访问 OCP。

2.3 猜测原因
OCP 对应的后端 METADB 数据库连不上导致访问 OCP 页面报错。
2.4 确认原因
# 确认 OCP 后端 METADB 登陆是否成功:
docker exec -it ocp bash
obclient -u${OCP_METADB_USER} -p${OCP_METADB_PASSWORD} -h${OCP_METADB_HOST} -P${OCP_METADB_PORT} -Ac
后端 METADB 登录失败。
3. 解决
使用 OAT 安装 NLB(步骤略)
获取 NLB 提供的用于 OCP 访问 METADB 的
VIP
和PORT
# 登陆任意 OCP 节点,进入 OCP容器
docker exec -it ocp bash
# 查看 OCP 容器变量中记录的 METADB 的 VIP 和 PORT
env | grep -E 'OCP_METADB_HOST|OCP_METADB_PORT'
已知 METADB 节点的 IP:port
10.186.65.4:2883
10.186.65.5:2883
10.186.65.6:2883
NLB 提供的访问 METADB 的 VIP:PORT
。
10.186.65.250:3307
此时可以重新在 NLB 中注册 METADB 节点和 VIP:PORT
的映射关系。
# 登录 NLB 容器
docker exec -it nlb bash
# 在 NLB 中注册 METADB 负载规则
nlbcli rule create tcp 3307 '10.186.65.4:2883#100,10.186.65.5:2883#100,10.186.65.6:2883#100' roundrobin
已知 OCP 节点的 PORT
10.186.65.4:8080
10.186.65.5:8080
10.186.65.6:8080
NLB 提供的访问 OCP 的 VIP:PORT
。
10.186.65.250:12345
此时可以重新在 NLB 中注册 OCP 节点和 VIP:PORT
的映射关系。
# 在 NLB 中注册 OCP 负载规则
nlbcli rule create http 12345 '10.186.65.4:8080,10.186.65.5:8080,10.186.65.6:8080' chash
查看已配置的规则
# 在 NLB 容器中查看
nlbcli rule list
验证访问是否成功(成功)
总结
当多节点 OCP 使用 NLB 作为负载均衡时,若因意外导致 NLB 配置丢失(如:NLB 容器被删除),可以通过命令方式重新配置 。
本文关键字:#OceanBase #NLB #OCP


✨ Github:https://github.com/actiontech/sqle
📚 文档:https://actiontech.github.io/sqle-docs/
💻 官网:https://opensource.actionsky.com/sqle/
👥 微信群:请添加小助手加入 ActionOpenSource
🔗 商业支持:https://www.actionsky.com/sqle





