# 单机部署 OceanBase 数据库

本文以单机部署为例介绍如何使用 OBD 部署 OceanBase 数据库。单机部署仅包含一个 Zone 并且 Zone 中只有一个 OBServer 节点。

## 名词解释

* 中控机器：存储 OceanBase 数据库安装包和集群配置信息的机器。

* 目标机器：安装 OceanBase 集群的集群。

## 前提条件

* 您的机器中已安装 OBD，建议安装最新版本，详细信息请参考 [安装并配置 OBD](../2.quick-start/1.install-obd.md)。

* 您的机器中已安装 OBClient 客户端，详细信息请参考 [OBClient 文档](https://github.com/oceanbase/obclient/blob/master/README.md)。

## 操作步骤

### 步骤一：（可选）下载并安装 all-in-one 安装包

OceanBase 从 V4.0.0 开始提供统一的安装包 all-in-one package。您可以通过这个统一的安装包一次性完成 OBD、OceanBase 数据库、ODP、OBAgent、Grafana、Prometheus 和 OCP Express（自 V4.1.0 起支持） 的安装。

您也可根据实际需求从 [OceanBase 软件下载中心](https://www.oceanbase.com/softwarecenter) 选择部分组件下载安装或者指定组件的版本。

<main id="notice" type='explain'>
  <h4>说明</h4>
  <p>离线部署 OceanBase 数据库时建议下载 all-in-one 安装包进行部署。</p>
</main>

#### 在线安装

若您的机器可以连接网络，可执行如下命令在线安装。

```shell
[admin@test001 ~]$ bash -c "$(curl -s https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/download-center/opensource/oceanbase-all-in-one/installer.sh)"
[admin@test001 ~]$ source ~/.oceanbase-all-in-one/bin/env.sh
```

#### 离线安装

若您的机器无法连接网络，可参考如下步骤离线安装。

1. 从 [OceanBase 软件下载中心](https://www.oceanbase.com/softwarecenter) 下载最新的 all-in-one 安装包，并将其复制到中控机任意目录下。

2. 在 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
   ```

### 步骤二：配置 OBD

部署 OceanBase 集群之前，为了数据安全，建议您切换到非 root 用户。

如果是离线部署 OceanBase 集群，可参考 **步骤一** 在中控机上下载并安装 all-in-one 安装包。

如果对部署所需组件版本有特别要求，可从 [OceanBase 软件下载中心](https://www.oceanbase.com/softwarecenter) 自行下载组件对应版本安装包，复制到中控机任一目录，在该目录下参考以下步骤配置 OBD。

如果是在线部署 OceanBase 集群，则跳过步骤 1~3。

1. 禁用远程仓库

   ```shell
   [admin@test001 rpm]$ obd mirror disable remote
   ```

   <main id="notice" type='explain'>
     <h4>说明</h4>
     <p>安装 all-in-one 安装包后默认关闭远程仓库，您可通过 <code>obd mirror list</code> 命令进行确认，查看 Type=remote 对应的 Enabled 变成了 False，说明已关闭远程镜像源。</p>
   </main>

2. 将安装包添加至本地镜像

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

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

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

4. 选择配置文件

   若您机器中的 OBD 是通过直接下载的方式安装，则可在 `/usr/obd/example` 目录下查看 OBD 提供的配置文件示例。

   若您机器中的 OBD 是通过解压 all-in-one 安装包的方式安装，则可在 `~/.oceanbase-all-in-one/conf` 目录下查看 OBD 提供的配置文件示例。请根据您的资源条件选择相应的配置文件。

   小规格开发模式，适用于个人设备（内存不低于 8 GB）

   * 本地单机部署配置样例：mini-local-example.yaml

   * 单机部署配置样例：mini-single-example.yaml

   * 单机部署 + ODP 配置样例：mini-single-with-obproxy-example.yaml

   * 分布式部署 + ODP 配置样例：mini-distributed-with-obproxy-example.yaml

   * 分布式部署 + ODP + OCP Express 配置样例：all-components-min.yaml
  
   专业开发模式，适用于高配置 ECS 或物理服务器（可用资源不低于 16 核 64 GB）

   * 本地单机部署配置样例：local-example.yaml

   * 单机部署配置样例：single-example.yaml

   * 单机部署 + ODP 配置样例：single-with-obproxy-example.yaml

   * 分布式部署 + ODP 配置样例：distributed-with-obproxy-example.yaml

   * 分布式部署 + ODP + OCP Express 配置样例：all-components.yaml

5. 修改配置文件

   此处以小规格开发模式-单机部署（mini-single-example.yaml）为例，介绍如何修改配置文件。

   <main id="notice" type='explain'>
    <h4>说明</h4>
    <p>您需根据您环境的真实情况修改下述参数。</p>
   </main>

   1. 修改用户信息

      ```yaml
      ## Only need to configure when remote login is required
      user:
        username: admin
      #   password: your password if need
        key_file: /home/admin/.ssh/id_rsa
      #   port: your ssh port, default 22
      #   timeout: ssh connection timeout (second), default 30
      ```

      `username` 为登录到目标机器的用户名，确保您的用户名有 `home_path` 的写权限。`password` 和 `key_file` 均用于验证用户，通常情况下只需要填写一个。

      <main id="notice" type='notice'>
        <h4>注意</h4>
        <p>在配置秘钥路径后，如果您的秘钥不需要口令，请注释或者删除 <code>password</code>，以免 <code>password</code> 被视为秘钥口令用于登录，导致校验失败。。</p>
      </main>

   2. 修改机器的 IP、端口和相关目录，并配置内存相关参数及密码

      ```yaml
      oceanbase-ce:
        servers:
          # Please don't use hostname, only IP can be supported
          - ip: 10.10.10.1
        global:
          # Please set devname as the network adaptor's name whose ip is  in the setting of severs.
          # if set severs as "127.0.0.1", please set devname as "lo"
          # if current ip is 192.168.1.10, and the ip's network adaptor's name is "eth0", please use "eth0"
          devname: eth0
          memory_limit: 6G # The maximum running memory for an observer
          system_memory: 1G # The reserved system memory. system_memory is reserved for general tenants.         The default value is 30G.
          datafile_size: 20G # Size of the data file.
          log_disk_size: 24G # The size of disk space used by the clog files.
          cpu_count: 16
          mysql_port: 2881 # External port for OceanBase Database. The default value is 2881. DO NOT change this value after the cluster is started.
          rpc_port: 2882 # Internal port for OceanBase Database. The default value is 2882. DO NOT change this value after the cluster is started.
          production_mode: false
          # The working directory for OceanBase Database. OceanBase Database is started under this directory. This is a required field.
          home_path: /home/admin/observer
          # The directory for data storage. The default value is $home_path/store.
          data_dir: /data
          # The directory for clog, ilog, and slog. The default value is the same as the data_dir value.
          redo_dir: /redo
          root_password: ****** # root user password, can be empty
          proxyro_password: ****** # proxyro user pasword, consistent with obproxy's observer_sys_password, can be empty
          zone: zone1
      ```

### 步骤三：部署 OceanBase 数据库

<main id="notice" type='explain'>
  <h4>说明</h4>
  <p>本节中所使用命令的详细使用方法可参考 <a href="../3.obd-command/1.cluster-command-groups.md">集群命令组</a>。</p>
</main>

1. 部署 OceanBase 数据库

   ```shell
   [admin@test001 ~]$ obd cluster deploy obtest -c all-components.yaml
   ```

   联网情况下，在您执行了 `obd cluster deploy` 命令之后，OBD 将检查您的目标机器是否有部署所需安装包。如果没有安装包，OBD 将自动从 YUM 源获取。

   此命令会检查 `home_path` 和 `data_dir` 指向的目录是否为空，目录不为空时将报错。若您确认该目录下的内容可全部删除，可以加上 `-f` 选项，强制清空目录。

2. 启动 OceanBase 数据库

   ```shell
   [admin@test001 ~]$ obd cluster start obtest
   ```

3. 查看 OceanBase 集群状态

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

   # 查看 obtest 集群状态
   [admin@test001 ~]$ obd cluster display obtest
   ```

4. （可选）修改集群配置

   OceanBase 数据库有数百个配置项，有些配置是耦合的，在您熟悉 OceanBase 数据库之前，不建议您修改示例配件文件中的配置。此处示例用来说明如何修改配置，并使之生效。

   ```shell
   # 使用 edit-config 命令进入编辑模式，修改集群配置
   # 修改配置并保存退出后，OBD 会告知如何使得此次修改生效，复制 OBD 输出的命令即可
   [admin@test001 ~]$ obd cluster edit-config obtest
   
   # 保存修改后输出如下
   Search param plugin and load ok
   Search param plugin and load ok
   Parameter check ok
   Save deploy "obtest" configuration
   Use `obd cluster reload obtest` to make changes take effect.
   [admin@test001 ~]$ obd cluster reload obtest
   ```

### 步骤四：连接 OceanBase 数据库

运行以下命令，使用 OBClient 客户端连接 OceanBase 数据库：

```shell
obclient -h<IP> -P<PORT> -uroot@sys -p
```

其中，`IP` 为 OBServer 节点的 IP 地址；`PORT` 为连接 OceanBase 数据库的的端口，直连时为 `mysql_port` 配置项的值，默认端口为 `2881`，如果您对端口做了修改，此处使用您实际配置的端口号。

<main id="notice" type='explain'>
  <h4>说明</h4>
  <p>部署 OceanBase 集群之后，建议创建业务租户进行业务操作。sys 租户仅做集群管理使用，不适合在业务场景中使用。如何创建租户，详细操作请参考 <a href="https://www.oceanbase.com/docs/community-observer-cn-0000000000965467">创建用户租户</a>。</p>
</main>

## 后续操作

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

```shell
# 查看集群列表
obd cluster list

# 查看集群状态，以部署名为 obtest 为例
obd cluster display obtest

# 停止运行中的集群，以部署名为 obtest 为例
obd cluster stop obtest

# 销毁已部署的集群，以部署名为 obtest 为例
obd cluster destory obtest
```
