Skip to content

OceanBase OBProxy部署

OBProxy部署准备

OBProxy是OceanBase集群的重要组件,负责客户端请求的路由和负载均衡。在部署OBProxy之前,需要做好充分的准备工作,包括硬件、软件和网络配置。

硬件要求

OBProxy的硬件要求取决于集群规模和业务负载,以下是推荐配置:

  • CPU: 推荐4核及以上,用于处理客户端请求和路由计算
  • 内存: 推荐8GB及以上,用于缓存连接和路由信息
  • 磁盘: 推荐50GB及以上SSD,用于存储日志和配置文件
  • 网络: 10Gbps及以上网络带宽,确保客户端请求能够快速传输

软件要求

  • 操作系统: 支持CentOS 7.2+、RedHat 7.2+或Ubuntu 16.04+等主流Linux发行版
  • OceanBase版本: 确保OBProxy版本与目标OceanBase集群版本兼容(详见文档末尾的版本兼容性表)
  • 依赖包: 需要安装libaio-devel、libreadline-devel和openssl-devel等依赖

网络配置

  • 端口规划:
    • OBProxy监听端口: 2883(默认),用于接收客户端请求
    • 管理端口: 2884(默认),用于Prometheus监控和管理
    • 与OceanBase节点通信端口: 2881-2882,用于与OceanBase节点交互
  • 防火墙设置: 确保上述端口在防火墙中已开放,允许客户端和OceanBase节点访问
  • DNS配置: 推荐为OBProxy节点配置固定IP和DNS解析,便于客户端访问和管理

OBProxy部署方式

OBProxy支持多种部署方式,包括使用OBD工具部署、手动部署和容器部署。其中,使用OBD部署是推荐的方式,因为它可以简化部署流程,自动处理依赖和配置。

1. 使用OBD部署(推荐)

OBD(OceanBase Deployer)是OceanBase官方提供的部署和管理工具,可以快速部署和管理OBProxy。

准备OBD配置文件

创建OBD配置文件obproxy.yaml,定义OBProxy的部署参数:

yaml
# OBProxy部署配置
obproxy:
  # 部署OBProxy的服务器列表
  servers:
    - 192.168.1.10
  # 全局配置参数
  global:
    # OBProxy安装目录
    home_path: /home/admin/obproxy
    # OceanBase RootServer列表
    oceanbase_root_server_list: 192.168.1.20:2882
    # OceanBase集群名称
    oceanbase_cluster_name: obcluster
    # OBProxy监听端口
    listen_port: 2883
    # Prometheus监控端口
    prometheus_listen_port: 2884
    # 禁用严格的内核版本检查
    enable_strict_kernel_release: 0
    # RootServer列表
    rs_list: 192.168.1.20:2882
    # 禁用集群自动切换
    enable_cluster_checkout: 0

执行部署命令

使用OBD工具执行部署、启动和状态查看命令:

bash
# 使用OBD部署OBProxy集群,集群名称为obproxy-test
obd cluster deploy obproxy-test -c obproxy.yaml

# 启动已部署的OBProxy集群
obd cluster start obproxy-test

# 查看OBProxy集群的部署状态
obd cluster display obproxy-test

2. 手动部署

手动部署适合对OBProxy有深入了解的用户,可以更灵活地控制部署过程和配置。

下载安装包

从OceanBase官方镜像站下载对应版本的OBProxy安装包:

bash
# 从OceanBase官网下载对应版本的OBProxy安装包
wget https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/obproxy-4.0.0-1.el7.x86_64.rpm

安装OBProxy

首先安装依赖包,然后安装OBProxy:

bash
# 安装OBProxy依赖包
yum install -y libaio-devel libreadline-devel openssl-devel

# 使用rpm命令安装OBProxy
rpm -ivh obproxy-4.0.0-1.el7.x86_64.rpm

配置OBProxy

创建OBProxy运行用户,并初始化OBProxy配置:

bash
# 创建OBProxy运行用户admin
useradd -m -s /bin/bash admin

# 切换到admin用户
su - admin
# 进入OBProxy安装目录
cd /home/admin/obproxy

# 初始化OBProxy配置
# obproxy_config_server_url: OceanBase配置服务器地址
# obproxy_cluster_name: OceanBase集群名称
# enable_strict_kernel_release: 禁用严格的内核版本检查
bin/obproxy -o "obproxy_config_server_url=192.168.1.20:2881;obproxy_cluster_name=obcluster;enable_strict_kernel_release=0"

启动OBProxy

使用配置的参数启动OBProxy进程:

bash
# 后台启动OBProxy
# -r: RootServer地址
# -p: 监听端口
# -o: 其他配置参数
# &: 后台运行
bin/obproxy -r "192.168.1.20:2882" -p 2883 -o "enable_strict_kernel_release=0" &

# 查看OBProxy进程是否正常启动
ps aux | grep obproxy

3. 容器部署

容器部署适合在容器化环境中快速部署OBProxy,具有部署速度快、环境隔离等优点。

拉取OBProxy镜像

从Docker Hub拉取官方OBProxy镜像:

bash
# 拉取指定版本的OBProxy镜像
docker pull oceanbase/obproxy:4.0.0

启动OBProxy容器

创建并启动OBProxy容器,映射必要的端口:

bash
# 创建并启动OBProxy容器
# --name: 容器名称
# -p: 端口映射,将容器内端口映射到宿主机
# -d: 后台运行
# 最后的参数是传递给OBProxy的启动参数
docker run -d \
  --name obproxy \
  -p 2883:2883 \
  -p 2884:2884 \
  oceanbase/obproxy:4.0.0 \
  -r "192.168.1.20:2882" \
  -p 2883 \
  -o "enable_strict_kernel_release=0;obproxy_cluster_name=obcluster"

OBProxy配置优化

合理配置OBProxy参数可以提高其性能、可靠性和安全性。以下是一些关键配置参数和优化建议。

关键配置参数

配置项推荐值说明
enable_cluster_checkout0是否开启集群自动切换,生产环境建议关闭,手动控制切换
obproxy_client_connect_timeout5000000客户端连接超时时间(微秒),默认5秒,可根据网络情况调整
obproxy_client_read_timeout30000000客户端读超时时间(微秒),默认30秒,适合大多数业务场景
obproxy_client_write_timeout30000000客户端写超时时间(微秒),默认30秒,适合大多数业务场景
obproxy_max_connection102400最大连接数,根据服务器资源和业务需求调整
obproxy_proxy_mode1代理模式,1为普通模式,2为高可用模式
rs_list192.168.1.20:2882RootServer地址列表,多个地址用分号分隔

修改配置方法

OBProxy的配置可以通过MySQL客户端连接OBProxy进行修改,修改后立即生效。

bash
# 使用MySQL客户端连接到OBProxy
# -h: OBProxy地址
# -P: OBProxy端口
# -u: 用户名,使用root用户
# -p: 密码
# -c -A: 客户端选项
# oceanbase: 数据库名
mysql -h127.0.0.1 -P2883 -uroot -p -c -A oceanbase

# 在OBProxy命令行中修改配置参数
# ALTER PROXYCONFIG SET: 修改OBProxy配置
ALTER PROXYCONFIG SET enable_cluster_checkout = 0;

# 查看当前配置值
# SHOW PROXYCONFIG LIKE: 查看指定配置项的值
SHOW PROXYCONFIG LIKE 'enable_cluster_checkout';

OBProxy高可用部署

为了提高OBProxy的可用性,建议部署多个OBProxy节点,并配置负载均衡,实现高可用架构。

多节点部署

高可用部署的核心是部署多个OBProxy节点,并通过负载均衡将请求分发到健康的节点上。具体步骤如下:

  1. 部署多个OBProxy节点:在不同物理服务器或虚拟机上部署多个OBProxy实例,确保它们连接到同一个OceanBase集群
  2. 配置负载均衡:使用F5、Nginx等负载均衡设备或云服务商提供的负载均衡服务,将客户端请求分发到多个OBProxy节点
  3. 健康检查:配置负载均衡的健康检查机制,定期检查OBProxy节点的状态,自动剔除故障节点,确保请求只发送到健康节点

负载均衡配置示例(Nginx)

以下是使用Nginx作为负载均衡的配置示例,将请求分发到三个OBProxy节点:

nginx
# 定义上游服务器组,包含所有OBProxy节点
upstream obproxy_backend {
    # server: OBProxy节点地址和端口
    # max_fails: 最大失败次数,超过次数后标记为不可用
    # fail_timeout: 失败超时时间,超时后重新检查
    server 192.168.1.10:2883 max_fails=3 fail_timeout=30s;
    server 192.168.1.11:2883 max_fails=3 fail_timeout=30s;
    server 192.168.1.12:2883 max_fails=3 fail_timeout=30s;
}

# 定义虚拟服务器,监听2883端口
server {
    listen 2883;
    server_name obproxy.example.com;

    # 根路径配置,将请求转发到上游服务器组
    location / {
        proxy_pass http://obproxy_backend;
        proxy_http_version 1.1;
        proxy_set_header Connection "keep-alive";
        proxy_set_header Host $host;
    }
}

OBProxy部署验证

1. 连接测试

bash
# 使用MySQL客户端连接OBProxy
mysql -h192.168.1.10 -P2883 -uroot@sys -p -c -A oceanbase

# 查看OBProxy版本
SELECT version();

# 查看集群状态
SHOW CLUSTER STATUS;

2. 功能验证

bash
# 创建测试用户
CREATE USER test@'%' IDENTIFIED BY 'test123';
GRANT ALL PRIVILEGES ON *.* TO test@'%';

# 使用测试用户连接
mysql -h192.168.1.10 -P2883 -utest -ptest123 -c -A test_db

# 执行测试SQL
CREATE TABLE test_table (id INT PRIMARY KEY, name VARCHAR(50));
INSERT INTO test_table VALUES (1, 'test');
SELECT * FROM test_table;

3. 性能验证

bash
# 使用sysbench测试OBProxy性能
sysbench oltp_read_write --mysql-host=192.168.1.10 --mysql-port=2883 --mysql-user=root@sys --mysql-password=root --mysql-db=test --table_size=100000 --threads=16 --time=30 run

OBProxy部署最佳实践

1. 部署位置

  • 生产环境:推荐在独立的服务器上部署OBProxy,与OceanBase节点分离
  • 测试环境:可以与OceanBase节点部署在同一台服务器上
  • 跨机房部署:建议在每个机房部署OBProxy节点,提高访问效率和容灾能力

2. 配置管理

  • 统一配置:所有OBProxy节点使用相同的配置,确保行为一致
  • 配置备份:定期备份OBProxy配置,防止配置丢失
  • 配置版本控制:使用配置管理工具(如Ansible、Puppet)管理OBProxy配置

3. 监控与告警

  • 监控指标:关注OBProxy的连接数、请求延迟、错误率等指标
  • 告警配置:配置OBProxy进程异常、连接数过高、延迟过高等告警
  • 日志收集:收集OBProxy日志,定期分析和清理

4. 安全配置

  • 访问控制:配置防火墙,只允许特定IP访问OBProxy端口
  • 认证加密:启用OBProxy的认证和加密功能
  • 定期更新:及时更新OBProxy版本,修复安全漏洞

常见问题(FAQ)

Q1: OBProxy部署失败,提示无法连接到RootServer

A1: 请检查以下几点:

  • RootServer地址和端口是否正确
  • 网络是否连通,防火墙是否开放端口
  • RootServer进程是否正常运行
  • OBProxy与OceanBase版本是否兼容

Q2: 客户端连接OBProxy时报错"Access denied"

A2: 可能的原因:

  • 用户名或密码错误
  • 用户权限不足
  • OBProxy配置的集群名称与实际不符
  • 客户端IP不在允许访问的范围内

Q3: OBProxy进程频繁重启

A3: 请检查:

  • OBProxy配置是否正确,特别是内存设置
  • 服务器资源是否充足
  • 日志中是否有错误信息
  • 与OceanBase节点的网络连接是否稳定

Q4: 如何查看OBProxy的连接数

A4: 可以通过以下方式查看:

bash
# 查看总连接数
netstat -an | grep 2883 | wc -l

# 查看详细连接信息
mysql -h127.0.0.1 -P2883 -uroot -p -c -A oceanbase -e "SHOW PROCESSLIST;"

Q5: OBProxy支持哪些负载均衡算法

A5: OBProxy支持以下负载均衡算法:

  • 轮询(Round Robin)
  • 加权轮询(Weighted Round Robin)
  • 最小连接数(Least Connections)
  • 哈希算法(Hash)

Q6: 如何升级OBProxy

A6: 升级步骤:

  1. 备份OBProxy配置
  2. 停止当前OBProxy进程
  3. 安装新版本OBProxy
  4. 恢复配置
  5. 启动新版本OBProxy
  6. 验证功能正常

Q7: OBProxy与OCP的关系

A7: OCP(OceanBase Cloud Platform)是OceanBase的企业级管理平台,可以管理和监控OBProxy。使用OCP可以更方便地进行OBProxy的部署、配置、监控和升级。

Q8: 如何配置OBProxy的日志级别

A8: 可以通过以下命令修改OBProxy的日志级别:

bash
# 进入OBProxy命令行
mysql -h127.0.0.1 -P2883 -uroot -p -c -A oceanbase

# 修改日志级别(0-6,0为最详细)
ALTER PROXYCONFIG SET obproxy_log_level = 3;

OBProxy部署排错

1. 日志分析

OBProxy日志默认位于/home/admin/obproxy/log/obproxy.log,可以通过分析日志定位问题:

bash
# 查看最新日志
tail -f /home/admin/obproxy/log/obproxy.log

# 查找错误信息
grep -i "error" /home/admin/obproxy/log/obproxy.log

2. 常见错误及解决方法

错误信息可能原因解决方法
"failed to connect to rootservice"RootServer地址错误或网络不通检查RootServer地址和网络连接
"invalid cluster name"集群名称配置错误检查obproxy_cluster_name配置
"port already in use"端口被占用更换端口或停止占用端口的进程
"permission denied"权限不足确保以正确的用户运行OBProxy
"out of memory"内存不足增加服务器内存或调整OBProxy内存配置

3. 网络排查

bash
# 检查网络连通性
ping 192.168.1.20

# 检查端口连通性
telnet 192.168.1.20 2882

# 检查防火墙规则
iptables -L -n

OBProxy部署自动化

使用Ansible部署OBProxy

  1. 创建Ansible Playbook
yaml
---
- hosts: obproxy_servers
  become: yes
  tasks:
    - name: 安装依赖包
      yum: name={{ item }} state=present
      with_items:
        - libaio-devel
        - libreadline-devel
        - openssl-devel

    - name: 创建OBProxy用户
      user: name=admin shell=/bin/bash create_home=yes

    - name: 安装OBProxy
      yum: name=https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/obproxy-4.0.0-1.el7.x86_64.rpm state=present

    - name: 初始化OBProxy
      command: su - admin -c "cd /home/admin/obproxy && bin/obproxy -o \"obproxy_config_server_url=192.168.1.20:2881;obproxy_cluster_name=obcluster;enable_strict_kernel_release=0\""

    - name: 启动OBProxy
      command: su - admin -c "cd /home/admin/obproxy && bin/obproxy -r \"192.168.1.20:2882\" -p 2883 -o \"enable_strict_kernel_release=0\" &"
  1. 执行Playbook
bash
ansible-playbook -i inventory.ini obproxy-deploy.yml

使用OBD批量部署OBProxy

bash
# 创建多节点OBProxy配置文件
cat > obproxy-multi.yaml << EOF
obproxy:
  servers:
    - 192.168.1.10
    - 192.168.1.11
    - 192.168.1.12
  global:
    home_path: /home/admin/obproxy
    oceanbase_root_server_list: 192.168.1.20:2882
    oceanbase_cluster_name: obcluster
    listen_port: 2883
    prometheus_listen_port: 2884
    enable_strict_kernel_release: 0
EOF

# 部署多节点OBProxy
obd cluster deploy obproxy-cluster -c obproxy-multi.yaml

# 启动多节点OBProxy
obd cluster start obproxy-cluster

OBProxy版本兼容性

OBProxy版本兼容的OceanBase版本
4.0.x4.0.x, 3.2.x
3.2.x3.2.x, 3.1.x
3.1.x3.1.x, 3.0.x
3.0.x3.0.x