安装部署

软硬件环境

ZNBase是浪潮打造的一款分布式数据库产品,具备强一致、高可用分布式架构、分布式水平扩展、高性能、企业级安全等特性。可以很好的部署和运行在X86架构服务器环境,ARM架构服务器环境及主流虚拟化环境,并支持绝大多数的主流硬件网络.

Linux操作系统

云溪ZNBase数据库支持主流操作系统:Linux,中标麒麟,银河麒麟,UOS等

Linux 操作系统

Linux操作系统平台版本
CentOS7.3版本及以上
麒麟系统10版本及以上
Ubuntu LTS18.04版本及以上
Red Hat Enterprise Linux7.3版本及以上

硬件要求

云溪ZNBase数据库支持主流硬件系统:X86,ARM,海光,飞腾,兆芯等

云溪ZNBase数据库可运行的集群最小规格如下:

部署介质最小规格备注
物理机或虚拟机三节点三副本每个节点部署在单独的物理机或虚拟机上

服务器资源最低要求:

CPU硬盘文件系统
单节点至少应有 2 个CPU 和 8 GB RAM必须SSD磁盘,建议 NVME SSD,数据盘不必做Raid,单块盘480 GB以上建议使用ext4文件系统

容器化部署:云溪ZNBase数据库支持容器部署。云溪ZNBase数据库本身使用DOCKER打包,依托于浪潮云原生平台与生态,数据库支持K8S云原生接口,可以实现一键部署以及容器排编,快速搭建、管理和监控。

软件要求

  • 集群中各个节点的操作系统需要安装必需软件包,数据库文件需要依赖 GLIBC,LIBNCURSES,TZDATA。
  • 集群中各个节点的操作系统需要安装 NTP 软件包或其他时钟同步软件,保证各个节点操作系统时间一致。
  • 根据业务需求选择安装 HAPROXY 负载均衡功能,版本不低于1.5.0。

Web浏览器配置要求

​ ZNBase提供AdminUI数据库控制台,对数据库集群的各项指标进行可视化展现,支持Google Chrome的较新版本即可访问监控入口。

环境检查

本节介绍ZNBase数据库集群部署时对操作系统一致性,集群节点时间一致性,数据库端口和文件句柄个数进行检查和设置。

操作系统版本一致性:

检查集群各节点中操作系统版本的一致性,查看 Linux 系统版本的命令如下:

#lsb_release –a

No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.6 LTS
Release: 16.04
Codename: xenial

集群中节点系统时间保持一致

集群节点中需要中等强度的时钟同步机制以维持数据的一致性。当一个节点检测到自身的机器时间与集群中至少50%节点的机器时间之间的误差值超过集群最大允许时间误差值(默认 500ms)的80%的时候,该节点会自动停止。这能够避免违反数据一致性,导致读写旧数据的风险。因此,必须在每个节点上运行 NTP 或其他时钟同步软件,来防止时钟漂移得太远。

数据库服务默认端口是否被占用

#lsof -i:26257

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
drdb 10583 jesse 12u IPv6 3263391 0t0 TCP *:26257 (LISTEN)

显示结果若该端口号与数据库默认端口号有冲突,则可以在 root 用户下,使用 kill -9 pid_value 命令来终止发生冲突的进程或是在安装数据库时修改默认端口号。

修改 Linux 系统文件句柄限制

数据库会使用大量的文件句柄,通常会超过 LINUX默认情况下可用的文件句柄数。 因此,建议对于每一个数据库节点修改文件句柄数:最大文件句柄数量至少需要设置为 1956(其中每个 store 需要 1700 个文件句柄, 256 用于网络),低于该阈值节点将无法启动数据库服务。推荐将最大文件句柄数量配置为UNLIMITED,或者将该值设置为 15000(其中每个 store 需要 10000 个文件句柄,5000 用于网络)或更高的值以支持数据库集群增长的性能需求。如果在一个节点上配备了 3 个 store,我们建议将硬限制修改为至少 35000(每个 store 分配 10000,网络分配 5000)。

以 CentOS 7 为例,修改句柄数方法为:

  • 编辑/etc/security/limits.conf 在文件后追加以下内容:

    * soft nofile 35000

    * hard nofile 35000

  • 保存并关闭文件。

  • 重启系统以使修改的内容生效。

  • 执行ulimit -a命令确认修改结果

  • 修改系统范围限制:需要确保系统范围的最大句柄限制值至少是上述单个进程限制值的 10 倍。查看系统范围内的文件句柄数量:cat /proc/sys/fs/file-max

根据需要提高系统范围限制值:echo 350000 > /proc/sys/fs/file-max

拓扑结构

本节介绍ZNBase集群的最小部署拓扑结构

ZNBase架构图 如下图所示

image-20201216202205147

拓扑信息:集群最小规格三节点三副本

节点节点配置IP(以10.1.1.X为例)配置
Node132个CPU 和64 GB RAM10.1.1.1默认端口 全局目录配置
Node232个CPU 和64 GB RAM10.1.1.2默认端口 全局目录配置
Node332个CPU 和64 GB RAM10.1.1.3默认端口 全局目录配置

安装启动

本节介绍数据库部署和启动,主要分为两种方式供用户选择。

● 以安全模式方式部署启动ZNBase集群

● 以非安全模式方式部署启动ZNBase集群

前提条件

  • 确保集群各个节点系统时间同步

  • 确保集群内各个节点SSH能够互相访问

  • 网络配置允许 26257 和 8080 端口上的 TCP 通信

安全模式部署和启动

获取数据库可执行文件

a) 获取ZNBase数据库文件并上传到PATH路径下/usr/local/bin

b) 生成本地证书:新建两个目录: /opt/certs 用于存放生成的 CA 证书和所有节点以及客户端的证书和密钥文件,其中部分的文件会传输到节点机器上。/opt/my-safe-directory 用于存放生成的 CA 密钥文件,在之后为节点和用户创建证书和密钥的时候使用.

$ mkdir /opt/certs

$ mkdir /opt/my-safe-directory

本地生成证书

c) 创建 CA 证书和密钥:

$ drdb cert create-ca --certs-dir=/opt/certs --ca-key=/opt/my-safe-directory/ca.key

d) 为第一个节点创建证书和密钥:

  1. $ drdb cert create-node <node1 internal IP address> <node1 external IP address> <node1 hostname> <other common names for node1> localhost 127.0.0.1 <load balancer IP address> <load balancer hostname> <other common names for load balancer instances> --certs-dir=/opt/certs --ca-key=/opt/my-safe-directory/ca.key

e) 将 CA 证书,节点证书和密钥传送到第一个节点:

$ ssh <username>@<node1 address> "mkdir /root/certs"

$ scp /opt/certs/ca.crt /opt/certs/node.crt /opt/certs/node.key <username>@<node1 address>:/root/certs

f) 删除本地的节点证书和密钥:

$ rm /opt/certs/node.crt /opt/certs/node.key

g) 为第二个节点创建证书和密钥

  1. $ drdb cert create-node <node2 internal IP address> <node2 external IP address> <node2 hostname> <other common names for node2> localhost 127.0.0.1 <load balancer IP address> <load balancer hostname> <other common names for load balancer instances> --certs-dir=/opt/certs --ca-key=/opt/my-safe-directory/ca.key

h) 将 CA 证书,节点证书和密钥传送到第二个节点

$ ssh <username>@<node2 address> "mkdir /root/certs"

$ scp /opt/certs/ca.crt /opt/certs/node.crt /opt/certs/node.key <username>@<node2 address>:/root/certs

i) 对于其它的每个需要安装证书的集群节点,请重复 f)-h) 步骤

j) 为 root 用户创建客户端证书和密钥

$ drdb cert create-client root --certs-dir=/opt/certs --ca-key=/opt/my-safedirectory/ca.key

k) 将证书和密钥传输到你想要执行数据库命令的机器上,该机器可以是集群中或是集群外的一个节点,拥有该证书的机器能够使用 root 账户执行数据库命令,可以通过该节点机器访问集群.

  1. $ ssh <username>@<workload address> "mkdir /root/certs" $ scp /opt/certs/ca.crt /opt/certs/client.root.crt /opt/certs/client.root.key <username>@<workload address>:/root/certs

l) 如果在以后你想在其它某个机器上运行数据库客户端命令,则需要将 root 用户的证书和密钥复制到该节点。只有拥有 root 用户证书和密钥的节点,才能够访问集群

数据库启动

m) SSH 到需要启动服务的节点机器,获取数据库可执行文件,并上传到指定目录:

$ cp -i drdb-v****.linux-amd64/drdb /usr/local/bin/

n) 执行数据库 start 命令

  1. $ drdb start --certs-dir=/root/certs --store=/opt/node1 --advertise-addr=<node1 address>:26257 --listen-addr=<node1 address>:26257 --http-addr=<node1 address>:8080 --join=<node1 address>,<node2 address>,<node3 address> --cache=.25 --max-sql-memory=.25 --background

o) 对需要加入集群中的每个节点执行m)-n)步骤

参数描述
—certs-dir指定存放 ca.crt、node.crt、node.key 文件的目录
—store指定存放数据库文件的目录名
—advertise-addr指定 IP 地址或是 hostname 供集群其他节点访问该节点
—listen-addr指定数据库服务的监听 IP 和端口
—http-addr指定集群监控工具的 IP 和端口
—join指定集群 3-5 个初始化节点的地址和端口
—cache —max-sql-memory增加节点缓存和临时 SQL 内存大小到操作系统内存的25%,用于优化读性能和内存中 SQL 执行
—background指定后台运行

初始化集群

p) 在集群第一个节点执行数据库init命令。(需要该节点拥有 root 用户的证书和密钥)

$ drdb init --certs-dir=/root/certs --host=<address of any node>

非安全模式部署和启动

获取数据库可执行文件

a) 获取ZNBase数据库文件并上传到PATH路径下/usr/local/bin

数据库启动

b) SSH 到需要启动服务的节点机器,获取数据库可执行文件,并上传到指定目录

c) 执行数据库 start 命令

  1. $ drdb start --insecure --store=/opt/node1 --advertise-addr=<node1 address>:26257 --listen-addr=<node1 address>:26257 --http-addr=<node1 address>:8080 --join=<node1 address>,<node2 address>,<node3 address> -cache=.25 --max-sql-memory=.25 --background

d) 在集群中的其它节点重复执行b)-c)步骤

参数描述
—insecure指定使用非安全模式启动集群
—store指定存放数据库文件的目录名
—advertise-addr指定IP 地址或是 hostname 供集群其他节点访问该节点
—listen-addr指定数据库服务的监听 IP 和端口
—http-addr指定集群监控工具的 IP 和端口
—join指定集群 3-5 个初始化节点的地址和端口
—cache —max-sql-memory增加节点缓存和临时 SQL 内存大小到操作系统内存的25%,用于优化读性能和内存中 SQL 执行
—background指定后台运行

初始化集群

e) 在集群第一个节点执行 数据库 init 命令

$ drdb init --insecure --host=<address of any node>

  • 集群对任何客户端是开放的,能够访问集群任意节点的 IP 地址。

  • 任何用户,甚至 root 用户都能够不需要密码访问集群。

  • 任何用户均可以以 root 用户接入集群,可读写集群中的任何数据。

  • 没有网络加密或认证,因此欠缺机密性。

部署后检查

1. 创建NODETEST数据库

a) 开启交互式shell

​ #安全模式启动

$ drdb sql --certs-dir=certs --host=<address of any node>

​ #非安装模式启动

$ drdb sql --insecure --host=<address of any node>

b) 创建NODETEST数据库

create database nodetest;

c) 使用\q或CTRL+D退出

2. 连接另一个节点检查NODETEST数据库

a) 开启交互式shell

​ #安全模式启动

$ drdb sql --certs-dir=/root/certs --host=<address of different node>

​ #非安全模式启动

$ drdb sql --insecure --host=<address of differentnode>

b) 检查数据库

SHOW DATABASES;

c) 使用\qCTRL+D退出

配置 HAProxy 负载均衡

每一个数据库集群内的节点对于集群来说,都是一个 SQL 网关。但是为了保证客户端的性能以及可靠性,建议使用负载均衡功能,并且ZNBase数据库内置了一个命令,用于生成可与正在运行的集群配合使用的 HAPROXY配置文件:.

  • 性能:负载均衡器将客户端流量分布在各个节点上。这样可以避免一个节点处理过大的流量,并提高了整体群集性能(每秒查询)。

  • 可靠性:负载均衡器可以尽量避免集群中节点发生故障对客户端产生影响。如果节点发生故障,负载平衡器会将客户端流量重定向到可用节点。

  • 配置方法如下:

    a) 生成HAPROXY配置文件

    $ drdb gen haproxy --certs-dir=/root/certs --host=<address of any node>

    默认情况下,会自动生成 HAPROXY.CFG文件,该配置文件如下:

Global
maxconn 4096
defaults mode tcp
Timeout values should be configured for your specific use.
See: https://cbonte.github.io/haproxy-dconv/1.8/configuration.html#4timeout%20connect
timeout connect 10s
timeout client 1m
timeout server 1m
TCP keep-alive on client side. Server already enables them. option
clitcpka listen psql bind :26257
mode tcp
balance roundrobin
option httpchk GET /health?ready=1
server drdb1 <node1 address>:26257 check port 8080 server drdb2 <node2 address>:26257 check port 8080 server drdb3 <node3 address>:26257 check port 8080

b) 将CFG文件上传到要运行的HAPROXY机器上

$ scp haproxy.cfg <username>@<haproxy address>:~/

c) SSH到运行的机器上并安装

$ apt-get install haproxy

d) 启动HAPROXY,使用-f指向CFG文件

$ haproxy -f haproxy.cfg

e) 若要使用多个HAPROXY实例,请重复步骤a)-d)