奇怪的obproxy连接密码问题

【产品名称】

obproxy

【产品版本】

3.2.0

【问题描述】

使用 OBD部署 单节点集群后,首次启动集群(初始化)后,通过 yaml中设置的密码(obproxy_sys_password)连接 obproxy的proxysys租户正常;当停止并再次启动集群后,通过yaml中设置的密码(obproxy_sys_password)再次连接obproxy的proxysys租户时,一直提示验证失败问题;(注:后面不管停止、启动多少次集群,现象均存在),但通过obproxy连接observer一直是正常的。

下面将排查过程做一些记录(大概找出原因所在,但未找到是什么原因造成?),按操作时间顺序:

OBD部署完成单节点集群 obce-single2

yaml 文件中,关于 obproxy_sys_password 的密码设置:

[admin@obproxy01 ~]$ cat single9.yaml | grep obproxy_sys_password obproxy_sys_password: rootpwd123 [admin@obproxy01 ~]$

1、首次启动集群 obce-single2

[admin@obproxy01 ~]$ obd cluster start obce-single2 Get local repositories and plugins ok … obce-single2 running [admin@obproxy01 ~]$

2、连接 obproxy 测试

使用yaml中设置的密码: obproxy_sys_password = rootpwd123 ,连接正常,如下:

[admin@obproxy01 ~]$ obclient -h192.168.111.9 -uroot@proxysys -P2883 -prootpwd123 Welcome to the OceanBase. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.6.25 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement. MySQL [(none)]>

3、查看 obproxy 的配置文件

配置文件: /home/admin/obproxy/etc

首次初始化并启动后,配置文件中记录的obproxy_sys_password加密后的密码:obproxy_sys_password**=5e013b7a4fda3f33e725b96173a4dbf331e8889f ** 该密码是预期的密码;

[admin@localhost obproxy]$ strings etc/obproxy_config.bin | grep sys Eobserver_sys_password1= observer_sys_password=68a15da0cadb03262670c17a2de565478b713b0d obproxy_sys_password=5e013b7a4fda3f33e725b96173a4dbf331e8889f skip_proxy_sys_private_check=True syslog_level=INFO

以下是该目录下,另一个旧配置文件的输出:(注意:obproxy_sys_password的密码)

[admin@localhost obproxy]$该[admin@localhost obproxy]$ strings etc/obproxy_config.bin.old | grep sys observer_sys_password1= observer_sys_password=68a15da0cadb03262670c17a2de565478b713b0d obproxy_sys_password=e3fd448c516073714189b57233c9cf428ccb1bed skip_proxy_sys_private_check=True syslog_level=INFO

4、查看 obproxy 中 proxysys 租户中的参数值设置

可以看出: obproxy_sys_password 的密码值 与 /home/admin/obproxy/etc/obproxy_config.bin 中是一致的;

MySQL [(none)]> show proxyconfig like ‘%_sys%’ → ; ±-----------------------------±-----------------------------------------±-------------------------------±------------±--------------+ | name | value | info | need_reboot | visible_level | ±-----------------------------±-----------------------------------------±-------------------------------±------------±--------------+ | observer_sys_password1 | | password for observer sys user | false | SYS | | observer_sys_password | 68a15da0cadb03262670c17a2de565478b713b0d | password for observer sys user | false | SYS | | obproxy_sys_password | 5e013b7a4fda3f33e725b96173a4dbf331e8889f | password for obproxy sys user | false | SYS | | skip_proxy_sys_private_check | True | skip_proxy_sys_private_check | false | USER | ±-----------------------------±-----------------------------------------±-------------------------------±------------±--------------+ 4 rows in set (0.004 sec)

5、查看首次启动过程中 obproxy 的日志输出

日志文件:/home/admin/obproxy/log/obproxy.log

整个启动过程中,做了几次的 ob_proxy_main.cpp:480 [11903][Y0-0] [lt=7] [dc=0] has no inherited sockets, start new obproxy … 操作,其中有记录了 obproxy_sys_password 的值, e3fd448c516073714189b57233c9cf428ccb1bed 和 5e013b7a4fda3f33e725b96173a4dbf331e8889f 两个值均有出现,最终以 5e013b7a4fda3f33e725b96173a4dbf331e8889f 更新至配置 /home/admin/obproxy/etc/obproxy_config.bin 中

(篇幅限制—输出略,可以看附件中的日志)

6、停止集群,再启动集群 obce-single2

[admin@obproxy01 ~]$ obd cluster stop obce-single2 … 输出—略 [admin@obproxy01 ~]$ obd cluster start obce-single2 …输出—略

7、连接 obproxy 测试 — 报错

[admin@obproxy01 ~]$ obclient -h192.168.111.9 -uroot@proxysys -P2883 -prootpwd123 ERROR 2013 (HY000): Lost connection to MySQL server at ‘reading authorization packet’, system error: 11 [admin@obproxy01 ~]$

8、查看obproxy的配置文件

配置文件中 obproxy**_sys_**password 的密码已经被修改为:e3fd448c516073714189b57233c9cf428ccb1bed

[admin@localhost obproxy]$ strings etc/obproxy_config.bin | grep sys observer_sys_password1= observer_sys_password=68a15da0cadb03262670c17a2de565478b713b0d obproxy_sys_password=e3fd448c516073714189b57233c9cf428ccb1bed skip_proxy_sys_private_check=True syslog_level=INFO [admin@localhost obproxy]$

9、查看 obproxy 启动的日志文件

整个启动过程中,做了几次的 ob_proxy_main.cpp:480 [11903][Y0-0] [lt=7] [dc=0] has no inherited sockets, start new obproxy … 操作,

其中有记录了 obproxy_sys_password 的值, e3fd448c516073714189b57233c9cf428ccb1bed 和 5e013b7a4fda3f33e725b96173a4dbf331e8889f 两个值均有出现,最先一次以 5e013b7a4fda3f33e725b96173a4dbf331e8889f 读取(预期行为),但最终以e3fd448c516073714189b57233c9cf428ccb1bed 更新至配置 /home/admin/obproxy/etc/obproxy_config.bin 中

**疑问:**奇怪的是,在启动时做 ob_proxy_main.cpp:480 [11903][Y0-0] [lt=7] [dc=0] has no inherited sockets, start new obproxy … 操作时,都会默认带参数: argv[1]="-o", argv[2]=“obproxy_sys_password=e3fd448c516073714189b57233c9cf428ccb1bed”, … 看日志,也从配置文件中读取了正确的值5e013b7a4fda3f33e725b96173a4dbf331e8889f ,但接着又被更新成了 e3fd448c516073714189b57233c9cf428ccb1bed ;

从OBD 启动集群(启动obproxy步骤)的日志,如下:(启动命令中指定了obproxy**_sys_**password 的值,为啥? 这里的值是从哪里获取的? )

[2022-04-30 15:30:35] [52223bba-c857-11ec-abb6-00505692ecfa] [INFO] Start obproxy … [2022-04-30 15:30:35] [52223bba-c857-11ec-abb6-00505692ecfa] [DEBUG] – starting 192.168.111.9 obproxy [2022-04-30 15:30:35] [52223bba-c857-11ec-abb6-00505692ecfa] [DEBUG] – admin@192.168.111.9 set env LD_LIBRARY_PATH to ‘/home/admin/obproxy/lib:’ [2022-04-30 15:30:35] [52223bba-c857-11ec-abb6-00505692ecfa] [DEBUG] – admin@192.168.111.9 execute: cd /home/admin/obproxy; /home/admin/obproxy/bin/obproxy -o obproxy_sys_password=e3fd448c516073714189b57233c9cf428ccb1bed --listen_port 2883 --prometheus_listen_port 2884 --rs_list ‘192.168.111.9:2881’ --cluster_name ‘obce-single2’ [2022-04-30 15:30:35] [52223bba-c857-11ec-abb6-00505692ecfa] [DEBUG] – exited code 0 [2022-04-30 15:30:35] [52223bba-c857-11ec-abb6-00505692ecfa] [DEBUG] – admin@192.168.111.9 set env LD_LIBRARY_PATH to ‘’ [2022-04-30 15:30:35] [52223bba-c857-11ec-abb6-00505692ecfa] [DEBUG] – admin@192.168.111.9 execute: ps -aux | grep -e ‘/home/admin/obproxy/bin/obproxy -o obproxy_sys_password=e3fd448c516073714189b57233c9cf428ccb1bed --listen_port 2883 --prometheus_listen_port 2884 --rs_list 192.168.111.9:2881 --cluster_name obce-single2$’ | grep -v grep | awk ‘{print $2}’ > /home/admin/obproxy/run/obproxy-192.168.111.9-2883.pid [2022-04-30 15:30:35] [52223bba-c857-11ec-abb6-00505692ecfa] [DEBUG] – exited code 0 [2022-04-30 15:30:35] [52223bba-c857-11ec-abb6-00505692ecfa] [INFO] obproxy program health check

10、其他说明:

1)如果直接修改/home/admin/obproxy/etc/obproxy_config.bin 中的 obproxy_sys_password 的值(即使修改正确了),但在启动时,该文件会被 obproxy进程更新;

2)从多次测试来看,obproxy_sys_password=e3fd448c516073714189b57233c9cf428ccb1bed 的值像是在哪里写死的。

3)后续不管重启多少次集群,obproxy_sys_password 的密码均被设置为:e3fd448c516073714189b57233c9cf428ccb1bed

以上为排查过程,由于 obproxy_sys_password 密码被修改了,所以无法使用 yaml 配置文件中的密码连接 obproxy 的proxysys租户。 表象原因找到了,那该原因的根本之处在哪? 望各位大神 帮忙解释一下,谢谢;

log.zip (176350 KB)

补充一下当时,安装--首次启动--停止、启动的 odb 日志信息

obd.zip (9239 KB)

你好,我模拟了一下整个过程,我的密码貌似是没什么变化,放一份日志供参考,等待你这个问题的结果🤦‍♂️

restart.log.zip (1355 KB)

obd 启动带 obproxy_sys_password=e3fd448c516073714189b57233c9cf428ccb1bed  参数, 这个是历史原因,obd 低于1.3.0版本中会带这个默认的值,从1.3.0开始没有这个默认值了。

1、记录一下当前obproxy的工作目录 ,

ls -l /proc/$(pgrep obproxy)/cwd


2、kill掉obproxy的进程,先kill守护进程,在kill obproxy进程。

3、手动启动obproxy, /path/xxx 表示第一步记录的路径

cd /path/xxx && ./bin/obproxy -o obproxy_sys_password=5e013b7a4fda3f33e725b96173a4dbf331e8889f


4、obproxy手动启动成功后,然后kill掉,再使用obd start --wop

1 个赞

谢谢,你的解答

谢谢,3楼 和 4楼  应该是问题的原因和处理方式