当前 OBClient/MySQL 客户端工具只能支持指定一个 IP + Port 来进行连接登录(通过 -h<IP地址> -P<Port端口> 选项),如果用户在一个分布式集群环境里面配置有多个 IP 地址,通过某个 IP 地址无法连接时,需要用户手工或者用户代码切换到另一个 IP 地址来尝试连接登录,使用上较为不便。
OBClient V2.2.4 版本通过引入 --ob-service-name=xxx 选项,可以支持指定多个 IP 地址来连接登录。这样一来,当某个 IP 地址无法连接上时,可以自动屏蔽连接错误并切换到另外一个 IP 来自动尝试重新连接登录。
本文主要描述了该方法的详细配置步骤及连接验证。
操作步骤
通过
rpm/yum命令在客户端服务器上安装好 OBClient V2.2.4 或更高版本。在需要使用 OBClient 客户端工具所在的每一台服务器上,编辑一个
tnsnames.ora(文件名称固定不变),内容如下:第一步:使用
cd命令进入tnsnames.ora文件所在的路径。[root@xxxxx ~]# cd /data/ <== 该路径可以用户自己指定。第二步:在路径(
/data/)下,使用cat命令查看tnsnames.ora内容。[root@xxxxx ~]# cat tnsnames.ora输出结果如下:
MYTEST= (DESCRIPTION= (ADDRESS_LIST= (ADDRESS=(PROTOCOL=tcp)(HOST=172.xxx.xxx.23)(PORT=2883)(WEIGHT=1)) (ADDRESS=(PROTOCOL=tcp)(HOST=172.xxx.xxx.27)(PORT=2883)(WEIGHT=1)) (ADDRESS=(PROTOCOL=tcp)(HOST=172.xxx.xxx.29)(PORT=2883)(WEIGHT=1))) (CONNECT_DATA=(SERVICE_NAME=TEST)) )注意
tnsnames.ora文件中MYTEST就是OBClient客户端工具使用ob_service_name选项的值。
利用第二步中配置的
tnsnams.ora配置文件加上--ob-service-name=xxx选项来实现 obclient 多 IP 登录:使用
export命令设置TNS_ADMIN环境变量。[root@xxxxx ~]# export TNS_ADMIN=/data <== 这边的路径名对应第二步中 `tnsnames.ora` 文件所在的路径。在 OBClient 客户端工具使用
--ob-service-name=xxx选项,指定多个 IP 地址来连接登录。[root@xxxxxx ~]# obclient -h172.xxx.xxx.23,172.xxx.xxx.27,172.xxx.xxx.29 -uroot@sys#xxxxx -P2883 -pxxx -A -c --ob-service-name=MYTEST输出结果如下:
Welcome to the OceanBase. Commands end with ; or \g. Your OceanBase connection id is 206544 Server version: OceanBase 4.2.1.3 (r103050012024012511-44db4190d80efddf8db98d564d661fa9417b63a6) (Built Jan 25 2024 11:58:21) Copyright (c) 2000, 2018, OceanBase and/or its affiliates. All rights reserved. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. obclient [(none)]> \s -------------- obclient Ver 2.2.4 Distrib 10.4.18-MariaDB, for Linux (aarch64) using readline 5.1 Connection id: 206544 Current database: Current user: root@172.xxx.xxx.23 SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: OceanBase 4.2.1.3 (r103050012024012511-44db4190d80efddf8db98d564d661fa9417b63a6) (Built Jan 25 2024 11:58:21) Protocol version: 10 Connection: 172.xxx.xxx.23 via TCP/IP Server characterset: utf8mb4 Db characterset: utf8mb4 Client characterset: utf8mb4 Conn. characterset: utf8mb4 TCP port: 2883 Protocol: Compressed Active --------------
第四步:测试当某一个 IP 无法连通后,OBClient 命令行工具可以自动选择下一个可用的
IP:Port来尝试连接,一旦某个IP:Port连接成功则直接登录,除非所有的IP:Port都连接不上才会返回错误。使用
obproxyd.sh停止 OBProxy 进程,模拟某一个 IP 无法连通。[admin@xxxxx ~]$ /opt/taobao/install/obproxy-4.2.1.0/bin/obproxyd.sh -c stop obproxy stopped检查 obproxy 进程是否存在。
[admin@xxxxx ~]$ ps -ef | grep obproxy admin 3381646 3381456 0 15:43 pts/1 00:00:00 grep obproxy <== obproxy 进程不存在。测试 OBClient 客户端连接状态。
[root@xxxxx ~]# obclient -h172.xxx.xxx.23,172.xxx.xxx.27,172.xxx.xxx.29 -uroot@sys#xxxxx -P2883 -pxx -A -c --ob-service-name=MYTEST输出结果如下:
Welcome to the OceanBase. Commands end with ; or \g. Your OceanBase connection id is 206743 Server version: OceanBase 4.2.1.3 (r103050012024012511-44db4190d80efddf8db98d564d661fa9417b63a6) (Built Jan 25 2024 11:58:21) Copyright (c) 2000, 2018, OceanBase and/or its affiliates. All rights reserved. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. obclient [(none)]> \s -------------- obclient Ver 2.2.4 Distrib 10.4.18-MariaDB, for Linux (aarch64) using readline 5.1 Connection id: 206743 Current database: Current user: root@172.xxx.xxx.23 SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: OceanBase 4.2.1.3 (r103050012024012511-44db4190d80efddf8db98d564d661fa9417b63a6) (Built Jan 25 2024 11:58:21) Protocol version: 10 Connection: 172.xxx.xxx.27 via TCP/IP Server characterset: utf8mb4 Db characterset: utf8mb4 Client characterset: utf8mb4 Conn. characterset: utf8mb4 TCP port: 2883 Protocol: Compressed Active --------------
适用版本
OceanBase 数据库所有版本 + OBClient V2.2.4 或更高版本。