跳转至

单节点部署

单节点部署

SeaboxSQL数据库支持单节点部署以及主备集群模式部署,本节主要说明单节点部署的安装过程。

单节点部署不支持数据库高可用模式,一般不可用于生产环境运用。

创建SeaboxSQL用户账户

要在你的系统中创建一个 Unix 用户账户,用于安装数据库,本文中默认使用seaboxsql用户。

useradd -r -m seaboxsql

二进制程序安装

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

  2. 解压安装文件:

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

    # /bin/bashseaboxsql-db-<version>-<osinfo>-<platform>.bin
    
  4. 执行bash脚本启动安装:

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

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

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

初始化数据库

简单模式初始化

完成SeaboxSQL数据库软件安装后,可通过sd_ctl完成数据库实例的创建。通过sd_ctl命令直接初始化的实例不支持后续升级为集中式集群,一般用于开发验证环境的快速部署,不推荐生产环境运用,其执行步骤如下:

  1. 已经安装二进制程序的节点上,切换到 seaboxsql 用户
su - seaboxsql
  1. 导入节点上已安装的数据库目录中的 path 文件设置当前 session 的环境变量,其中$SDHOME为SeaboxSQL数据库二进制安装的路径,默认为:/usr/local/seabox/seaboxsql-db
source $SDHOME/seaboxsql_path.sh

建议将该环境变量加入当前用户.bashrc配置中,后续登陆后可直接生效。

  1. 创建初始化实例的目录,以/home/seaboxsql/data为例:
mkdir /home/seaboxsql/data
  1. 执行初始化命令:
sd_ctl -D /home/seaboxsql/data initdb

当指定参数--strict-safety时执行安全版本初始化

采用seabox manager模块初始化
编辑初始化配置文件

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

cluster_type : stand_alone

executor:
  setup:
    - hostname : localhost
      data_dir : /home/seabox/seabox-data-directory/executordd/primary
      port : 3800

# 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

配置文件参数说明如下:

cluster_type
数据库类型,默认值为 mpp(大规模分布式分析型MPP数据库),可选值为 stand_alone(单机数据库)、centralized(集中式数据库集群)
executor

executor 节点配置信息

setup

安装节点主机名等信息

hostname
数据库节点主机名
data_dir
数据库的数据目录
port
数据库的服务端口
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
可以设置数据库的所有参数值,数据库初始化完成后,参数即被设置为期望值。没有标明的参数,则使用默认值。
seabox init命令初始化数据库
  1. 已经安装二进制程序的节点上,切换到 seaboxsql 用户
su - seaboxsql
  1. 导入节点上已安装的数据库目录中的 path 文件设置当前 session 的环境变量
source $SDHOME/seaboxsql_path.sh

建议将该环境变量加入当前用户.bashrc配置中,后续登陆后可直接生效。

  1. 执行seabox init命令
[seaboxsql@node1] $ seabox init
 2024-06-25 11:34:22 CST [43706] seabox_init node1:seaboxsql INFO: prepare to do 'seabox init'
 2024-06-25 11:34:22 CST [43706] seabox_init node1:seaboxsql: you can find log in:
 2024-06-25 11:34:22 CST [43706] seabox_init node1:seaboxsql INFO: /home/seaboxsql/seaboxAdminLogs/seabox_init_20240625.log
 2024-06-25 11:34:22 CST [43706] seabox_init node1:seaboxsql INFO: SDHOME is set to:
 2024-06-25 11:34:22 CST [43706] seabox_init node1:seaboxsql INFO: /home/seaboxsql/sdsql
 2024-06-25 11:34:22 CST [43706] seabox_init node1:seaboxsql INFO: Init seabox with args: ['init']
 2024-06-25 11:34:22 CST [43706] seabox_init node1:seaboxsql INFO: success to generate seabox-topo.yml
 2024-06-25 11:34:27 CST [43706] seabox_init node1:seaboxsql INFO: success to set enhanced feat paras
 2024-06-25 11:34:28 CST [43706] seabox_init node1:seaboxsql INFO: init stand alone db successfully

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

[seaboxsql@node1] $ seabox status
cluster type : stand_alone
+----------+---------+-------+--------+-----------------------+
| hostname | address |  port | status |        datadir        |
+----------+---------+-------+--------+-----------------------+
|  node1   |  node1  | 35155 | normal | /home/seaboxsql/data  |
+----------+---------+-------+--------+-----------------------+

其中 status 为 normal 表示数据库实例运行正常,status 为 down 表示数据库实例已经关闭。

升级集中式集群

单节点部署的数据库,没有高可用功能,不建议在生产环境中使用,一旦数据库实例出现故障,将会使用户业务中断,且需人工介入才能恢复。

SeaboxSQL集中式数据库具有完善的高可用、自动恢复、故障切换能力,支持主备部署,能够配置虚拟IP,确保在数据库实例发生故障时,用户业务不会中断,且能够自动修复。

SeaboxSQL单节点部署的数据库可以升级为集中式集群。

  1. 编辑 seabox-site.yml 配置文件
cluster_type : centralized
scdcs:
  base_service_port : 35379
  base_inner_port : 35380
  base_data_dir : /home/seaboxsql/test/scdcs
  setup:
    - hostname : master
      address : 10.10.0.1

executor:
  have_mirror : True
  mirror_mode : customize
  base_port : 35201
  base_data_dir : /home/seaboxsql/data
  base_mirror_data_dir : /home/seaboxsql/test/executor/mirror
  executor_count_each_host : 1
  executor_mirror_count : 1
  setup:
    - hostname : master # 单机所在的hostname
      port : 35155 # 单机的服务端口
      data_dir : /home/seaboxsql/data # 单机的数据目录
      mirror_host : [node1]

monitor:
  base_data_dir : /home/seaboxsql/test/monitor
  setup:
    - hostname : master
    - hostname : node1

storage:
  type : localfs
  1. 单节点升级为集中式集群
[seaboxsql@node1] $ seabox init -us
 2024-06-25 15:42:06 CST [6702] seabox_init node1:seaboxsql INFO: prepare to do 'seabox init'
 2024-06-25 15:42:06 CST [6702] seabox_init node1:seaboxsql INFO: you can find log in:
 2024-06-25 15:42:06 CST [6702] seabox_init node1:seaboxsql INFO: /home/seaboxsql/seaboxAdminLogs/seabox_init_20240625.log
 2024-06-25 15:42:06 CST [6702] seabox_init node1:seaboxsql INFO: SDHOME is set to:
 2024-06-25 15:42:06 CST [6702] seabox_init node1:seaboxsql INFO: /home/seaboxsql/sdsql
 2024-06-25 15:42:06 CST [6702] seabox_init node1:seaboxsql INFO: Init seabox with args: ['init']
 2024-06-25 15:42:07 CST [6702] seabox_init node1:seaboxsql INFO: check cluster nodes hostname successful
 2024-06-25 15:42:07 CST [6702] seabox_init node1:seaboxsql INFO: begin to init cluster
 2024-06-25 15:42:07 CST [6702] seabox_init node1:seaboxsql INFO: SEABOX cluster has 1 scdcs node. For system reliablity, it is recommended to set 3 or more scdcs nodes
 2024-06-25 15:42:07 CST [6702] seabox_init node1:seaboxsql INFO: create scdcs dir successfully
 2024-06-25 15:42:07 CST [6702] seabox_init node1:seaboxsql INFO: create scdcs candidate dir successfully
 2024-06-25 15:42:08 CST [6702] seabox_init node1:seaboxsql INFO: scp scdcs-topo.yml to remote location
 2024-06-25 15:42:08 CST [6702] seabox_init node1:seaboxsql INFO: successfully copy the scdcs-topo.yml to other nodes
 2024-06-25 15:42:08 CST [6702] seabox_init node1:seaboxsql INFO: create scdcs conf file on: master
 2024-06-25 15:42:09 CST [6702] seabox_init node1:seaboxsql INFO: successfully created the configuration file for scdcs startup
 2024-06-25 15:42:09 CST [6702] seabox_init node1:seaboxsql INFO: start scdcs on: master
 2024-06-25 15:42:14 CST [6702] seabox_init node1:seaboxsql INFO: scdcs start successfully on nodes '['master']'
 2024-06-25 15:42:14 CST [6702] seabox_init node1:seaboxsql INFO: wrote seabox executor configuration successfully
 2024-06-25 15:42:14 CST [6702] seabox_init node1:seaboxsql INFO: wrote seabox node configuration successfully
 2024-06-25 15:42:18 CST [6702] seabox_init node1:seaboxsql INFO: init primary executors in list: ['master']
....
 2024-06-25 15:42:22 CST [6702] seabox_init node1:seaboxsql INFO: 1 of 1 primary executor init successfully
 2024-06-25 15:42:22 CST [6702] seabox_init node1:seaboxsql INFO: total primary executor number is: 1
..
 2024-06-25 15:42:24 CST [6702] seabox_init node1:seaboxsql INFO: executors primary init successfully on nodes '['master']'
 2024-06-25 15:42:25 CST [6702] seabox_init node1:seaboxsql INFO: create executor mirror dir successfully
 2024-06-25 15:42:25 CST [6702] seabox_init node1:seaboxsql INFO: init mirror executors in list: ['node1']
.......
 2024-06-25 15:42:32 CST [6702] seabox_init node1:seaboxsql INFO: 1 of 1 mirror executor init_mirror successfully
 2024-06-25 15:42:32 CST [6702] seabox_init node1:seaboxsql INFO: total mirror executor number is: 1
 2024-06-25 15:42:32 CST [6702] seabox_init node1:seaboxsql INFO: total mirror executor number is: 1
.
 2024-06-25 15:42:33 CST [6702] seabox_init node1:seaboxsql INFO: executors mirror init successfully on nodes '['node1']'
 2024-06-25 15:42:33 CST [6702] seabox_init node1:seaboxsql INFO: create monitor dir successfully
 2024-06-25 15:42:33 CST [6702] seabox_init node1:seaboxsql INFO: init monitors in list: ['master', 'node1']
 2024-06-25 15:42:33 CST [6702] seabox_init node1:seaboxsql INFO: total monitor number is: 2
.
 2024-06-25 15:42:35 CST [6702] seabox_init node1:seaboxsql INFO: monitors init successfully on nodes '['master', 'node1']'
 2024-06-25 15:42:35 CST [6702] seabox_init node1:seaboxsql INFO: init seaboxsql cluster successfully

单节点部署的数据库升级为集中式数据库集群,其他的操作可参照集中式集群。

  1. 注意事项:

  2. 单节点部署的数据库升级为集中式集群,单节点部署的数据库必须正常运行

  3. 升级过程中,单机会自动重启,如果此时有业务正在进行,这些业务会失败

  4. 单机启动命令 sd_ctl -D datadir startdatadir 必须是全路径,否则可能会失败

  5. storage type 必须为 localfs,不支持 sharefs

  6. 可以使用共享的 scdcs

  7. 单机如果没有设置 data_checksums,则升级为集中式集群后,无法使用 rewind 和 checksum rewind 来进行自动恢复

数据库启停

通过管理工具启停

通过管理工具完成初始化的实例,可通过管理工具完成数据库的启停。

  1. 停止数据库
[seaboxsql@node1] $ seabox stop
 2024-06-25 11:45:17 CST [60765] seabox_stop node1:seaboxsql INFO: success to stop stand alone db
  1. 启动数据库
[seaboxsql@node1] $ seabox start
 2024-06-25 11:45:24 CST [1955] seabox_start node1:seaboxsql INFO: begin to start stand alone db
 2024-06-25 11:45:24 CST [1955] seabox_start node1:seaboxsql INFO: success to start stand alone db
简单模式启停

通过sd_ctl命令简单模式初始化的实例,可通过sd_ctl命令启停,实例目录以/home/seaboxsql/data为例。

  1. 停止数据库
[seaboxsql@node1] $  sd_ctl -D /home/seaboxsql/data stop
  1. 启动数据库
[seaboxsql@node1] $ sd_ctl -D /home/seaboxsql/data -l /home/seaboxsql/data/seaboxsql.log start
  • 注意:为方便数据库管理员更为便捷地管理SeaboxSQL数据库可将上述命令封装为独立脚本,通常存放于~/bin/目录下,后续可直接执行启停命令,示例如下:
mkdir /home/seaboxsql/bin

echo "sd_ctl -D /home/seaboxsql/data -l /home/seaboxsql/data/seaboxsql.log start" >/home/seaboxsql/bin/start_seabox && chmod +x /home/seaboxsql/bin/start_seabox

echo "sd_ctl -D /home/seaboxsql/data stop" >/home/seaboxsql/bin/stop_seabox && chmod +x /home/seaboxsql/bin/stop_seabox