安装前准备

本章节旨在指导用户检查当前环境是否符合 VexDB 数据库的安装部署要求,并详细介绍了用户应该如何检查、配置系统与环境,为 VexDB 数据库的安装部署做好准备工作。

以下操作均使用操作系统 root 用户执行。

服务器准备

以下介绍 VexDB 的硬件环境要求。硬件配置的规划需要考虑数据规模以及期望的数据库响应速度,请根据实际情况进行规划。

开发与测试环境

VexDB 数据库服务器在开发与测试环境中应具备的硬件配置要求如下:

表1 开发与测试环境的硬件配置要求

名称 CPU 内存 本地存储 网络
VexDB 2核+ 8GB+ SAS,100G 千兆

生产环境

VexDB数据库服务器在生产环境中应具备的最低及建议硬件配置要求如下:

表2 生产环境的最低及建议硬件配置

项目 最低配置 建议配置
服务器 单机部署时要求 1 台物理机或虚拟机。集群部署时要求服务器与主备数量相关,如部署一主两备环境要求3台物理机或虚拟机。 /
内存 功能调试建议内存最低取值为 10 GB。具体的服务器内存配置应根据实际业务场景做调整。搭建一主两备集群,服务器内存配置最低取值为 12 GB,否则会出现共享内存(shared memory)不够的情况。 复杂的查询对内存的需求量比较高,在高并发场景下建议用户使用大内存的机器,或使用负载管理限制系统的并发量。性能测试和商业部署时,单实例部署时,服务器内存配置推荐为 128 GB 及以上。集群搭建一主两备时,服务器内存配置推荐为 128 GB 及以上。说明建议使用鲲鹏 920 标配服务器型号作为最佳配置,以获取更优性能结果。
CPU 功能调试时,CPU 配置最小为1×8核 2.0 GHz。 性能测试和商业部署时,单实例部署建议1×16核 2.0 GHz 以上。支持超线程和非超线程两种 CPU 模式。VexDB 各节点的 CPU 模式要求一致。
硬盘 用于安装 VexDB 的硬盘需最少满足如下要求:至少 1 GB 用于安装 VexDB 的应用程序包。每个主机需大约 300 MB 用于元数据存储。预留 70% 以上的磁盘剩余空间用于数据存储。预留 30 GB 磁盘用于存放 WAL 数据文件。 建议系统盘配置为 Raid1,数据盘配置为 Raid5,且规划 4 组 Raid5数据盘用于安装 VexDB。注意 Raid 配置 Disk Cache Policy 一项需要设置为 Disabled,否则机器异常掉电后有数据丢失的风险。搭建双机单活共享存储需准备两个 lun 裸存储设备。其中作为仲裁存储设备最少为 64 MB,建议为1GB;共享存储设备建议为100GB。
网络 单机安装最低为千兆网络。集群安装最低为万兆网络。 至少满足最低要求。

操作系统及CPU满足度检查

以下介绍如何查看当前的系统环境信息,同时列举了安装部署 VexDB 的 CPU 及操作系统要求,为后续安装部署做准备。

  1. 通过查看环境信息确认当前主机的系统环境。
    lscpu
    cat /etc/os-release
    

    VexDB针对不同 CPU 架构(不区分操作系统)进行了适配,根据 表1 判断当前环境是否满足安装部署的要求。
    表1 VexDB 安装包支持情况
    操作系统 CPU 架构
    Linux X86(包括海光 C86)
    Linux 鲲鹏920
  2. 根据操作系统、操作系统版本、CPU架构、CPU型号选择对应的数据库软件安装程序。例如:
    查询环境信息:
    lscpu
    cat /etc/os-release
    

第三方依赖包安装

本文主要介绍 VexDB数据库在安装过程中所需要用到的第三方依赖包。

在安装数据库前应下载本小节所列的数据库所需依赖,若缺少本步骤,可能会因缺少部分依赖导致安装数据库过程中止。

  • 通常,安装 VexDB 数据库的基础依赖包如下:
    zlib-devel、libaio、libuuid、readline-devel、krb5-libs、libicu、libxslt、tcl、perl、openldap、pam、openssl-devel、libxml2、bzip2
    
  • 麒麟环境安装 VexDB 数据库的基础依赖包如下:
    readline、python2、libicu、cracklib、libxslt、tcl、perl、openldap、pam、systemd-libs、bzip2、gettext、libaio、ncurses-libs
    
  • Ubuntu环境安装 VexDB 数据库的基础依赖包如下,使用 apt install <name> 命令来执行安装依赖:
    libreadline5 、zlib1g、libxml2、libaio1、libncurses5、gettext
    

安装示例语句如下(以通用环境所需的依赖为例):

yum install -y zlib-devel libaio libuuid readline-devel krb5-libs libicu libxslt tcl perl openldap pam openssl-devel libxml2 bzip2

结果如下表示成功:

防火墙配置

在普遍场景中,数据库的业务服务和数据库节点的网络联通都是在安全域内完成数据交互。

为了保证 VexDB 的正常使用,需要将节点间的访问端口打通才可以保证读写请求、数据心跳等信息的正常传输。如果没有特殊安全的要求,建议关闭目标节点的防火墙。

若无法关闭防火墙,可以参考设置防火墙白名单

  1. 检查防火墙状态(以 CentOS 7 操作系统为例,不同操作系统的命令可能不同)。
    sudo firewall-cmd --state
    sudo systemctl status firewalld.service
    
  2. 关闭防火墙服务。
    sudo systemctl stop firewalld.service
    
  3. 关闭防火墙自动启动服务。
    sudo systemctl disable firewalld.service
    
  4. 检查防火墙状态。
    sudo firewall-cmd --state
    sudo systemctl status firewalld.service
    

关闭透明大页

开启透明大页可能会对数据库性能产生负面影响,所以本小节将指导用户如何关闭透明大页。

  1. 编辑 service 文件,将如下内容放入文件中。
    vi /etc/systemd/system/disable-thp.service
    

    内容如下:
    [Unit]
    Description=Disable Transparent Huge Pages (THP)
    
    [Service]
    Type=simple
    ExecStart=/bin/sh -c "echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled && echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag"
    
    [Install]
    WantedBy=multi-user.target
    
  2. 修改完成后,执行如下命令加载系统服务,并设置开机自启动。
    systemctl daemon-reload
    systemctl start disable-thp
    systemctl enable disable-thp
    
  3. 查看THP状态,当返回结果均为 always madvise [never] 时表示成功设置透明大页永久关闭。
    cat /sys/kernel/mm/transparent_hugepage/enabled
    cat /sys/kernel/mm/transparent_hugepage/defrag
    

时区配置

数据库默认时区为中国时区,如果操作系统时区和数据库默认时区不一致,会导致数据库日志显示时间和实际时间不一致。所以本小节将指导用户如何查看和修改时区配置。

  1. /usr/share/zoneinfo/ 目录下的时区文件拷贝为 /etc/localtime 文件,从而设置时区和时间。
    cp /usr/share/zoneinfo/$主时区/$次时区 /etc/localtime
    

    例如:
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    
  2. 检查时区配置,可通过以下命令查看操作系统当前的时区。
    timedatectl
    

    返回结果如下表示时区正常。

IPC 参数配置

当 RemoveIPC=yes 时,操作系统会在用户退出时,删除该用户的 IPC 资源(共享内存段和信号量),从而使得 VexDB 服务器使用的 IPC 资源被清理,可能引发数据库宕机,所以需要设置 RemoveIPC 参数为 no。

  1. 进入 /etc/systemd/logind.conf 文件,在配置文件末尾新增配置 RemoveIPC=no,若文件中已设置则跳过本步骤。
    vi /etc/systemd/logind.conf
    
  2. 进入 /usr/lib/systemd/system/systemd-logind.service 文件,新增或修改配置 RemoveIPC=no,若文件中已设置则跳过本步骤。
    vi /usr/lib/systemd/system/systemd-logind.service
    
  3. 重新加载配置参数。
    systemctl daemon-reload
    systemctl restart systemd-logind
    
  4. 检查修改是否生效。
    由于 CentOS 操作系统环境的 RemoveIPC 默认为关闭,则执行如下语句是无返回结果的。用户在确保步骤 1 至步骤 3 已执行的前提下,可正常安装数据库。
    loginctl show-session | grep RemoveIPC
    systemctl show systemd-logind | grep RemoveIPC
    

内核参数配置

为了优化系统性能、确保稳定性,并满足数据库对资源管理的特殊需求。用户应该对操作系统的内核参数配置进行合理配置,这关系到数据库的启动和使用时的资源配置。

设置内核参数前需参考内核参数介绍,结合实际情况调节参数大小,否则会影响数据库的安装部署,以下示例仅供参考。

  1. 编译内核参数配置文件 /etc/sysctl.conf,将内核信息写入文件末尾并保存。
    其中关键配置项含义参考后文的介绍。
    fs.aio-max-nr=1048576
    fs.file-max= 76724600
    kernel.sem = 4096 2097152000 4096 512000
    kernel.shmall = 26843545         # pages,  80% MEM or higher
    kernel.shmmax = 68719476736     # bytes,  50% MEM or higher
    kernel.shmmin = 819200
    net.core.netdev_max_backlog = 10000
    net.core.rmem_default = 262144
    net.core.rmem_max = 4194304
    net.core.wmem_default = 262144
    net.core.wmem_max = 4194304
    net.core.somaxconn = 4096
    net.ipv4.tcp_fin_timeout = 5
    vm.dirty_background_bytes = 409600000 
    vm.dirty_expire_centisecs = 3000
    vm.dirty_ratio = 80
    vm.dirty_writeback_centisecs = 50
    vm.overcommit_memory = 0
    vm.swappiness = 0
    net.ipv4.ip_local_port_range = 40000 65535
    fs.nr_open = 20480000
    
  2. 重载配置,使其在不关机的情况下生效。
    sysctl -p
    

    主要参数介绍如下:
    • vm.dirty_background_bytes:该参数表示触发回刷的脏页数据量,超过该参数,脏页刷到磁盘,单位:Btye。
    • kernel.shmmin 参数用于设置系统可以创建的共享内存段的数量。通常取默认值:4096,单位:个。
    • kernel.shmall 参数用于设置一个共享内存段内可以分配的共享内存页的最大数量。共享内存页是共享内存段中的最小可管理单元。建议取值为:系统内存*0.8/PAGE_SIZE,单位为 Byte。0.8 为推荐配置,
      注意:该参数设置太小有可能导致数据库启动报错。若 kernel.shmall 设置的过小,可能会导致操作系统无法为 VexDB 数据库分配其所需的共享内存,导致数据库启动失败。
    • kernel.shmmax 参数用于设置单个共享内存段可拥有的最大尺寸。建议取值为:系统内存*0.5,单位:Byte。
      注意:
      • 数据库参数 shared_buffers 设置 VexDB 数据库需要使用的共享内存大小,建议 kernel.shmmax 设置的单个共享内存段大小可覆盖 VexDB 数据库需要使用的共享内存大小。
      • 数据库参数 max_process_memory 设置 VexDB 数据库可用的最大物理内存,此值与 VexDB 所需的共享内存共同决定 VexDB 数据库在运行时可以使用的内存总量,若设置不合理可能导致操作系统 OOM (Out of Memory) 问题。

SELinux配置

SELinux(Security-Enhanced Linux)是一个 Linux 内核模块,为 Linux 内核提供了一个强制访问控制机制,以保护系统免受未授权篡改或破坏的威胁。

  1. 查看是否开启SELinux。如果是未开启则是 disabled,已开启则是enforcing,宽容模式为 permissive。
    getenforce
    

    若为开启状态则临时关闭SELinux。
    setenforce 0
    
  2. 为避免临时关闭的SELinux在重启后又被开启,建议用户执行此步骤通过修改配置文件永久关闭SELinux。
    涉及重启系统,用户需谨慎操作。
    1)编辑配置文件。
    vi /etc/selinux/config
    

    2)将 SELINUX=enforcing 修改为 SELINUX=disabled
    3)重启系统。 非必选,若当前不执行重启操作,则在下次重启时上述修改会自动生效。
    reboot
    

关闭 SWAP 交换内存(可选)

关闭 swap 交换内存是为了保障数据库的访问性能,避免把数据库的缓冲区内存淘汰到磁盘上。 如果服务器内存比较小,内存过载时,可打开 swap 交换内存保障正常运行。

在各数据库节点上,使用 swapoff -a 命令将交换内存关闭。

swapoff -a

设置网卡 MTU 值(可选)

将各数据库节点和交换机的网卡 MTU 值(最大传输单元)设置为相同大小(MTU 值≥1500),推荐值:8192(MTU 值可根据需要自行修改)。需要连同交换机一起修改(修改方法请咨询交换机厂商)。

执行如下命令,设置网卡MTU值。网卡编号可通过 ip a 命令查看。

  • 方法一:
    #ifconfig 网卡编号 mtu 值
    ifconfig eth0 mtu 8192
    
  • 方法二:
    cat /sys/class/net/网卡编号/mtu
    echo "8192" > /sys/class/net/网卡编号/mtu
    

添加排序规则(可选)

在凝思操作系统中安装数据库前需添加排序规则,其他系统不需要,即可以选择跳过本小节。若其他操作系统下需要配置,也可以参考添加排序规则

在初始化实例时,数据库会将当前操作系统所有 collation 语言排序,并且将规则信息(通过命令 locale -a 查看)加入到 PG_COLLATION 表中。

如果语言排序规则是在初始化实例之后才加入系统的,则不能自动加入到 PG_COLLATION 系统表中,在创建表等对象时如果指定了该排序规则,则会报错该排序规则不存在。

如果语言排序规则是在初始化实例之后才加入系统的,则不能自动加入到 PG_COLLATION 系统表中,在创建表等对象时如果指定了该排序规则,则会报错该排序规则不存在。

例如:Linux 操作系统默认安装时只有 C、POSIX、zh_CN.utf8 等语言排序规则,如果需要数据库支持 en_US.utf8 等其他语言排序规则,需要在初始化实例之前安装其语言排序规则。如果在初始化实例后再安装语言排序规则,则需要通过创建一个新的数据库,指定 lc_collate、lc_ctype 来使数据库支持新增的语言排序规则。

凝思操作系统中,添加语言排序规则方法如下:

  1. 执行如下命令,勾选(按空格)en_US.UTF-8 编码。
    sudo dpkg-reconfigure locales
    
  2. 执行如下命令,添加排序规则。
    sudo apt-get install locales
    
  3. 执行如下命令,显示包含 en_US.UTF-8。
    locale -a
    

重新启动 VexDB,即可创建包含 en_US.UTF-8 数据库。