MatrixDB 3可以安装在Redhat 6/7、CentOS 6/7、以及兼容CentOS的操作系统上。本文档描述了在多台CentOS 7服务器或者虚拟机上快速部署使用MatrixDB 3集群的步骤,以三个节点为例,主节点为mdw,两个数据节点分别为sdw1和sdw2。

注意!
MatrixDB安装环境需至少支持Haswell及以上的Intel处理器架构,或Excavator及以上的AMD处理器架构。

1 服务端安装

服务端安装过程包括安装准备、数据库RPM安装、Python依赖包安装、数据库初始化和安装后设置共5个环节。

1.1 安装准备

在所有节点上,通过root用户执行下列操作。

MatrixDB 3需要Python 3.6,请使用下列命令安装并将Python 3.6设为默认版本:

sudo yum install centos-release-scl
sudo yum install rh-python36
scl enable rh-python36 bash

关闭防火墙:

systemctl stop firewalld.service
systemctl disable firewalld.service

关闭SELinux, 编辑/etc/selinux/config,将SELINUX的值设为disabled:

sed s/^SELINUX=.*$/SELINUX=disabled/ -i /etc/selinux/config
setenforce 0

确保所有节点上有持久不变的主机名,如果不存在,请用下述命令设置主机名,例如,在主节点可以这样设置:

hostnamectl set-hostname mdw

修改/etc/hosts文件,确保集群中所有节点都可以相互通过主机名、IP访问。例如,三个节点的/etc/hosts都包含类似这样的内容:

192.168.100.10 mdw
192.168.100.11 sdw1
192.168.100.12 sdw2

执行下述命令,在/etc/sysctl.d/目录下创建一个文件99-mxdb.conf,该文件将调整系统内核参数:

cat > /etc/sysctl.d/99-matrixdb.conf << EOF 
kernel.shmmax = 500000000
kernel.shmmni = 4096
kernel.shmall = 4000000000
kernel.sem = 250 512000 100 2048
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_tw_recycle = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.conf.all.arp_filter = 1
net.ipv4.ip_local_port_range = 10000 65535
net.core.netdev_max_backlog = 10000
net.core.rmem_max = 2097152
net.core.wmem_max = 2097152
vm.overcommit_memory = 2
EOF

执行下列命令让系统内核修改生效:

sysctl -p /etc/sysctl.d/99-matrixdb.conf

执行下述命令,在/etc/security/limits.d/目录下创建文件99-limit-matrixdb.conf,该文件将调整系统打开文件数限制:

cat > /etc/security/limits.d/99-limit-matrixdb.conf << EOF 
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
EOF

使用下述命令修改ssh的MaxStartups参数,以便允许节点间允许多个并发SSH访问:

sed s/.*MaxStartups.*/'MaxStartups 400:30:500'/ -i /etc/ssh/sshd_config
systemctl reload sshd.service

MatrixDB各节点间需要保持时钟同步,请用下述命令设置并检查:

yum -y install ntpdate
ntpdate -u pool.ntp.org
systemctl enable ntpdate.service

date

为安全起见,需要一个单独的数据库管理员用户mxadmin,用下述命令创建该用户:

groupadd mxadmin
useradd mxadmin -g mxadmin -d /home/mxadmin
passwd mxadmin

创建数据目录并授予权限给mxadmin用户,例如在主节点上mdw:

mkdir -p /data/master
chown -R mxadmin:mxadmin /data

而在数据节点sdw1和sdw2上,可以这样操作:

mkdir -p /data/data1
mkdir -p /data/data2
chown -R mxadmin:mxadmin /data

1.2 数据库RPM安装

在所有节点上,用root用户执行下述yum命令安装数据库RPM包,系统依赖库会一并自动安装。缺省会安装在/usr/local/matrixdb目录下:

yum install matrixdb-3.3.0-1.el7.x86_64.rpm

chown -R mxadmin:mxadmin /usr/local/matrixdb*

1.3 安装Python依赖包

在所有节点上,用root用户执行下述命令安装MatrixDB所依赖的python包,请注意,source greenplum_path.sh必须执行,以便可以安装正确版本的依赖包:

source /usr/local/matrixdb/greenplum_path.sh
yum install gcc python3-devel
pip3 install --upgrade setuptools
pip3 install argparse psutil pygresql pyyaml 

1.4 初始化数据库

所有初始化操作需要在主节点mdw上切换到mxadmin用户执行:

su mxadmin

为以后启动、停止等数据库操作的方便,可以执行下列命令把需要的环境变量添加到mxadmin用户的SHELL设置中(以bash为例):

echo "export MASTER_DATA_DIRECTORY=/data/master/seg-1" >> ~/.bashrc
echo "export PGPORT=5432" >> ~/.bashrc
echo "export PGUSER=mxadmin" >> ~/.bashrc
echo "export PGDATABASE=mxdb" >> ~/.bashrc 
echo 'source /usr/local/matrixdb/greenplum_path.sh' >> ~/.bashrc

source ~/.bashrc

创建一个hostlist文件,保存所有数据节点的主机名,例如:

sdw1
sdw2

MatrixDB需要在所有节点间配置ssh免密登陆,首先将主节点的id复制到所有数据节点,然后使用gpssh-exkeys完成配置,如下所示:

ssh-copy-id sdw1
ssh-copy-id sdw2

gpssh-exkeys -h mdw -h sdw1 -h sdw2

配置完成后, 请使用下列命令测试,如果不需要输入密码就可以登陆,表明配置正确:

ssh sdw1
ssh sdw2
exit
exit

创建一个初始化配置文件matrixdb.ini, 文件内容如下:

ARRAY_NAME="MatrixDB"
SEG_PREFIX=seg
PORT_BASE=40000
MASTER_HOSTNAME=mdw
MASTER_PORT=5432
declare -a DATA_DIRECTORY=(/data/data1 /data/data1 /data/data2 /data/data2)
MASTER_DIRECTORY=/data/master
DATABASE_NAME=mxdb

该配置将在每个数据节点安装四个segment,并把master和segment数据目录分别放置在/data/master、/data/data1、/data/data2。如果需要部署更多segment,请编辑该文件并修改DATA_DIRECTORY,例如,下面的设置将为每个计算节点配置六个segment:

declare -a DATA_DIRECTORY=(/data/data1 /data/data1 /data/data1 /data/data2 /data/data2 /data/data2)

之后执行集群初始化命令:

gpinitsystem -c matrixdb.ini -h hostlist

这样数据库就安装完成了。为方便远程连接同时也测试数据库是否初始化正常,请执行下列命令为数据库管理员用户mxadmin设置密码(请用您的密码替换mxpass):

psql -c "alter role mxadmin with password 'mxpass'" -h localhost -p 5432 mxdb

1.5 安装后设置

MatrixDB缺省安装为安全考虑不允许远程连接,如果需要从个人电脑等远程连接,请在主节点mdw上手工修改$MASTER_DATA_DIRECTORY/pg_hba.conf文件添加类似这样一行,表示允许来自任何IP的访问所有数据库的用户通过密码认证连接,可以根据实际需要限定IP范围或者数据库名称以减少安全风险:

host  all       all   0.0.0.0/0  md5

完成这些修改后,需要执行下述命令让数据库重新加载pg_hba.conf的新设置:

gpstop -u

MatrixDB的启动、停止、重启、状态查看可以通过下述命令分别完成,更多命令参数可以通过--help查看参数详解:

gpstart -a
gpstop -a
gpstop -ar
gpstate

2 客户端安装

MatrixDB 3兼容PostgreSQL 9.4协议,支持PostgreSQL 9.4的许多商业和开源客户端工具都可以和MatrixDB搭配使用,方便您从笔记本等个人电脑远程访问MatrixDB。

以开源DBeaver为例,在https://dbeaver.io/download/选择下载您对应的操作系统安装包。安装后,在连接MatrixDB数据库时,选择PostgreSQL作为数据库类型,DBeaver会自动检测您的系统中是否有正确的JDBC驱动,或提示下载。

选择PostgreSQL

MatrixDB的命令行工具psql也可以在Windows或者Mac系统远程使用。Mac用户可以直接使用brew安装:

brew install libpq
brew link --force libpq ail

Windows用户请从这里下载安装:https://www.postgresql.org/download/windows/

psql安装后,可以通过-h指定主机名、-p指定端口连接MatrixDB服务器。psql的其他常用参数如下:

psql -h [主机名或者IP] -p [端口] -U [用户名] -W -d [数据库名]

例如:

psql -h 127.0.0.1 -p 5432 -U mxadmin -W -d mxdb