跳转至

集中式集群部署

集中式集群部署

集中式集群为专门针对事务场景的集群,它包括scdcs,monitor,executor三种组件。scdcs为monitor提供高可用存储; monitor负责executor及自身的高可用;executor为数据库业务核心模块,可对外暴露数据库连接并提供服务,即用户直接连接executor进行操作。本章讨论如何部署、设置和运行集中式集群,集中式集群高可用以。

操作系统配置

本章描述如何为SeaboxSQL集群准备操作系统环境,并在所有SeaboxSQL数据库的服务器上安装数据库软件二进制文件。

需按顺序执行以下任务:

除非另有说明,上述任务应对SeaboxSQL数据库集群中的所有节点执行。

关闭SELinux

所有SeaboxSQL数据库集群的节点SELinux必须关闭。 参照以下步骤:

  1. 使用root用户,检查SELinux状态:
# sestatus
SELinuxstatus: disabled
  1. 如状态不是disabled,通过编辑/etc/selinux/config文件,禁用SELinux。使用root用户,按下述示意在配置文件中更改SELINUX配置参数的值:
SELINUX=disabled
  1. 如操作系统中安装了SSSD服务(System Security Services Daemon),编辑SSSD的配置文件将selinux_provider参数值设置为none,以防止SELinux-related SSH机制拒绝禁用SELinux。使用root用户编辑/etc/sssd/sssd.conf文件并增加以下参数:
selinux_provider=none
  1. 重启操作系统使/etc/selinux/config修改生效,并且确保SELinux已禁用。

关于禁用SELinux的相关信息,请查阅SELinux文档。

关闭防火墙

同样,须关闭防火墙软件firewalld(RHEL/CentOS7.x操作系统)。按以下步骤执行:

系统防火墙为firewalld,使用如下命令检查firewalld服务状态:

# systemctl status firewalld

如firewalld服务已禁用,命令输出为:

firewalld.service - firewalld - dynamic firewall daemon Loaded: 
loaded (/usr/lib/systemd/system/firewalld.service; disabled;vendor preset: enabled)
Active: inactive (dead)

如未关闭, root用户执行以下命令禁用firewalld:

# systemctl stop firewalld.service

# systemctl disable firewalld.service

了解更多防火墙软件信息,请查阅防火墙相关文档或操作系统相关文档。

调整操作系统参数

SeaboxSQL要求在数据库系统中的所有节点上设置Linux操作系统(OS)特定参数。

通常,下述类型系统参数需要调整:

  • 共享内存

操作系统内核的共享内存段大小须设置正确,否则SeaboxSQL数据库实例将无法工作。对于SeaboxSQL数据库,大多数操作系统安装后默认的共享内存值设置得太低,同时还必须禁用oom机制(out of memory)。

  • 网络

在大容量SeaboxSQL数据库集群中,必须设置某些与网络相关的调节参数,来优化相关组件的网络连接。

  • 用户Limits参数

用户limits参数控制通过用户shell启动进程的可用资源。SeaboxSQL数据库对单个进程可以打开的文件描述符的允许数量要求更高的要求。操作系统默认设置可能会因文件描述符步骤导致一些数据库查询失败。

  • /etc/hosts设置

编辑/etc/hosts文件,确保该文件中包含SeaboxSQL数据库集群的每台服务器的主机名和所有网络接口名。

  • Sysctl内核参数设置

在配置文件/etc/sysctl.conf中设置以下参数,调整后通过sysctl -p命令生效:

# kernel.shmall = _PHYS_PAGES / 2 # 参照注1
kernel.shmall = 4000000000
# kernel.shmmax = kernel.shmall * PAGE_SIZE # 参照注1
kernel.shmmax = 500000000
kernel.shmmni = 4096
vm.overcommit_memory = 0
vm.overcommit_ratio = 95
net.ipv4.ip_local_port_range = 10000 65535 # 参照注2
kernel.sem = 500 2048000 200 40960
kernel.sysrq = 1
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.msgmni = 2048
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.conf.all.arp_filter = 1
net.core.netdev_max_backlog = 10000
net.core.rmem_max = 2097152
net.core.wmem_max = 2097152
vm.swappiness = 10
vm.zone_reclaim_mode = 0
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
vm.dirty_background_ratio = 0 # 参照注3
vm.dirty_ratio = 0
vm.dirty_background_bytes = 1610612736
vm.dirty_bytes = 4294967296

注:以上列出的sysctl参数适用于常见各种环境,但是这些设置在特定情况下可能需要更改。以下是其中某些参数的附加注释。

  1. kernel.shmall参数用来设置在操作系统范围内使用的共享内存页的总数(以页为单位),kernel.shmmax设置单个共享内存段的最大大小(以字节为单位)。

    需根据系统的物理内存和页大小来设置kernel.shmallkernel.shmax值。通常,这两个参数的值都建议设置为系统物理内存的一半,可使用操作系统变量_PHYS_PAGES和PAGE_SIZE计算参数值。

    kernel.shmall = ( _PHYS_PAGES / 2)
    kernel.shmmax = ( _PHYS_PAGES / 2) * PAGE_SIZE
    

    可通过系统终端运行以下2个命令来计算kernel.shmall和kernel.shmax参数的值,getconf命令可获取操作系统变量的值。

    $ echo $(expr $(getconf _PHYS_PAGES) / 2)
    $ echo $(expr $(getconf _PHYS_PAGES) / 2 \* $(getconf PAGE_SIZE))
    

    在实际项目中,建议使用计算出来的值来设置sysctl.conf中的这2个参数,例如,某节点有1583GB内存,该节点_PHYS_PAGES=395903676,PAGE_SIZE=4096,那么kernel.shmallkernel.shmax参数的值应被设置为:

    kernel.shmall = 197951838
    kernel.shmmax = 810810728448
    

    如果master节点共享内存配置与executor节点不同,导致系统变量_PHYS_PAGES和_PHYS_SIZE值不同,那么master节点这两参数值可与executor节点不同。

  2. 在初始化SeaboxSQL数据库时,为了避免数据库与其他程序之间的端口冲突,请勿在操作系统参数net.ipv4.ip_local_port_range指定数据库的端口在该参数范围内。例如,net.ipv4.ip_local_port_range=10000 65535,则可以将SeaboxSQL数据库的基本端口号设置为以下值:

    net.ipv4.ip_local_port_range=10000 65535
    
  3. 服务器内存超过64GB时,以下参数建议设置:

    vm.dirty_background_ratio = 0
    vm.dirty_ratio = 0
    vm.dirty_background_bytes = 1610612736 # 1.5GB
    vm.dirty_bytes = 4294967296 # 4GB
    

    服务器内存小于等于64GB时,删除vm.dirty_background_bytes和vm.dirty_bytes这两个参数,并且设置以下2个相关比例的参数:

    vm.dirty_background_ratio = 3
    vm.dirty_ratio = 10
    
  4. 调大vm.min_free_kbytes值,确保可满足网络及存储驱动程序的PF_MEMALLOC请求。该参数调整,对内存很大的系统尤为重要,大内存系统中,该参数的默认值通常太低。使用以下awk命令来设置vm.min_free_kbytes的值为物理内存的3%:

    awk 'BEGIN {OFMT = "%.0f";} /MemTotal/ {print "vm.min_free_kbytes =", $2 * .03;}' /proc/meminfo >> /etc/sysctl.conf
    

    不要将vm.min_free_kbytes的值设置为高于系统内存的5%,这样做可能会导致内存不足。

  5. 系统资源limits参数

limits配置 在/etc/security/limits.conf配置文件中设置以下参数:

* soft nofile 524288
* hard nofile 524288
* soft nproc 131072
* hard nproc 131072

对于RHEL或CentOS 7.x操作系统,配置文件/etc/security/limits.d/20-nproc.conf中的配置会覆盖limits.conf文件中设置的值.需确保以上参数值在这些覆盖读取的配置文件中也被设置同同样的值。

Linux内核pam_limits模块先从limits.conf配置文件中读取参数值,后从覆盖文件中读取参数值来设置。有关PAM和用户limits的信息,请参阅PAM和pam_limits相关文档。

在每个executor节点上执行ulimit -u命令来显示每个用户的最大允许线程数,验证返回值是否为131072.

  • XFS文件系统挂载选项配置

XFS是Linux平台上用于数据存储首选的文件系统。建议使用以下XFS挂载选项:

rw,nodev,noatime,nobarrier,inode64

XFS挂载选项可在/etc/fstab文件中设置.以下是通过fstab文件指定XFS挂载选项的示例:

/dev/data /data xfs nodev,noatime,nobarrier,inode64 0 0
  • 磁盘预读设置

每个磁盘设备文件需设置预读(blockdev)大小为16384。查看某磁盘设备的预读值命令为:

# /sbin/blockdev --getra devname

例如:

# /sbin/blockdev --getra /dev/sdb

设置某磁盘设置预读命令为:

# /sbin/blockdev --setra bytes devname

例如:

# /sbin/blockdev --setra 16384 /dev/sdb

blockdev命令的更多用法及信息请参考man手册(man blockdev)。

注意:blockdev –setra命令是非持久化的,操作系统重启均需重新执行。如何运行该命令因操作系统而异,但必须确保每次系统重新启动时都执行该预读设置。

  • 设置磁盘I/O调度策略

Linux支持磁盘I/O调度策略不同的策略,如cfq、as及deadline,要求设置为deadline策略。修改当前系统的磁盘I/O调度策略可通过以下命令(重启后失效):

# echo schedulername > /sys/block/devname/queue/scheduler

例如:

# echo deadline > /sys/block/sbd/queue/scheduler

注意:通过上述命令设置磁盘I/O调度策略也是非持久化的,重启操作系统后须重新设置。如使用上述命令设置该策略,须确保操作系统启动时命令被执行。不同操作系统如何执行该命令的方式不同。

启动时设置I/O调度策略的方式是设置启动内核参数elevator。在GRUB配置文件/boot/grub/grub.conf中的kernel命令添加参数elevator=deadline。以下是RHEL或CentOS系统中,grub.conf配置文件修改的示例,为增加可读性,该命令显示为多行。

kernel /vmlinuz-2.6.18-274.3.1.el5 ro root=LABEL=/ elevator=deadline crashkernel=128M@16M quiet console=tty1 console=ttyS1,115200 panic=30 transparent_hugepage=never 
initrd /initrd-2.6.18-274.3.1.el5.img

在RHEL或CentOS7.x系统中,系统启动时设置I/O调度策略可直接使用grubby系统工具,root用户运行该命令可添加参数到配置文件中。

# grubby --update-kernel=ALL --args="elevator=deadline"

添加参数后,重启操作系统。以下grubby命令可显示已设置的kernel参数.

# grubby --info=ALL

关于grubby工具的更多信息,请查看操作系统文档。如执行grubby命令未能更新kernel的启动参数,请参考本章末的注意。

  • 禁用透明大页(Transparent Huge Pages,THP)

在RHEL或CentOS 7.x系统中,可使用grubby系统工具,root用户运行该命令可添加参数到配置文件中。

# grubby --update-kernel=ALL --args="transparent_hugepage=never"

添加参数后,重启操作系统。以下命令可检查THP的状态,其输出表示THP已被禁用。

$ cat /sys/kernel/mm/*transparent_hugepage/enabled
always [never]

关于THP或grubby工具的更多信息,请参见操作系统文档。如执行grubby命令未能更新kernel的启动参数,请参考本章节末的注意。

  • SSH参数配置

部分SeaboxSQL数据库管理工具,执行相关操作需通过节点之间的SSH(secure shell)连接执行命令。管理工具可能超过服务器设置的未认证连接最大阈值。发生这种情况时,会收到如下报错:

ssh_exchange_identification:Connection closed by remote host..

需对所有部署SeaboxSQL数据库的节点调大该连接阈值,修改ssh守护进程配置文件/etc/ssh/sshd_config(或/etc/sshd_config)中的ssh maxstartups配置参数。

如配置文件中MaxStartups配置值为单个整,则修改该值。如:

MaxStartups 200

如配置文件中MaxStartups配置值为 "start:rate:full"格式,ssh守护进程会随机drop较早的连接。"start:rate:full"中的start标识了允许未经处理的SSH尝试连接的最大数量,一旦未经验证的尝试连接数量达到start数,SSH守护进程拒绝rate%的后续尝试连接,full用来识别未经验证的尝试连接的最大数量,超过full的所有尝试连接都会被拒绝。例如:

MaxStartups 10:30:200

修改ssh MaxStartups配置后须重启ssh守护进程。RHEL/CentOS6操作系统中,root用户执行以下命令:

# systemctl restart sshd.service

注:RHEL/CentOS7.x系统中,如grubby命令不更新kernel启动选项,则需手动更新系统上的所有kernel启动选项。例如,要将参数"transparent_hugepage=never"添加到系统上所有的kernel启动选项。 1. 在配置文件/etc/default/grub中的GRUB_CMDLINE_LINUX行中添加参数:

``` text
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root
rd.lvm.lv=cl/swap rhgb quiet transparent_hugepage=never"
GRUB_DISABLE_RECOVERY="true"
```
  1. 使用root用户运行grub2-mkconfig命令更新所有kernel启动选项:

    # grub2-mkconfig -o /boot/grub2/grub.cfg/
    
  2. 重启操作系统。

创建SeaboxSQL数据库的系统管理员账号

必须在所有节点上创建专用的操作系统用户帐户才能运行SeaboxSQL数据库,并通过此操作系统用户管理数据库。以下命令,均使用名为seabox进行安装。

  • SeaboxSQL数据库服务不允许使用root用户运行

  • seabox用户必须拥有安装和运行SeaboxSQL数据库需要的系统服务、目录的相关权限

  • 使用root用户运行groupadd、useradd及passwd命令来创建seabox操作系统用户

注:确保所有节点上seabox用户具有相同的用户ID(uid)和组ID(gid),以防一些脚本或服务使用这些ID进行标识或判断权限而出现问题。例如,如果不同的executor节点上有不同的uid或gid,那么将SeaboxSQL数据库备份到某些网络文件系统或存储设备可能会失败。创建seabox组和用户时,可使用groupadd -g选项指定gid号,使用useradd -u选项指定uid号。使用命令id seabox查看当前主机上seabox用户的uid和gid。 以下是创建操作系统seabox组及系统账户seabox的示例:

# groupadd seabox
# useradd seabox -r -m -g seabox
# passwd seabox
New password: <changeme>
Retype new password: <changeme>
系统时钟同步

需在所有SeaboxSQL数据库的服务器上使用NTP(Network Time Protocol)服务同步系统时钟,关于NTP的更多信息请登录www.ntp.org。

可在集群完成安装后,使用scssh进行所有节点统一配置。

配置NTP步骤如下:

  1. Root用户登录第一个节点(centra_cluster1),编辑配置文件/etc/ntp.conf,设置server参数指向数据中心的NTP时间服务器。例如(假定10.6.220.20是数据中心时间服务器的IP地址):

    server 10.6.220.20
    
  2. 在所有节点上,使用root用户登录并修改配置文件/etc/ntp.conf ,设置第一个server参数指向第一个节点主机名(centra_cluster1),设置第二个server参数指向第二个节点主机名(centra_cluster2),例如:

    server centra_cluster1 prefer
    server centra_cluster2
    
  3. 在第二个节点上(centra_cluster2),使用root用户登录并修改配置文件/etc/ntp.conf ,设置第一个server参数指向第一个节点主机名,设置第二个server参数指向数据中心时间服务器,例如:

    server centra_cluster1 prefer
    server 10.6.220.20
    
  4. 第一个节点(centra_cluster1)上,执行scssh命令使用NTP守护进程同步系统时钟,例如:

    # scssh -f hostfile_scssh_allhosts -v -e 'ntpd'
    
本地化设置

SeaboxSQL数据库运行以下功能时,依赖操作系统本地化设置:

  • 使用操作系统的本地化功能提供的特定于语言的排序、数字格式等

  • 支持不同语言的多字节字符集以及服务端与客户端不同字符集的转换功能。

为确保所有字符集功能运行完全一致,建议所有安装SeaboxSQL数据库的节点本地化设置保持一致。

以下命令可查看当前操作系统本地化设置:

[root@centra_cluster2 ~]# localectl status
   System Locale: LANG=zh_CN.UTF-8
       VC Keymap: cn
      X11 Layout: cn

如节点间设置不一致,需设置为一致,建议设置为en_US.UTF-8或zh_CN.UTF-8。

设置本地化配置命令如下:

[root@centra_cluster2 ~]# localectl set-locale LANG=zh_CN.UTF-8
时区设置

SeaboxSQL数据库可从一组内部存储的时区中选择其中之一使用。可用的时区取自Internet Assigned Numbers Authority(IANA)时区库。如未指定数据库时区值时,SeaboxSQL数据库在启动时自动从服务器操作系统设置的时区获取当前可用时区。虽然在数据库安装及初始化后可通过seabox config命令调整TimeZone参数的值,但仍强烈建议安装前确保所有节点时区设置是一致和正确的。

以下命令可查看当前操作系统时区设置:

[root@centra_cluster2 ~]# timedatectl status
      Local time: 四 2021-04-22 18:36:56 CST
  Universal time: 四 2021-04-22 10:36:56 UTC
        RTC time: 四 2021-04-22 10:36:56
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a

如有节点不一致或配置与当前地区不一致,建议统一为相同设置。在中国地区,建议都设置为:Asia/Shanghai

[root@centra_cluster2 ~]# timedatectl  set-timezone Asia/Shanghai

数据库安装及初始化

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

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

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

主机名 IP地址 是否SCDCS 实例默认状态
centra_cluster1 172.17.0.21 YES
centra_cluster2 172.17.0.22 YES
centra_cluster3 172.17.0.23 YES

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

单个节点安装二进制程序
  1. 规划为SeaboxSQL数据库一个节点的服务器上,即centra_cluster1,以root用户登录

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

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

  3. 解压安装文件:

    # unzip seaboxsql-db-<version>-<osinfo>-<platform>.zip
    
  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。

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

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

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

为用户建立 ssh 互信

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

  1. seabox用户登录已安装集中式集群二进制程序节点
su - seabox
  1. 导入此节点上已安装的数据库目录中的 path 文件, 设置当前 session 的环境变量:
source /home/seabox/sdsql/seaboxsql_path.sh
  1. 在 seabox 的 home 目录下,将集中式集群数据库所有节点的主机名写入安装目录 $SDHOME/etc/all_hosts.txt 文件,确保该文件中没有空行或其他空格。例如,集群中包含2个节点,其主机名配置如下:
[seabox@centra_cluster1 ~]$ cat $SDHOME/etc/all_hosts.txt
centra_cluster1
centra_cluster2
centra_cluster3

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

  1. 使用 scssh-exkeys 工具建立互信,执行以下命令:
[seabox@centra_cluster1 ~]$ scssh-exkeys -f $SDHOME/etc/all_hosts.txt
[STEP 1 of 5] create local ID and authorize on local host
  ... /home/seabox/.ssh/id_rsa file exists ... key generation skipped

[STEP 2 of 5] keyscan all hosts and update known_hosts file

[STEP 3 of 5] authorize current user on remote hosts
  ... send to centra_cluster2
  ... send to centra_cluster3

[STEP 4 of 5] determine common authentication file content

[STEP 5 of 5] copy authentication files to all remote hosts
  ... finished key exchange with centra_cluster2
  ... finished key exchange with centra_cluster3

[INFO] completed successfully

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

[seabox@centra_cluster1 ~]$ scssh -f $SDHOME/etc/all_hosts.txt
=> hostname
[centra_cluster3] centra_cluster3
[centra_cluster1] centra_cluster1
[centra_cluster2] centra_cluster2
编辑初始化配置文件

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

cluster_type : centralized         # 执行集群类型,集中式采用“centralized”
scdcs:                                          # 数据一致性服务配置,最少配置1个
  scdcs_top_path : /seabox
  scdcs_private : True                          # 支持多套集群共享scdcs,True:私有的scdcs; False:共享的scdcs
  base_service_port : 2379
  base_inner_port : 2380
  base_data_dir : /home/seabox/sdsql/seabox-data-directory/scdcs
  setup:
    - hostname : centra_cluster1
      address : 172.17.0.21
    - hostname : centra_cluster2
      address : 172.17.0.22
    - hostname : centra_cluster3
      address : 172.17.0.23

executor:                                       # 集群executor节点配置
  have_mirror : True
  mirror_mode : customize                       # 主备配置模式,auto 和 customize
  base_port : 3800                             # 集中式集群建议主备executor端口相同
  base_data_dir : /home/seabox/sdsql/seabox-data-directory/executordd/primary
  base_mirror_data_dir : /home/seabox/sdsql/seabox-data-directory/executordd/mirror

  executor_count_each_host : 1
  executor_mirror_count : 1


  primary_vip:
    vip_addr : 172.17.0.20
    vip_host :
        - hostname : centra_cluster1
          network : eth0
        - hostname : centra_cluster2
          network : eth0

  setup:
    - hostname : centra_cluster1   #host 节点
      mirror_host : [centra_cluster2]

monitor:
  base_data_dir : /home/seabox/sdsql/seabox-data-directory/monitor
  setup:
    - hostname : centra_cluster1
    - hostname : centra_cluster2

storage:
  type : localfs                                # [dfs | localfs | sharefs]

# 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(集中式数据库集群)
scdcs

scdcs 组件相关配置信息。

scdcs_private
支持多套集群共享scdcs,True:私有的scdcs; False:共享的scdcs。
base_service_port
scdcs 一致性协议对外服务端口,即其他组件与 scdcs 连接的端口,默认为 2379。
base_inner_port
scdcs 一致性协议组件内部通讯端口,默认为 2380。
base_data_dir
scdcs 一 致 性 协 议 组 件 数 据 目 录。
setup

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

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

集群 executor 节点配置信息

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

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

hostname
executor 节点主机名
storage
存储层相关配置信息,集中式集群设置为localfs 支持本地存储及分布式存储机制。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
可以设置数据库的所有参数值,数据库初始化完成后,参数即被设置为期望值。没有标明的参数,则使用默认值
所有节点安装二进制程序

安装步骤如下:

  1. 已经安装二进制程序的节点上(centra_cluster1),su 为 seabox 用户,导入已安装的数据库目录中的 path 文件, 设置当前 session 的环境变量:
su - seabox
source $SDHOME/seaboxsql_path.sh
  1. 运行seabox install命令安装。
seabox install

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

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

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

当界面显示seabox INFO: success -- requested commands completed时,表示安装成功。此时,所有节点安装目录下均安装了集中式集群二进制程序。

执行初始化

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

初始化步骤如下:

  1. 已经安装二进制程序的节点上(centra_cluster1),切换到 seabox 用户
su - seabox
  1. 导入节点上已安装的数据库目录中的 path 文件设置当前 session 的环境变量
source $SDHOME/seaboxsql_path.sh
  1. 执行seabox init命令
[seabox@centra_cluster1 ~]$ seabox init
 2023-04-25 02:55:30 UTC [575747] seabox_init centra_cluster1:seabox INFO: prepare to do 'seabox init'
 2023-04-25 02:55:30 UTC [575747] seabox_init centra_cluster1:seabox INFO: you can find log in:
 2023-04-25 02:55:30 UTC [575747] seabox_init centra_cluster1:seabox INFO: /home/seabox/seaboxAdminLogs/seabox_init_20230425.log
 2023-04-25 02:55:30 UTC [575747] seabox_init centra_cluster1:seabox INFO: SDHOME is set to:
 2023-04-25 02:55:30 UTC [575747] seabox_init centra_cluster1:seabox INFO: /home/seabox/sdsql
 2023-04-25 02:55:30 UTC [575747] seabox_init centra_cluster1:seabox INFO: Init seabox with args: ['init']
 2023-04-25 02:55:31 UTC [575747] seabox_init centra_cluster1:seabox INFO: check cluster nodes hostname successful
 2023-04-25 02:55:32 UTC [575747] seabox_init centra_cluster1:seabox INFO: start to check system configuration
ignore the issues and continue with SEABOX init Yy|Nn (default=N):
> y
 2023-04-25 02:56:00 UTC [575747] seabox_init centra_cluster1:seabox INFO: check system kernel version passed between all cluster hosts
 2023-04-25 02:56:02 UTC [575747] seabox_init centra_cluster1:seabox INFO: check system time passed between all cluster hosts
 2023-04-25 02:56:02 UTC [575747] seabox_init centra_cluster1:seabox INFO: begin to init cluster
 2023-04-25 02:56:02 UTC [575747] seabox_init centra_cluster1:seabox INFO: create scdcs dir successfully
 2023-04-25 02:56:02 UTC [575747] seabox_init centra_cluster1:seabox INFO: create scdcs candidate dir successfully
2023-04-25 02:56:06 UTC [575747] seabox_init centra_cluster1:seabox INFO: start scdcs in list: ['centra_cluster1', 'centra_cluster2', 'centra_cluster3']
..
 2023-04-25 02:56:08 UTC [575747] seabox_init centra_cluster1:seabox INFO: 3 of 3 scdcs start successfully
 2023-04-25 02:56:13 UTC [575747] seabox_init centra_cluster1:seabox INFO: scdcs start successfully on nodes '['centra_cluster1', 'centra_cluster2', 'centra_cluster3']'
 2023-04-25 02:56:14 UTC [575747] seabox_init centra_cluster1:seabox INFO: wrote seabox executor configuration successfully
 2023-04-25 02:56:14 UTC [575747] seabox_init centra_cluster1:seabox INFO: wrote seabox node configuration successfully
 2023-04-25 02:56:19 UTC [575747] seabox_init centra_cluster1:seabox INFO: create executors primary dir successfully
 2023-04-25 02:56:20 UTC [575747] seabox_init centra_cluster1:seabox INFO: init primary executors in list: ['centra_cluster1']
...................
 2023-04-25 02:56:39 UTC [575747] seabox_init centra_cluster1:seabox INFO: 1 of 1 primary executor init successfully
 2023-04-25 02:56:39 UTC [575747] seabox_init centra_cluster1:seabox INFO: total primary executor number is: 1
..
 2023-04-25 02:56:41 UTC [575747] seabox_init centra_cluster1:seabox INFO: executors primary init successfully on nodes '['centra_cluster1']'
 2023-04-25 02:56:42 UTC [575747] seabox_init centra_cluster1:seabox INFO: create executor mirror dir successfully
 2023-04-25 02:56:42 UTC [575747] seabox_init centra_cluster1:seabox INFO: init mirror executors in list: ['centra_cluster2']
...............
 2023-04-25 02:56:57 UTC [575747] seabox_init centra_cluster1:seabox INFO: 1 of 1 mirror executor init_mirror successfully
 2023-04-25 02:56:57 UTC [575747] seabox_init centra_cluster1:seabox INFO: total mirror executor number is: 1
 2023-04-25 02:56:57 UTC [575747] seabox_init centra_cluster1:seabox INFO: total mirror executor number is: 1
...
 2023-04-25 02:57:00 UTC [575747] seabox_init centra_cluster1:seabox INFO: executors mirror init successfully on nodes '['centra_cluster2']'
 2023-04-25 02:57:00 UTC [575747] seabox_init centra_cluster1:seabox INFO: create monitor dir successfully
 2023-04-25 02:57:00 UTC [575747] seabox_init centra_cluster1:seabox INFO: init monitors in list: ['centra_cluster1', 'centra_cluster2']
 2023-04-25 02:57:00 UTC [575747] seabox_init centra_cluster1:seabox INFO: total monitor number is: 2
..
 2023-04-25 02:57:03 UTC [575747] seabox_init centra_cluster1:seabox INFO: monitors init successfully on nodes '['centra_cluster1', 'centra_cluster2']'
 2023-04-25 02:57:03 UTC [575747] seabox_init centra_cluster1:seabox INFO: init seaboxsql cluster successfully

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@centra_cluster1 ~]$ seabox status
cluster node: 0/3
cluster status: perfect
+----------+----------------+
| module   | abnormal/total |
+----------+----------------+
| scdcs    | 0/3            |
| monitor  | 0/2            |
| executor | 0/2            |
+----------+----------------+

其中 cluster status 表示集群整体状态是否可用,perfect 表示所有组件全部状态良好;usable表示集群状态可用,但有部分组件状态异常;unusable 表示集群状态不可用,如某个组件所有节点都异常等情况。表格中信息表示各个组件的整体情况,也可通过seabox status -a命令查看所有组件状态,输出如下:

[seabox@centra_cluster1 ~]$ seabox status -a
cluster type : centralized
scdcs:
+-----------------+-------------+--------------+--------+--------------------------------------------------+
| host            | address     | service_port | status | datadir                                          |
+-----------------+-------------+--------------+--------+--------------------------------------------------+
| centra_cluster1 | 172.17.0.21 | 2379         | normal | /home/seabox/sdsql/seabox-data-directory/scdcs/0 |
| centra_cluster2 | 172.17.0.22 | 2379         | normal | /home/seabox/sdsql/seabox-data-directory/scdcs/1 |
| centra_cluster3 | 172.17.0.23 | 2379         | normal | /home/seabox/sdsql/seabox-data-directory/scdcs/2 |
+-----------------+-------------+--------------+--------+--------------------------------------------------+
monitor:
+-----------------+--------+--------------------------------------------------------+---------+
| host            | status | datadir                                                | role    |
+-----------------+--------+--------------------------------------------------------+---------+
| centra_cluster1 | normal | /home/seabox/sdsql/seabox-data-directory/monitor/10000 | standby |
| centra_cluster2 | normal | /home/seabox/sdsql/seabox-data-directory/monitor/10001 | primary |
+-----------------+--------+--------------------------------------------------------+---------+
executor:
+------+---------+------+------+--------+--------+-----------------+-----------------+------+-----------------+----------------------------------------------------------------+
| dbid | content | role | mode | source | status | host            | address         | port | pre_host        | datadir                                                        |
+------+---------+------+------+--------+--------+-----------------+-----------------+------+-----------------+----------------------------------------------------------------+
|    1 | 0       | p    | s    | 0      | normal | centra_cluster1 | centra_cluster1 | 3800 | centra_cluster1 | /home/seabox/sdsql/seabox-data-directory/executordd/primary/0  |
|    2 | 0       | a    | s    | 1      | normal | centra_cluster2 | centra_cluster2 | 3800 | centra_cluster2 | /home/seabox/sdsql/seabox-data-directory/executordd/mirror/0/0 |
+------+---------+------+------+--------+--------+-----------------+-----------------+------+-----------------+----------------------------------------------------------------+
vip:
+-------------+------------------+
|   ip addr   | current location |
+-------------+------------------+
| 172.17.0.20 | centra_cluster1  |
+-------------+------------------+

集中式集群卸载

发生以下情况时,可能需要将已经安装的集群卸载掉:

  1. 集群所有节点二进制文件安装或初始化时,如中途报错或发生其他异常,导致无法重复执行安装或初始化命令;

  2. 集群重新部署或需要销毁时卸载。

集群卸载按以下步骤执行:

  1. 已经安装二进制程序的节点上(centra_cluster1),切换到 seabox 用户

    su - seabox
    
  2. 确保集群服务已全部停止,如未停止,执行seabox stop命令停止:

    [seabox@centra_cluster1 ~]$ seabox stop -a
     2023-04-25 03:05:13 UTC [578126] seabox_stop centra_cluster1:seabox INFO: gathering information and validating the environment...
     2023-04-25 03:05:13 UTC [578126] seabox_stop centra_cluster1:seabox INFO: seabox version: 'seaboxsql (SeaboxSQL) 21.2.0.147'
     2023-04-25 03:05:16 UTC [578126] seabox_stop centra_cluster1:seabox INFO: --------------------------------------------
     2023-04-25 03:05:16 UTC [578126] seabox_stop centra_cluster1:seabox INFO: cluster instance parameters
     2023-04-25 03:05:16 UTC [578126] seabox_stop centra_cluster1:seabox INFO: --------------------------------------------
     2023-04-25 03:05:16 UTC [578126] seabox_stop centra_cluster1:seabox INFO:    shutdown mode   = smart
     2023-04-25 03:05:16 UTC [578126] seabox_stop centra_cluster1:seabox INFO:    timeout         = 120
     2023-04-25 03:05:16 UTC [578126] seabox_stop centra_cluster1:seabox INFO: --------------------------------------------
     2023-04-25 03:05:16 UTC [578126] seabox_stop centra_cluster1:seabox INFO: executor instances that will be shutdown:
     2023-04-25 03:05:16 UTC [578126] seabox_stop centra_cluster1:seabox INFO: --------------------------------------------
     2023-04-25 03:05:16 UTC [578126] seabox_stop centra_cluster1:seabox INFO:    host              datadir                                                          port   status
     2023-04-25 03:05:16 UTC [578126] seabox_stop centra_cluster1:seabox INFO:    centra_cluster1   /home/seabox/sdsql/seabox-data-directory/executordd/primary/0    3800   u
     2023-04-25 03:05:16 UTC [578126] seabox_stop centra_cluster1:seabox INFO:    centra_cluster2   /home/seabox/sdsql/seabox-data-directory/executordd/mirror/0/0   3800   u
     2023-04-25 03:05:16 UTC [578126] seabox_stop centra_cluster1:seabox INFO: --------------------------------------------
     2023-04-25 03:05:16 UTC [578126] seabox_stop centra_cluster1:seabox INFO: monitor instances that will be shutdown:
     2023-04-25 03:05:16 UTC [578126] seabox_stop centra_cluster1:seabox INFO: --------------------------------------------
     2023-04-25 03:05:16 UTC [578126] seabox_stop centra_cluster1:seabox INFO:    Host              Datadir                                                  Status
     2023-04-25 03:05:16 UTC [578126] seabox_stop centra_cluster1:seabox INFO:    centra_cluster1   /home/seabox/sdsql/seabox-data-directory/monitor/10000   u
     2023-04-25 03:05:16 UTC [578126] seabox_stop centra_cluster1:seabox INFO:    centra_cluster2   /home/seabox/sdsql/seabox-data-directory/monitor/10001   u
     2023-04-25 03:05:16 UTC [578126] seabox_stop centra_cluster1:seabox INFO: --------------------------------------------
     2023-04-25 03:05:16 UTC [578126] seabox_stop centra_cluster1:seabox INFO: scdcs instances that will be shutdown:
     2023-04-25 03:05:16 UTC [578126] seabox_stop centra_cluster1:seabox INFO: --------------------------------------------
     2023-04-25 03:05:16 UTC [578126] seabox_stop centra_cluster1:seabox INFO:    Host              Datadir                                            ServicePort   InnerPort
     2023-04-25 03:05:16 UTC [578126] seabox_stop centra_cluster1:seabox INFO:    centra_cluster1   /home/seabox/sdsql/seabox-data-directory/scdcs/0   2379          2380
     2023-04-25 03:05:16 UTC [578126] seabox_stop centra_cluster1:seabox INFO:    centra_cluster2   /home/seabox/sdsql/seabox-data-directory/scdcs/1   2379          2380
     2023-04-25 03:05:16 UTC [578126] seabox_stop centra_cluster1:seabox INFO:    centra_cluster3   /home/seabox/sdsql/seabox-data-directory/scdcs/2   2379          2380
     2023-04-25 03:05:16 UTC [578126] seabox_stop centra_cluster1:seabox INFO: stop monitor
     2023-04-25 03:05:16 UTC [578126] seabox_stop centra_cluster1:seabox INFO: successfully shutdown 2 of 2 monitor instances
    ......
     2023-04-25 03:05:25 UTC [578126] seabox_stop centra_cluster1:seabox INFO: targeting dbid ['1', '2'] for shutdown
     2023-04-25 03:05:25 UTC [578126] seabox_stop centra_cluster1:seabox INFO: commencing parallel executor instance begin to shutdown, checkpoint maybe take few minutes, please wait patiently...
     2023-04-25 03:05:25 UTC [578126] seabox_stop centra_cluster1:seabox INFO: 0.00% of jobs completed
     2023-04-25 03:05:29 UTC [578126] seabox_stop centra_cluster1:seabox INFO: 100.00% of jobs completed
     2023-04-25 03:05:29 UTC [578126] seabox_stop centra_cluster1:seabox INFO: ----------------------------------------------------
     2023-04-25 03:05:29 UTC [578126] seabox_stop centra_cluster1:seabox INFO:    executors stopped successfully      = 2
     2023-04-25 03:05:29 UTC [578126] seabox_stop centra_cluster1:seabox INFO:    executors with errors during stop   = 0
     2023-04-25 03:05:29 UTC [578126] seabox_stop centra_cluster1:seabox INFO: ----------------------------------------------------
     2023-04-25 03:05:29 UTC [578126] seabox_stop centra_cluster1:seabox INFO: successfully shutdown 2 of 2 executor instances 
     2023-04-25 03:05:29 UTC [578126] seabox_stop centra_cluster1:seabox INFO: database successfully shutdown with no errors reported
    
     2023-04-25 03:05:29 UTC [578126] seabox_stop centra_cluster1:seabox INFO: begin clean executor shared memory
     2023-04-25 03:05:29 UTC [578126] seabox_stop centra_cluster1:seabox INFO: clean up leftover shared memory
     2023-04-25 03:05:31 UTC [578126] seabox_stop centra_cluster1:seabox INFO: finish clean executor shared memory
     2023-04-25 03:05:31 UTC [578126] seabox_stop centra_cluster1:seabox INFO: stop scdcs service
    
  3. 执行seabox uninstall命令卸载集群,注意:如集群已完成初始化,默认seabox uninstall不会删除各组件数据目录,如需要删除所有数据目录需要使用参数–force-clear-data,命令及输出如下:

    [seabox@centra_cluster1 sdsql]$ seabox uninstall --force-clear-data
     2023-04-24 03:51:44 UTC [420846] seabox_install centra_cluster1:seabox INFO: read info from scdcs
     2023-04-24 03:51:44 UTC [420846] seabox_install centra_cluster1:seabox INFO: check scdcs active
     2023-04-24 03:51:44 UTC [420846] seabox_install centra_cluster1:seabox INFO: cannot get infomation from scdcs. Will read scdcs dump file
     2023-04-24 03:51:44 UTC [420846] seabox_install centra_cluster1:seabox INFO: read info from scdcs dump file
     2023-04-24 03:51:44 UTC [420846] seabox_install centra_cluster1:seabox INFO: check cluster password access
     2023-04-24 03:51:44 UTC [420846] seabox_install centra_cluster1:seabox INFO: de-duplicate hostnames
    
    All Seabox data will be cleared Yy|Nn (default=N):
    > y
     2023-04-24 03:51:47 UTC [420846] seabox_install centra_cluster1:seabox INFO: uninstall cluster
     2023-04-24 03:51:47 UTC [420846] seabox_install centra_cluster1:seabox INFO: remove data path
     2023-04-24 03:51:48 UTC [420846] seabox_install centra_cluster1:seabox INFO: remove binary path
     2023-04-24 03:51:54 UTC [420846] seabox_install centra_cluster1:seabox INFO: success -- requested commands completed
    

集中式集群高可用

集中式集群数据库系统的高可用可以通过提供容错硬件平台实现,可以通过启用集中式集群数据库高可用特性实现,也可以通过执行定期监控和运维作业来确保整个系统所有组件保持健康来实现。

从软件层面来说,通过启用各个组件的高可用功能,配合集群监控服务来实现了整个集中式集群数据库系统的高可用,确保在绝大多数情况下都能够确保集中式集群数据库系统能够对外提供服务,并确保在任何情况下集群数据不丢失,确保用户的数据安全。

SCDCS高可用

SCDCS对集中式集群数据库集群提供了全局数据一致性服务,能够让集群中所有组件都看到一致性的数据,而且这个数据可以随着业务要求进行修改。

在集中式集群集群进行部署时,配置多个SCDCS主机(建议至少配置 3 台主机)来实现SCDCS的高可用,只要SCDCS集群一半以上的主机能够正常运行,就可以确保数据的正确性和完整性。

当有SCDCS服务节点发生故障时,集群监控服务会尝试将其再次启动。

monitor高可用机制概述

monitor实现了集群中各个组件实例之间的高可用,对于monitor自身来说,也需要实现高可用,要求集群监控服务具有连续性,不能因为有monitor宕机致使集群监控服务停止,下面介绍一下monitor高可用机制的实现:在集中式集群中有多个monitor,多个 monitor 中同一时刻只有 1 个monitor在工作,其他monitor都处于standby的状态,但是,所有的monitor都会定期到scdcs注册自身的信息。在scdcs中有一个monitor锁,每个monitor会定期地到scdcs上去抢这个锁,抢到锁的monitor即为主monitor,提供监控服务,锁的有效期为 10s,如果 10s 内没有更新,则会有其他monitor抢到锁,继续提供监控服务。monitor中所有的业务处理均为无状态的,涉及到的状态信息均存储在scdcs中,即使在业务处理过程中,monitor意外退出,其他的monitor也可以从scdcs中获取到业务处理的情况,将业务正常进行。主 monitor也会监控其他monitor的运行情况,如果其他monitor没有注册信息,主monitor也会重启相应的monitor。

monitor所在的主机、状态、数据目录等相关信息的查询方法:

seabox status -a -m monitor
Executor实例高可用

为满足应用系统关键业务的不间断运行需要,集中式集群内置基于WAL日志流复制(Stream replication)机制的主备集群解决方案,保证提供7*24小时不间断的数据服务。当以集中式集群部署数据库时,有两种类型的executor:primary executor和mirror executor,主executor可以有一个或多个(最多8个)从executor,通过虚拟IP向应用程序提供统一的不间断的服务。

主从executor通过“心跳”通讯监测彼此的运行状态。正常情况下,主executor对外提供数据库服务,从executor处于备用状态。一旦主executor发生故障不能提供数据库服务时,从executor主动接管,并继续对外提供服务,保证用户不间断的数据库访问。故障executor修复后处于备用状态。

集中式集群高可用参数明细如下:

参数 含义 默认值 修改方法
monitor_exec_start_timeout executor 启动超时时间,启动超过此时间则认为启动失败,单位:秒 30 seabox config
monitor_exec_bad_time executor 掉线超过此时间,则尝试其状态修改为 'removed',如果此时 executor 的 seaboxmaster 进程还存在,则不修改其状态,继续等待,直到达到 'monitor_exec_complete_bad_time' 设定的超时时间,单位:秒 30 seabox config
monitor_exec_complete_bad_time executor 掉线超过此时间,不再检查 seaboxmaster 进程是否存在,直接将其状态修改为 'removed',单位:秒 30 seabox config
monitor_exec_nsync_time executor 的 mode 在正常情况下为 's',如果 executor 的 mode 变为 'n',超过此时间,则将其状态修改为 'removed',单位:秒 120 seabox config
monitor_exec_async_time executor 的 mode 在正常情况下为 's',如果 executor 的 mode 变为 'a/p',并且运行正常,超过此时间,monitor 会将其 mode 修改为 's',单位:秒 120 seabox config
monitor_exec_recovering_time executor 启动后,会处于 'recovery' 状态,重放WAL,此时 executor 不接受外界的连接,当超过此时间还没有进入 'online' 状态,则将其状态修改为 'removed',准备进行自动修复,单位:秒 180 seabox config
monitor_recover_sync_timeout 主从实例同步超时时间,超过此时间还没有达到主从同步,则认为同步失败,单位:秒 30 seabox config
monitor_recover_promote_timeout mirror executor 提升为 primary executor 的等待时间,超过此时间则认为升主失败,单位:秒 3600 seabox config
monitor_recover_operation_timeout monitor 自动修复过程中,启动 coordinator/executor 的超时时间,单位:秒 3600 seabox config
monitor_recover_stop_timeout monitor 自动修复过程中,停止 coordinator/executor 的超时时间,单位:秒 60 seabox config
monitor_recover_exec_parallel_mode executor 使用 basebackup 进行全量恢复时,是否可以多个 executor 并发恢复,0:串行恢复,1:并行恢复 1 seabox config
monitor_recover_exec_parallel_degree executor 并发使用 basebackup 进行全量恢复时,并发度控制,0:没有并发,其他为并发度 0 seabox config
monitor_recover_backup_core 实例在进行全量自动恢复前,是否需要备份core文件,0:不备份,1:备份 1 seabox config
monitor_recover_rewind_retry_count executor 使用 rewind 进行自动恢复失败时的重试次数 3 seabox config
monitor_recover_rewind_retry_interval executor 使用 rewind 进行自动恢复重试间隔,单位:秒 10 seabox config
monitor_basebackup_transfer_rate 使用 basebackup 自动恢复,对 basebackup 网络传输限速。0:不限速;大于0:限速值;单位:KB/s 0 seabox config
monitor_basebackup_format 是否使用 basebackup 的 plain 模式对实例进行自动恢复,0:正常模式,1:plain模式 0 seabox config
monitor_enable_exec_basebackup executor 是否使用 basebackup 进行自动恢复。0:否;1:是。此配置优先级低于 monitor_enable_exec_rewind 和 monitor_enable_exec_rewind_checksum 1 seabox config
monitor_enable_exec_rewind executor 是否使用 rewind 方式进行自动恢复。0:否;1:是。此配置优先级高于 monitor_enable_exec_basebackup 和 monitor_enable_exec_rewind_checksum 1 seabox config
monitor_enable_exec_rewind_checksum executor 状态为 'removed' 时,是否使用 checksum rewind 方式进行自动恢复。0:否;1:是。此配置优先级低于 monitor_enable_exec_rewind,高于 monitor_enable_exec_basebackup 1 seabox config
monitor_enable_exec_evaluate 对 WAL 日志文件和数据的空间进行评估,当 WAL 日志文件大于数据空间的2倍时,使用 basebackup 进行自动恢复,不使用 rewind 进行自动恢复。0:不评估;1:评估 1 seabox config
monitor_enable_idle monitor 是否进入 idle 模式,不进行任何集群监控服务。0:否;1:是 0 seabox config
monitor_enable_verbose_logging monitor 是否设置日志输出为 debug 级。0:否;1:是 0 seabox config
monitor_max_slot_wal_keep_size WAL 占用空间阈值,当 mirror executor 掉线时,计算 primary executor 中 WAL 占用空间,如果占用空间超过此阈值,则将复制槽摘除。0:不检查;大于0:检查 primary executor 的 WAL;单位:GB 64*1024 seabox config
monitor_doctor_sql_timeout monitor 进行自动恢复操作时,会连接 coordinator/executor 并发送 sql, 设置连接超时,如果超过此时间,则中断连接,单位:秒 10 seabox config
monitor_doctor_sql_retry monitor 进行自动恢复操作时,连接数据失败的重试次数 10 seabox config
monitor_ssh_connect_timeout monitor 进行 ssh 操作时超时时间,超过此时间则 ssh 操作返回失败,单位:秒 10 seabox config
monitor_scdcs_auto_archive_interval scdcs数据空间检测时间间隔,单位:秒,默认值:86400s(1天) 86400s seabox config
monitor_scdcs_max_data_size scdcs数据空间限值,超过此限值则自动压缩scdcs空间,单位:MB,默认值:256MB 256 seabox config
monitor_auto_set_instance_removed monitor 可以检测一段时间内 coordinator/executor 重启超过设定的次数,则认为此实例损坏,将其设置为 'removed'。0:不启用此功能;1:启用此功能 1 seabox config
monitor_detect_instance_restart_count monitor 检测到 coordinator/executor 在一段时间内重启次数达到此阈值,将重启的实例设置为 'removed' 5 seabox config
monitor_detect_instance_restart_duration_time monitor 检测到 coordinator/executor 在此时间段内,不断重启,将重启的实例设置为 'removed'。单位:秒 180 seabox config
monitor_module_detect_interval monitor 探测组件间隔时间,单位:秒 10 seabox config
monitor_vip_detect_interval monitor 探测 vip 健康状态间隔时间,单位:秒 60 seabox config
monitor_db_username monitor 连接数据库使用的用户名,默认为跟操作系统用户名相同,如果不同,则可以通过此参数来设置 seabox config
monitor_start_before_recovery mirror 进行恢复时,首先启动 mirror,如果 mirror 能够正常启动,且跟 primary 建立流复制,则不需要进行自动恢复。默认启动此功能 1 seabox config
monitor_wait_start_before_recovery mirror 进行恢复时,启动 mirror,如果在超时时间内,还没有启动,则认为启动失败,调用 rewind/basebackup 进行恢复。单位:秒。最小值:3,最大值:3600 60 seabox config
monitor_wait_primary_in_recovery 当 mirror 恢复完成后,等待建立流复制时,如果 primary 挂掉了,等待的超时,超过此时间,则 mirror 恢复失败。单位:秒。最小值:3 600 seabox config
monitor_wait_instance_online monitor 连接实例执行 sql 时,如果实例不在线,最长可以等待的时间。单位:秒。最小值:10 60 seabox config
monitor_exec_nsync_wal_unchange_timeout monitor 检测到 mirror executor 的 mode 为 n,注册信息中 wal_stat 为 1 时,超过此时间,状态仍为改变,则设置为 removed。单位:秒。最小值:10 600 seabox config
monitor_enable_rewind_process_report 是否显示rewind进度信息。0:不显示,1:显示 1 seabox config
monitor_enable_backup_process_report 是否显示basebackup进度信息。0:不显示,1:显示 1 seabox config
monitor_enable_rewind_skip_datafile_search wal rewind 是否跳过文件检索。0:不跳过,1:跳过 1 seabox config
sc_fts_probe_interval 组件注册信息租约时间,超过此时间未注册,将自动删除注册信息,单位:秒。默认:15,最小值:3 10 seabox config,重启数据库生效

集中式集群添加删除虚拟IP

集中式集群虚拟IP支持集群初始化时配置,也支持集群启动后手动添加和删除虚拟IP

添加虚拟IP

1、集中式集群已正常启动

2、首先根据环境部署配置虚拟IP配置文件vip.yml,例如:

vip_addr : 172.17.0.20
vip_host :
  - hostname : centra_cluster1
    network : eth0
  - hostname : centra_cluster2
    network : eth0

3、执行以下命令为集中式集群添加虚拟IP

seabox vip -a -f vip.yml

命令执行成功后会在主executor所在节点添加虚拟IP

删除虚拟IP

1、集中式集群已正常启动且已配置虚拟IP

2、执行以下命令为集中式集群删除虚拟IP

seabox vip -d

命令执行成功后会将主executor所在节点上的虚拟IP删除

虚拟IP无法连接,自动进行主从切换

集中式集群 monitor 会定期对虚拟IP进行检测,如果虚拟IP无法连接,为了避免业务中断,会自动进行主从切换

涉及到的参数如下:

参数 含义 默认值 修改方法
monitor_vip_detect_interval monitor 会间隔一段时间,自动探测 vip 是否在线以及 vip 是否在正确的节点上。最小值:10s,最大值:1000s 60s seabox config
monitor_detect_vip_timeout monitor 探测vip的连接超时时间,如果超过此超时还未成功,则表明vip无法连接,任意一个vip无法连接,则立即执行主从切换。0:表示不进行vip的探测 1s seabox config
monitor_vip_switch_primary_interval 因为 vip 失联,导致主从切换,需要间隔一段时间后,才能再次进行切换,避免频繁切换造成业务无法进行。最小值:60s 300s seabox config

集中式集群主动切换主备节点

集中式集群支持特殊情况下主动切换主备节点,确保集群环境运转正常

1、集中式集群运转正常,通过命令'seabox status -a -m executor'查看集群executor状态

executor:
+------+---------+------+------+--------+--------+-----------------+-----------------+------+-----------------+----------------------------------------------------------------+
| dbid | content | role | mode | source | status | host            | address         | port | pre_host        | datadir                                                        |
+------+---------+------+------+--------+--------+-----------------+-----------------+------+-----------------+----------------------------------------------------------------+
|    1 | 0       | p    | s    | 0      | normal | centra_cluster1 | centra_cluster1 | 3800 | centra_cluster1 | /home/seabox/sdsql/seabox-data-directory/executordd/primary/0  |
|    2 | 0       | a    | s    | 1      | normal | centra_cluster2 | centra_cluster2 | 3800 | centra_cluster2 | /home/seabox/sdsql/seabox-data-directory/executordd/mirror/0/0 |
+------+---------+------+------+--------+--------+-----------------+-----------------+------+-----------------+----------------------------------------------------------------+
vip:
+-------------+------------------+
|   ip addr   | current location |
+-------------+------------------+
| 172.17.0.20 | centra_cluster1  |
+-------------+------------------+

2、执行以下命令将mirror executor提升为primary executor

seabox set -d 2 -r primary

3、通过命令'seabox status -a -m executor'查看集群executor状态

executor:
+------+---------+------+------+--------+--------+-----------------+-----------------+------+-----------------+----------------------------------------------------------------+
| dbid | content | role | mode | source | status | host            | address         | port | pre_host        | datadir                                                        |
+------+---------+------+------+--------+--------+-----------------+-----------------+------+-----------------+----------------------------------------------------------------+
|    1 | 0       | a    | s    | 2      | normal | centra_cluster1 | centra_cluster1 | 3800 | centra_cluster1 | /home/seabox/sdsql/seabox-data-directory/executordd/primary/0  |
|    2 | 0       | p    | s    | 0      | normal | centra_cluster2 | centra_cluster2 | 3800 | centra_cluster2 | /home/seabox/sdsql/seabox-data-directory/executordd/mirror/0/0 |
+------+---------+------+------+--------+--------+-----------------+-----------------+------+-----------------+----------------------------------------------------------------+
vip:
+-------------+------------------+
|   ip addr   | current location |
+-------------+------------------+
| 172.17.0.20 | centra_cluster2  |
+-------------+------------------+

命令执行完毕后,可观察到原来的mirror executor已提升为primary executor