# 通过白屏部署 OceanBase 集群

本文以 x86 架构的 CentOS Linux 7.9 镜像作为环境介绍如何使用 OBD 白屏部署 OceanBase 数据库。

## 背景信息

OBD 自 V2.0.0 起支持白屏部署 OceanBase 数据库及相关组件，如 OBAgent、ODP、OCP Express 等，白屏界面配置简单，通过页面的引导配置即可完成单集群部署。

## 前提条件

* 仅部署 OceanBase 数据库，至少需要 2vCPU、8 GB 内存、45 GB 磁盘的可用资源。

* 部署 OceanBase 数据库及全部组件，至少需要 4vCPU、10 GB 内存、50 GB 磁盘的可用资源，推荐内存在 16 GB 以上。

* 部署 OCP Express 组件需先安装配置 Java 环境，目前仅支持 JDK1.8 版本。详细操作可参考 [常见问题](../5.faq/1.faq.md) 中 **部署 OCP Express 前如何配置 Java 环境**。

  <main id="notice" type='notice'>
    <h4>注意</h4>
    <p>OBD 是通过 SSH 远程执行安装部署，所以您需通过 SSH 验证 Java 环境是否可用，详细操作请参考 <a href="#java%20%环境验证">Java 环境验证</a>。</p>
  </main>

## 准备软件

使用 OBD 白屏部署 OceanBase 数据库时，可以选择在线部署或离线部署两种部署方式。

* 在线部署：OBD 所在机器需保证能访问外部网络，无需提前配置部署所需安装包，部署过程中 OBD 会从远程镜像仓库获取部署所需安装包。

* 离线部署：部署过程中无需访问外部网络，您需提前将部署所需安装包上传至 OBD 本地镜像库。选择离线部署时推荐直接下载所需版本的 all-in-one 安装包。

根据不同的部署方式有不同的准备软件方法，您可根据实际情况选择合适的方法准备软件。

### 在线部署

当您选择在线部署时，可以参考本节命令在中控机上安装 OBD。

```shell
[admin@test001 ~]$ sudo yum install -y yum-utils
[admin@test001 ~]$ sudo yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo
[admin@test001 ~]$ sudo yum install -y ob-deploy
[admin@test001 ~]$ source /etc/profile.d/obd.sh
```

### 离线部署

当您选择离线部署时，可参考本节命令下载并安装 all-in-one 安装包。

您可从 [OceanBase 软件下载中心](https://www.oceanbase.com/softwarecenter) 下载最新的 all-in-one 安装包，并将其复制到中控机中。执行如下命令解压并安装：

```shell
[admin@test001 ~]$ tar -xzf oceanbase-all-in-one-*.tar.gz
[admin@test001 ~]$ cd oceanbase-all-in-one/bin/
[admin@test001 bin]$ ./install.sh
[admin@test001 bin]$ source ~/.oceanbase-all-in-one/bin/env.sh
```

## 操作步骤

1. 启动白屏界面

   命令行执行 `obd web` 命令启动白屏界面，单击输出的地址访问白屏界面，在白屏界面中单击 **开启体验之旅** 即可进入到 OceanBase 数据库的配置界面。

   ```shell
   [admin@test001 ~]$ obd web
   start OBD WEB in 0.0.0.0:8680
   please open http://172.xx.xxx.233:8680
   ```

   <main id="notice" type='explain'>
     <h4>说明</h4>
     <ul>
     <li>
     <p>白屏界面默认使用 8680 端口，您可使用 <code>obd web -p &lt;PORT&gt;</code> 命令指定端口。</p>
     </li>
     <li>
     <p>在阿里云或其他云环境下，可能出现程序无法获取公网 IP，从而输出内网地址的情况，此 IP 非公网地址，您需要使用正确的地址访问白屏界面。</p>
     </li>
     </ul>
   </main>

2. 部署配置

   **部署配置** 界面可以配置集群名称，部署类型和部署组件。

   <img width="819.6" height="490.8" src="https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.1.0/4.deploy/5.deploy-oceanbase-database-community-edition/4.deploy-by-ui/3.use-ui-deploy-oceanbase-01.png" alt="部署配置">

   其中：

   * **集群名称** 默认为 `myoceanbase`，支持自定义，不可和已有部署名重复。

   * **部署类型** 分为 **完全部署** 和 **精简部署**，**完全部署** 将部署所有组件，而 **精简部署** 只部署 OceanBase 数据库。

   * 单击对应组件后的 **了解更多** 可跳转查看对应组件的文档介绍。

   * 部署所需组件时，您可单击 **版本** 下的下拉框自行选择 OceanBase 数据库的版本，其他组件版本固定为最新版本。

   配置完成之后单击 **下一步** 可进入到 **节点配置** 页面。

3. 节点配置

   **节点配置** 界面可以配置数据库和组件节点，部署用户以及软件安装路径。

   <img width="868.8" height="523.2" src="https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.1.0/4.deploy/5.deploy-oceanbase-database-community-edition/4.deploy-by-ui/3.use-ui-deploy-oceanbase-02.png" alt="节点配置">

   其中：

   * 数据库节点默认为三个 Zone，可通过单击 **+ 新增 Zone** 或尾部的删除图标新增或删除 Zone。

   * **OCPExpress 节点** 即可从下选框选择 OBServer 节点 IP，也可输入新的节点 IP，仅支持选择或输入一个节点。

   * **OBProxy 节点** 即可通过下选框选择 OBServer 节点 IP，也可输入新的节点 IP，支持配置多个节点。

   * **用户名** 默认为当前进程的启动用户，支持自定义，需输入对应用户的密码，如各节点间已配置免密可免去输入密码。

   配置完成之后单击 **下一步** 可进入到 **集群配置** 页面。

4. 集群配置

   **集群配置** 界面可对集群进行配置，包括系统租户的管理员用户（root@sys）密码、数据和日志目录、数据库及各组件的端口和参数配置等。

   <img width="788.4" height="549" src="https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.1.0/4.deploy/5.deploy-oceanbase-database-community-edition/4.deploy-by-ui/3.use-ui-deploy-oceanbase-03.png" alt="集群配置">

   其中：

   * **配置模式** 可选择 **最大占用** 或 **最小可用**，**最大占用** 模式将最大化利用环境资源，保证集群的性能与稳定性，推荐使用；**最小可用** 模式配置满足集群正常运行的资源参数。

   * root@sys 密码默认为 OBD 自动生成的随机字符串，可自定义设置。支持数字、英文、特殊字符，长度 8～32 之内，特殊字符仅支持「~!@#%^&*_-+=`|(){}[]:;',.?/」

   * 集群的数据目录和日志目录默认在 **节点配置** 页面中配置的软件路径下，需为以 `/` 开头的绝对路径，支持自定义设置，但需确保设置的目录为空。

   * 数据库和各组件的端口均为默认值，可自定义设置（只支持 1024~65535 范围），需确保设置对的端口未被占用。

   * 单击打开 **更多配置** 按钮查看对应的集群或组件参数，可使用自动分配的配置，也可自定义各个参数。

   全部配置完成后，单击 **下一步** 即可进入到 **预检查** 页面。

5. 预检查

   在 **预检查** 页面查看所有配置信息，若发现问题可单击 **上一步** 进行修改；确认无误后，单击 **预检查** 进行检查。

   若预检查报错，您可根据页面建议选择 **自动修复** 或者单击 **了解更多方案** 跳转至错误码文档，参考文档自行修改。所有报错修改后，可单击 **重新检查** 再次进行预检查。

   <img width="781.2" height="405.6" src="https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.1.0/4.deploy/5.deploy-oceanbase-database-community-edition/4.deploy-by-ui/3.use-ui-deploy-oceanbase-04.png" alt="预检查">

6. 部署

   预检查通过后，单击 **部署** 即可开始 OceanBase 数据库的部署。

   <img width="898.8" height="523.8" src="https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.1.0/4.deploy/5.deploy-oceanbase-database-community-edition/4.deploy-by-ui/3.use-ui-deploy-oceanbase-07.png" alt="部署">

   其中：

   * 部署成功后可复制显示的连接串，在黑屏界面执行连接 OceanBase 数据库。

   * 单击输出的 OCPExpress 组件的连接串可跳转到 OCP Express 的登录界面，通过部署界面展示的账号密码登录并修改密码后可使用白屏界面管理集群。

     <main id="notice" type='explain'>
       <h4>说明</h4>
       <p>在阿里云或其他云环境下，可能出现程序无法获取公网 IP，从而输出内网地址的情况，此 IP 非公网地址，您需要使用正确的地址访问白屏界面。</p>
     </main>

   * 将鼠标悬停在 **查看日志** 按钮后单击 **复制信息**，在命令行中粘贴该信息后执行可查看对应组件的日志位置。
  
7. 单击 **完成**，结束部署

<main id="notice" type='notice'>
  <h4>注意</h4>
  <p> 如需部署多个集群，您需在白屏界面单击 <b>完成</b> 结束当前 OBD 进程后才可再次执行 <code>obd web</code> 命令进行下一集群的部署。 </p>
</main>

## 相关操作

### Java 环境验证

由于 OBD 是通过远程执行脚本部署 OCP Express，所以需要通过 SSH 方式验证 Java 环境，直接在机器上执行 `java -verison` 可能无效。

<main id="notice" type='explain'>
  <h4>说明</h4>
  <p>使用终端交互会自动初始化环境变量，SSH 方式访问不会初始化环境变量，会导致使用 SSH 执行命令时出现 Java 命令不存在或使用错误 Java 版本的情况。</p>
</main>

您可在任意一台网络与 OCP Express 所在节点连通的机器上执行如下命令进行验证。

```shell
# ocp_express_node_username：ocp_express 所在节点的用户名
# ocp_express_node_ip：ocp_express 所在节点 IP
[admin@test001 ~]$ ssh <ocp_express_node_username>@<ocp_express_node_ip> 'java -version'

# 输出结果
openjdk version "1.8.0_xxx" 
OpenJDK Runtime Environment (build 1.8.0_362-b08)
OpenJDK 64-Bit Server VM (build 25.362-b08, mixed mode)
```

如您已安装符合条件的 Java 但是验证却没有通过，可以通过以下任一方法解决：

* 方法一：通过组件页面 **更多配置** 配置 **java_bin** 路径
  
  如下图，在配置项 `java_bin` 中配置 Java 的真实路径，如 `/jdk8/bin/java`。
  
   <img width="807.6" height="514.8" src="https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.1.0/4.deploy/5.deploy-oceanbase-database-community-edition/4.deploy-by-ui/3.use-ui-deploy-oceanbase-06.png" alt="更多配置">

* 方法二：将 Java 可执行文件软链接到 `/usr/bin/java` 中
  
  ```shell
  [admin@test001 bin]$ pwd
  /jdk8/bin
  [admin@test001 bin]$ ln -s /jdk8/bin/java  /usr/bin/java
  ```

### 管理部署后的集群

您可执行如下命令对 OBD 部署的集群进行管理。更多操作详见 [集群命令组](../3.obd-command/1.cluster-command-groups.md)。

```shell
# 查看集群列表
[admin@test001 ~]$ obd cluster list

# 查看集群状态，以部署名为 myoceanbase 为例
[admin@test001 ~]$ obd cluster display myoceanbase

# 停止运行中的集群，以部署名为 myoceanbase 为例
[admin@test001 ~]$ obd cluster stop myoceanbase

# 销毁已部署的集群，以部署名为 myoceanbase 为例
[admin@test001 ~]$ obd cluster destory myoceanbase
```

### 部署特定版本组件

使用 all-in-one 安装包部署时，all-in-one 的包是基于 OceanBase 版本进行迭代，若包中有其他组件存在更新版本，您可从 [OceanBase 软件下载中心](https://www.oceanbase.com/softwarecenter) 下载最新版本的组件，参考如下步骤将其上传至本地镜像库，OBD 部署时会自动获取本地镜像看中的最新版本。

1. 进到组件安装包所在目录下，将安装包添加至本地镜像库

   ```shell
   [admin@test001 rpm]$ obd mirror clone *.rpm
   ```

2. 查看本地镜像中安装包列表

   ```shell
   [admin@test001 rpm]$ obd mirror list local
   ```
