爱可生研发中心工程师,负责项目的需求与维护工作。其他身份:柯基铲屎官。
*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
一、引言:
二、前期准备
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
3.2 编辑 ./etc/config.yaml 配置文件
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 &
四、为 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 之后:
# 注:双引号内调整为当前角色为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 检查是否上报成功
五、部署 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集群滚动升级核心流程解析
关于SQLE
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 |

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




