集中式集群部署
集中式集群部署¶
集中式集群为专门针对事务场景的集群,它包括scdcs,monitor,executor三种组件。scdcs为monitor提供高可用存储; monitor负责executor及自身的高可用;executor为数据库业务核心模块,可对外暴露数据库连接并提供服务,即用户直接连接executor进行操作。本章讨论如何部署、设置和运行集中式集群,集中式集群高可用以。
操作系统配置¶
本章描述如何为SeaboxSQL集群准备操作系统环境,并在所有SeaboxSQL数据库的服务器上安装数据库软件二进制文件。
需按顺序执行以下任务:
除非另有说明,上述任务应对SeaboxSQL数据库集群中的所有节点执行。
关闭SELinux¶
所有SeaboxSQL数据库集群的节点SELinux必须关闭。 参照以下步骤:
- 使用root用户,检查SELinux状态:
# sestatus
SELinuxstatus: disabled
- 如状态不是disabled,通过编辑/etc/selinux/config文件,禁用SELinux。使用root用户,按下述示意在配置文件中更改SELINUX配置参数的值:
SELINUX=disabled
- 如操作系统中安装了SSSD服务(System Security Services Daemon),编辑SSSD的配置文件将
selinux_provider
参数值设置为none
,以防止SELinux-related SSH机制拒绝禁用SELinux。使用root用户编辑/etc/sssd/sssd.conf文件并增加以下参数:
selinux_provider=none
- 重启操作系统使/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参数适用于常见各种环境,但是这些设置在特定情况下可能需要更改。以下是其中某些参数的附加注释。
-
kernel.shmall参数用来设置在操作系统范围内使用的共享内存页的总数(以页为单位),kernel.shmmax设置单个共享内存段的最大大小(以字节为单位)。
需根据系统的物理内存和页大小来设置
kernel.shmall
和kernel.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.shmall
和kernel.shmax
参数的值应被设置为:kernel.shmall = 197951838 kernel.shmmax = 810810728448
如果master节点共享内存配置与executor节点不同,导致系统变量_PHYS_PAGES和_PHYS_SIZE值不同,那么master节点这两参数值可与executor节点不同。
-
在初始化SeaboxSQL数据库时,为了避免数据库与其他程序之间的端口冲突,请勿在操作系统参数net.ipv4.ip_local_port_range指定数据库的端口在该参数范围内。例如,net.ipv4.ip_local_port_range=10000 65535,则可以将SeaboxSQL数据库的基本端口号设置为以下值:
net.ipv4.ip_local_port_range=10000 65535
-
服务器内存超过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
-
调大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%,这样做可能会导致内存不足。
-
系统资源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" ```
使用root用户运行grub2-mkconfig命令更新所有kernel启动选项:
# grub2-mkconfig -o /boot/grub2/grub.cfg/
重启操作系统。
创建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步骤如下:
-
Root用户登录第一个节点(centra_cluster1),编辑配置文件/etc/ntp.conf,设置server参数指向数据中心的NTP时间服务器。例如(假定10.6.220.20是数据中心时间服务器的IP地址):
server 10.6.220.20
-
在所有节点上,使用root用户登录并修改配置文件/etc/ntp.conf ,设置第一个server参数指向第一个节点主机名(centra_cluster1),设置第二个server参数指向第二个节点主机名(centra_cluster2),例如:
server centra_cluster1 prefer server centra_cluster2
-
在第二个节点上(centra_cluster2),使用root用户登录并修改配置文件/etc/ntp.conf ,设置第一个server参数指向第一个节点主机名,设置第二个server参数指向数据中心时间服务器,例如:
server centra_cluster1 prefer server 10.6.220.20
-
第一个节点(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 | 从 |
注:虚拟机服务器,相关配置略。
单个节点安装二进制程序¶
-
规划为SeaboxSQL数据库一个节点的服务器上,即centra_cluster1,以root用户登录
如果该节点不允许使用root用户访问,可使用seabox用户运行二进制安装程序并将其指定安装至seabox具备写权限的目录下。
-
从商务渠道获取二进制安装包的拷贝,并将安装包上传至centra_cluster1节点服务器上。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
-
安装程序首先提示是否接受SeaboxSQL数据库许可协议,输入yes接受协议。
-
安装程序随后提示输入安装路径,直接回车将安装至默认路径/usr/local/seaboxsql/seaboxsql-db-<version>,或输入绝对路径指定安装位置,执行安装用户必须指定的安装路径的写权限。
-
安装程序完成SeaboxSQL数据库软件安装后,会在该版本的安装目录同级目录创建一个名为seaboxsql-db的符号链接指向已安装的seaboxsql-db-<version>目录。该符号链接便于安装补丁或版本升级。安装路径被设置为环境变量$SDHOME。
-
如果使用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互信。
- seabox用户登录已安装集中式集群二进制程序节点
su - seabox
- 导入此节点上已安装的数据库目录中的 path 文件, 设置当前 session 的环境变量:
source /home/seabox/sdsql/seaboxsql_path.sh
- 在 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 配置文件,确保数据库集群所有节点的主机名都包含在其中。
- 使用 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
- 可以设置数据库的所有参数值,数据库初始化完成后,参数即被设置为期望值。没有标明的参数,则使用默认值
所有节点安装二进制程序¶
安装步骤如下:
- 已经安装二进制程序的节点上(centra_cluster1),su 为 seabox 用户,导入已安装的数据库目录中的 path 文件, 设置当前 session 的环境变量:
su - seabox
source $SDHOME/seaboxsql_path.sh
- 运行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命令才能把各个组件的相关初始文件在指定路径下创建出来,同时形成集群的整体拓扑及分布式信息。
初始化步骤如下:
- 已经安装二进制程序的节点上(centra_cluster1),切换到 seabox 用户
su - seabox
- 导入节点上已安装的数据库目录中的 path 文件设置当前 session 的环境变量
source $SDHOME/seaboxsql_path.sh
- 执行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 |
+-------------+------------------+
集中式集群卸载¶
发生以下情况时,可能需要将已经安装的集群卸载掉:
-
集群所有节点二进制文件安装或初始化时,如中途报错或发生其他异常,导致无法重复执行安装或初始化命令;
-
集群重新部署或需要销毁时卸载。
集群卸载按以下步骤执行:
-
已经安装二进制程序的节点上(centra_cluster1),切换到 seabox 用户
su - seabox
-
确保集群服务已全部停止,如未停止,执行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
-
执行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