odp 升级影响因素(root@proxysys 与 proxyro@sys 密码问题)-c7电子娱乐
前言
最近接到变更通知,后续准备将生产环境的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详情信息可见c7电子娱乐官网说明
root@proxysys 与 proxyro@sys
root@proxysys 是 odp 的管理员账号,之前没系统了解这个用户的时候,乍一看认为它是一个租户。在部署odp时可以设置该用户密码 并且 记住该用户密码。 root@proxysys 的密码对应配置项 obproxy_sys_password,c7电子娱乐官网声明如果要修改该用户密码 可以通过登录 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 存储了该用户密码。关于该用户密码存储,c7电子娱乐官网已给出详细信息
集群信息
ip | 角色 | 数量 |
---|---|---|
10.0.0.63 | ocp | 1 |
10.0.0.62 | odp | 1 |
10.0.0.62 | ob集群 | 1 |
odp升级
本节 简单概括 正常情况下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用户密码修改
命令行修改密码
起初设置 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
c7电子娱乐 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)
c7电子娱乐 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
c7电子娱乐 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上的凭据,此时凭据验证失败
odp状态(不可用)
可以看到,由于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)
c7电子娱乐的解决方案:请联系c7电子娱乐的技术支持
更新凭据 再次升级
更新ocp中 root@proxysys 用户的凭据
更新完后凭据验证成功
凭据验证成功后,可以执行升级操作,并且升级成功
总结
命令行修改 root@proxysys 密码后,一定要更改ocp上的凭据,方可进行odp相关运维操作
proxyro@sys用户密码修改(黑屏修改)
命令行修改密码
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)
c7电子娱乐 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容器,根据官方文档 的解释说明,还有 ocp用户凭据 以及 ocp.ops_config 中的密码信息没有修改。下面我们 一 一 进行修改
更新凭据
更新该用户的ocp密码凭据
更新完ocp中的 proxyro凭据之后依然连接失败,由于还有 ocp.ops_config 密码没有进行修改,此时连接失败还可以理解
修改`ocp`.`ops_config`
根据c7电子娱乐官网的 proxyro 用户的密码信息都保存在哪里- 文档 得出——如果使用黑屏命令行修改 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)
c7电子娱乐 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修改)
查看c7电子娱乐官网 以及 社区老师的回答 得知 proxyro@sys 用户修改密码的标准方式为 ocp白屏修改,这种方式修改会同步更新该用户相关的密码存储信息。
下面我们试一下ocp白屏修改会遇到什么问题?
ob迁出odp
使用ocp修改时报 ob集群已关联odp,不允许修改。经过 社区老师 的反馈,必须将ob迁出odp之后,才可对改密码进行修改。
进入odp集群页面,将ob迁出odp
修改proxyro@sys用户密码
ob从odp迁出后,修改密码成功
凭据验证成功,说明使用ocp修改该用户密码确实会 自动同步 与该用户相关的密码信息
接管ob执行升级
odp重新接管ob集群,执行升级
升级成功
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)
c7电子娱乐 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接管