跳转至

集群安装及初始化

数据库安装及初始化

SeaboxMPP数据库软件提供二进制安装包,该安装包只需在其中一个Coordinator节点上安装,集群的其他节点通过该节点执行命令seabox install复制安装。

如果Coordinator节点不允许使用root用户访问,可使用seabox用户运行二进制安装程序并将其指定安装至seabox具备写权限的目录下。

以下内容以3台虚拟机服务器为示例,说明整体按照过程。节点信息与组件规划如下表:

主机名 IP地址 是否SCDCS 是否GTM 是否Coordinator 是否executor
scnode1 192.168.71.150 YES YES YES YES
scnode2 192.168.71.151 YES NO YES YES
scnode3 192.168.71.152 YES NO YES YES

注:虚拟机服务器,相关配置略。

单个Coordinator节点安装二进制程序

  1. 规划为SeaboxMPP数据库一个coordinator节点的服务器上,即scnode1,以root用户登录

    如果coordinator节点不允许使用root用户访问,可使用seabox用户运行二进制安装程序并将其指定安装至seabox具备写权限的目录下。

  2. 从商务渠道获取二进制安装包的拷贝,并将安装包上传至scnode1节点服务器上。SeaboxMPP数据库二进制安装包的格式为:seaboxmpp-db-<version>-<osinfo>-<platform>.zip,其中<platform>用来标识服务器CPU架构,类似于x86_64;<osinfo>,用来标识操作系统类型及版本号,如rhel7.

  3. 解压安装文件:

    # unzip seaboxmpp-db-<version>-<osinfo>-<platform>.zip
    
  4. 执行bash脚本启动安装:

    # /bin/bashseaboxmpp-db-<version>-<osinfo>-<platform>.bin
    
  5. 安装程序首先提示是否接受SeaboxMPP数据库许可协议,输入yes接受协议。

  6. 安装程序随后提示输入安装路径,直接回车将安装至默认路径/usr/local/seaboxmpp/seaboxmpp-db-<version>,或输入绝对路径指定安装位置,执行安装用户必须指定的安装路径的写权限。

  7. 安装程序完成SeaboxMPP数据库软件安装后,会在该版本的安装目录同级目录创建一个名为seaboxmpp-db的符号链接指向已安装的seaboxmpp-db-<version>目录。该符号链接便于安装补丁或版本升级。安装路径被设置为环境变量$SCHOME。

  8. 如果使用root用户执行安装程序,需在安装后更改已安装文件的属主和属组为seabox:

    # chown -R seabox:seabox /usr/local/seaboxmpp/
    # chgrp -R seabox:seabox /usr/local/seaboxmpp/
    

在其他节点上安装SeaboxMPP数据库以及其他系统配置要求,请查看章节所有节点安装并配置SeaboxMPP数据库

SeaboxMPP程序相关介绍
seaboxmpp_path.sh
该文件包含SeaboxMPP数据库的环境变量,请参见"设置SeaboxMPP数据库环境变量"章节。
bin
该目录包含SeaboxMPP数据库服务程序、客户端程序、管理程序等。
etc
存放SeaboxMPP安装及初始化相关配置文件。
lib
SeaboxMPP数据库相关的库文件.
sbin
一些内部程序或脚本.
share
SeaboxMPP数据库共享文件.

以root运行seabox install命令将SeaboxMPP数据库程序从当前节点到列表中指定的所有节点上,同时创建数据库操作系统帐户(通常为seabox),设置帐户密码(默认为changme),设置数据库安装目录的所有权,并在所有指定的节点间对root用户及指定的seabox用户交换ssh密钥以实现ssh免密互信。

为用户建立ssh互信

可通过已安装SeaboxMPP二进制程序节点上执行seabox install命令将可执行程序复制到其他所有节点相同路径下,执行该命令前,须提前创建root用户及seabox用户的ssh互信。

为root用户建立ssh互信
  1. root用户登录coordinator节点:

    $ su -
    
  2. 导入coordinator节点上已安装的数据库目录中的path文件,设置当前session的环境变量:

    # source /usr/local/seaboxmpp/seaboxmpp-db/seaboxmpp_path.sh
    
  3. 在seabox的home目录下,将SeaboxMPP数据库所有节点(包括coordinator节点和所有executor节点)的主机名写入安装目录$SDHOME/etc/all_hosts.txt文件,确保该文件中没有空行或其他空格。

    例如,集群中包含3个节点,其主机名配置如下:

    cat <<EOF >$SDHOME/etc/all_hosts.txt
    scnode1
    scnode2
    scnode3
    EOF
    

    注意:检查所有节点操作系统/etc/hosts配置文件,确保数据库集群所有节点的主机名都包含在其中。

  4. 使用scssh-exkeys工具建立互信

    执行以下命令:

    scssh-exkeys -f $SDHOME/etc/all_hosts.txt
    [STEP 1 of 5] create local ID and authorize on local host
    
    [STEP 2 of 5] keyscan all hosts and update known_hosts file
    
    [STEP 3 of 5] authorize current user on remote hosts
      ... send to scnode2
    Warning: Permanently added the RSA host key for IP address '192.168.71.151' to the list of known hosts.
    Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
      ***
      *** Enter password for scnode2: 
      ... send to scnode3
    Warning: Permanently added the RSA host key for IP address '192.168.71.152' to the list of known hosts.
    Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
    
    [STEP 4 of 5] determine common authentication file content
    
    [STEP 5 of 5] copy authentication files to all remote hosts
      ... finished key exchange with scnode2
      ... finished key exchange with scnode3
    
    [INFO] completed successfully
    

    执行过程中需要输入其他节点的root口令,执行完成后可通过scssh命令来验证互信是否创建成功,例如:

    [root@scnode1 ~]# scssh -f $SDHOME/etc/all_hosts.txt
    => hostname
    [scnode1] scnode1
    [scnode2] scnode2
    [scnode3] scnode3
    
为seabox用户建立ssh互信

seabox用户建立互信方式同root用户建立互信,步骤如下:

  1. coordinator节点使用seabox用户登录或su切换到seabox用户:

    $ su - seabox
    
  2. 导入coordinator节点上已安装的数据库目录中的path文件,设置当前session的环境变量:

    # source /usr/local/seaboxmpp/seaboxmpp-db/seaboxmpp_path.sh
    
  3. 使用scssh-exkeys工具建立互信,直接使用root用户建立互信时的主机名文件 $SDHOME/etc/all_hosts.txt(注意该文件的属主与权限,是否seabox用户可读)

    执行以下命令:

    scssh-exkeys -f $SDHOME/etc/all_hosts.txt
    [STEP 1 of 5] create local ID and authorize on local host
    
    [STEP 2 of 5] keyscan all hosts and update known_hosts file
    
    [STEP 3 of 5] authorize current user on remote hosts
      ... send to scnode2
    Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
      ***
      *** Enter password for scnode2: 
      ... send to scnode3
    Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
    
    [STEP 4 of 5] determine common authentication file content
    
    [STEP 5 of 5] copy authentication files to all remote hosts
      ... finished key exchange with scnode2
      ... finished key exchange with scnode3
    
    [INFO] completed successfully
    

    执行过程中需要输入其他节点的seabox口令,执行完成后可通过ssh 主机名来验证互信是否创建成功,例如:

    [seabox@scnode1 ~]$ ssh scnode2 hostname
    scnode2
    [seabox@scnode1 ~]$ ssh scnode3 hostname
    scnode3
    

创建数据存储区域

SeaboxMPP数据库集群的所有组件实例在初始化时均需要指定一个磁盘存储区域,通常称为数据目录。其中,executor实例中创建的所有用户数据都存储于指定的数据目录中,而coordinator实例的数据目录用户存储管理数据。

需按照上述组件规划,在相应的节点上创建不同组件的数据目录。

以下创建的各种数据目录,会在集群初始化时输入配置文件,这些数据目录的路径都是可变的。实际用户环境安装部署时需根据服务器磁盘挂载情况进行调整。

Coordinator节点创建数据存储区域

SeaboxMPP数据库的每个coordinator实例都需指定一个数据存储区域,用来存储数据库系统的元数据及一些系统全局信息。

Coordinator节点仅存储系统表及元数据而不存储任何用户数据,因此不需要规划太大的存储空间,通常实例运行日志是Coordinator实例占用空间最多的文件。

创建或选择已有目录作为Coordinator节点的数据存储区域,该目录有足够的存储空间且属主和属组均为seabox。通过scssh工具,在所有节点上创建同样的数据目录,并将该目录属主调整为seabox用户。

在已经安装SeaboxMPP数据库二进制程序的coordinator节点上,使用root用户执行以下命令:

bash # source /usr/local/seaboxmpp/seaboxmpp-db/seaboxmpp_path.sh # scssh -f /usr/local/seaboxmpp/seaboxmpp-db/etc/all_hosts.txt => mkdir -p /opt/scdata/coordinatord [scnode3] [scnode2] [scnode1] => chown -R seabox:seabox /opt/scdata [scnode3] [scnode2] [scnode1]

创建SCDCS组件存储目录

SCDCS组件的存储目录主要负责存储一致性协议组件的持久化数据、镜像文件以及WAL日志,通常不需要太大空间,一般需要10GB~100GB即可。

创建命令如下:

在已经安装SeaboxMPP数据库二进制程序的coordinator节点上,使用root用户执行以下命令:

``` bash # source /usr/local/seaboxmpp/seaboxmpp-db/seaboxmpp_path.sh # scssh -f /usr/local/seaboxmpp/seaboxmpp-db/etc/all_hosts.txt => mkdir -p /opt/scdata/scdcs [scnode3] [scnode2] [scnode1] => chown -R seabox:seabox /opt/scdata/ [scnode3] [scnode2] [scnode1]

##### 创建GTM组件存储目录

GTM组件的存储目录主要负责该组件运行日志以及运行过程中的一些缓存文件、状态文件,仅需要1~10GB空间即可。


创建命令如下:

在已经安装SeaboxMPP数据库二进制程序的coordinator节点上,使用root用户执行以下命令:

 ``` bash
 # source /usr/local/seaboxmpp/seaboxmpp-db/seaboxmpp_path.sh
 # scssh -f /usr/local/seaboxmpp/seaboxmpp-db/etc/all_hosts.txt
=> mkdir -p /opt/scdata/gtm
[scnode3]
[scnode2]
[scnode1]
=> chown -R seabox:seabox /opt/scdata/
[scnode3]
[scnode2]
[scnode1]

executor节点创建数据存储区域

SeaboxMPP数据库的executor节点上存储具体的用户数据,包括数据及索引数据。Executor节点上主实例和镜像实例的数据目录可以指定不同的存储路径。

在已经安装SeaboxMPP数据库二进制程序的coordinator节点上,使用root用户执行以下命令:

``` bash # source /usr/local/seaboxmpp/seaboxmpp-db/seaboxmpp_path.sh # scssh -f /usr/local/seaboxmpp/seaboxmpp-db/etc/all_hosts.txt => mkdir -p /opt/scdata/executord/primary [scnode3] [scnode2] [scnode1] => mkdir -p /opt/scdata/executord/mirror [scnode3] [scnode2] [scnode1] => chown -R seabox:seabox /opt/scdata [scnode3] [scnode2] [scnode1]

#### 在所有指定节点上安装并初始化SeaboxMPP数据库

##### 编辑SeaboxMPP初始化配置文件

在已经安装SeaboxMPP数据库二进制程序的coordinator节点上,编辑$SDHOME/etc/seabox-site.yml配置文件,将各个组件的数据目录、IP地址、主机名等信息按照规划修改,例如:

``` yaml
scdcs:                                          # 数据一致性服务配置,最少配置1个
  base_service_port : 2379
  base_inner_port : 2380
  base_data_dir : /opt/scdata/scdcs
  setup:
    - hostname : scnode1
      address : 192.168.71.150
    - hostname : scnode2
      address : 192.168.71.151
    - hostname : scnode3
      address : 192.168.71.152

coordinator:                                    # 集群coordinator节点配置
  base_port : 3000
  base_data_dir : /opt/scdata/coordinatord
  setup:
    - hostname : scnode1
    - hostname : scnode2
    - hostname : scnode3

executor:                                       # 集群executor节点配置
  have_mirror : True
  mirror_mode : auto                            # 主备配置模式,auto 和 customize
  base_port : 3800
  base_data_dir : /opt/scdata/executord/primary
  base_mirror_port : 3900
  base_mirror_data_dir : /opt/scdata/executord/mirror

  executor_count_each_host : 1

  setup:
    - hostname : scnode1
    - hostname : scnode2
    - hostname : scnode3

gtm:                                            # gtm 相关配置,用于集群全局事务处理
  hostname : scnode1
  port : 3566 
  data_dir : /opt/scdata/executord/gtm

storage:
  type : localfs                                # [dfs | localfs]

# enhanced_features:
#   security_audit : on                           # 数据库审计功能
#   memory_auto_config : on                       # work_mem 和 shared_buffers 根据服务器内存和数据库的部署情况,自动设定评估的最优值
#   encryption_cmk_id : -1                        # 实例级加密主密钥ID。默认为 -1,没有加密;0: 软加密; 大于0的值,表示具体的主密钥ID
#   encryption_key_path : /home/seabox/encry_path.sh  # 实例级加密密钥文件位置,encryption_cmk_id 为0时,必须设置此项
#   enable_passwd_policy : on                     # 是否支持密码策略
#   enable_flashback : on                         # 是否支持闪回功能
#   enable_autovacuum : on                        # 是否开启 autovacuum
#   inst_conn_limit : 2000                        # 并发控制,会同时设置 max_connections 和 max_prepared_transactions 为这个值
#   resource_manager : 'none'                     # 资源管理策略选择。默认:'none',可选:'group'
#   enable_diskquota : on                         # 是否支持磁盘配额控制

# parameters:
#   sc_resource_manager : 'none'                  # 资源管理策略选择。默认:'none',可选:'group'
#   archive_mode : true
#   autovacuum : false                            # 是否开启 autovacuum
#   autovacuum_analyze_scale_factor : 98.6
#   autovacuum_naptime : 105
#   max_connections : 10000

参数说明如下:

scdcs

scdcs组件相关配置信息。

base_service_port
scdcs一致性协议对外服务端口,即其他组件与scdcs连接的端口,默认为2379。
base_inner_port
scdcs一致性协议组件内部通讯端口,默认为2379。
base_data_dir
scdcs一致性协议组件数据目录,使用上一节创建的目录 /opt/scdata/scdcs。
setup

安装的节点信息,每个节点需包括IP地址与主机名2部分,可指定多个节点;如多个节点数据目录路径或端口需设置不同时,可在setup小节下的hostname中分别指定。

hostname
安装节点主机名。
address
安装节点IP地址。
coordinator

SeaboxMPP数据库集群coordinator节点配置信息。

base_port
coordinator实例中seaboxsql实例的服务端口,默认3000。
base_data_dir
coordinator实例中seaboxsql实例的数据目录,指定为/opt/scdata/coordinatord
setup

coordinator实例指定节点情况,可指定多个节点;如多个节点数据目录路径或端口需设置不同时,可在setup小节下的hostname中分别指定。

hostname
coordinator实例安装的节点主机名,多个coordinator实例需指定多条记录。
executor

集群executor节点配置信息

have_mirror
是否部署镜像实例,生产环境强烈建议设置为True。
mirror_mode
镜像配置模式,值可为auto或者customize,其中值为customize时可指定不同节点的安装路径及镜像实例的主机名等信息,通常使用auto即可。
base_port
每个节点上executor实例的起始端口,如单个executor节点上部署多个实例,从该端口号开始加1递增,默认为3800。
base_data_dir
executor主实例的数据目录路径,每个executor实例实际数据目录会在初始化时创建一个以实例ID为名的目录,例如/opt/scdata/executord/primary/0
base_mirror_port
executor镜像实例的起始端口,规则同主实例。
base_mirror_data_dir
executor镜像实例的数据目录路径,规则同主实例。
executor_count_each_host
每个executor节点上的executor主实例数量,通常不超过8个。
setup

安装节点主机名等信息,如多个节点或实例的配置不一致时,可在该小节下单独指定。

hostname
executor节点主机名
gtm

gtm相关配置

hostname
gtm服务节点的主机名。
port
gtm服务端口,默认为3566。
data_dir
gtm服务的数据目录路径。
storage

存储层相关配置信息,支持本地存储及分布式存储机制。

type
取值可为localfs或dfs,其中dfs为分布式存储,localfs指本地存储,本手册主要为支持localfs模式,dfs不做说明。
enhanced_features

可以在数据库初始化时,打开下面列出的数据库功能,增加数据库的易用性,避免用户再次进行配置。如果不设置,则使用默认配置

security_audit
数据库审计功能,默认值为 off,不打开
memory_auto_config
work_mem 和 shared_buffers 根据服务器内存和数据库的部署情况,自动设定评估的最优值。默认值为 off,不打开
encryption_cmk_id
实例级加密主密钥ID。默认为 -1,没有加密;0: 软加密; 大于0的值,表示具体的主密钥ID
encryption_key_path
实例级加密密钥文件位置,encryption_cmk_id 为0时,必须设置此项
enable_passwd_policy
是否支持密码策略,默认值为 off,不支持
enable_flashback
是否支持闪回功能,默认值为 off,不支持
enable_autovacuum
是否开启 autovacuum,默认值为 off,不开启
inst_conn_limit
并发控制,会同时设置 max_connections 和 max_prepared_transactions 为这个值
resource_manager
资源管理策略选择。默认:'none',可选:'group'
enable_diskquota
是否支持磁盘配额控制,默认值为 off,不支持
parameters
可以设置数据库的所有参数值,数据库初始化完成后,参数即被设置为期望值。没有标明的参数,则使用默认值
在所有指定节点上安装SeaboxMPP数据库二进制程序

安装步骤如下:

  1. 已经安装二进制程序的coordinator节点上(scnode1),su为seabox用户,导入已安装的数据库目录中的path文件,设置当前session的环境变量:

    su - seabox
    source /usr/local/seaboxmpp/seaboxmpp-db/seaboxmpp_path.sh
    
  2. 运行seabox install命令安装。

    $ [seabox@scnode1 etc]$ seabox install cluster
    20210422:17:27:03:054828 seabox_install:scnode1:seabox-[INFO]:-Installation Info:
    link_name None
    binary_path /usr/local/seaboxmpp/seaboxmpp-db-21.0.0.0
    binary_dir_location /usr/local/seaboxmpp
    binary_dir_name seaboxmpp-db-21.0.0.0
    20210422:17:27:03:054828 seabox_install:scnode1:seabox-[INFO]:-check cluster password access
    20210422:17:27:04:054828 seabox_install:scnode1:seabox-[INFO]:-de-duplicate hostnames
    20210422:17:27:04:054828 seabox_install:scnode1:seabox-[INFO]:-coordinator hostname: scnode1
    20210422:17:27:04:054828 seabox_install:scnode1:seabox-[INFO]:-rm -f /usr/local/seaboxmpp/seaboxmpp-db-21.0.0.0.tar; rm -f /usr/local/seaboxmpp/seaboxmpp-db-21.0.0.0.tar.gz
    20210422:17:27:04:054828 seabox_install:scnode1:seabox-[INFO]:-cd /usr/local/seaboxmpp; tar cf seaboxmpp-db-21.0.0.0.tar seaboxmpp-db-21.0.0.0
    20210422:17:27:13:054828 seabox_install:scnode1:seabox-[INFO]:-gzip /usr/local/seaboxmpp/seaboxmpp-db-21.0.0.0.tar
    20210422:17:27:32:054828 seabox_install:scnode1:seabox-[INFO]:-remote command: mkdir -p /usr/local/seaboxmpp
    20210422:17:27:32:054828 seabox_install:scnode1:seabox-[INFO]:-remote command: mkdir -p /home/seabox/seaboxAdminLogs
    20210422:17:27:32:054828 seabox_install:scnode1:seabox-[INFO]:-remote command: rm -rf /usr/local/seaboxmpp/seaboxmpp-db-21.0.0.0
    20210422:17:27:33:054828 seabox_install:scnode1:seabox-[INFO]:-scp software to remote location
    20210422:17:27:35:054828 seabox_install:scnode1:seabox-[INFO]:-remote command: gzip -f -d /usr/local/seaboxmpp/seaboxmpp-db-21.0.0.0.tar.gz
    20210422:17:27:42:054828 seabox_install:scnode1:seabox-[INFO]:-md5 check on remote location
    20210422:17:27:44:054828 seabox_install:scnode1:seabox-[INFO]:-remote command: cd /usr/local/seaboxmpp; tar xf seaboxmpp-db-21.0.0.0.tar
    20210422:17:27:47:054828 seabox_install:scnode1:seabox-[INFO]:-remote command: rm -f /usr/local/seaboxmpp/seaboxmpp-db-21.0.0.0.tar
    20210422:17:27:48:054828 seabox_install:scnode1:seabox-[INFO]:-rm -f /usr/local/seaboxmpp/seaboxmpp-db-21.0.0.0.tar.gz
    20210422:17:27:48:054828 seabox_install:scnode1:seabox-[INFO]:-version string on coordinator: scssh version $Revision$
    20210422:17:27:48:054828 seabox_install:scnode1:seabox-[INFO]:-remote command: . /usr/local/seaboxmpp/seaboxmpp-db-21.0.0.0/seaboxmpp_path.sh; /usr/local/seaboxmpp/seaboxmpp-db-21.0.0.0/bin/scssh --version
    20210422:17:27:50:054828 seabox_install:scnode1:seabox-[INFO]:-SUCCESS -- Requested commands completed
    

    seabox install命令参数可为cluster或host,其中cluster时为整个集群安装部署;为host时,即安装指定节点,例如seabox install host -h scnode2

    seabox install cluster命令会读取$SDHOME/etc/seabox-site.yml文件信息来确定集群一共有哪些节点。

    如命令执行报错,可在/home/seabox/seaboxAdminLogs目录下查看日志文件,日志文件名称为seabox_install_yyyymmdd.log。

当界面显示seabox-[INFO]:-SUCCESS -- Requested commands completed时,表示安装成功。此时,所有节点/usr/local/seaboxmpp目录下均安装了SeaboxMPP数据库二进制程序。

校验安装情况

确保SeaboxMPP软件已正确安装和配置,在coordinator节点上运行以下确认步骤。如有异常,需进一步分析原因并更正。

  1. 使用seabox用户登录coordinator节点:

    $ su - seabox
    
  2. 导入coordinator节点上已已安装的数据库目录中的path文件设置当前session的环境变量:

    # source /usr/local/seabox/seaboxmpp-db/seaboxmpp_path.sh
    
  3. 使用scssh工具检查所有节点是否均可免密登录,同时确保所有节点SeaboxMPP数据库都完成安装,该命令需使用安装时创建的all_hosts.txt文件,例如:

    $ scssh -f /usr/local/seaboxmpp/seaboxmpp-db/etc/all_hosts.txt -e ls -l $SDHOME
    

    如果安装正常,则不会输出输入密码的提示,所有节点输出的安装目录下内容相同且属主均为seabox用户。

    如提示输入密码,执行以下命令重新配置ssh互信。

    $ scssh-exkeys -f /usr/local/seaboxmpp/seaboxmpp-db/etc/all_hosts.txt
    

SeaboxMPP数据库初始化

集群所有节点安装二进制程序成功后,需要执行seabox init命令才能把各个组件的相关初始文件在指定路径下创建出来,同时形成集群的整体拓扑及分布式信息。

初始化步骤如下:

  1. 在coordinator节点上,切换到seabox用户

    $ su - seabox
    
  2. 导入coordinator节点上已已安装的数据库目录中的path文件设置当前session的环境变量:

    # source /usr/local/seabox/seaboxmpp-db/seaboxmpp_path.sh
    
  3. 执行seabox init命令

    [seabox@scnode1 ~]$ seabox init
    20210422:17:38:47:055168 seabox_init:scnode1:seabox-[INFO]:-Prepare to do 'seabox init'
    20210422:17:38:47:055168 seabox_init:scnode1:seabox-[INFO]:-You can find log in:
    20210422:17:38:47:055168 seabox_init:scnode1:seabox-[INFO]:-/home/seabox/seaboxAdminLogs/seabox_init_20210422.log
    20210422:17:38:47:055168 seabox_init:scnode1:seabox-[INFO]:-SDHOME is set to:
    20210422:17:38:47:055168 seabox_init:scnode1:seabox-[INFO]:-/usr/local/seaboxmpp/seaboxmpp-db-21.0.0.0
    20210422:17:38:47:055168 seabox_init:scnode1:seabox-[INFO]:-Init seabox with args: ['init']
    
    Continue with SEABOX init Yy|Nn (default=N):
    > y
    20210422:17:38:51:055168 seabox_init:scnode1:seabox-[INFO]:-begin to init cluster
    20210422:17:38:51:055168 seabox_init:scnode1:seabox-[INFO]:-create scdcs dir successfully
    20210422:17:38:52:055168 seabox_init:scnode1:seabox-[INFO]:-Start scdcs in list: ['scnode1', 'scnode2', 'scnode3']
    ..
    20210422:17:38:54:055168 seabox_init:scnode1:seabox-[INFO]:-3 of 3 scdcs start successfully
    20210422:17:38:55:055168 seabox_init:scnode1:seabox-[INFO]:-SCDCS start successfully on nodes '['scnode1', 'scnode2', 'scnode3']'
    20210422:17:38:55:055168 seabox_init:scnode1:seabox-[INFO]:-Wrote seabox executor configuration successfully
    20210422:17:38:55:055168 seabox_init:scnode1:seabox-[INFO]:-Wrote seabox node configuration successfully
    20210422:17:38:55:055168 seabox_init:scnode1:seabox-[INFO]:-create gtm dir successfully
    20210422:17:38:56:055168 seabox_init:scnode1:seabox-[INFO]:-Init gtm on node: scnode1
    20210422:17:38:57:055168 seabox_init:scnode1:seabox-[INFO]:-gtm init successfully
    20210422:17:38:58:055168 seabox_init:scnode1:seabox-[INFO]:-create Executors primary dir successfully
    20210422:17:38:59:055168 seabox_init:scnode1:seabox-[INFO]:-Init primary executors in list: ['scnode1', 'scnode2', 'scnode3']
    20210422:17:38:59:055168 seabox_init:scnode1:seabox-[INFO]:-Total primary executor number is: 3
    .......
    20210422:17:39:06:055168 seabox_init:scnode1:seabox-[INFO]:-3 of 3 primary executor init successfully
    20210422:17:39:06:055168 seabox_init:scnode1:seabox-[INFO]:-Executors primary init successfully on nodes '['scnode1', 'scnode2', 'scnode3']'
    20210422:17:39:06:055168 seabox_init:scnode1:seabox-[INFO]:-create Executor mirror dir successfully
    20210422:17:39:07:055168 seabox_init:scnode1:seabox-[INFO]:-Init mirror executors in list: ['scnode2', 'scnode3', 'scnode1']
    20210422:17:39:08:055168 seabox_init:scnode1:seabox-[INFO]:-Total mirror executor number is: 3
    ....
    20210422:17:39:12:055168 seabox_init:scnode1:seabox-[INFO]:-3 of 3 mirror executor init successfully
    20210422:17:39:12:055168 seabox_init:scnode1:seabox-[INFO]:-Executors mirror init successfully on nodes '['scnode2', 'scnode3', 'scnode1']'
    20210422:17:39:12:055168 seabox_init:scnode1:seabox-[INFO]:-create Coordinators dir successfully
    20210422:17:39:13:055168 seabox_init:scnode1:seabox-[INFO]:-Init coordinators in list: ['scnode1', 'scnode2', 'scnode3']
    20210422:17:39:14:055168 seabox_init:scnode1:seabox-[INFO]:-Total coordinator number is: 3
    ...........
    20210422:17:39:25:055168 seabox_init:scnode1:seabox-[INFO]:-3 of 3 coordinators init successfully
    20210422:17:39:25:055168 seabox_init:scnode1:seabox-[INFO]:-Coordinators init successfully on nodes '['scnode1', 'scnode2', 'scnode3']'
    20210422:17:39:25:055168 seabox_init:scnode1:seabox-[INFO]:-Init seaboxmpp cluster successfully
    20210422:17:39:25:055168 seabox_init:scnode1:seabox-[INFO]:-Init monitors in list: ['scnode1', 'scnode2', 'scnode3']
    20210422:17:39:25:055168 seabox_init:scnode1:seabox-[INFO]:-Total monitor number is: 3
    20210422:17:39:28:055168 seabox_init:scnode1:seabox-[INFO]:-Monitors init successfully on nodes '['scnode1', 'scnode2', 'scnode3']'
    

    seabox init命令执行时可以指定参数-a,指定时,不需要确认,直接按照配置文件完成初始化;不指定是需要输入确认Yy后继续。

    seabox init命令执行报错,可指定-v参数重新,输出更多信息以便分析问题原因;初始化日志文件在/home/seabox/seaboxAdminLogs目录下,文件名为seabox_init_yyyymmdd.log。

    集群初始化时可指定数据库默认字符集,如不指定,默认与操作系统本地化设置(locale)保持一致。某些情况下,集群各个节点本地化设置可能不一致,此时需指定seabox init的参数--locale,绝大多数情况下为UTF-8,即命令为seabox init --locale utf8

    注意:初始化前尽量确保所有节点时区及字符集设置一致,建议使用时区使用Asia/Shanghai,操作系统字符集为zh_CN.UTF-8

初始化完成后,可执行seabox status命令查看集群整体状态,输出如下:

[seabox@scnode1 seaboxAdminLogs]$ seabox status
cluster status: perfect
+----------+---------------+
| module   | offline/total |
+----------+---------------+
| scdcs    | 0/3           |
| gtm      | 0/1           |
| monit    | 0/3           |
| coor     | 0/3           |
| executor | 0/6           |
+----------+---------------+
warning: License is about to expire, please update license in time

其中cluster status表示集群整体状态是否可用,perfect表示所有组件全部状态良好;usable表示集群状态可用,但有部分组件状态异常;unusable表示集群状态不可用,如某个组件所有节点都异常等情况。表格中信息表示各个组件的整体情况。

也可通过seabox status -a命令查看所有组件状态,输出如下:

[seabox@scnode1 seaboxAdminLogs]$ seabox status -a
scdcs:
+---------+--------------+--------+---------------------+
| host    | service_port | status | datadir             |
+---------+--------------+--------+---------------------+
| scnode1 | 2379         | online | /opt/scdata/scdcs/0 |
| scnode2 | 2379         | online | /opt/scdata/scdcs/1 |
| scnode3 | 2379         | online | /opt/scdata/scdcs/2 |
+---------+--------------+--------+---------------------+
gtm:
+---------+------+--------+---------------------------+
| host    | port | status | datadir                   |
+---------+------+--------+---------------------------+
| scnode1 | 3566 | online | /opt/scdata/executord/gtm |
+---------+------+--------+---------------------------+
monit:
+---------+--------+----------------------------+
| host    | status | datadir                    |
+---------+--------+----------------------------+
| scnode1 | online | /opt/scdata/coordinatord/0 |
| scnode2 | online | /opt/scdata/coordinatord/1 |
| scnode3 | online | /opt/scdata/coordinatord/2 |
+---------+--------+----------------------------+
coordinator:
+----+-------+----+-----+----------+-----------+
| dbid | host    | port | status | preferred_host | datadir                    |
+----+-------+----+-----+----------+-----------+
|    1 | scnode1 | 3000 | online | scnode1        | /opt/scdata/coordinatord/0 |
|    2 | scnode2 | 3000 | online | scnode2        | /opt/scdata/coordinatord/1 |
|    3 | scnode3 | 3000 | online | scnode3        | /opt/scdata/coordinatord/2 |
+----+-------+----+-----+----------+-----------+
executor:
+---+---+---+----+---+----+----+---+----+------+
| dbid | content | role | preferred_role | mode | status | host    | port | preferred_host | datadir                         |
+---+---+---+----+---+----+----+---+----+------+
|    4 | 0       | p    | p              | s    | online | scnode1 | 3800 | scnode1        | /opt/scdata/executord/primary/0 |
|    5 | 1       | p    | p              | s    | online | scnode2 | 3800 | scnode2        | /opt/scdata/executord/primary/1 |
|    6 | 2       | p    | p              | s    | online | scnode3 | 3800 | scnode3        | /opt/scdata/executord/primary/2 |
|    7 | 0       | m    | m              | s    | online | scnode2 | 3801 | scnode2        | /opt/scdata/executord/mirror/0  |
|    8 | 1       | m    | m              | s    | online | scnode3 | 3801 | scnode3        | /opt/scdata/executord/mirror/1  |
|    9 | 2       | m    | m              | s    | online | scnode1 | 3801 | scnode1        | /opt/scdata/executord/mirror/2  |
+---+---+---+----+---+----+----+---+----+------+
warning: License is about to expire, please update license in time

参数自动评估

在集群安装过程中会自动评估某些参数

  • sc_vmem_protect_limit

一个executor可使用的总内存

评估值 = (mem+swap*0.5)/ 当前物理机上primary_executor数

若当前物理机没有主节点,按主节点数是1算

  • ve_mem_per_hash_table

VE引擎一个hash表的可用内存,在一个sql中Hash Join,Hash Aggregation会使用hash表,超过内存限制的部分将写入磁盘。一个sql可能有多个Hash Join,意味着一个sql可能就会使用多个ve_mem_per_hash_table内存

if (sc_vmem_protect_limit > 256GB)
      评估值 = 256MB;
  else if (mem > 128GB)
      评估值 = 128MB;
  else if (mem > 64GB)
      评估值 = 64MB;
  else if (mem > 32GB)
      评估值 = 32MB;
  else if (mem > 16GB)
      评估值 = 16MB;
  else
      评估值 = 8MB;
  • ve_work_mem

VE引擎除了使用hash表的算子以外,其他执行算子使用的内存,如排序算子。

评估值 = ve_mem_per_hash_table / 2

参数建议值

在集群安装后, 运行 seabox suggest 可以得出一些参数的推荐值,可以根据建议设置一些参数,具体用法:

# 查看各个参数在不同内存下的建议值
seabox suggest -l

# 查看各个参数在当前内存下的建议值
seabox suggest

# 查看各个参数在指定内存下的建议值
seabox suggest -m value

# 按建议值设置参数
seabox suggset -f

如果是单机模式,上述命令可以替换为

sd_suggest -l
sd_suggest
sd_suggest -m value
sd_suggest -f

环境变量设置

建议SeaboxMPP所有节点安装完成后,将导入环境变量添加为seabox用户操作系统环境变量中,执行命令如下:

[seabox@scnode1 ~]$ scssh -f /usr/local/seaboxmpp/seaboxmpp-db/etc/all_hosts.txt -e " cat <<EOF >> ~/.bashrc
> if [ -f /usr/local/seaboxmpp/seaboxmpp-db/seaboxmpp_path.sh ]; then
>         source /usr/local/seaboxmpp/seaboxmpp-db/seaboxmpp_path.sh
> fi
> EOF
> "

导入的seaboxmpp_path.sh脚本中设置了以下环境变量:

SDHOME

SeaboxMPP数据库软件的安装路径,如:

SDHOME=/usr/local/seaboxmpp/seaboxmpp-db-21.0.0.0
PATH

PATH环境变量需指向数据库bin目录,例如:

PATH=$SDHOME/bin:$PATH
PYTHONPATH

PYTHONPATH变量需设置SeaboxMPP安装后的python lib路径

PYTHONPATH=$SDHOME/lib/python:$SDHOME/bin/lib:${PYTHONPATH:-}
SEABOXSITE_CONF

指向SeaboxMPP数据库安装及初始化配置文件,默认为$SDHOME/etc/seabox-site.yml

SEABOXSITE_CONF=$SDHOME/etc/seabox-site.yml
LD_LIBRARY_PATH

LD_LIBRARY_PATH环境变量应指向数据库的链接库路径,例如:

LD_LIBRARY_PATH=$SDHOME/lib:$SDHOME/lib/etcd_api:${LD_LIBRARY_PATH:-}

除导入上述seaboxmpp_path.sh脚本中必须配置的环境变量外,还有部分可选环境变量也可在~、.bashrc文件中设置。这些环境变量包括:

SDAPPNAME
应用程序的名称,通常在应用程序连接到服务器时设置。该名称会在运行视图及日志项中显示。SDAPPNAME环境变量的行为与连接参数application_name一致。默认值是ssql,不能超过63个字符。
SDDATABASE
连接默认的database。
SDHOST
SeaboxMPP数据库集群任一coordinaor节点主机名。
SDHOSTADDR
SeaboxMPP数据库集群任一coordinaor节点的IP地址。为避免DNS查找的开销,可作为SDHOST的替代或补充。
SDPASSWORD
当服务设置要求密码验证时连接时需使用用户密码。出于安全原因,不建议使用此环境变量。建议使用~/.sdpass文件。
SDPASSFILE
查找用户密码的文件名。如果未设置,默认使用~/.sdpass。
SDOPTIONS
设置SeaboxMPP数据库coordinaor实例服务的额外配置参数。
SDPORT
SeaboxMPP数据库coordinaor实例端口号,默认为3000.
SDUSER
用于连接的数据库用户名。
SDDATESTYLE
设置session的默认日期/时间显示风格,等价于SQL语句set datastyle to ‘xxx’语句。
SDTZ
设置session的默认时区,等价于SQL语句set timezone to ‘xxx’语句。
SDCLIENTENCODING
设置客户端的默认字符集,等价于SQL语句set client_encodingto ‘xxx’语句。

客户端连接

SeaboxMPP数据库首次初始化后,仅允许seabox用户本地连接。如希望使用其他用户或通过客户端服务器连接,须创建并允许用户及客户端IP地址访问。更多信息请查阅《SeaboxMPP数据库管理员指南》。

coordinator节点上,使用seabox操作系统用户连接命令如下:

[seabox@scnode1 ~]$ ssql seaboxsql -p 3000
ssql (21.0.0.0)
Type "help" for help.

seaboxsql=# select version();
                                                                     version                                                                      
--------------------------------------------------------------------------------------------------------------------------------------------------
 SeaboxSQL 21.0.0.0 on Linux-3.10.0-1062.el7.x86_64, compiled by cc (GCC) 8.3.1 20190311 (Red Hat 8.3.1-3), build commit 192bd5e (RelWithDebInfo)
(1 row)

seaboxsql=# 

ssql是SeaboxMPP数据库命令行客户端,seaboxsql是数据库初始化后默认创建的database。

安装验证后,就可以开始创建数据库并且加载数据,关于创建database、schema、表或其他数据对象,以及加载数据的更多信息,请查阅《SeaboxMPP数据库管理员指南》中“数据库对象定义”和“加载及导出数据”章节。