•  🏠 个人主页:阿福
  • 📚 版权: 本文由【阿福Chris】原创、在CSDN首发、需要转载请联系博主
  • 🤹‍♂️ 如果文章对您有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦

上一篇文章我们分享了如何通过 Docker 快速体验 OceanBase 集群,大家一定对 OB 有了一个整体的认识。那么本文章我们来尝试手动部署一套 OceanBase 集群。当我们学会手动部署 OceanBase 集群后,如果 OBD 的功能不满足需求时,就可以自己写程序脚本做 OceanBase 集群的部署,或者在集群出现异常时,可以手动做一些应急处理

本次我们根据官方提供的手动部署文档来一步步进行,大家如果在我的文章中有疑问,也可以参考官方链接的内容:OceanBase 社区版

1.集群规划

1.1 集群角色划分

本次部署 OceanBase 三节点集群,三节点每个节点占用一台服务器部署observer;另外单独采用一台服务器作为中控机;通过中控机直接远程登录到 OceanBase 节点上部署启动 observer 进程,并在中控机上部署 obproxy 进程。架构图如下:

1.2 机器划分

官方建议的机器可用内存最好是8G以上,所以我这里4台机器均分配了10G的虚拟内存。CPU是每个虚拟机2个虚拟核心。它们的角色分配如下:

角色机器备注

obd

obproxy

obclient

10.211.55.54

中控机,自动化部署软件

访问反向代理

命令行客户端

observer110.211.55.55OceanBase 数据库 zone1
observer210.211.55.56OceanBase 数据库 zone2
observer310.211.55.57OceanBase 数据库 zone3

2.系统准备

2.1 机器三节点之间时间同步检查

集群架构的服务器之间,必须做好时间同步,如果客户有时间同步服务器,通常直接与其同步配置好所有服务器时间;如果客户没有,那么至少我们需要在所有数据库服务器上做好Chrony时间同步。

时间同步都配置好后,请使用 clockdiff 命令检查中控机与其他服务器之间的误差,三节点时间同步误差如果超过 50ms,后面初始化集群一定会失败。以下是我本地做同步的日志,大家需要注意的是 delta= 部分。

[chris@obproxy ~]$ ifconfig | grep 10.211
        inet 10.211.55.54  netmask 255.255.255.0  broadcast 10.211.55.255
[chris@obproxy ~]$ sudo clockdiff 10.211.55.55
[sudo] chris 的密码:
.
host=10.211.55.55 rtt=750(187)ms/0ms delta=-38ms/-38ms Tue Mar 22 21:51:19 2022
[chris@obproxy ~]$ sudo clockdiff 10.211.55.56
.
host=10.211.55.56 rtt=750(187)ms/0ms delta=-3ms/-3ms Tue Mar 22 21:51:22 2022
[chris@obproxy ~]$ sudo clockdiff 10.211.55.57
.....
host=10.211.55.57 rtt=237(295)ms/0ms delta=-1ms/-1ms Tue Mar 22 21:51:27 2022
[chris@obproxy ~]$

需要注意的是,节点的时间误差有缓慢递增的特点,也许当前集群能正常工作,但一天后,由于节点时间误差扩大到 50ms 以外,该节点就会掉线。

2.2 服务器内核参数修改

OceanBase 数据库是单进程软件,使用时需要访问网络、打开多个文件以及开启很多 TCP 连接,所以需要修改内核参数和用户会话设置。在进行配置数据库安装之前,首先需要把所有服务器的内核参数都修改一下,可以参考如下标准配置进行:

vim /etc/sysctl.conf

net.core.somaxconn = 2048
net.core.netdev_max_backlog = 10000
net.core.rmem_default = 16777216
net.core.wmem_default = 16777216
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

net.ipv4.ip_local_port_range = 3500 65535
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_slow_start_after_idle=0

vm.swappiness = 0
vm.min_free_kbytes = 2097152
vm.max_map_count=655360
fs.aio-max-nr=1048576

配置完成后,使用 sudo sysctl -p命令使参数生效。

2.3 修改会话变量设置

如果要修改会话限制,就必须配置 limits 文件。 OceanBase 数据库的进程涉及的限制包括:线程最大栈空间大小(Stack)、最大文件句柄数(Open Files)和 core 文件大小(Core File Size)。由于我的操作系统是CentOS 7, 所以我这里把 limits.conf(增加内容) 和 20-nproc.conf(删除内容) 两个文件进行修改

修改资源限制文件 vi /etc/security/limits.conf ,增加内容:


* soft nofile 655360
* hard nofile 655360
* soft nproc 655360
* hard nproc 655360
* soft core unlimited
* hard core unlimited
* soft stack unlimited
* hard stack unlimited

修改资源限制文件 vi /etc/security/limits.d/20-nproc.conf ,删除第一行重复的限制:

*          soft    nproc     4096       #删除该行
root       soft    nproc     unlimited

 修改后,已经登录的会话需要退出后重新登录才生效。并可通过如下命令查看是否生效:

ulimit -a

2.4 关闭防火墙和 SELinux

关闭防火墙这里就不赘述了,请参考以下三个命令在每台服务器上都操作并确认关闭:

systemctl disable firewalld 
systemctl stop firewalld
systemctl status firewalld

SELINUX关闭请操作文件并修改为 disabled :

vi /etc/selinux/config
setenforce 0

2.5 配置用户

这里我们采用官方默认的 admin 用户名,后文均以用户 admin 为例。

sudo useradd admin
sudo passwd admin

2.6 配置服务器免密登陆

由于我们计划使用中控机发起自动化部署 OceanBase 集群,所有的命令通过中控机向 OceanBase 集群节点发出。所以需要配置中控机中 OBD 运行的用户到 OceanBase 集群节点中 observer 安装的用户的 SSH 免密登录。

本文示例是中控机的用户 admin 到 observer 节点的用户 admin 的免密登录。

这个配置 SSH 免密登录方法有很多,这里选择将中控机的 RSA 或 DSA 公钥复制到目标节点的 SSH 配置文件中。

  • 在中控机生成 RSA 或 DSA 公钥和私钥:
[admin@obproxy ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/admin/.ssh/id_rsa):
Created directory '/home/admin/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/admin/.ssh/id_rsa.
Your public key has been saved in /home/admin/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:+iANnvFqXtIOrjFUi8CB8KkdlNSy89LxGuMzdn0RzoE admin@obproxy
The key's randomart image is:
+---[RSA 2048]----+
|+ooo             |
|oo+..            |
|..+o.    .       |
| +o+..  E o      |
|. +++o  So o     |
| ...=B..  +      |
|  oo*+B.   .     |
|   +BB.o. .      |
|  .=++. ..       |
+----[SHA256]-----+
[admin@obproxy ~]$ ls -al .ssh
total 16
drwx------ 2 admin admin 4096 Mar 23 09:52 .
drwx------ 5 admin admin 4096 Mar 23 09:52 ..
-rw------- 1 admin admin 1675 Mar 23 09:52 id_rsa
-rw-r--r-- 1 admin admin  395 Mar 23 09:52 id_rsa.pub
  • 打通到本机的 SSH 免密登录:
ssh-copy-id admin@10.211.55.55
ssh-copy-id admin@10.211.55.56
ssh-copy-id admin@10.211.55.57

3.集群初始化

3.1 安装 OceanBase 软件包

首先我们从社区官网下载社区版本的x86安装包:

下载完成后,将observer rpm包,上传到3台observer服务器并解压缩:

# 从本地上传rpm包到三台observer服务器
# chris @ ChrisdeMacBook-Pro in ~/Downloads [10:08:58]
$ scp oceanbase-ce-3.1.2-10000392021123010.el7.x86_64.rpm admin@10.211.55.55:/home/admin/
admin@10.211.55.55's password:
oceanbase-ce-3.1.2-10000392021123010.el7.x86_64.rpm                                                                               100%   46MB 144.4MB/s   00:00

# chris @ ChrisdeMacBook-Pro in ~/Downloads [10:09:39]
$ scp oceanbase-ce-3.1.2-10000392021123010.el7.x86_64.rpm admin@10.211.55.56:/home/admin/
admin@10.211.55.56's password:
oceanbase-ce-3.1.2-10000392021123010.el7.x86_64.rpm                                                                               100%   46MB 162.6MB/s   00:00

# chris @ ChrisdeMacBook-Pro in ~/Downloads [10:09:47]
$ scp oceanbase-ce-3.1.2-10000392021123010.el7.x86_64.rpm admin@10.211.55.57:/home/admin/
admin@10.211.55.57's password:
oceanbase-ce-3.1.2-10000392021123010.el7.x86_64.rpm                                                                               100%   46MB 157.2MB/s   00:00

执行安装,这里需要注意,最好给admin一个sudo权限方便安装:

[admin@observer1 ~]$ sudo rpm -ivh oceanbase-ce-libs-3.1.2-10000392021123010.el7.x86_64.rpm
warning: oceanbase-ce-libs-3.1.2-10000392021123010.el7.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID e9b4a7aa: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:oceanbase-ce-libs-3.1.2-100003920################################# [100%]
[admin@observer1 ~]$ rpm -ivh oceanbase-ce-3.1.2-10000392021123010.el7.x86_64.rpm
warning: oceanbase-ce-3.1.2-10000392021123010.el7.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID e9b4a7aa: NOKEY
error: can't create transaction lock on /var/lib/rpm/.rpm.lock (Permission denied)
[admin@observer1 ~]$ sudo rpm -ivh oceanbase-ce-3.1.2-10000392021123010.el7.x86_64.rpm
warning: oceanbase-ce-3.1.2-10000392021123010.el7.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID e9b4a7aa: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:oceanbase-ce-3.1.2-10000392021123################################# [100%]
[admin@observer1 ~]$ ls
oceanbase  oceanbase-ce-3.1.2-10000392021123010.el7.x86_64.rpm  oceanbase-ce-libs-3.1.2-10000392021123010.el7.x86_64.rpm

如果安装过程中出现如下两个错误,请到社区官网上下载oceanbase-ce-libs rpm包安装依赖:

[admin@observer1 ~]$ sudo rpm -ivh oceanbase-ce-3.1.2-10000392021123010.el7.x86_64.rpm
warning: oceanbase-ce-3.1.2-10000392021123010.el7.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID e9b4a7aa: NOKEY
error: Failed dependencies:
	libmariadb.so.3()(64bit) is needed by oceanbase-ce-3.1.2-10000392021123010.el7.x86_64
	libmariadb.so.3(libmysqlclient_18)(64bit) is needed by oceanbase-ce-3.1.2-10000392021123010.el7.x86_64

请保证所有observer服务器均安装完成,再进行下一步操作。 

3.2 初始化目录

手动部署时,OceanBase 节点上的相关目录都需要手动创建。

[admin@observer3 ~]$ sudo mkdir /data /redo
[admin@observer3 ~]$ sudo chown -Rf admin:admin ~/oceanbase /data /redo
[admin@observer3 ~]$ mkdir -p ~/oceanbase/store/obdemo  /data/obdemo/{sstable,etc3} /redo/obdemo/{clog,ilog,slog,etc2}
[admin@observer3 ~]$ for f in {clog,ilog,slog,etc2}; do ln -s /redo/obdemo/$f ~/oceanbase/store/obdemo/$f ; done
[admin@observer3 ~]$ for f in {sstable,etc3}; do ln -s /data/obdemo/$f ~/oceanbase/store/obdemo/$f; done

如果创建目录时出现权限问题:permission denied,请检查~/oceanbase目录的权限,可以采用如下语句修改权限满足要求:

[admin@observer3 ~]$ sudo mkdir /data /redo
[admin@observer3 ~]$ sudo chown -Rf admin:admin ~/oceanbase /data /redo

3.3 启动 OBSERVER 进程

每个机器的启动参数大部分都相同,只有少数不一样,需要特别留意。

  • 10.211.55.55:
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/oceanbase/lib' >> ~/.bash_profile
. ~/.bash_profile
cd ~/oceanbase && bin/observer -i eth0 -p 2881 -P 2882 -z zone1 -d ~/oceanbase/store/obdemo -r '10.211.55.55:2882:2881;10.211.55.56:2882:2881;10.211.55.57:2882:2881' -c 20210912 -n obdemo -o "memory_limit=8G,cache_wash_threshold=1G,__min_full_resource_pool_memory=268435456,system_memory=2G,memory_chunk_cache_size=128M,cpu_count=8,net_thread_count=4,datafile_size=20G,stack_size=1536K,config_additional_dir=/data/obdemo/etc3;/redo/obdemo/etc2" -d ~/oceanbase/store/obdemo
  •  10.211.55.56:
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/oceanbase/lib' >> ~/.bash_profile
. ~/.bash_profile
cd ~/oceanbase && bin/observer -i eth0 -p 2881 -P 2882 -z zone2 -d ~/oceanbase/store/obdemo -r '10.211.55.55:2882:2881;10.211.55.56:2882:2881;10.211.55.57:2882:2881' -c 20210912 -n obdemo -o "memory_limit=8G,cache_wash_threshold=1G,__min_full_resource_pool_memory=268435456,system_memory=2G,memory_chunk_cache_size=128M,cpu_count=8,net_thread_count=4,datafile_size=20G,stack_size=1536K,config_additional_dir=/data/obdemo/etc3;/redo/obdemo/etc2" -d ~/oceanbase/store/obdemo
  •  10.211.55.57:
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/oceanbase/lib' >> ~/.bash_profile
. ~/.bash_profile
cd ~/oceanbase && bin/observer -i eth0 -p 2881 -P 2882 -z zone3 -d ~/oceanbase/store/obdemo -r '10.211.55.55:2882:2881;10.211.55.56:2882:2881;10.211.55.57:2882:2881' -c 20210912 -n obdemo -o "memory_limit=8G,cache_wash_threshold=1G,__min_full_resource_pool_memory=268435456,system_memory=2G,memory_chunk_cache_size=128M,cpu_count=8,net_thread_count=4,datafile_size=20G,stack_size=1536K,config_additional_dir=/data/obdemo/etc3;/redo/obdemo/etc2" -d ~/oceanbase/store/obdemo
  • 在我的测试环境中,三个节点配置都一致,所以启动参数里只有参数 -z 不一样(-z 参数指定该节点是哪个 zone )。三个 zone 的三个节点初始化为一个三副本集群。
  • 大家注意-o后面的资源配置参数,我这里开始定义了数据文件大小是50G,在初始化过程中,遇到了空间不足的问题;后来我将大小改成20G,然后把sstable下的文件删掉重新出实话就成功了。
  • 另外大家主要-o后面的cpu_count参数,社区老师建议虚拟机最少要3个虚拟核心,然后cpu_count可以是虚拟核心的3-4倍,我这里采用的8也是可以的,如果这里设置不正确会报错 ERROR 4015 (HY000): System error,无法通过常规日志查找到错误根源,切记!!!

三台机器都启动成功后,使用命令 netstat -ntlp进行查看,可以看到2881和2882端口均被observer占用:

 3.4 集群自举(初始化)

当 OceanBase 集群三个节点都正常启动,并且监听正常时,您可连接到任一节点(通过 2881 端口直连),进行自举(bootstrap 集群初始化)操作。 初始密码是空。

大家注意,我在这一步遇到了好几个问题,大家可以参考我的链接:

kill -9 `pidof observer`
/bin/rm -rf ~/oceanbase/store/obdemo/*/*
  • 关于错误:ERROR 1235 (0A000): unit min memory less than __min_full_resource_pool_memory not supported - 这个问题是因为在虚拟机环境中资源不够,请根据文档上的要求,增加该启动参数
[admin@observer1 ~]$ mysql -h 10.211.55.56 -u root -P 2881 -p -c -A
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 3221225472
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 [(none)]>set session ob_query_timeout=1000000000; alter system bootstrap ZONE 'zone1' SERVER '10.211.55.55:2882', ZONE 'zone2' SERVER '10.211.55.56:2882', ZONE 'zone3' SERVER '10.211.55.57:2882';
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (30.40 sec)

3.5 设置相关密码

上面我们已经完成集群自举了,由于默认集群管理员密码为空,下面我们需要给新创建的数据库集群管理员设置密码,集群管理员(root@sys)密码设置步骤如下:

[admin@observer1 oceanbase]$ mysql -h 10.211.55.55 -u root@sys -P 2881 -p -c -A
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 3221571080
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 [(none)]> alter user root identified by '4S9wDbSr' ;
Query OK, 0 rows affected (0.04 sec)

MySQL [(none)]> exit
Bye

3.6 创建新租户

数据库初始化完成后,我们就可以创建新租户了,操作如下:

MySQL [(none)]> alter resource unit sys_unit_config min_cpu=2;
Query OK, 0 rows affected (0.02 sec)

MySQL [(none)]> CREATE resource pool my_pool unit = 'S1C1G', unit_num = 1;
Query OK, 0 rows affected (0.04 sec)

MySQL [(none)]> create tenant obmysql resource_pool_list=('my_pool'), primary_zone='RANDOM',comment 'mysql tenant/instance', charset='utf8' set ob_tcp_invited_nodes='%', ob_compatibility_mode='mysql';
Query OK, 0 rows affected (2.97 sec)

3.7 安装 OBPROXY 软件包

手动部署时需要安装 OceanBase 数据库的 OBPROXY 软件。首先我们从网站上下载安装包:obproxy-3.2.0-1.el7.x86_64.rpm,我们安装在第一台服务器上,IP地址为:10.211.55.54

[admin@obproxy ~]$ sudo rpm -ivh obproxy-3.2.0-1.el7.x86_64.rpm
[sudo] password for admin:
warning: obproxy-3.2.0-1.el7.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID e9b4a7aa: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:obproxy-3.2.0-1.el7              ################################# [100%]

社区版的 OBPROXY 软件默认安装到 /home/admin/obproxy-版本号 下。

[admin@obproxy ~]$ tree obproxy-3.2.0
obproxy-3.2.0
└── bin
    ├── obproxy
    └── obproxyd.sh

1 directory, 2 files

3.7 启动 OBPROXY 进程

启动 OBPROXY 进程推荐放在软件安装目录,进程 obproxy 会在该目录下生成目录 etc 用以保存 OBPROXY 的运行参数,以及目录 log 用以保存运行日志。

cd ~/obproxy-3.2.0/ && bin/obproxy -r "10.211.55.55:2881;10.211.55.56:2881;10.211.55.57:2881" -p 2883 -o "enable_strict_kernel_release=false,enable_cluster_checkout=false,enable_metadb_used=false" -c obdemo
  • 检查 OBPROXY 监听是否正常

    进程 obproxy 默认会监听2个端口:2883 和 2884。

    [admin@obproxy obproxy-3.2.0]$ netstat -ntlp |grep obproxy
    (Not all processes could be identified, non-owned process info
     will not be shown, you would have to be root to see it all.)
    tcp        0      0 0.0.0.0:2883            0.0.0.0:*               LISTEN      12011/bin/obproxy
    tcp        0      0 0.0.0.0:2884            0.0.0.0:*               LISTEN      12011/bin/obproxy
  • 登录 OBPROXY 修改密码

    1. 登录 OBPROXY

      登录用户名:root@proxysys,端口:2883,初始密码:空。

      [admin@obproxy obproxy-3.2.0]$ mysql -h 10.211.55.54 -u root@proxysys -P 2883 -p
      Enter password:
      Welcome to the MariaDB monitor.  Commands end with ; or \g.
      Your MySQL connection id is 1
      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)]> 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  |       | password for observer sys user | false       | SYS           |
      | obproxy_sys_password   |       | password for obproxy sys user  | false       | SYS           |
      +------------------------+-------+--------------------------------+-------------+---------------+
      3 rows in set (0.00 sec)
      
      MySQL [(none)]> 
    2. 修改 OBPROXY 用户密码

      您可通过修改参数的方式来修改 OBPROXY 用户密码,使用命令为 alter proxyconfig set

      alter proxyconfig set obproxy_sys_password = 'wPhGddup' ;
    3. 修改 OBPROXY 连接 OceanBase 集群用户 proxyro 的密码

      在修改 OBPROXY 用户密码的同时还需要修改 OBPROXY 连接 OceanBase 集群用户 proxyro 的密码,这样 OBPROXY 才能和 OceanBase 集群正常连接。

      OBPROXY 连接 OceanBase 集群用户 proxyro 的密码就是前面 OceanBase 集群初始化后创建的用户 proxyro 的密码。

      alter proxyconfig set observer_sys_password = 'SWoLCQRH' ;
    4. 查看是否部署成功

      退出后,您可尝试通过 OBPROXY 连接 OceanBase 集群, 如果能查看所有会话,则说明 OBPROXY 部署成功。

    5. mysql -h172.20.249.50 -uroot@sys#obdemo -P2883 -p4S9wDbSr -c -A oceanbase
      
      输出:
      [admin@obproxy obproxy-3.1.0]$ mysql -h172.20.249.50 -uroot@sys#obdemo -P2883 -p4S9wDbSr -c -A oceanbase
      Welcome to the MariaDB monitor.  Commands end with ; or \g.
      Your MySQL connection id is 5
      Server version: 5.6.25 OceanBase 3.1.0 (r3-b20901e8c84d3ea774beeaca963c67d7802e4b4e) (Built Aug 10 2021 08:10:38)
      
      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]> 

4.写在最后

至此为止,"如何手动部署 OceanBase集群"分享结束,欢迎大家添加博主交流。

最后,如果觉得文章对您有帮助,请给博主点赞、收藏、关注,博主会不断推出更多优质的文章

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐