暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

801
作者:贲绍华

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

本文来源:原创投稿

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


一、引言:

关于 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#


文章推荐:

OceanBase Proxy 无法连接 OBserver 集群

技术分享 | TiUP工具 - TiDB集群滚动升级核心流程解析

技术分享 | Xtrabackup 不备份 binlog 怎么保证一致性?

关于SQLE

爱可生开源社区的 SQLE 是一款面向数据库使用者和管理者,支持多场景审核,支持标准化上线流程,原生支持 MySQL 审核且数据库类型可扩展的 SQL 审核工具。

SQLE 获取

类型地址
版本库https://github.com/actiontech/sqle
文档https://actiontech.github.io/sqle-docs-cn/
发布信息https://github.com/actiontech/sqle/releases
数据审核插件开发文档https://actiontech.github.io/sqle-docs-cn/3.modules/3.7_auditplugin/auditplugin_development.html
更多关于 SQLE 的信息和交流,请加入官方QQ交流群:637150065...

文章转载自爱可生开源社区,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论