1、前置条件
1.1 OBD 版本确认
OBD 版本要求不小于1.3.0,如果 OBD 版本低于1.3.0,可以执行 obd update
命令升级。
[root@172.30.199.126 ~]$obd --version
OceanBase Deploy: 1.3.0
REVISION: 8bd1db1cd8c32dd4cae6de8d062f730261db21fb
BUILD_BRANCH: publish
BUILD_TIME: Mar 30 2022 06:01:22OURCE
Copyright (C) 2021 OceanBase
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
[root@172.30.199.126 ~]$
在 OBD 1.3.0 中新增了一个 check4ocp
子命令。
[root@172.30.199.126 ~]$obd cluster check4ocp
Usage: obd cluster check4ocp <deploy name> [options]
Options:
-c COMPONENTS, --components=COMPONENTS
List the components. Multiple components are separated
with commas.
-V VERSION, --version=VERSION
OCP Version
-h, --help Show help and exit.
-v, --verbose Activate verbose output.
1.2 OBServer 上 chkconfig 命令路径确认
which chkconfig
如果返回的命令不在 /usr/local/bin:/usr/bin
路径下包含,需要设置软链接修复,否则会报错:
2022-04-06 20:39:21.817 WARN 39 --- [pool-subtask-executor-thread-8,e52d6a2c544e48ee,dfc27a46e040] c.a.ocp.core.job.runner.RunnerFactory : Execute task failed, subtask=SubtaskInstanceEntity{id=2555825, name=Pre check for create host, state=FAILED, operation=EXECUTE, className=com.alipay.ocp.service.task.business.host.PreCreateHostCheckTask, seriesId=24, startTime=2022-04-06T20:39:17.604+08:00, endTime=2022-04-06T20:39:21.817+08:00}, failedMessage=An unknown error has occurred. Cause: Cannot find command "chkconfig", you may need to include /usr/sbin or /sbin in your PATH. Error message: {1}. Contact the administrator.
...
Caused by: java.lang.RuntimeException: command failed, user: admin, args: which chkconfig, return code: 1, output: , err: , extOut: which: no chkconfig in (/usr/local/bin:/usr/bin)
修复 chkconfig
ln -s /usr/sbin/chkconfig /usr/local/bin
2、使用 OBD 检查是否满足 OCP 接管
[admin@172.30.199.126 ~]$obd cluster check4ocp test1 -c oceanbase-ce -V 3.1.1
Get local repositories and plugins ok
Load cluster param plugin ok
Open ssh connection ok
Connect to observer ok
[ERROR] The current user must be the admin user. Run the edit-config command to modify the user.username field
[ERROR] The user must have the privilege to run sudo commands without a password.
[ERROR] The password of root@sys is empty. Run the edit-config command to modify the root_password value of oceanbase-ce.
[ERROR] Zone: IDC information is missing for zone1,zone2,zone3. Run the chst command to change the configuration style of oceanbase-ce to cluster, and then run the edit-config command to add IDC information.
See https://open.oceanbase.com/docs/obd-cn/V1.2.0/10000000000017237.
说明:
-
test1
是指的使用 OBD 部署对应的deploy_name
,可以使用obd cluster list
查看,对应的 Name 字段的值。 -
-c
后面跟 oceanbase-ce 表示检查的组件的名称。 -
-V
(大写) 后面跟当前使用的 OCP 的版本。
OCP 版本确认:
通过以下命令验证 OCP-Server 版本信息,如果返回信息中 buildVersion 匹配对应版本则表示 OCP-Server 版本正确。
username:OCP 的管理员用户 admin。
password:admin 用户的密码,默认为 root。
curl --user <username>:<password> 'http://<OCP_HOST>:<OCP_PORT>/api/v2/info'
- 通过
obd cluster check4ocp
命令检查,修复 ERROR 对应的问题,具体详情请参见步骤 3~6 。 - 如果输出中有
oceanbase-ce Check passed.
说明可以使用 OCP 来接管了。
3、给 admin 用户添加 sudo 权限
在所有 OBServer 机器上使用 root 用户执行:
chmod u+w /etc/sudoers
echo 'admin ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
chmod u-w /etc/sudoers
4、调整部署的操作系统用户为 admin
这里假设之前使用 OBD 部署的时候 user 使用的是操作系统 root 用户。
obd cluster edit-config test1
修改前:
## Only need to configure when remote login is required
user:
username: root
# password: your password if need
key_file: /root/.ssh/id_rsa
# port: your ssh port, default 22
# timeout: ssh connection timeout (second), default 30
在所有 OBServer 节点查看 observer 进程的用户是 root。
ps -ef | grep observer | grep -v grep | awk '{print $1}'
修改后:
注意这里 key_file
是用的私钥文件。
## Only need to configure when remote login is required
user:
username: admin
# password: your password if need
key_file: /home/admin/.ssh/id_rsa
# port: your ssh port, default 22
# timeout: ssh connection timeout (second), default 30
保存并退出。
Search param plugin and load ok
Search param plugin and load ok
Parameter check ok
Save deploy "test1" configuration
Use `obd cluster restart test1 --wp` to make changes take effect.
根据提示重启 OceanBase 集群
obd cluster restart test1 --wp
如果在这个时候, 出现
[ERROR] OBD-2002: Failed to start server1(172.30.62.242) observer: bash: /xxxxx/ob/observer/bin/observer: Permission denied
是因为之前的OceanBase 是root 用户安装, 把binany 放在了/root/.obd/bin 下面, 切到admin下, 没有权限读取/root/.obd/bin 目录, 需要在每台机器执行一个动作
chmod +x /root
在所有 OBServer 节点查看 observer
进程的用户是 admin
ps -ef | grep observer | grep -v grep | awk '{print $1}'
5、设置 root@sys 用户密码
如果之前通过 OBD 部署的 OceanBase 集群没有设置 sys 租户下 root 用户的密码,需要在 yaml 文件里打开 root_password
的注释,并设置对应的密码。
obd cluster edit-config test1
obd cluster reload test1
mysql -h${obproxy_ip} -P2883 -uroot@sys#cluster_name -pxxx
登录验证。
6、添加 zone idc 属性
默认新部署的 OceanBase 集群 zone idc 属性为空,如下所示登录到 sys 租户的 root 用户下进行调整:
#修改idc
alter system modify zone 'zone1' idc 'cd';
alter system modify zone 'zone2' idc 'cd';
alter system modify zone 'zone3' idc 'cd';
#确认idc
select * from oceanbase.__all_zone where name='idc';
说明: idc 名字根据需要设置,这里只是示例。
注意:
如果是OB4.x,在待接管的OB sys租户下执行:
select * from dba_ob_zones;
需要确保待接管的OB idc/region在ocp meta中有对应的记录,如果在ocp meta中没有,建议不要直接修改,可以在ocp meta中新增对应的记录。
select * from compute_idc;
select * from compute_region;
原因:待接管的OB集群修改了zone的idc/region属性后不会自动同步到ocp meta库中,需要手动调整。
7、再次确认是否满足 ocp 接管
重复步骤 2 并参考相关说明,确认输出中有 oceanbase-ce Check passed. 表示可以使用 OCP 来接管了。
obd cluster check4ocp test1 -c oceanbase-ce -V 3.1.1
8 、其他检查项
-
目前 OCP 只支持一台机器上部署一个 OBServer,在所有的 OBServer 节点,确认返回值是 1。
pidof observer | tr ' ' '\n' | wc -l 或者 pgrep observer | wc -l
-
每台 OBServer 的机器架构相同,比如同时是 x86 或者 arm。
uname -p
-
修改待接管集群中proxyro用户密码
在 OCP 接管集群之前,需要确认待接管集群中的 proxyro 如何没有设置密码或者设置了密码,都需将 OCP 中的 proxyro 密码修改为待接管集群中的 proxyro 用户的密码,原因是目前的OCP
内部使用的obproxy对应的proxyro用户密码是一个固定的密码,我们将在ocp 后续的版本中修复这个问题。
curl --user admin:aaAA11__ -X POST "http://172.30.199.126:8080/api/v2/obproxy/password" -H "Content-Type:application/json" -d '{"username":"proxyro","password":"Root123@@Root123"}'
说明:
ip:port 分别是 OCP 的IP和端口。
user:pass 分别为 OCP 的用户和密码,并且要求调用的用户需要有 admin 权限。
-d 参数后面的 password 为待接管集群的 proxyro 用户的明文密码。
该操作会生成运维任务,将 OCP 中现有 Oceanbase 集群的 proxyro 密码修改,同时修改OBProxy集群对应的配置。 您需等运维任务成功结束后才可进行后述步骤,如果任务失败,则需要重试并将任务执行成功之后才能执行后面的步骤。
- 如果待接管的OB是ocp meta使用的,登录到ocp meta租户的ocp库调整
mysql> select * from config_properties where `key` like '%black%' \G
*************************** 1. row ***************************
id: 1000171
key: ocp.ob.cluster.ops.blacklist
value:
application: ocp
profile: default
label: master
fatal: 1
description: OB 集群运维操作黑名单
create_time: 2022-06-06 13:43:42
update_time: 2022-06-06 13:43:42
description_en: OB cluster ops blacklist
is_az_level: 0
1 row in set (0.00 sec)
update config_properties set value=''
where `key`='ocp.ob.cluster.ops.blacklist';
9、使用 OCP 接管使用 OBD 部署的集群
1、登录 OCP 控制台。
2、点击左侧导航栏【集群】 ,再点击 【接管集群】。
3、选择接管集群的连接方式。
这里需要注意如果使用最早发布的 OCP 3.1.1 版本,只能使用【直连】方式来接管,否则会提示:
2022-04-06 20:44:34.831 WARN 39 --- [pool-subtask-executor-thread-36,e52d6a2c544e48ee,05e4f253fb7f] c.a.ocp.core.job.runner.RunnerFactory : Execute task failed, subtask=SubtaskInstanceEntity{id=2555836, name=Check observer process user, state=FAILED, operation=EXECUTE, className=com.alipay.ocp.service.task.business.host.CheckObserverProcessUserTask, seriesId=39, startTime=2022-04-06T20:44:34.781+08:00, endTime=2022-04-06T20:44:34.830+08:00}, failedMessage=Can not find observer process with port 2883
OCP 版本确认:
通过以下命令验证 OCP-Server 版本信息,如果返回信息中 buildVersion 匹配对应版本则表示 OCP-Server 版本正确。
username:OCP 的管理员用户 admin。
password:admin 用户的密码,默认为 root。
curl --user <username>:<password> 'http://<OCP_HOST>:<OCP_PORT>/api/v2/info'
关于升级 OCP 版本的示例可以参考: https://ask.oceanbase.com/t/topic/29700027
从 3.1.1-bp1 版本开始,可以使用 OBProxy 连接方式接管,如果使用 OBProxy 连接方式,对应的信息确认方法如下:
-
集群名
show parameters like 'cluster';
-
集群 id(可选)
show parameters like 'cluster_id';
4、提交接管任务。
5、在集群 → 系统管理 → 任务 ( Take over primary OB cluster ) 中可以看任务进度及报错日志。
10、OBProxy 接管
目前 OCP 不支持接管 OBProxy,可以通过先部署新的 OBProxy,再在 SLB 中添加,滚动替换原有的 OBProxy 方式来无缝完成在 OCP 中接管和管理 OBProxy。
通过以上步骤,我们就可以将之前使用 OBD 维护的 OceanBase 集群 使用 OCP 接管过来了。