【SOP 系列 04】手动部署 OceanBase 集群

在我们熟悉了 OBD 方式自动部署 OceanBase 集群的方式后,可能想纯手工方式部署,比如想在现有的数据库运维平台上集成 OceanBase 的部署,那么有必要掌握手动部署的方式。

常见的手动部署,由于 rpm 在打包的时候指定了 /home/admin/oceanbase ,那么我们在使用 rpm 包安装的时候默认就会安装在这个路径下。本小节我们介绍如何把 OceanBase 部署到任意路径下,比如在一台机器上手动部署一个1-1-1 的 OceanBase 集群。

1、部署规划

2、下载软件包

在可以联网的机器上下载:

yum install -y yum-utils
yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo
mkdir -p /opt/ob_rpm
yum install --downloadonly ob-deploy --downloaddir=/opt/ob_rpm
yum install --downloadonly oceanbase-ce --downloaddir=/opt/ob_rpm
yum install --downloadonly obproxy --downloaddir=/opt/ob_rpm

3、解压 OBServer rpm

cd  /opt/ob_rpm
rpm2cpio oceanbase-ce-3.1.2-10000392021123010.el7.x86_64.rpm | cpio -div
rpm2cpio oceanbase-ce-libs-3.1.2-10000392021123010.el7.x86_64.rpm | cpio -div

说明:

由于版本的变化,请以实际使用时候的版本(文件名)为准。

4、创建 OBServer 相关目录和授权

mkdir -p /home/admin/oceanbase-ce-2
cd /opt/ob_rpm/home/admin/oceanbase && cp -r * /home/admin/oceanbase-ce-2
mkdir -p /home/admin/oceanbase-ce-2/store/obtest/{sstable,clog,ilog,slog}
chown -R admin:admin /home/admin/oceanbase-ce-2

说明:

实际 OBServer 对应的 rpm 包默认安装在 /home/admin/oceanbase 中,这里手动创建的目录 /home/admin/oceanbase-ce-2,旨在模拟安装在其他用户或者路径下。

5、修改环境变量

su - admin
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/oceanbase-ce-2/lib' >> ~/.bash_profile
source ~/.bash_profile

6、启动observer进程

cd ~/oceanbase-ce-2 && bin/observer -i eth0 -p 2881 -P 2882 -z zone1 -d ~/oceanbase-ce-2/store/obtest -r '172.30.199.123:2882:2881;172.30.199.124:2882:2881;172.30.199.125:2882:2881' -c 1 -n obtest -o "memory_limit=8G,cache_wash_threshold=1G,__min_full_resource_pool_memory=268435456,system_memory=4G,memory_chunk_cache_size=128M,cpu_count=16,net_thread_count=4,datafile_size=10G,stack_size=1536K" 

说明:

注意 -z 后面的 zone 的名字,应根据规划进行保持一致。

7、集群初始化

注意登录方式,正确示例:

mysql -h172.30.199.123 -P2881 -uroot  -A -c

而不是如下,错误示例:
原因:bootstrap之前,还未创建SYS租户,所以不能指定sys租户用户登录。

mysql -h172.30.199.123 -P2881 -uroot@sys  -A -c
# 否则会提示:ERROR 8001 (08004): Server is initializing
set  ob_query_timeout=10000000000; 
alter system bootstrap 
ZONE 'zone1' SERVER '172.30.199.123:2882', 
ZONE 'zone2' SERVER '172.30.199.124:2882', 
ZONE 'zone3' SERVER '172.30.199.125:2882' ;

说明: 默认 root 用户密码为空

8、创建账号和修改密码

alter user root identified by 'Root123@@Root123';

说明:这里修改的是 sys 租户下 root 用户的密码。

默认 OBProxy 连接 OceanBase 集群时使用用户 proxyro ,该用户不存在,需要我们在 sys 租户下手动创建。

create user proxyro identified by 'Root123@@Root123';
grant select on oceanbase.* to proxyro;

说明Root123@@Root123 为测试示例中给出的密码,实际请根据需要设置合适的密码。

9、解压 OBProxy rpm

cd /opt/ob_rpm
rpm2cpio obproxy-3.2.0-1.el7.x86_64.rpm | cpio -div

10、创建 OBProxy 相关目录和授权

mkdir -p /home/admin/obproxy-3.2.0-ce-2
cd /opt/ob_rpm/home/admin/obproxy-3.2.0 && cp -r * /home/admin/obproxy-3.2.0-ce-2
chown -R admin:admin /home/admin/obproxy-3.2.0-ce-2

说明:

实际 OBProxy 对应的 rpm 包默认安装在 /home/admin/obproxy-3.2.0 这里手动创建的目录 /home/admin/obproxy-3.2.0-ce-2,旨在模拟安装在其他用户或者路径下。

11、启动 OBProxy 进程

cd ~/obproxy-3.2.0-ce-2/ && bin/obproxy -r "172.30.199.123:2881;172.30.199.124:2881;172.30.199.125:2881" -p 2883 -o "enable_strict_kernel_release=false,enable_cluster_checkout=false,enable_metadb_used=false" -c obtest

12、修改 OBProxy 密码

登录 OBProxy

mysql -h 172.30.199.126 -u root@proxysys -P 2883 -p

修改 OBProxy 管理员(root@proxysys)的密码

alter proxyconfig set obproxy_sys_password='Root123@@Root123';

修改 OBProxy 连接 OBServer 使用的 proxyro 用户的密码

需跟第 8 步的 proxyro 用户设置的密码一致。

alter proxyconfig set observer_sys_password='Root123@@Root123';

13、登录测试

连接 OBServer 登录测试

mysql -h172.30.199.123 -P2881 -uroot@sys -pRoot123@@Root123 -A -c

连接 OBProxy 登录测试

mysql -h172.30.199.126 -P2883 -uroot@sys#obtest -pRoot123@@Root123 -A -c
2 个赞

学习学习了

1 个赞

OBD 能修改默认按照目录吗?

1 个赞

按照SOP部署 ,最后一步连接OBProxy报错
ERROR 2013 (HY000): Lost connection to MySQL server at ‘reading authorization packet’, system error: 0

启动脚本 ,OBProxy日志见附件,谢谢

原因是 yum 默认下载的版本是3.2版本的obproxy 。 使用新版本4.1后就没有这个问题了

1 个赞

-u这个地方需要带上ob集群名称吧?root@proxysys#obtest

1 个赞

不需要。 root@proxysys 是 obproxy 登录的特殊用法,可以管理 obproxy 的参数。并不登录OB集群。不过这个密码平时不外漏。
平时通过 root@sys#集群名 和 obproxy ip 加2883 端口 连接的时候,也可以修改这个 obproxy的参数。
如果有ocp的话,有多个obproxy 放在一个 obproxy集群里管理时,使用ocp去集中管理obproxy的参数比较好。这样统一起来,不容易出问题。

1 个赞

我这边测试-u root@proxysys登录不了,需要加上#obtest,版本4.2.1.7

1 个赞

应该是哪里不对。你可以发一下完整的登录信息或截图看看。
除非是你自己建了一个租户叫:proxysys …

1 个赞

请问这里的密码是什么呢?

手动部署的obproxy,root@proxysys 默认密码应该是空。

为何我这边连接root@proxysys提示需要密码呢?
mysql -h10.10.10.10-u root@proxysys#obtest -P 2883 -p
Enter password:
ERROR 1045 (42000): Access denied for user ‘root@proxysys#obtest’@‘10.10.10.10’ (using password: NO)

同时使用root@sys#obtest登录obproxy会报错
mysql -h10.10.10.10 -u root@sys#obtest -P 2883 -pRoot123@@Root123
ERROR 2013 (HY000): Lost connection to MySQL server at ‘reading authorization packet’, system error: 0

但是root@sys登录observer是没有问题
mysql -h10.10.10.10 -u root@sys -P 2881 -pRoot123@@Root123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3221807364
Server version: 5.7.25 OceanBase_CE 4.2.1.7 (r107000162024060611-69b64b84b656a4cfa126dab60b4e66dc1bc156ca) (Built Jun 6 2024 11:51:48)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql> ^DBye

请问obproxy是哪里有问题吗?

把-h换成127.0.0.1,root@proxysys就可以免密码登录了 :joy:

  1. root@proxysys 不是 root@proxysys#obtest
  2. -h 后跟 127.0.0.1 。
  3. 先登录成功后,设置好了 observer_sys_password 跟 OB 集群里的 proxyro 密码保持一致后,就可以使用 root@sys#obtest 连接 OB 集群了。

是的, 连接root@proxysys,-h为具体ip也是提示要输入密码,-h后跟 127.0.0.1就无需密码了。
上面SOP是否需要提示一下?

学习一下

@木芯心 再请教一个问题:如果部署多个obproxy,多个obproxy启动之后,随便选择一个obproxy登录修改obproxy_sys_password和observer_sys_password就行了吧,不需要每一个obproxy都登录修改密码吧?

虽然有多个 obproxy,但每个都是独立运行的,彼此并没有集群关系。
所以你登录一个obproxy 修改 obproxy的参数只会在那个 obproxy 的参数文件里持久化,其他obproxy并不会同步变化

所以更建议使用 ocp部署obproxy。虽然ocp里叫 obproxy集群,也只是ocp自己管理需要命名为集群,里面的obproxy彼此并没有集群逻辑(高可用、负载均衡等都没有)。ocp里修改obproxy集群参数的时候,ocp是会修改所有obproxy 节点的参数。这个就是你期望的。

1 个赞

好的,谢谢