外观
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-test2. 手动部署
手动部署适合对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 obproxy3. 容器部署
容器部署适合在容器化环境中快速部署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_checkout | 0 | 是否开启集群自动切换,生产环境建议关闭,手动控制切换 |
| obproxy_client_connect_timeout | 5000000 | 客户端连接超时时间(微秒),默认5秒,可根据网络情况调整 |
| obproxy_client_read_timeout | 30000000 | 客户端读超时时间(微秒),默认30秒,适合大多数业务场景 |
| obproxy_client_write_timeout | 30000000 | 客户端写超时时间(微秒),默认30秒,适合大多数业务场景 |
| obproxy_max_connection | 102400 | 最大连接数,根据服务器资源和业务需求调整 |
| obproxy_proxy_mode | 1 | 代理模式,1为普通模式,2为高可用模式 |
| rs_list | 192.168.1.20:2882 | RootServer地址列表,多个地址用分号分隔 |
修改配置方法
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节点,并通过负载均衡将请求分发到健康的节点上。具体步骤如下:
- 部署多个OBProxy节点:在不同物理服务器或虚拟机上部署多个OBProxy实例,确保它们连接到同一个OceanBase集群
- 配置负载均衡:使用F5、Nginx等负载均衡设备或云服务商提供的负载均衡服务,将客户端请求分发到多个OBProxy节点
- 健康检查:配置负载均衡的健康检查机制,定期检查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 runOBProxy部署最佳实践
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: 升级步骤:
- 备份OBProxy配置
- 停止当前OBProxy进程
- 安装新版本OBProxy
- 恢复配置
- 启动新版本OBProxy
- 验证功能正常
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.log2. 常见错误及解决方法
| 错误信息 | 可能原因 | 解决方法 |
|---|---|---|
| "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 -nOBProxy部署自动化
使用Ansible部署OBProxy
- 创建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\" &"- 执行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-clusterOBProxy版本兼容性
| OBProxy版本 | 兼容的OceanBase版本 |
|---|---|
| 4.0.x | 4.0.x, 3.2.x |
| 3.2.x | 3.2.x, 3.1.x |
| 3.1.x | 3.1.x, 3.0.x |
| 3.0.x | 3.0.x |
