OBProxy连接数据库失败

【产品名称】

Oceanbase-ce

【产品版本】

3.1.2

【问题描述】

OBD 重启集群之后, 集群显示正常,OBProxy2883端口连不上数据库 , 2881端口可以连。 VMware搭建的测试环境, OBserver都是4C12G。

[admin@ocpserver ~]$ mysql -h192.168.201.41 -P2883 -uroot@sys#szeduobce -prootroot -c -A oceanbase

ERROR 2013 (HY000): Lost connection to MySQL server at ‘reading authorization packet’, system error: 0

[admin@ocpserver ~]$ mysql -h192.168.201.41 -P2881 -uroot@sys -prootroot -c -A oceanbase

Welcome to the MariaDB monitor. Commands end with ; or \g.

Your MySQL connection id is 3221610848

Server version: 5.7.25 OceanBase 3.1.2 (r10000392021123010-d4ace121deae5b81d8f0b40afbc4c02705b7fc1d) (Built Dec 30 2021 02:47:29)

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 [oceanbase]>

OBProxylog.zip (2041 KB)

可以看一下:strings /home/admin/obproxy-3.2.0/etc/obproxy_config.bin | grep password 下 observer_sys_password 的密码是否为空? 


该密码值是一个加密后的字符串,原则上应该与 obproysys 租户里的参数 show proxyconfig like 'observer_sys_password' 的值是一样的; 


该密码也应该与 observer 中 sys 租户的 obproxyro 用户的密码一致,但两者的加密后的字符串不会不一样(可能是加密方式不一样),所以不好比对;


曾经出现过:/home/admin/obproxy-3.2.0/etc/obproxy_config.bin 中的 observer_sys_password 密码为空了,所以无法通过 obproxy 连接 observer 的情况; 


你可以先比对一下这几处的值是否有异常; 如果有原来连接正常的值做比对就更好了;




密码不为空,obproysys租户访问拒绝

可以使用ocp重新安装一下obproxy

是的 obproxysys 在部署安装后,按部署文件的密码,首次启动后,是可以正常登录的,再次重启后(后面不管重启多少次)就登录不了了,因为看配置文件连接 obproxysys 的root密码被OBD修改了(这个不知道OBD怎么修改的,也在找原因,目前还没有人回复),见: OceanBase 社区版 我排查的情况,原因还没找到


不管部署多少次,obproxy_sys_password 的密码设置多少,最终通过OBD重启obproxy 后,密码都会被统一设置为:e3fd448c516073714189b57233c9cf428ccb1bed

看了你的文档,我也试了下,果然和你描述的一样。 

-- OBD 中控机

[admin@ocpserver data]$ mysql -h192.168.201.41 -uroot@proxysys -P2883 -p

MySQL [(none)]> show proxyconfig like '%sys_password%';

+------------------------+------------------------------------------+--------------------------------+-------------+---------------+

| name          | value                  | info              | need_reboot | visible_level |

+------------------------+------------------------------------------+--------------------------------+-------------+---------------+

| observer_sys_password1 |                     | password for observer sys user | false    | SYS      |

| observer_sys_password | 33a485cb146e1153c69b588c671ab474f2e5b800 | password for observer sys user | false    | SYS      |

| obproxy_sys_password  | 33a485cb146e1153c69b588c671ab474f2e5b800 | password for obproxy sys user | false    | SYS      |

+------------------------+------------------------------------------+--------------------------------+-------------+---------------+

3 rows in set (0.00 sec)

[admin@ocpserver data]$ obd cluster stop szedu

过程略...

szedu stopped

[admin@ocpserver data]$ obd cluster start szedu

Start observer ok

Start obproxy ok

szedu running

[admin@ocpserver data]$ mysql -h192.168.201.41 -uroot@proxysys -P2883 -p

Enter password: 

ERROR 2013 (HY000): Lost connection to MySQL server at 'reading authorization packet', system error: 0


-- OBserver 

[admin@OBedu1 etc]$ strings obproxy_config.bin | grep password

observer_sys_password1=

observer_sys_password=33a485cb146e1153c69b588c671ab474f2e5b800

obproxy_sys_password=33a485cb146e1153c69b588c671ab474f2e5b800

inspector_password=

[admin@OBedu1 etc]$ strings obproxy_config.bin.old | grep password

observer_sys_password1=

observer_sys_password=33a485cb146e1153c69b588c671ab474f2e5b800

obproxy_sys_password=33a485cb146e1153c69b588c671ab474f2e5b800

inspector_password=

[admin@OBedu1 etc]$ strings obproxy_config.bin | grep password

3observer_sys_password1=

observer_sys_password=33a485cb146e1153c69b588c671ab474f2e5b800

obproxy_sys_password=e3fd448c516073714189b57233c9cf428ccb1bed

inspector_password=

[admin@OBedu1 etc]$ strings obproxy_config.bin.old | grep password

3observer_sys_password1=

observer_sys_password=33a485cb146e1153c69b588c671ab474f2e5b800

obproxy_sys_password=e3fd448c516073714189b57233c9cf428ccb1bed

inspector_password=


0、确认一下当前obd的版本是低于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=正确的密码加密字符串


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

嗯~ 刚看钉钉群了。 3Q~