OBProxy 可以将用户发起的数据访问请求转发到正确的 OBServer 上,转发到后端 OBServer 的请求返回数据时,依然要通过 OBProxy 回发给客户端。本节主要介绍通过使用 RPM 包安装 OBProxy。
注意
- OBProxy 在任何一个机器上部署后,通过向外暴露一个 ip:port 来提供 OceanBase 的代理服务。用户可以像访问 MySQL 数据库一样通过该 ip:port 即可访问 OceanBase 数据库,一般推荐部署在 OBServer 节点上。
- 建议一台机器上只部署一个 OBProxy 服务,并且使用约定的 2883 端口。当同一台机器上部署多个OBProxy 服务时,需要指定不同端口和不同的配置文件路径予以区分,端口可以自定义为 3306 或 1521、或者其他端口。
安装 OBProxy
安装 OBProxy RPM 包。
其中
$rpm_dir表示存放 RPM 包的目录,$rpm_name表示 RPM 包的名称。[root@xxx /]# cd $rpm_dir [root@xxx $rpm_dir]# rpm -ivh $rpm_name说明
obproxy 安装目录在
/opt/taobao/install下。示例如下:
[root@xxx admin]# rpm -ivh obproxy-3.2.3-20220310201314.el7.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:obproxy-3.2.3-20220310201314.el7 ################################# [100%](可选)创建到 obproxy 的软链接。
说明
创建到 obproxy 的软链接可以隐藏掉版本信息,方便后期操作。
obproxy 安装目录在 /opt/taobao/install 下。obproxy 进程 home 目录是
/opt/taobao/install/obproxy,这是一个软链接,实际指向相应的 obproxy 版本软件目录。[root@xxx admin]# su - admin -bash-4.2$ cd /opt/taobao/install -bash-4.2$ sudo ln -s obproxy-3.2.3 obproxy -bash-4.2$ ll total 8 drwxr-xr-x 9 root root 4096 Mar 22 10:24 ajdk-8.3.6-b129 lrwxrwxrwx 1 root root 13 Apr 28 10:25 obproxy -> obproxy-3.2.3 drwxr-xr-x 4 admin admin 4096 Apr 27 17:56 obproxy-3.2.3 --把 obproxy 的所有者和所属组都改为 admin。 [root@xxx install]# chown -R admin:admin obproxy [root@xxx install]# ll total 8 drwxr-xr-x 9 root root 4096 Mar 22 10:24 ajdk-8.3.6-b129 lrwxrwxrwx 1 admin admin 13 Apr 28 10:25 obproxy -> obproxy-3.2.3 drwxr-xr-x 4 admin admin 4096 Apr 27 17:56 obproxy-3.2.3建立 obproxy 进程运行日志目录。
obproxy 进程的运行日志目录通过软链接指向
/home/admin/logs/obproxy/log。[root@xxx admin]# su - admin -bash-4.2$ mkdir -p /home/admin/logs/obproxy/log -bash-4.2$ for t in {log};do ln -s /opt/taobao/install/obproxy/$t /home/admin/logs/obproxy/log/$t; done -bash-4.2$ tree /opt/taobao/install/obproxy /opt/taobao/install/obproxy |-- bin | |-- obp_xflush.py | |-- obproxy | |-- obproxyd.sh | `-- unzip.py |-- log -> /home/admin/logs/obproxy/log |-- minidump -> /home/admin/logs/obproxy/minidump |-- start_obproxy.sh `-- tools |-- dump_syms |-- log4cplus.conf |-- minidump.sh |-- minidump_stackwalk `-- obproxy.sym 3 directories, 11 files
初始化 OBProxy
初始化 OBProxy 账户
OBProxy 需要跟后端 OBServer 节点保持通信。所以需要提前在 OceanBase 集群的 sys 租户下为 OBProxy 创建连接用户(proxyro)和密码。后续在启动 OBProxy 时可通过设置 proxy 启动参数的方式来告知 proxy。
说明
proxyro 用户是 OBProxy 访问 OceanBase 集群的用户。一个 OceanBase 集群对应一个 proxyro 账号。
示例如下:
创建 proxyro 用户并授予 SELECT 权限。
$ obclient -h127.1 -uroot@sys -P2881 -p -c -A
Enter password:
obclient> CREATE USER proxyro IDENTIFIED BY '**1***';
Query OK, 0 rows affected
obclient> GRANT SELECT ON *.* TO proxyro;
Query OK, 0 rows affected
obclient> SHOW GRANTS FOR proxyro;
+----------------------------------+
| Grants for proxyro@% |
+----------------------------------+
| GRANT SELECT ON *.* TO 'proxyro' |
+----------------------------------+
1 row in set
启动 OBProxy
注意
启动 OBProxy 时,请在 admin 用户下并在 OBProxy 软件的 home 目录。其他用户或者其他目录下启动都可能带来问题。
OBProxy 启动时需要知道 OceanBase 集群在哪里,这是通过参数 rootservice_list 指定。
下面以三副本 OceanBase 集群为例。
[root@xxx admin]# su - admin -bash-4.2$ cd /opt/taobao/install/obproxy && bin/obproxy -r "10.10.10.1:2881;10.10.10.2:2881;10.10.10.3:2881" -p 2883 -o "observer_sys_password=$sha1_value,enable_strict_kernel_release=false,enable_cluster_checkout=false,enable_metadb_used=false" -c obdemo说明
$sha1_value应根据实际设置密码替换。设置 proxy 启动参数方式,设置的密码是 sha1 后的值,而不是原始值。例如:proxyro 用户设置的密码是123456,则需要设置observer_sys_password的值是7c4a8d09ca3762af61e59520943dc26494f8941b。- 示例 IP 做了脱敏处理,这不是安装需求。在启动时应根据自己机器真实 IP 填写。
参数解释:
参数 说明 -r指定 OBServer 服务器 IP 和端口。 -p指定服务端口号,一般指定为 2883。-c指定集群名称。 -o指定硬件或者内核参数配置。 (可选)如果前面模拟了 OCP Web 服务,OBProxy 启动时也可以指定 API 地址。
-bash-4.2$ cd /opt/taobao/install/obproxy && bin/obproxy -p 2883 -c obdemo -o "obproxy_config_server_url=http://10.10.10.1:8088/services?Action=GetObProxyConfig&User_ID=alibaba-inc&uid=ocpmaster,enable_cluster_checkout=false,enable_strict_kernel_release=false,enable_metadb_used=false"启动之后,可以检查进程是否存在。
-bash-4.2$ ps -ef|grep obproxy停止 OBProxy 进程的方法是直接 kill。
kill -9 `pidof obproxy`再次启动 OBProxy 进程时就不需要指定那么参数。因为参数已经写到参数文件里。
cd /opt/taobao/install/obproxy && bin/obproxyOBProxy 的运行日志在
/opt/taobao/install/obproxy/log下,也就是/home/admin/logs/obproxy/log下。[root@xxx obproxy]# ll log lrwxrwxrwx 1 admin admin 28 Apr 27 17:56 log -> /home/admin/logs/obproxy/log
OceanBase 数据库连接示例
通过 OBProxy 连接时,用户名的格式需要包含用户名、租户名和集群名。格式为: 用户名@租户名#集群名 或 集群名:租户名:用户名。
$ obclient -h10.10.10.1 -uroot@sys#obdemo -P2883 -p -c -A oceanbase
Enter password:
或
$ obclient -h10.10.10.1 -uobdemo:sys:root -P2883 -p -c -A oceanbase
Enter password:
调整 OBProxy 参数
下面是 obproxy 的一些参数配置用于减少运行日志量或降低 CPU 消耗,请根据实际情况修改。
obclient> ALTER PROXYCONFIG SET slow_proxy_process_time_threshold='1000ms';
Query OK, 0 rows affected
obclient> ALTER PROXYCONFIG SET xflush_log_level=ERROR;
Query OK, 0 rows affected
obclient> ALTER PROXYCONFIG SET syslog_level=WARN;
Query OK, 0 rows affected
obclient> ALTER PROXYCONFIG SET enable_compression_protocol=false;
Query OK, 0 rows affected
obclient> SHOW PROXYCONFIG LIKE '%compress%'\G
*************************** 1. row ***************************
name: enable_compression_protocol
value: False
info: if enabled, proxy will use compression protocol with server
need_reboot: false
visible_level: USER
*************************** 2. row ***************************
name: enable_syslog_file_compress
value: False
info: Whether to enable archive log compression
need_reboot: false
visible_level: SYS
2 rows in set



