最近接到变更通知,后续准备将生产环境的ODP升级至4.3.2。据说该版本对于 zone优先级为random的租户有性能提升 (random的租户 运行SQL 有时候会产生 分布式执行计划 或者 远程执行计划,影响SQL运行效率) 准备先在测试环境进行升级操作,观察一下升级的情况 以及 升级后的效果。本以为用OCP点击ODP升级选项后,就可以静候佳音,结果被现实狠狠打脸,问题层出不断,被 root@proxysys 与 proxyro@sys 两个用户折磨的苦不堪言, 本文主要以 root@proxysys 与 proxyro@sys 两个用户的密码维度来验证ODP升级效果,特别是当修改了root@proxysys 与 proxyro@sys 用户的密码会触发什么事件?
注:
ODP 指 obproxy数据库代理,本文以ODP作为简称,ODP详情信息可见官网说明
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001049992
root@proxysys 是 ODP 的管理员账号,之前没系统了解这个用户的时候,乍一看认为它是一个租户。 在部署ODP时可以设置该用户密码 并且 记住该用户密码。 root@proxysys 的密码对应配置项 obproxy_sys_password,官网声明如果要修改该用户密码 可以通过登录 root@proxysys 的方式(如 mysql -h127.1 -P2883 -uroot@proxysys -pxxx),使用命令 alter proxyconfig set obproxy_sys_password = 'xxx'; 设置密码。
部署ODP时可以手动设置该用户密码

proxyro@sys 是 ODP 访问 OceanBase 数据库的账号, 部署OB时系统会自动赋予该用户一个默认密码, proxyro@sys强烈不建议修改密码, 尤其不能使用黑屏命令行修改密码 ,proxyro@sys 的密码对应配置项 observer_sys_password,实际上不只是 observer_sys_password 存储了该用户密码。关于该用户密码存储,官网已给出详细信息
https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000988450?back=kb
| IP | 角色 | 数量 |
|---|---|---|
| 10.0.0.63 | OCP | 1 |
| 10.0.0.62 | ODP | 1 |
| 10.0.0.62 | OB集群 | 1 |
本节 简单概括 正常情况下ODP升级的流程
社区版4.2.3 升级至 社区版4.3.2
升级前 一定要对 以上两个账号 进行凭据验证, 否则先不要进行升级


将 ODP4.3.2软件包 上传至OCP

进入ODP页面,ODP已经接管了OB集群

点击升级

升级过程中,会将原版本的ODP卸载

卸载原版本ODP之后,会下载新版本的ODP进行替换

替换完成后,会重启obproxyd守护进程

之后执行ODP 版本的重置环节(Set obproxy version),proy_id更新(Check and reset proxy_id if need),最后更新ODP的状态(Update obproxy status),玩成升级

以上 简单概括 正常情况下ODP升级的流程(OCP白屏方式),升级流程非本文重点。以上内容想表达的重点是 在执行ODP升级前 一定要验证 root@proxysys 与 proxyro@sys 的密码凭据是否正确。
以下内容开始描述 root@proxysys 或 proxyro@sys 用户密码发生改变时 对ODP升级的影响
起初设置 root@proxysys 密码为 aaAA11__
[root@observer062 ~]# mysql -h127.1 -P2883 -uroot@proxysys -paaAA11__ 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 1048738 Server version: 5.6.25 Copyright (c) 2000, 2024, Oracle and/or its affiliates. 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> mysql> mysql> mysql> exit Bye
命令行修改 root@proxysys 密码
[root@observer062 ~]# mysql -h10.0.0.62 -P2883 -uroot@sys#obv4 -p'aaAA11__' 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 1048787 Server version: 5.6.25 OceanBase_CE 4.2.1.8 (r108000022024072217-3149c25ca2dadbb7707686ad02a1367b1b43e0b5) (Built Jul 23 2024 02:01:58) Copyright (c) 2000, 2024, Oracle and/or its affiliates. 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> mysql> mysql> alter proxyconfig set obproxy_sys_password='ABcd__1324'; Query OK, 0 rows affected (0.01 sec) mysql> mysql> exit Bye
验证 root@proxysys 修改后的密码
使用原有密码 aaAA11__ 此时已经无法登录,需要使用修改后的密码 ABcd__1324 登录,证明命令行方式修改密码成功
[root@observer062 ~]# mysql -h127.1 -P2883 -uroot@proxysys -paaAA11__ mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 1045 (42000): Access denied for user 'root@proxysys'@'127.0.0.1' (using password: YES) [root@observer062 ~]# [root@observer062 ~]# [root@observer062 ~]# mysql -h127.1 -P2883 -uroot@proxysys -pABcd__1324 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 1048808 Server version: 5.6.25 Copyright (c) 2000, 2024, Oracle and/or its affiliates. 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>
由于使用黑屏命令行修改密码,没有更新OCP上的凭据, 此时凭据验证失败

可以看到,由于OCP上凭据密码没有进行修改, OCP(10.0.0.63) 访问 ODP会报密码错误,此时ODP集群处于不可用状态,无法进行升级等操作
持续时间:2分钟3秒 原因:未知异常,类型:OdpConnectFailedException,错误信息:[odpsdk] check odp connection failed, connectProperties=ConnectProperties(address=10.0.0.62, port=2883, password=xxx username=root, tenantName=proxysys), cause:Failed to obtain JDBC Connection; nested exception is java.sql.SQLSyntaxErrorException: Could not connect to 10.0.0.62:2883 : (conn=1048747) Access denied for user 'root@proxysys'@'10.0.0.63' (using password: YES) 解决方案:请联系技术支持

更新OCP中 root@proxysys 用户的凭据

更新完后凭据验证成功

凭据验证成功后,可以执行升级操作,并且升级成功

命令行修改 root@proxysys 密码后,一定要更改OCP上的凭据,方可进行ODP相关运维操作
proxyro 用户密码 系统会自动生成 ,这里使用 黑屏命令行 进行修改
[root@observer062 ~]# mysql -h10.0.0.62 -P2883 -uroot@sys#obv4 -p'aaAA11__' 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 1048760 Server version: 5.6.25 OceanBase_CE 4.2.1.8 (r108000022024072217-3149c25ca2dadbb7707686ad02a1367b1b43e0b5) (Built Jul 23 2024 02:01:58) Copyright (c) 2000, 2024, Oracle and/or its affiliates. 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> mysql> mysql> alter user 'proxyro'@'%' identified by 'aaAA11__'; Query OK, 0 rows affected (0.06 sec) mysql> mysql> mysql> exit Bye [root@observer062 ~]#
用户凭据没有更新,此时验证失败

由于该用户属于 sys租户的用户,并不是ODP管理用户,此时ODP状态显示是可用的

发现可以执行升级操作,升级成功,乍一看命令行修改完该用户密码后,好像不影响ODP运行

ODP连接OB
此时发现使用 ODP 2883 端口 连接 OB集群连接不上了。分析是 命令行修改proxyro密码后,OCP上该用户的凭据 或者 其它存储密码的系统表 并没有进行更新 ,导致通过ODP连接OB失败。由于本人的OCP是OBD部署的社区版本,不存在OCP容器,根据官方文档 https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000988450?back=kb 的解释说明,还有 OCP用户凭据 以及 ocp.ops_config 中的密码信息没有修改。下面我们 一 一 进行修改

更新该用户的OCP密码凭据


更新完OCP中的 proxyro凭据之后依然连接失败,由于还有 ocp.ops_config 密码没有进行修改,此时连接失败还可以理解

根据官网的 proxyro 用户的密码信息都保存在哪里- 文档 https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000988450?back=kb 得出——如果使用黑屏命令行修改 proxyro 用户密码的话, 只会修改mysql.user表中的记录, 不会修改 ocp.ops_config 与 OCP凭据(profile_credential)的密码信息,当前凭据已经修改完成,尝试修改ocp.ops_config中的密码信息(与mysql.user密码信息一致),验证修改完后是否可以通过ODP代理连接OB
登录接管的业务OB的sys租户,查看 mysql.user 与 ocp.ops_config 中的 proxyro密码信息
[root@observer062 ~]# mysql -h10.0.0.62 -P2881 -uroot@sys -p'aaAA11__' 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 3221489063 Server version: 5.7.25 OceanBase_CE 4.2.1.8 (r108000022024072217-3149c25ca2dadbb7707686ad02a1367b1b43e0b5) (Built Jul 23 2024 02:01:58) Copyright (c) 2000, 2024, Oracle and/or its affiliates. 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> SELECT name, value FROM `ocp`.`ops_config` WHERE name = 'ob.proxyro.password'; +---------------------+----------------------------------+ | name | value | +---------------------+----------------------------------+ | ob.proxyro.password | cd2321e5bd2efe7e6b44f784e7f13a7e | +---------------------+----------------------------------+ 1 row in set (0.00 sec) mysql> mysql> select user,host,password from mysql.user where user = 'proxyro'\G; *************************** 1. row *************************** user: proxyro host: % password: *4d874e0808d0c8355f04caa0e3b9225b3f7c2699 1 row in set (0.00 sec)
将 ocp.ops_config中的密码 修改与 mysql.user密码信息 一致
mysql> REPLACE INTO `ocp`.`ops_config` (`name`, `value`) values ('ob.proxyro.password', '*4d874e0808d0c8355f04caa0e3b9225b3f7c2699');
Query OK, 2 rows affected (0.00 sec)
mysql>
mysql> select * from ops_config\G
ERROR 1046 (3D000): No database selected
mysql>
mysql> select * from ocp.ops_config\G
*************************** 1. row ***************************
id: 1000002
name: ob.proxyro.password
value: *4d874e0808d0c8355f04caa0e3b9225b3f7c2699
create_time: 2024-11-21 23:31:57
update_time: 2024-11-21 23:31:57
1 row in set (0.00 sec)
mysql> select user,host,password from mysql.user where user = 'proxyro'\G;
*************************** 1. row ***************************
user: proxyro
host: %
password: *4d874e0808d0c8355f04caa0e3b9225b3f7c2699
1 row in set (0.00 sec)修改完成后再次通过ODP连接OB集群还是不行

当使用黑屏命令行修改 proxyro@sys 用户的密码后,obproxy 可以升级成功,但是由于OB集群连接obproxy的密码修改了,升级后OB无法通过obproxy 2883 端口连接,只能通过2881端口本地连接 (无论后期是否更新 OCP上的凭据 还是 `ocp`.`ops_config` 里的信息)
查看官网 以及 社区老师的回答 得知 proxyro@sys 用户修改密码的标准方式为 OCP白屏修改, 这种方式修改会同步更新该用户相关的密码存储信息。
下面我们试一下OCP白屏修改会遇到什么问题?
使用OCP修改时报 OB集群已关联ODP,不允许修改。经过 社区老师 的反馈, 必须将OB迁出ODP之后,才可对改密码进行修改。


OB从ODP迁出后,修改密码成功

凭据验证成功,说明使用OCP修改该用户密码确实会 自动同步 与该用户相关的密码信息

ODP重新接管OB集群,执行升级


升级成功

此时通过ODP连接OB是可以连接成功的, 证实 OCP方式修改 proxyro@sys 的标准性
[root@observer062 obbackup]# mysql -h10.0.0.62 -P2883 -uroot@sys#obv4 -p'aaAA11__' 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 3145823 Server version: 5.6.25 OceanBase_CE 4.2.1.8 (r108000022024072217-3149c25ca2dadbb7707686ad02a1367b1b43e0b5) (Built Jul 23 2024 02:01:58) Copyright (c) 2000, 2024, Oracle and/or its affiliates. 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> exit Bye
proxyro@sys 用户修改密码的标准方式是通过OCP白屏修改
如果OB集群已经关联到ODP,不允许通过OCP白屏命令修改proxyro@sys用户密码
之前一直没有仔细地了解 root@proxysys 与 proxyro@sys 的用户,此次工作中的测试的ODP升级算是让本人初步了解了这两个用户,尤其是对于密码更改需求。本文内容为作者亲测,结论不成立的地方 请 社区老师 以及 各位专家 指出。
1.部署ODP的时候一定要记住 root@proxysys 的密码
2.修改 root@proxysys 后,一定要更改OCP上该用户的凭据
3.proxyro@sys用户的密码 不到万不得已 不能进行修改
4.如果 proxyro@sys用户的密码 不得不修改的话, 一定要通过OCP修改,不能使用黑屏命令行修改
5.使用OCP修改 OB集群的 proxyro@sys用户密码 的话,OB集群不允许被ODP接管
来自 “ ”, 原文作者: ;原文链接:,如有侵权,请联系管理员删除。