技术分享 | 使用 RPM 部署 Oceanbase Proxy

来源:这里教程网 时间:2026-03-01 17:01:10 作者:
作者:贲绍华

爱可生研发中心工程师,负责项目的需求与维护工作。其他身份:柯基铲屎官。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


一、引言:

关于 OBproxy 的功能与介绍就不再详细说明了,从 3.1.3 开始,OB 提供了 config server 的源码作为 tool 在开源仓库内。
令社区版也能使用一些 OCP 上才有的功能。这样就能方便的通过 OBserver 的自动更新 configURL 来实现 root service 的动态刷新了(之前需要重启 proxy 进程才能刷新 root service list 配置,且不支持代理多集群)。

二、前期准备

golang 1.17 或以上版本(用于编译运行 Config server)
部署一套 OB 数据库集群(本文使用版本为:oceanbase-ce 3.1.4)
oceanbase-obproxy-ce-3.2.3.5-2.el7.x86_64.rpm

三、部署 Config server

3.1 下载 Oceanbase 源码

git clone https://github.com/oceanbase/oceanbase.git
进入 oceanbase/tools/ob-configserver 目录,这里就是我们需要的东西。

3.2 编辑 ./etc/config.yaml 配置文件

需要修改的部分有 server 配置、VIP配置、数据源配置:
server.address: web 服务运行后绑定的 IP 与端口
vip.address: VIP 地址,注:如果为单节点,此处应填写 OBproxy 与 OBserver 可以访问到的IP地址(127的话如果不在同一台主机是不行的)
storage.connection_url: 这里使用 mysql 作为数据源进行存储,数据表会自动进行创建,但库如果不存在会导致启动失败
## server config
server:
  address: "0.0.0.0:8080"
  run_dir: run
## vip config, configserver will generate url with vip address and port and return it to the client
## if you don't hava a vip, use the server address and port is ok, but do not use some random value that can't be connected
vip:
  address: "127.0.0.1"
  port: 8080
  
## storage config
storage:
  ## database type, support sqlite3 or mysql
  database_type: mysql
  # database_type: sqlite3
  ## database connection config, should match database_type above
  connection_url: "user:password@tcp(127.0.0.1:3306)/oceanbase?parseTime=true"
  # connection_url: "/tmp/data.db?cache=shared&_fk=1"
  # connection_url: "file:ent?mode=memory&cache=shared&_fk=1"

3.3 编译二进制文件:

# 默认的build方法编译的是debug版本,如果需要release版本请使用:make build-release
root@ubuntu: make build
Build with debug flags
GO111MODULE=on GOPROXY=https://mirrors.aliyun.com/goproxy/,direct go build -p 2 -race -ldflags '-X "github.com/oceanbase/configserver/config.Version=1.0" -X "github.com/oceanbase/configserver/config.BuildTimestamp=2022-12-21 06:07:53" -X "github.com/oceanbase/configserver/config.GitBranch=master" -X "github.com/oceanbase/configserver/config.GitHash=873c59f5fe834d87fc0252f4522281f3e4e6ceea" -X "github.com/oceanbase/configserver/config.Mode=debug" -X "github.com/oceanbase/configserver/config.CurProcess=ob-configserver"' -o bin/ob-configserver cmd/main.go

3.4 启动 config server

root@ubuntu: nohup ./bin/ob-configserver -c ./etc/config.yaml &
启动后检查 log 日志或数据库 ob_clusters 表是否已完成初始化,如果有相关信息则表示服务启动成功了

四、为 OB server 集群注册 Config server

4.1 登录 OB server ,初始化 proxyro 账号

$ obclient -h172.20.134.2 -uroot@sys -P2881 -p -c -A oceanbase
Enter password: 
# 单引号内为账号密码,请自行修改
obclient> CREATE USER proxyro IDENTIFIED BY '123456';
Query OK, 0 rows affected
obclient> GRANT SELECT ON *.* TO proxyro;5
Query OK, 0 rows affected
obclient> SHOW GRANTS FOR proxyro;
+----------------------------------+
| Grants for proxyro@%             |
+----------------------------------+
| GRANT SELECT ON *.* TO 'proxyro' |
+----------------------------------+
1 row in set (0.067 sec)

4.2 配置 ConfigURL

# 集群名需要调整为OB server的集群名称
obclient [oceanbase]> ALTER SYSTEM SET obconfig_url = 'http://192.168.2.42:8088/services?Action=ObRootServiceInfo&ObCluster=obcluster';
Query OK, 0 rows affected (0.078 sec)

4.3 刷新 config server 配置

使用手动 POST API 接口的形式注册比较麻烦,在 OB server 侧,会主动更新 config server 内的配置信息,触发方式如下,当配置了 config URL 之后:

1. 默认情况下每10分钟会进行一次上报
2. 当 root service list 发生变更时会触发上报(新增、删除、切换 leader 等)
# 注:双引号内调整为当前角色为follower的root service进行切换(如果使用leader执行如下语句并不会触发更新上报)
obclient [oceanbase]> ALTER SYSTEM SWITCH ROOTSERVICE LEADER server '172.20.134.2:2882';
Query OK, 0 rows affected (0.004 sec)

4.4 检查是否上报成功

进入 MySQL 内检查集群数据是否已写入 ob_clusters 表,如果是则表示注册完成

五、部署 OBproxy

5.1 创建 admin 用户与用户组(在非 admin 用户下运行进程可能会出现一些意料之外的问题)

# 创建admin用户组
sh-4.2# groupadd --force admin
# 检查admin用户是否存在
sh-4.2# id admin
id: admin: no such user
# 如果不存在,则创建并加入admin用户组
sh-4.2# useradd -M -g admin admin
sh-4.2# id admin
uid=5701(admin) gid=5701(admin) groups=5701(admin)

5.2 安装 RPM 包

sh-4.2# rpm -ivh --force oceanbase-obproxy-ce-3.2.3.5-2.el7.x86_64.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:obproxy-ce-3.2.3.5-2.el7         ################################# [100%] 下载完成后执行

5.3 启动 proxy 进程

必须要指定的参数如下:

obproxy_config_server_url (configURL 参数,缺少的话会导致无法连接 OBserver)

observer_sys_password(OBserver 内的 proxyro 账号的密码,用于 proxy 与 OBserver 之间通信使用,启动时缺少的话可以进入 proxy 内重新修改,但不指定的话会连接时提示密码错误)
bash-4.2$ cd admin/obproxy-3.2.3.5/
bash-4.2$ su admin
bash-4.2$ ./bin/obproxy -p 2883 -n mycluster -o "prometheus_sync_interval=1s,obproxy_config_server_url=http://172.20.134.1:8088/services?Action=GetObProxyConfig&ObproxyClusterName=mycluster,prometheus_listen_port=2884,enable_metadb_used=false,skip_proxy_sys_private_check=true,log_dir_size_threshold=10G,proxy_mem_limited=2G,enable_proxy_scramble=true,enable_strict_kernel_release=false,obproxy_sys_password=7c4a8d09ca3762af61e59520943dc26494f8941b,observer_sys_password=7c4a8d09ca3762af61e59520943dc26494f8941b"
./bin/obproxy -p 2883 -n mycluster -c obcluster -o prometheus_sync_interval=1s,obproxy_config_server_url=http://172.20.134.1:8088/services?Action=GetObProxyConfig&ObproxyClusterName=mycluster,prometheus_listen_port=2884,enable_metadb_used=false,skip_proxy_sys_private_check=true,log_dir_size_threshold=10G,proxy_mem_limited=2G,enable_proxy_scramble=true,enable_strict_kernel_release=false,obproxy_sys_password=7c4a8d09ca3762af61e59520943dc26494f8941b,observer_sys_password=7c4a8d09ca3762af61e59520943dc26494f8941b
listen port: 2883
appname: mycluster
cluster_name: obcluster
optstr: prometheus_sync_interval=1s,obproxy_config_server_url=http://172.20.134.1:8088/services?Action=GetObProxyConfig&ObproxyClusterName=mycluster,prometheus_listen_port=2884,enable_metadb_used=false,skip_proxy_sys_private_check=true,log_dir_size_threshold=10G,proxy_mem_limited=2G,enable_proxy_scramble=true,enable_strict_kernel_release=false,obproxy_sys_password=7c4a8d09ca3762af61e59520943dc26494f8941b,observer_sys_password=7c4a8d09ca3762af61e59520943dc26494f8941b

5.4 检查参数是否正确

observer_sys_password 密码是 sha1 后的值,而不是原始值。例如:proxyro 用户设置的密码是 123456 ,则需要设置 observer_sys_password 的值是 7c4a8d09ca3762af61e59520943dc26494f8941b

# config URL是否已设置
bash-4.2$ strings ./etc/obproxy_config.bin |grep "obproxy_config_server_url"
obproxy_config_server_url=http://172.20.134.1:8088/services?Action=GetObProxyConfig&ObproxyClusterName=mycluster
# proxyro用户密码是否已设置
bash-4.2$ strings ./etc/obproxy_config.bin |grep "observer_sys_password"
observer_sys_password1=
observer_sys_password=7c4a8d09ca3762af61e59520943dc26494f8941b

六、连接测试

bash-4.2$ obclient -h172.20.134.3 -P2883 -uroot@sys#obcluster -p -c -A oceanbase
Enter password:
Welcome to the OceanBase.  Commands end with ; or \g.
Your OceanBase connection id is 1
Server version: 5.6.25 OceanBase 3.1.4 (r10000092022071511-b4bfa011ceaef428782dcb65ae89190c40b78c2f) (Built Jul 15 2022 11:45:14)
Copyright (c) 2000, 2022, OceanBase and/or its affiliates. All rights reserved.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
obclient [oceanbase]> SELECT SYSDATE();
+---------------------+
| SYSDATE()           |
+---------------------+
| 2022-12-28 14:31:04 |
+---------------------+
1 row in set (0.003 sec)
obclient [oceanbase]> exit
Bye

七、其他

7.1 连接时提示密码错误

检查 proxy 配置参数中 observer_sys_password 的值是否正确
检查 OBserver 内是否存在 proxyro 账号,存在的话账号的密码是否正确,权限是否正确

7.2 连接时提示找不到集群,日志显示:curl easy perform failed

3.2.3.5 版本 proxy 的 obproxy_config_server_url 参数内不能使用单引号,否则会出现该错误。

本文关键字:#OBproxy部署# #OB config server#

相关推荐