KaiwuDB 集群的安装配置,主要分为三个方面:
1. 安装前准备
2. 配置参数详解
3. Ansible自动化安装
第一部分:安装前的准备
KaiwuDB 相较于目前主流数据库(Oracle、Mysql等)在产品交付形式和安装部署方式上有很大的区别,传统的数据库软件是一系列可执行文件的合集,需要经过解压、配置、安装、初始化等过程,费时费力,对安装部署人员有一定的能力要求;KaiwuDB 采用轻量化的方式,将所有的功能封装打包成一个可执行文件,无需繁琐的解压、配置、安装、初始化等过程,使用交付件,加上几个简单的参数即可启动数据库,即使没有数据库相关经验的小白,也可轻松安装使用,KaiwuDB 同样具有灵活的安装部署形式,根据客户的需求,既可以安装部署单机版,也可以安装部署集群版(集群版最少三个节点)。
在数据安全方面,KaiwuDB 同样具有两种安装部署模式,一种是带秘钥的安全模式,一种是不带秘钥的非安全模式,在非安全模式下,集群对任何客户端都是开放的,可访问集群任意节点,同时任何用户均可以以root用户接入集群读写集群中的任何数据,也没有网络加密或认证。在生产环境中强烈建议使用安全模式部署集群
为了实现数据库的高效运行,在安装部署数据库前,有必要对操作系统一些参数进行优化,因 KaiwuDB 是一个文件密集型的数据库,我们需要重点关注操作系统对文件方面的一些参数限制:
参数 |
说明 |
kernel.shmmax |
单个段允许使用的内存大小,建议设置超过--cache和--max-sql-memory 中的较大值,可以设置为服务器总内存的80%甚至更高 |
kernel.shmall |
全部允许使用的共享内存大小,可以设置为总物理内存的90% |
kernel.pid_max |
linux内核对于进程的数量使用 pid_max进行控制 |
fs.file-max |
系统中所允许的文件句柄最大数目,文件句柄设置代表linux系统中可以打开的文件的数量,至少需要设置为 1956(其中每个 store 需要 1700 个文件句柄,256 用于网络),低于该阈值节点将无法启动 KaiwuDB。推荐将最大文件句柄数量配置为 unlimited,或者将该值设置为 15000(其中每个store 需要 10000 个文件句柄,5000 用于网络)或更高的值以支持 KaiwuDB 集群增长的性能需求。 |
vm.swappiness |
0表示尽量使用内存,减少使用磁盘swap交换分区,内存速度明显高于磁盘一个数量级,建议设置为0 |
soft nproc |
soft nproc是操作系统级别对每个用户创建的进程数的限制(超过会告警) |
hard nproc |
操作系统级别对每个用户创建的进程数的限制(超过会报错) |
soft nofile |
每个进程可以打开的文件数的限制(超过会告警) |
hard nofile |
每个进程可以打开的文件数的限制(超过会报错) |
第二部分:KaiwuDB 的一些重要配置参数。首先是数据库网络相关的参数:KaiwuDB 采用二进制可执行文件的软件交付形式,直接使用软件交付件即可启动数据库,启动时需要指定一些基础参数:
参数 |
说明 |
--listen-addr |
侦听来自其他节点和客户端的连接的地址,指定该地址后,所有的客户端连接数据库需要连接该地址 |
--advertise-addr |
告诉其他节点使用的地址,此时节点使用所在机器的所有网卡的IP地址供其他节点和客户端访问 |
内存相关的参数:KaiwuDB 采用二进制可执行文件的软件交付形式,直接使用软件交付件即可启动数据库,启动时需要指定一些基础参数。
参数 |
说明 |
--cache |
内存当中的缓存总大小,多个物理存储设备共享使用,该参数针对的是—store,每一个store对应一个—cache指定的内存大小,所以在多store的node节点上,需要注意该参数的配置,避免设置过大,导致内存不足 |
-max-sql-memory |
SQL查询需要缓存的临时数据所能使用的最大内存空间。包括准备好的查询和在查询执行期间查询的数据行,比如group by、order by等操作的中间结果 |
存储相关的参数如下:
参数 |
说明 |
--store |
存储数据库数据的存储设备路径,同时可以指定设备属性和空间大小。若使用多设备存储,则使用方式如下: --store=path=/mnt/ssd01,size=20GB --store=path=/mnt/ssd02,size=20GB --store=type=mem,size=20GB 注:Size:存储设备允许节点使用的最大空间大小。达到此阈值时,KaiwuDB 尝试将数据重新散布到具有可用容量的其他节点。当其他节点都使用完可用容量时,该节点将无视该限制地继续使用更多空间。一旦集群有其他新的可用空间,则该节点超出阈值的数据将转移到新的可用空间上多store存储平衡: 1. 当节点数=副本数的时候,不会触发节点间多store的数据均衡,数据在一个节点上的多个store间是按顺序写入的,即写满第一个store,写第二个store,依次类推 2. 当节点数>副本数的时候,会触犯节点间多store的数据均衡,数据会在不同节点间的多个store间进行均衡操作,最终的效果是所有节点对应的多store 数据是均衡的 |
--max-disk-temp-storage |
允许超过--max-sql-memory指定内存限制的查询额外使用的临时存储空间的最大硬盘空间大小,允许JOINS、排序和其他内存密集型SQL操作缓存中间结果 |
日志参数如下:
参数 |
说明 |
--log-dir |
启动日志功能并在指定的目录下记录日志。--log-dir配置为空字符串(--log-dir=“”)时,则关闭日志功能。默认开启日志功能 |
--log-dir-max-size |
所有日志文件大小达到一定阈值以后,KaiwuDB 将删除最老的日志。默认值:100MiB |
--log-file-max-size |
单个日志文件大小达到一定阈值以后,KaiwuDB 将开启新的日志文件并输出日志到新文件当中。默认值:10MiB |
--log-file-verbosity |
只有指定严重级别及以上的日志才输出到日志文件当中。例如: --log-file-verbosity=WARNING默认值:INFO |
--sql-audit-dir |
安全审计日志的位置,默认情况下,SQL审核日志与DRDDB生成的其他日志写入同一目录 |
其他参数:
参数 |
说明 |
--certs-dir |
证书目录的路径,用于对安全模式部署的集群进行访问验证。 默认值:${HOME}/. znbase -certs |
--max-offset |
一个集群允许的最大时间偏移值,若观测到的时间偏移超过该阈值,服务器将崩溃,以最大程度的减少读取到不一致数据的可能性。而增加该值将增加故障恢复的时间以及基于不确定性读的重启的频率。该值在集群中的所有节点必须保持一致,且在rolling upgrade时不允许改变。更新该值需要停止集群中的所有节点,并在重启集群时统一指定新值。 |
KaiwuDB 安全方面的一些配置参数其中包括:证书秘钥管理。
KaiwuDB 在安全方面采用了证书加秘钥的方式,安全证书创建流程如下:
节点需要的密钥和证书如下:
文件名 |
文件用途 |
ca.crt |
CA证书。 |
node.crt |
服务器证书。node.crt必须由ca.crt签名。 |
node.key |
服务器密钥。 |
客户端需要的密钥和证书:
文件名 |
文件用途 |
ca.crt |
CA证书。 |
client. |
客户端证书(例如,client.root.crt针对用户root)。 必须由ca.crt签名。 |
client. |
客户端密钥。 |
请注意以下几点:
• 默认情况下,node.crt是多功能的,同一证书既可用于传入连接(可以是SQL、AdminUI,或者其他 KaiwuDB 节点),也用于其他 KaiwuDB 节点的传出。
• CA密钥不会由znbase命令自动加载,因此应该使用--ca-key,在单独目录中创建它。
• 密钥(以.key结尾的文件)不能具有组或other权限(最大权限为0700或rwx------)可以通过设置环境变量来禁用此检查:znbase _SKIP_KEY_PERMISSION_CHECK=true。
以上是KaiwuDB 数据库的一些参数,下面数据库集群的安装环节:
由于 KaiwuDB 是分布式数据库,动辄需要安装几十上百个节点,传统的一个节点一个节点的安装部署方式已不适用,因此我们采用ansible批量化部署方式。
一. 在集群任意一台服务器上安装ansible工具
1. wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
2. yum install ansible –y
二. 在安装ansible的服务器上配置要安装集群的IP地址
vi /etc/ansible/hosts
[znbase _setup]
192.168.232.241
192.168.232.242
192.168.232.243
三. 解压数据库安装包
上传znbase _install.tar 到安装ansible工具的服务器
2. tar - xvf znbase _install.tar 解压数据库安装包
四. 配置ansible安装脚本
1. cd 到数据库解压后的目录
2. 编辑参数脚本文件param.yaml
server_port: 26457 --数据库服务端口
monitor_port: 9090 --数据库web_ui端口
db_ver: 2.1.1 --安装数据库的版本
cache: .20 --单个store缓存总大小
max_sql_memory: .1 --SQL 查询需要缓存的临时数据所能使用的最大内存空间
db_admin: znbase --数据库初始化创建用户
db_password: znbase @123 --初始化创建用户密码
znbase _admin_user: znbase --数据库操作系统用户
znbase _admin_password: "changeme" --数据库操作系统用户密码
ntpserver: 192.168.232.134 --ntp server 地址(自己指定)
store_path: /hdb-data/{{ znbase _admin_user }}_data ---
#####################################################
bin_path: /home/{{ znbase _admin_user }}/bin --数据库安装包存放位置
certs_dir: /home/{{ znbase _admin_user }}/. znbase -certs --数据库节点证书秘钥存放位置
make_certs_dir: /opt/certs --节点和客户端证书秘钥生成位置
make_ca_keys_dir: /opt/my-safe-directory --ca证书生成位置
五. 执行脚本安装数据库
[root@ znbase 1]# ansible-playbook ins_init.playbook -e "@param.yaml"
PLAY [znbase_setup]
************************************************************************
TASK [prepare]
************************************************************************
changed: [192.168.232.241]
changed: [192.168.232.242]
changed: [192.168.232.243]
……………………..
PLAY RECAP
************************************************************************
127.0.0.1 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.232.241 : ok=34 changed=30 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.232.242 : ok=18 changed=17 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.232.243 : ok=18 changed=17 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
六.查看集群状态
集群安装完成后,在 KaiwuDB 用户的home目录下会自动生成三个可执行文件:
clu_sta.sh --查看集群状态脚本
login_root.sh --root用户登录集群脚本
start.sh --启动集群节点脚本
stop.sh --关闭集群节点脚本
我们通过执行clu_sta.sh 查看集群的状态:
[zbadmin@znbase1 ~]$ sh clu_sta.sh
id | address | build | started_at | updated_at | is_available | is_live
+----+-----------------------+------------+----------------------------+----+
1 | 192.168.232.241:26457 | release-2.1.1-gamma | 2021-07-03 03:12:53.641692| 2021-07-03 05:44:01.171234| true | true
2 | 192.168.232.242:26457 | release-2.1.1-gamma | 2021-07-03 03:12:53.641692| 2021-07-03 05:44:01.171234| true | true
3 | 192.168.232.243:26457 | release-2.1.1-gamma | 2021-07-03 03:12:53.641692| 2021-07-03 05:44:01.171234| true | true
七.扩容节点
我们可以在原有集群不做任何变更的情况下,平滑的添加新的节点,集群会自动平衡新集群的数据,用户完全无感知本次操作我们在现有三节点的集群中添加一个新节点,使集群由原来的三节点变为四节点,同时观察新集群的数据是否是均衡的。
1.将新添加节点的IP添加到ansible配置文件
vi /etc/ansible/hosts
[add_setup]
192.168.232.244
2.执行增加节点的脚本给集群增加新节点
[root@znbase 1 znbase_install]# ansible-playbook add_node.playbook -e "@param.yaml“
PLAY [add_setup]
************************************************************************
TASK [prepare]
************************************************************************
changed: [192.168.232.244]
……………………..
3. 新节点添加完成后,查看集群状态
[zbadmin@znbase1 ~]$ sh clu_sta.sh
id | address | build | started_at | updated_at | is_available | is_live
+----+-----------------------+------------+----------------------------+----+
1 | 192.168.232.241:26457 | release-2.1.1-gamma | 2021-07-03 03:12:57.641692| 2021-07-03 05:44:01.171234| true | true
2 | 192.168.232.242:26457 | release-2.1.1-gamma | 2021-07-03 03:12:57.641692| 2021-07-03 05:44:01.171234| true | true
3 | 192.168.232.243:26457 | release-2.1.1-gamma | 2021-07-03 03:12:57.641692| 2021-07-03 05:44:01.171234| true | true
4 | 192.168.232.244:26457 | release-2.1.1-gamma | 2021-07-03 03:12:57.641692| 2021-07-03 05:44:01.171234| true | true