外观
OceanBase OBProxy 部署
OBProxy 简介
OBProxy 是 OceanBase 数据库的代理服务,提供负载均衡、故障转移、读写分离等功能,是 OceanBase 集群的统一访问入口。
OBProxy 部署准备
硬件要求
| 资源类型 | 最低配置 | 推荐配置 |
|---|---|---|
| CPU | 2 核 | 4 核及以上 |
| 内存 | 4 GB | 8 GB 及以上 |
| 磁盘 | 50 GB | 100 GB 及以上 |
| 网络 | 千兆网卡 | 万兆网卡 |
软件要求
| 软件名称 | 版本要求 |
|---|---|
| 操作系统 | CentOS 7.6 及以上,Ubuntu 18.04 及以上 |
| OceanBase 版本 | 与 OBProxy 版本匹配 |
| 依赖库 | libaio, libssl, libcrypto |
网络要求
| 端口类型 | 端口号 | 用途 |
|---|---|---|
| 监听端口 | 2883 | 客户端访问端口 |
| 状态端口 | 2884 | 监控和管理端口 |
| 集群通信端口 | 2881-2882 | 与 OceanBase 集群通信 |
OBProxy 安装方式
1. 二进制安装
下载 OBProxy
bash
# 下载 OBProxy 二进制包
wget https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/obproxy-4.1.0-1.el7.x86_64.rpm安装 OBProxy
bash
# 安装 OBProxy
yum install -y obproxy-4.1.0-1.el7.x86_64.rpm
# 验证安装
obproxy --version2. Docker 安装
拉取 OBProxy 镜像
bash
# 拉取 OBProxy 镜像
docker pull oceanbase/obproxy:4.1.0运行 OBProxy 容器
bash
# 运行 OBProxy 容器
docker run -d -p 2883:2883 -p 2884:2884 --name obproxy oceanbase/obproxy:4.1.03. 源码编译安装
克隆 OBProxy 源码
bash
# 克隆 OBProxy 源码
git clone https://github.com/oceanbase/obproxy.git
cd obproxy编译 OBProxy
bash
# 安装依赖
yum install -y gcc gcc-c++ make cmake libaio-devel openssl-devel
# 编译
mkdir build && cd build
cmake ..
make -j4
# 安装
make installOBProxy 配置
1. 配置文件说明
OBProxy 的配置文件位于 /etc/obproxy/obproxy.conf,主要配置项包括:
| 配置项 | 描述 | 默认值 |
|---|---|---|
| obproxy_sys_password | OBProxy 系统密码 | 无 |
| observer_sys_password | OceanBase 集群系统密码 | 无 |
| listen_port | OBProxy 监听端口 | 2883 |
| prometheus_listen_port | Prometheus 监控端口 | 2884 |
| enable_cluster_checkout | 是否启用集群自动切换 | true |
| enable_strict_kernel_release | 是否严格检查内核版本 | false |
2. 初始化配置
bash
# 初始化 OBProxy 配置
obproxy -r "sys@cluster_name:192.168.1.101:2881;192.168.1.102:2881;192.168.1.103:2881" -u "root@sys" -p "password" --rs_list "192.168.1.101:2882;192.168.1.102:2882;192.168.1.103:2882" --obproxy_sys_password "obproxy_sys_password"3. 修改配置
bash
# 编辑 OBProxy 配置文件
vi /etc/obproxy/obproxy.conf
# 重启 OBProxy 使配置生效
systemctl restart obproxyOBProxy 启动和管理
1. 启动 OBProxy
bash
# 使用 systemd 启动 OBProxy
systemctl start obproxy
# 查看 OBProxy 状态
systemctl status obproxy
# 设置 OBProxy 开机自启
systemctl enable obproxy2. 停止 OBProxy
bash
# 停止 OBProxy
systemctl stop obproxy3. 重启 OBProxy
bash
# 重启 OBProxy
systemctl restart obproxy4. 查看 OBProxy 日志
bash
# 查看 OBProxy 日志
cat /var/log/obproxy/obproxy.log
# 实时查看 OBProxy 日志
tail -f /var/log/obproxy/obproxy.logOBProxy 集群管理
1. 添加 OBProxy 节点
bash
# 安装并配置新的 OBProxy 节点
# 确保所有 OBProxy 节点使用相同的配置2. 移除 OBProxy 节点
bash
# 停止需要移除的 OBProxy 节点
systemctl stop obproxy
# 从负载均衡中移除该节点
# 更新 DNS 记录或负载均衡配置3. OBProxy 版本升级
bash
# 备份配置文件
cp /etc/obproxy/obproxy.conf /etc/obproxy/obproxy.conf.bak
# 安装新版本 OBProxy
yum install -y obproxy-4.1.1-1.el7.x86_64.rpm
# 恢复配置文件
cp /etc/obproxy/obproxy.conf.bak /etc/obproxy/obproxy.conf
# 重启 OBProxy
systemctl restart obproxyOBProxy 监控和维护
1. 查看 OBProxy 状态
bash
# 使用 obproxyadmin 查看状态
obproxyadmin sys tenant list
# 查看集群列表
obproxyadmin cluster list
# 查看节点列表
obproxyadmin server list2. Prometheus 监控
OBProxy 内置了 Prometheus 监控端点,可以通过 http://obproxy_ip:2884/metrics 访问监控指标。
配置 Prometheus
yaml
# prometheus.yml
scrape_configs:
- job_name: 'obproxy'
static_configs:
- targets: ['192.168.1.104:2884', '192.168.1.105:2884']3. OBProxy 常见问题排查
连接失败
bash
# 检查 OBProxy 是否启动
systemctl status obproxy
# 检查端口是否开放
netstat -tuln | grep 2883
# 检查防火墙设置
firewall-cmd --list-ports
# 检查 OBProxy 日志
cat /var/log/obproxy/obproxy.log性能问题
bash
# 查看 OBProxy 监控指标
curl http://obproxy_ip:2884/metrics
# 分析 OBProxy 日志
cat /var/log/obproxy/obproxy.log | grep -i error
# 检查 OceanBase 集群状态
mysql -h oceanbase_ip -P 2881 -u root -p -e "SELECT * FROM __all_server;"OBProxy 最佳实践
1. 部署架构
- 建议至少部署 2 个 OBProxy 节点,实现高可用
- 使用负载均衡(如 F5、LVS、Nginx)将流量分发到多个 OBProxy 节点
- OBProxy 节点与 OceanBase 集群节点应部署在同一机房,减少网络延迟
2. 配置优化
bash
# 优化 OBProxy 配置
cat >> /etc/obproxy/obproxy.conf << EOF
# 增加连接池大小
obproxy_connect_timeout_ms=10000
obproxy_read_timeout_ms=30000
obproxy_write_timeout_ms=60000
# 调整负载均衡策略
lb_policy=roundrobin
# 开启连接复用
enable_connection_reuse=true
max_connection_reuse_count=1000
# 开启慢查询日志
enable_slow_log=true
slow_query_time=1000
EOF
# 重启 OBProxy 使配置生效
systemctl restart obproxy3. 安全配置
bash
# 设置强密码
obproxyadmin sys password set -p new_password
# 配置防火墙规则
firewall-cmd --permanent --add-port=2883/tcp
firewall-cmd --permanent --add-port=2884/tcp
firewall-cmd --reload
# 限制访问 IP
cat >> /etc/obproxy/obproxy.conf << EOF
# 限制客户端访问 IP
allow_client_ips=192.168.1.0/24
EOF常见问题(FAQ)
Q1: OBProxy 与 OceanBase 版本如何匹配?
A1: OBProxy 版本需要与 OceanBase 集群版本匹配,建议使用相同大版本号的 OBProxy 和 OceanBase。例如,OceanBase 4.1.0 集群应使用 OBProxy 4.1.0 版本。
Q2: 如何配置 OBProxy 连接多个 OceanBase 集群?
A2: 可以在 OBProxy 的初始化配置中指定多个集群,或者使用 obproxyadmin 命令添加集群:
bash
# 添加集群
obproxyadmin cluster add -c cluster_name -s "192.168.1.101:2881;192.168.1.102:2881"Q3: OBProxy 如何实现读写分离?
A3: OBProxy 可以通过配置读写分离规则实现读写分离。可以在租户级别或 SQL 级别配置读写分离策略。
Q4: 如何查看 OBProxy 的连接数?
A4: 可以通过以下方式查看 OBProxy 的连接数:
bash
# 使用 obproxyadmin 查看连接数
obproxyadmin connection list
# 查看 Prometheus 监控指标
curl http://obproxy_ip:2884/metrics | grep obproxy_connection_countQ5: OBProxy 出现故障如何处理?
A5: 如果单个 OBProxy 节点出现故障,负载均衡会自动将流量分发到其他健康的 OBProxy 节点。需要及时排查故障原因,修复后重新加入集群。
Q6: 如何优化 OBProxy 的性能?
A6: 可以通过以下方式优化 OBProxy 性能:
- 增加 OBProxy 节点数量,实现负载均衡
- 优化 OBProxy 配置参数,如连接超时、连接池大小等
- 调整负载均衡策略,根据业务场景选择合适的策略
- 确保 OBProxy 与 OceanBase 集群之间的网络延迟较低
Q7: OBProxy 支持哪些负载均衡策略?
A7: OBProxy 支持多种负载均衡策略,包括:
- roundrobin:轮询
- weight_roundrobin:加权轮询
- least_conn:最少连接数
- random:随机
- ip_hash:IP 哈希
Q8: 如何配置 OBProxy 的慢查询日志?
A8: 可以通过修改 OBProxy 配置文件启用慢查询日志:
bash
# 启用慢查询日志
enable_slow_log=true
slow_query_time=1000Q9: OBProxy 如何处理 OceanBase 节点故障?
A9: OBProxy 会定期检查 OceanBase 节点的状态,当发现节点故障时,会自动将流量路由到其他健康节点。同时,OBProxy 会参与 OceanBase 集群的故障转移过程,确保业务连续性。
Q10: 如何迁移 OBProxy 服务?
A10: 迁移 OBProxy 服务的步骤:
- 在新节点上安装并配置 OBProxy
- 确保新节点的配置与旧节点一致
- 将新节点加入负载均衡
- 逐步减少旧节点的流量
- 确认新节点运行正常后,停止旧节点服务
