OceanBase 2.x 试用版安装体验——OCP 2.3

1. 前言

OceanBase 2.2相关软件包近期已经通过OceanBase官网提供,其中包括一个OceanBase数据库产品、OceanBase自动化运维产品(OCP)的安装文件和相关容器镜像。试用版指的是相关产品都是免费用于学习、开发和测试环境使用,功能上跟正式版并没有多大区别。

2. 安装规划

OceanBase数据库产品是必须安装的,自动化运维产品(OCP)不是必须但是建议安装。如果不安装OCP,则需要手动安装OceanBase数据库产品,详情参考《OceanBase 2.x体验:手动搭建OceanBase集群》。
官网下载文件里包含试用版安装手册,本文分享OCP安装体验,大家在使用中遇到任何技术问题都可以联系我或者其他OceanBase团队成员。

2.1 容器介绍

OCP 2.x版本相比1.x版本做了重构,架构上简单很多。OCP部署架构至少包含三个Docker容器:OCP应用容器、OBProxy容器、元数据库OB容器。使用Docker容器技术主要是方便自动化部署,详情请参考《OceanBase 运维平台(OCP)使用基础:Docker技术》。
在三个容器里,OBProxy容器是最简单的,里面只有一个OBProxy进程,严格来说这个容器用一个单独的OBProxy进程也可以代替。其他两个容器就相对复杂一点。三个容器的启动顺序是先安装元数据库OB容器,然后启动OBProxy容器,最后OCP容器。
实际安装步骤上会在安装OBProxy容器之前先启动一个临时的OCP容器(只有提供API的功能),等OBProxy运行正常后,再将临时的OCP容器替换为正式的OCP容器。
试用版的OCP元数据库只有单节点,正式版的会是三节点的OB集群。三个容器会在三台机器上启动。因此OBProxy会有三个,OCP也会有三个,对应的访问地址需要统一。通常有两种做法:用VIP或者DNS做负载均衡。所以在正式版的OCP安装步骤里会先启动一个负载均衡容器(本质是一个haproxy或者dns服务)。

2.2 机器初始化需求

三个容器里,OB容器是存储元数据的,其数据库文件使用的是宿主机的目录。所以需要在宿主机上做好OB数据库文件目录规划。通常最佳实践就是数据文件和事务日志文件使用单独的文件系统。
OB进程和OBProxy进程运行的owner都是用户admin,所以安装前要求宿主机先创建用户admin,并且对admin用户能使用的默认资源也需要修改。
主机的内核参数、防火墙、安全等参数也需要针对数据库特点做相应调整。
数据库自动化运维平台的本质就是通过一个或一组中心运维节点,ssh远程到数据库节点上执行特定的脚本。所以网络上各个节点要彼此互通,都要运行sshd服务并监听相同的端口(默认是22,此次安装不支持修改ssh自定义端口),并且确保不会有防火墙阻拦这些节点间特定端口通信。
OCP和OB相关的监听通信端口比较多,简单起见,请直接关闭主机防火墙。生产网会在交换机级别提前开通相关端口访问权限。

3. 机器初始化

OceanBase 2.2试用版安装包官网下载地址:https://oceanbase.alipay.com/download/resource
文件大小1.9G左右,下载文件后建议用root或者有sudo权限的账户解压缩并运行相关命令。

[root@xxx /root]
#tar zxvf oceanbase_trial.tar.gz
[root@xxx /root]
#ls -lrth oceanbase_trial/

3.1 安装文件列表

OceanBase 2.x 试用版安装体验——OCP 2.3

以上文件中,以.rpm结尾的是OB、OBProxy和obclient的安装包,以install开头以.sh结尾的文件是自动化安装的shell脚本,有兴趣看具体安装逻辑的就看这些脚本。

obcluster.conf是安装过程中使用的配置文件,需要修改里面的信息。

clonescripts目录是用于主机初始化的,每个OB机器都建议使用这个目录里脚本做一次初始化。

[root@xxx /root]
#cd oceanbase_trial/clonescripts/

[root@xxx /root/oceanbase_trial/clonescripts]
#ls
auto_clone.sh  clone.conf  clone_remote.sh  clone.sh  db_ob_v1  pre_check.sh

初始化是通过脚本clone.sh执行,会读取配置文件clone.conf的内容。

[root@xxx /root/oceanbase_trial/clonescripts]
#./clone.sh -h
Usage:  ./clone.sh [OPTIONS]

Options:
  -h, --help                   Print help and exit
  -a, --auto-config            Automatically generate clone config, use -d | --dry-run to get the auto config result
  -r, --role                   Set machine role, by default is ocp, could be set as ob or obbackup
  -d, --dry-run                Print dry run information
  -V, --version                Print version
  -p, --disk-part              Only part disk
  -u, --add-user               Only add user
  -c, --run-config             Only run OS parameters config
  -i, --install-docker         Only install docker
  -m, --install-rpms           Only install dependent rpms
  -t, --pre-check              Pre-check after clone

如果机型是蚂蚁机型,初始化时使用自动选型(-a)最快,如果是外部客户机型,建议逐项初始化。

初始化的建议顺序是:修改配置文件、安装rpm包、修改内核参数、新建用户、磁盘分区、安装docker(可选)。

3.2 修改配置文件clone.conf

配置文件里配置是对应各个初始化任务的,如果不做那一项初始化任务,那参数就可以忽略。如不是所有的机器都需要安装Docker,那么docker相关参数就可以忽略。

3.2.1 机器角色(必选)

## machine role, value could be ob, ocp or obbackup
machineRole=ocp
  • ocp : 这是OCP机器,会初始化/docker、/data/1、/data/log1、/home(可选) 目录。
  • ob : 这是OB机器,不会初始化/docker目录,会初始化/data/1、/data/log1、/home(可选) 目录。
  • obbackup :这是备份机器,备份以后单独介绍。

3.2.2 磁盘分区配置(可选)

分区配置主要是为了针对不同机型创建上面相应的目录。客户机型千差万别,这里的配置和方法不一定适用所有的机型。客户可以针对本机磁盘特点自行分区创建相关目录。

part disk mode, value either lvm or parted

diskPartMode=lvm

设置分区方式,目前有两种:

  • lvm :使用lvm相关命令,将多盘聚合到一个VG里,然后划分出多个LV,包含数据目录、日志目录、HOME目录(可选,由参数决定)、Docker目录(可选,由参数决定)。建议用lvm。
  • parted :使用parted命令,对一个大盘做划分,分出多个裸设备用于数据目录、日志目录、HOME目录(可选,由参数决定)、Docker目录(可选,由参数决定)。

关于目录部分,lvm和parted都分别有对应的配置文件部分定义各个目录的大小。

这里有几个注意点:

  1. 日志目录主要是存放事务日志,大小建议内存大小的3到4倍,尤其是要做性能测试的前提下。如果机器资源不好,只是看看OB的功能,这个日志目录大小可以是内存的2倍左右。
  2. 数据目录和日志目录强烈建议是不同的LV或者裸设备,即不能共用同一个文件系统。如果条件有限机器只有一块大盘并且还被操作系统用了,那就不能执行磁盘分区命令。需要手动创建相关目录。

通常建议使用lvm分区方便些。

############ lvm settings begin ###################
## could be partition or device name
devArray=(sdb sdc sdd sde sdf sdg sdh sdi sdj sdk sdl)

这是设置多盘的正确方式。这些值取自命令pvs里列出来未使用的PV。

3.2.3 操作系统类型

## os, option support centos, alios and redhat
os=alios

操作系统类型,外部客户机型一般选择centos或redhat。

这个主要是为了安装软件包时选择对应操作系统类型的软件包用。不过安装脚本并没有包含全部的软件包文件,还需要依赖客户机的yum install命令。

所以建议客户机器所有机器都配置好YUM源。如果没有远程的可以做一个本地的YUM源指向光盘镜像文件。

3.2.4 Home目录

OCP、OB以及备份软件等都会安装在admin用户下,使用admin的默认目录/home/admin。尤其是OB的运行日志(observer.log和rootservice.log等)都会在/home/admin目录下。所以/home分区的空间建议在100G以上。测试环境可以小一些,但是如果很少的话,要时刻留意空间耗尽。OB的运行日志默认日志级别都是INFO级别,日志增长非常快。

## if make home disk, value could be yes or no. If yes selected, the script will make home disk, if no selected, the script will not make home disk, in which case you already have home disk made and donot
 want re-make it again
makeHomeDisk=no

如果本机的/home分区空间够大,那就不需要初始化/home目录;否则这里设置为自动初始化/home目录。此前/home/目录的数据会备份到/tmp/下,但是并不会恢复回来。这个要注意!

3.3 安装RPM包

先确保本机的yum源是可用的。

[root@xxx /root/oceanbase_trial/clonescripts]
#yum list

执行初始化脚本

[root@xxx /root/oceanbase_trial/clonescripts]
#./clone.sh -m

3.4 修改内核参数

主要是修改内核参数 /etc/sysctl.conf

[root@xxx /root/oceanbase_trial/clonescripts]
#./clone.sh -c

3.5 新建用户

新建用户admin,并且uid设置为500(这是阿里内部习惯)。后面docker内外目录映射的时候没有做uid映射转换,所以默认要求内外目录的owner都是admin并且uid是500.否则,可能面临目录权限问题。

客户机如果已经存在admin用户,会被删除掉。

[root@xxx /root/oceanbase_trial/clonescripts]
#./clone.sh -u

3.6 磁盘分区

注意前面配置文件里要配置正确,否则可能破坏已有数据。

[root@xxx /root/oceanbase_trial/clonescripts]
#./clone.sh -p

这个步骤不支持重跑。如果运行出错后,可能是一个中间状态,这个时候需要手动删除相关裸设备或者LV/VG/PV等。

下面是初始化后的一个示例。

OceanBase 2.x 试用版安装体验——OCP 2.3

3.7 安装docker软件(可选)

这一步安装docker相关软件包并启动docker服务,默认会使用目录/docker。所以在这一步之前要确保磁盘已经分区并且/docker目录空间足够。

[root@xxx /root/oceanbase_trial/clonescripts]
#./clone.sh -i

检查安装是否正确用命令

[root@xxx /root/oceanbase_trial/clonescripts]
#systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2020-01-18 15:54:48 CST; 2 weeks 2 days ago
     Docs: http://docs.docker.com
 Main PID: 13771 (dockerd)
   Memory: 2.4G
   CGroup: /system.slice/docker.service
           ├─13771 /usr/bin/dockerd -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock --selinux-enabled=false --log-opt max-size=1g --graph=/docker
           └─13791 docker-containerd --config /var/run/docker/containerd/containerd.toml

Jan 31 11:22:36 xxx dockerd[13771]: time="2020-01-31T11:22:36+08:00" level=info msg="shim docker-containerd-shim started" address="/containerd-shim/moby/28379e1464373c7249a7...ks" pid=71070
Jan 31 11:26:19 xxx dockerd[13771]: time="2020-01-31T11:26:19+08:00" level=error msg="stat cgroup 28379e1464373c7249a76c03162a7dd6e6d285618fd98346180e57dbfc271621" error=""/...ave 4 fields"
Jan 31 11:26:19 xxx dockerd[13771]: time="2020-01-31T11:26:19+08:00" level=info msg="shim reaped" id=28379e1464373c7249a76c03162a7dd6e6d285618fd98346180e57dbfc271621 module=...ainerd/tasks"
Jan 31 11:26:19 xxx dockerd[13771]: time="2020-01-31T11:26:19.780741127+08:00" level=info msg="ignoring event" module=libcontainerd namespace=moby topic=/tasks/delete type="...s.TaskDelete"
Jan 31 11:26:20 xxx dockerd[13771]: time="2020-01-31T11:26:20+08:00" level=error msg="stat cgroup fb959a57982a6312804c0ff765f345d8cf6f007b3d6d222d30eaa0573dceb44f" error=""/...ave 4 fields"
Jan 31 11:26:20 xxx dockerd[13771]: time="2020-01-31T11:26:20+08:00" level=info msg="shim reaped" id=fb959a57982a6312804c0ff765f345d8cf6f007b3d6d222d30eaa0573dceb44f module=...ainerd/tasks"
Jan 31 11:26:20 xxx dockerd[13771]: time="2020-01-31T11:26:20.997790335+08:00" level=info msg="ignoring event" module=libcontainerd namespace=moby topic=/tasks/delete type="...s.TaskDelete"
Jan 31 11:26:25 xxx dockerd[13771]: time="2020-01-31T11:26:25+08:00" level=error msg="stat cgroup 175364fb736988d24c05261497b9d4160188cd8d53e5b2f1b695e79cd4ac5d9c" error=""/...ave 4 fields"
Jan 31 11:26:25 xxx dockerd[13771]: time="2020-01-31T11:26:25+08:00" level=info msg="shim reaped" id=175364fb736988d24c05261497b9d4160188cd8d53e5b2f1b695e79cd4ac5d9c module=...ainerd/tasks"
Jan 31 11:26:25 xxx dockerd[13771]: time="2020-01-31T11:26:25.837715440+08:00" level=info msg="ignoring event" module=libcontainerd namespace=moby topic=/tasks/delete type="...s.TaskDelete"
Hint: Some lines were ellipsized, use -l to show in full.

[root@xxx /root/oceanbase_trial/clonescripts]
#docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

4. 安装OCP

4.1 OCP安装配置文件

OCP安装配置文件是obcluster.conf在解压缩后的目录下。
配置文件需要根据客户机器信息做少量修改。

4.1.1 OCP运行模式

##
SINGLE_OCP_MODE=TRUE
################################   根据环境必须修改 / MUST CHANGE ACCORDING ENVIRONMENT   ################################
############  填写机器IP和root/admin密码 / Edit Machine IP and Password Of root/admin  ############
ZONE1_RS_IP=11.xxx.xxx.5
OBSERVER01_ROOTPASS=root087005
OBSERVER01_ADMINPASS=admin087005
SINGLE_OCP_MODE指定是否单节点运行。如果不是,那就默认是三节点集群形式运行。
ZONE1_RS_IP是单节点IP信息,后面OBSERVER01是这个节点上的root和admin用户的密码。安装完后可以再改密码。

如果是三节点运行,这里配置就要指定三组这样的信息,以1,2,3区分。官网下载的试用版只支持单节点运行模式,这个对学习和POC验证也足够了。

4.1.2 容器资源

############  根据服务器CPU、内存设置容器资源编排 / Allocate Container Resources According To Server  ############
OB_docker_cpus=18
OB_docker_memory=106G
OCP_docker_cpus=8
OCP_docker_memory=16G
OBProxy_docker_cpus=4
OBProxy_docker_memory=6G

OCP由三个容器组成:OB容器、OCP容器和OBProxy容器。这里分别指定每个容器需要的CPU和内存。如果主机资源充足,就多分一点资源。主机资源少的情况下,只能调小这里容器的资源。OB容器内存至少要保证32G,OCP容器内存不要少于16G,OBProxy容器也可以省略直接安装RPM包。

上面配置的主机是32C128G。

4.1.3 容器镜像信息

这里是要指定三个容器对应镜像文件的信息:文件名、REPO和TAG。

############  填写OCP各组件容器的版本信息 / Edit Docker Image, Repo And Tag of OCP Components  ############
# OB docker
docker_image_package=observer1478.tar.gz
OB_image_REPO=reg.docker.alibaba-inc.com/antman/ob-docker
OB_image_TAG=OB1478_20200102_2113
# OCP docker
ocp_docker_image_package=ocp233.tar.gz
OCP_image_REPO=reg.docker.alibaba-inc.com/antman/ocp-all-in-one
OCP_image_TAG=OCP233_20200102_2122
# OBPROXY docker
obproxy_docker_image_package=obproxy156.tar.gz
obproxy_image_REPO=reg.docker.alibaba-inc.com/antman/obproxy
obproxy_image_TAG=OBP156_20200102_2110

如果是官网下载的安装文件,这部份配置信息是不用修改的。
但是如果后续更新了镜像文件,这里信息可能就需要修改。而要查看镜像文件的REPO和TAG信息,可以先将镜像加载(docker load),然后查看镜像信息(docker images)。

[root@xxx /root/oceanbase_trial]
#ls *.gz
obproxy156.tar.gz  observer1478.tar.gz  ocp233.tar.gz

[root@xxx /root/oceanbase_trial]
#for img in `ls *.gz`;do echo $img ;docker load < $img; done
obproxy156.tar.gz
Loaded image: reg.docker.alibaba-inc.com/antman/obproxy:OBP156_20200102_2110
observer1478.tar.gz
Loaded image: reg.docker.alibaba-inc.com/antman/ob-docker:OB1478_20200102_2113
ocp233.tar.gz
Loaded image: reg.docker.alibaba-inc.com/antman/ocp-all-in-one:OCP233_20200102_2122

[root@xxx /root/oceanbase_trial]
#docker images
REPOSITORY                                         TAG                    IMAGE ID            CREATED             SIZE
reg.docker.alibaba-inc.com/antman/ocp-all-in-one   OCP233_20200102_2122   967f985769d2        4 weeks ago         1.8GB
reg.docker.alibaba-inc.com/antman/ob-docker        OB1478_20200102_2113   5351e5990e0f        4 weeks ago         780MB
reg.docker.alibaba-inc.com/antman/obproxy          OBP156_20200102_2110   c4076538faa1        4 weeks ago         282MB

后面其他配置就不用修改了。

4.2 开始安装OCP

4.2.1 安装命令

安装会分为好几步,查看帮助文档可以看到步骤。关于安装的步骤前面已经多次提到这里就不介绍了。

[root@xxxs /root/oceanbase_trial]
#./install.sh -h

Usage:  ./install.sh [OPTIONS]

Options:
  -h, --help                   Print help and exit
  -d, --debug                  Print debug information
  -V, --version                Print version
  -i, --install-steps string   For example 1,3-5,7-
  -c, --clear-steps string     For example 1,3-5,7-
  -f, --config-file string     Read in a config file
  -l, --load-balance           Load balance mode

Steps:
    1. ssh authorization
    2. install load balancer
    3. install ob server
    4. init ocp metadb
    5. install temp OCP
    6. install obproxy
    7. install OCP
    8. POSTCHECK

注意,安装参数是-i,清理参数是-c。都可以连续安装或清理,或者单步安装或清理。
每个命令后都会有相应的日志文件供查看进度。

4.2.2 自动连续安装

[root@xxx /root/oceanbase_trial]
#./install.sh -i 1-
run install.sh with DEBUG=FALSE, INSTALL_STEPS=1 2 3 4 5 6 7 8 CLEAR_STEPS= CONFIG_FILE=/root/oceanbase_trial/obcluster.conf
[2020-02-04 17:25:26.261595] INFO [start antman API service]
LB_MODE=none
[2020-02-04 17:25:26.353919] INFO [step1: making ssh authorization, logfile: /root/oceanbase_trial/logs/ssh_auth.log]
[2020-02-04 17:25:26.832011] INFO [step1: ssh authorization done]
[2020-02-04 17:25:26.847573] INFO [step2: no action need when LB_MODE=none]
[2020-02-04 17:25:26.850503] INFO [step3: check whether OBSERVER port 2881,2882 are in use or not on 11.xxx.xxx.5]
[2020-02-04 17:25:27.197266] INFO [step3: OBSERVER port 2881,2882 are idle on 11.xxx.xxx.5]
[2020-02-04 17:25:27.199657] INFO [step3: installing ob cluster, logfile: /root/oceanbase_trial/logs/install_ob.log]
[2020-02-04 17:30:26.007264] INFO [step3: installation of ob cluster done]
[2020-02-04 17:30:26.009985] INFO [step4: initializing ocp metadb, logfile: /root/oceanbase_trial/logs/init_metadb.log]
[2020-02-04 17:30:26.941684] INFO [step4: initialization of ocp metadb done]
[2020-02-04 17:30:26.944131] INFO [step5: check whether OCP port 8080 is in use or not on 11.xxx.xxx.5]
[2020-02-04 17:30:27.308464] INFO [step5: OCP port 8080 is idle on 11.xxx.xxx.5]
[2020-02-04 17:30:27.311137] INFO [step5: installing temporary ocp, logfile: /root/oceanbase_trial/logs/install_tmp_ocp.log]
[2020-02-04 17:34:36.886177] INFO [step5: installation of temporary ocp done]
[2020-02-04 17:34:36.889325] INFO [step6: check whether OBPROXY port 2883 is in use or not on 11.xxx.xxx.5]
[2020-02-04 17:34:37.084248] INFO [step6: OBPROXY port 2883 is idle on 11.xxx.xxx.5]
[2020-02-04 17:34:37.087163] INFO [step6: installing obproxy, logfile: /root/oceanbase_trial/logs/install_obproxy.log]
[2020-02-04 17:35:09.314143] INFO [step6: installation of obproxy done]
[2020-02-04 17:35:09.316600] INFO [step7: installing ocp, logfile: /root/oceanbase_trial/logs/install_ocp.log]
[2020-02-04 17:36:19.347975] INFO [step7: installation of ocp done]
[2020-02-04 17:36:19.350974] INFO [step8: post-checking service, logfile: /root/oceanbase_trial/logs/post_check_service.log]
[2020-02-04 17:36:27.431920] INFO [step8: post check done]f

自动化连续清理:

[root@xxx /root/oceanbase_trial]
#./install.sh -c 1-
run install.sh with DEBUG=FALSE, INSTALL_STEPS= CLEAR_STEPS=8 7 6 5 4 3 2 1 CONFIG_FILE=/root/oceanbase_trial/obcluster.conf
[2020-02-04 17:24:41.127969] INFO [start antman API service]
LB_MODE=none
[2020-02-04 17:24:41.183515] INFO [clear_step8: no need to clear for step network post-check]
[2020-02-04 17:24:41.186271] INFO [clear_step7: uninstalling ocp and remove docker, logfile: /root/oceanbase_trial/logs/uninstall_ocp.log]
[2020-02-04 17:24:42.034660] INFO [clear_step7: uninstallation of ocp done]
[2020-02-04 17:24:42.036854] INFO [clear_step6: uninstalling obproxy and remove docker, logfile: /root/oceanbase_trial/logs/uninstall_obproxy.log]
[2020-02-04 17:24:42.886604] INFO [clear_step6: uninstallation of obproxy done]
[2020-02-04 17:24:42.888851] INFO [clear_step5: uninstalling ocp and remove docker, logfile: /root/oceanbase_trial/logs/uninstall_tmp_ocp.log]
[2020-02-04 17:24:43.738130] INFO [clear_step5: uninstallation of temporary ocp done]
[2020-02-04 17:24:43.740634] INFO [clear_step4: drop ocp meta db/tenant/user/resource, logfile: /root/oceanbase_trial/logs/uninit_metadb.log]
[2020-02-04 17:24:43.813946] INFO [clear_step4: uninit of metadb done]
[2020-02-04 17:24:43.816483] INFO [clear_step3: uninstalling OB server and remove docker, logfile: /root/oceanbase_trial/logs/uninstall_ob.log]
[2020-02-04 17:24:44.832929] INFO [clear_step3: uninstallation of ob done]
[2020-02-04 17:24:44.835425] INFO [clear_step1: no need to clear for step ssh authorization]

4.2.3 单步执行或清理(可选)

比如说第3步重装一下。需要注意的是第3步如果是重装,建议先清理第3步及其以后所有步骤。

[root@xxx /root/oceanbase_trial]
#./install.sh -c 3- -i 3

理论上每一步都可以重新安装。但是不同步骤之间可能会有一些依赖关系。这里要关注的是重新安装前后是否有配置信息变更。如果配置文件变更了,元数据库那一步肯定是要重新执行的。

4.2.4 安装后检查

[root@xxx /root/oceanbase_trial]
#docker ps
CONTAINER ID        IMAGE                                                                   COMMAND                  CREATED             STATUS              PORTS               NAMES
04d585acbeed        reg.docker.alibaba-inc.com/antman/ocp-all-in-one:OCP233_20200102_2122   "/bin/sh -c '/usr/bi…"   12 minutes ago      Up 12 minutes                           ocp
17097103b74b        reg.docker.alibaba-inc.com/antman/obproxy:OBP156_20200102_2110          "sh start_obproxy.sh"    13 minutes ago      Up 13 minutes                           obproxy
dca537d692ea        reg.docker.alibaba-inc.com/antman/ob-docker:OB1478_20200102_2113        "/usr/bin/supervisor…"   22 minutes ago      Up 22 minutes                           META_OB_ZONE_1

打卡浏览器,访问 http://11.xxx.87.5:8080,能出现登录界面基本安装就成功了。

OceanBase 2.x 试用版安装体验——OCP 2.3

5. 常见问题和诊断方法

5.1 常用问题诊断方法

5.2.1 查看对应日志

每个安装步骤都有相应的日志文件,首先需要从日志文件里获取信息。

[root@xxx /root/oceanbase_trial]
#tail /root/oceanbase_trial/logs/install_tmp_ocp.log
[2020-02-04 17:20:40.305403] INFO [waiting ocp to be ready on host 11.xxx.xxx.5 for 7 Minites]
[2020-02-04 17:21:10.313486] INFO [waiting ocp to be ready on host 11.xxx.xxx.5 for 8 Minites]
[2020-02-04 17:21:40.321695] INFO [waiting ocp to be ready on host 11.xxx.xxx.5 for 8 Minites]
[2020-02-04 17:22:10.330312] INFO [waiting ocp to be ready on host 11.xxx.xxx.5 for 9 Minites]
[2020-02-04 17:22:40.338612] INFO [waiting ocp to be ready on host 11.xxx.xxx.5 for 9 Minites]
[2020-02-04 17:23:10.346736] INFO [waiting ocp to be ready on host 11.xxx.xxx.5 for 10 Minites]
[2020-02-04 17:23:40.355044] ERROR [ANTMAN-503: timeout( 10 Minites) on waiting ocp ready, URL=http://11.xxx.xxx.5:8080/services?Action=GetObProxyConfig&User_ID=admin&UID=alibaba]
[2020-02-04 17:23:40.360255] WARN [error ERROR exists in /root/oceanbase_trial/logs/install_tmp_ocp.log]
[2020-02-04 17:23:40.817147] INFO [install_ocp.sh finished and reg.docker.alibaba-inc.com/antman/ocp-all-in-one:OCP233_20200102_2122 started on 11.xxx.xxx.5]
[2020-02-04 17:23:40.819777] ERROR [ANTMAN-308: tmp_ocp docker on 11.xxx.xxx.5 is NOT started]

5.2.2 查看安装脚本(可选)

根据日志文件里的信息查看安装脚本里的逻辑,能进一步看到报错的逻辑。安装脚本并不复杂。

5.2.3 查看容器运行日志

[root@xxx /root/oceanbase_trial]
#docker logs ocp

从日志里寻找线索。

5.2.4 重装某一步或者几步

根据上面线索分析问题可能跟哪几步有关系,然后把相应的步骤都清理然后重新执行一遍。

[root@xxx /root/oceanbase_trial]
#./install.sh -c 3- -i 3

5.2 常见问题

通常问题会出在资源方面、环境方面(监听进程、mysql客户端)等。

5.2.1 waiting on observer ready on 超时失败

在OB容器安装一步中,会启动一个observer进程,启动前会有个IO性能测试过程,以及启动过程中有个OB 初始化(boostrap)操作,所以这一步会需要5-10分钟。安装主程序通过mysql客户端使用账户名和密码循环连接进去检测进程是否准备好。

如果看到这个相关的超时错误,首先看看OB容器是否正常。observer的监听端口是2881和2882 是否存活。如果容器存在但是状态是退出的,手动启动一次。

[root@xxx /root/oceanbase_trial]
#docker ps -a
CONTAINER ID        IMAGE                                                                   COMMAND                  CREATED              STATUS                          PORTS               NAMES

78c80e4ad822        reg.docker.alibaba-inc.com/antman/ocp-all-in-one:OCP233_20200102_2122   "/bin/sh -c '/usr/bi…"   About a minute ago   Exited (2) About a minute ago                       ocp

4eaf2d600d31        reg.docker.alibaba-inc.com/antman/ob-docker:OB1478_20200102_2113        "/usr/bin/supervisor…"   6 minutes ago        Up 6 minutes                                        META_OB_ZONE_1

[root@xxx /root/oceanbase_trial]
#netstat -ntlp |grep 2881
[root@xxx /root/oceanbase_trial]
#which mysql

如果是正常的,那检查客户端的mysql客户端运行环境是否被破坏。

如果observer进程异常/监听不正常,则看看是不是资源问题。如果OB容器给的内存太小,是有可能导致observer进程起不来。
具体确认还需要进入容器内部查看observer进程的运行日志。

5.2.2 waiting ocp to be ready on host 超时失败

在temp OCP安装一步,安装主程序会频繁去检测OCP容器的API是否准备好。探测方法如下:

#docker ps -a

-- 如果容器ocp存在但是状态是退出的,手动启动一次
[root@xxx /root/oceanbase_trial]
#docker start ocp

[root@xxx /root/oceanbase_trial]
#curl -s "http://11.xxx.87.5:8080/services?Action=GetObProxyConfig&User_ID=admin&UID=alibaba"
{"Code":200,"Cost":4,"Data":{"ObRootServiceInfoUrlList":[{"ObRegion":"obcluster","ObRootServiceInfoUrl":"http://11.xxx.87.5:8080/services?Action=ObRootServiceInfo&User_ID=admin&UID=alibaba&ObRegion=obcluster"}],"ObProxyBinUrl":"http://11.xxx.87.5:8080/client?Action=GetObProxy&User_ID=admin&UID=alibaba","Version":"7a7b4f210f02e4c9549fc9c6085e4299","ObProxyDatabaseInfo":{"MetaDataBase":"http://11.xxx.87.5:8080/services?Action=ObRootServiceInfo&User_ID=admin&UID=alibaba&ObRegion=obdv1","DataBase":"obproxy","User":"root@obproxy","Password":"**********"}},"Message":"successful","Success":true,"Trace":"11.xxx.87.5:11.xxx.87.5:1580808939674"}

有结果输出就表示API正常。否则最终会报等待超时。

分析这个问题的方法就是查看当前tcp端口监听状况。看是否是老的进程或者其他什么进程占用了OCP要用的端口(8001和8080)。

5. 其他文章参考

上一篇:Exchange 2013非常规卸载重新安装后administrator登录ECP报错


下一篇:好工具推荐系列:MacOS中MacPorts安装和使用(含qt4-mac的教程)