单节点部署
单节点部署¶
SeaboxSQL数据库支持单节点部署以及主备集群模式部署,本节主要说明单节点部署的安装过程。
单节点部署不支持数据库高可用模式,一般不可用于生产环境运用。
创建SeaboxSQL用户账户¶
要在你的系统中创建一个 Unix 用户账户,用于安装数据库,本文中默认使用seaboxsql用户。
useradd -r -m seaboxsql
二进制程序安装¶
-
从商务渠道获取二进制安装包的拷贝,并将安装包上传至seaboxsql节点服务器上。SeaboxSQL数据库二进制安装包的格式为:
seaboxsql-db-<version>-<osinfo>-<platform>.zip
,其中<platform>
用来标识服务器CPU架构,类似于x86_64;<osinfo>
,用来标识操作系统类型及版本号,如rhel7. -
解压安装文件:
# unzip seaboxsql-db-<version>-<osinfo>-<platform>.zip
-
执行bash脚本启动安装:
# /bin/bashseaboxsql-db-<version>-<osinfo>-<platform>.bin
-
执行bash脚本启动安装:
# /bin/bashseaboxsql-db-<version>-<osinfo>-<platform>.bin
-
安装程序首先提示是否接受SeaboxSQL数据库许可协议,输入yes接受协议。
-
安装程序随后提示输入安装路径,直接回车将安装至默认路径/usr/local/seaboxsql/seaboxsql-db-<version>,或输入绝对路径指定安装位置,执行安装用户必须指定的安装路径的写权限。
-
安装程序完成SeaboxSQL数据库软件安装后,会在该版本的安装目录同级目录创建一个名为seaboxsql-db的符号链接指向已安装的seaboxsql-db-<version>目录。该符号链接便于安装补丁或版本升级。安装路径被设置为环境变量$SDHOME。
初始化数据库¶
简单模式初始化¶
完成SeaboxSQL数据库软件安装后,可通过sd_ctl完成数据库实例的创建。通过sd_ctl命令直接初始化的实例不支持后续升级为集中式集群,一般用于开发验证环境的快速部署,不推荐生产环境运用,其执行步骤如下:
- 已经安装二进制程序的节点上,切换到 seaboxsql 用户
su - seaboxsql
- 导入节点上已安装的数据库目录中的 path 文件设置当前 session 的环境变量,其中
$SDHOME
为SeaboxSQL数据库二进制安装的路径,默认为:/usr/local/seabox/seaboxsql-db
source $SDHOME/seaboxsql_path.sh
建议将该环境变量加入当前用户.bashrc
配置中,后续登陆后可直接生效。
- 创建初始化实例的目录,以
/home/seaboxsql/data
为例:
mkdir /home/seaboxsql/data
- 执行初始化命令:
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
命令初始化数据库¶
- 已经安装二进制程序的节点上,切换到 seaboxsql 用户
su - seaboxsql
- 导入节点上已安装的数据库目录中的 path 文件设置当前 session 的环境变量
source $SDHOME/seaboxsql_path.sh
建议将该环境变量加入当前用户.bashrc
配置中,后续登陆后可直接生效。
- 执行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单节点部署的数据库可以升级为集中式集群。
- 编辑
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
- 单节点升级为集中式集群
[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
单节点部署的数据库升级为集中式数据库集群,其他的操作可参照集中式集群。
-
注意事项:
-
单节点部署的数据库升级为集中式集群,单节点部署的数据库必须正常运行
-
升级过程中,单机会自动重启,如果此时有业务正在进行,这些业务会失败
-
单机启动命令 sd_ctl -D
datadir
start,datadir
必须是全路径,否则可能会失败 -
storage type 必须为 localfs,不支持 sharefs
-
可以使用共享的 scdcs
-
单机如果没有设置 data_checksums,则升级为集中式集群后,无法使用 rewind 和 checksum rewind 来进行自动恢复
数据库启停¶
通过管理工具启停¶
通过管理工具完成初始化的实例,可通过管理工具完成数据库的启停。
- 停止数据库
[seaboxsql@node1] $ seabox stop
2024-06-25 11:45:17 CST [60765] seabox_stop node1:seaboxsql INFO: success to stop stand alone db
- 启动数据库
[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
为例。
- 停止数据库
[seaboxsql@node1] $ sd_ctl -D /home/seaboxsql/data stop
- 启动数据库
[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