Linux 安装

本节描述分布式数据库在 Linux 操作系统的命令行安装过程。

支持 Centos,openEuler,麒麟,统信,Ubuntu。暂不支持 OpenSSH_8.8p1 版本

注意事项

  • redhat/centos 系列建议选择7.5及以上版本,不支持7.2版本

  • 关闭 SELINUX、NUMA,放行 分布式所有节点 之间所有端口

  • 准备独立的数据磁盘挂载到 /data 目录

  • 建议使用lvm可扩展分区类型

  • 如需使用数据压缩,数据盘的文件系统需要配置为 ZFS

  • 建议配置内部专用高速网络(10Gb)用于分布式节点之间通信

硬件要求

用途 CPU(核) 内存(GB) SSD数据盘(GB) 网络(Gb) 最小数量 推荐数量
管理节点 8 16 100 10 1 2
协调节点 16 32 100 1,10 1 2
事务节点 32 64 100 10 1 2
数据节点 64 128 实际数据量的5倍以上 10Gb 2 4

安装准备

添加用户(所有节点执行)

export INSTALL_DIR=/data
mkdir -p $INSTALL_DIR &&\
useradd unvdb -d $INSTALL_DIR/dt &&\
mkdir $INSTALL_DIR/dt/.ssh &&\
touch $INSTALL_DIR/dt/.ssh/authorized_keys &&\
chmod 600 $INSTALL_DIR/dt/.ssh/authorized_keys &&\
chmod 700 $INSTALL_DIR/dt/.ssh &&\
chown -R unvdb.unvdb $INSTALL_DIR/dt/.ssh 

修改limits.conf(所有节点执行)

编辑 /etc/security/limits.conf,追加以下行

unvdb soft nproc 65536
unvdb hard nproc 65536
unvdb soft nofile 278528
unvdb hard nofile 278528
unvdb soft stack unlimited
unvdb soft core unlimited
unvdb hard core unlimited
unvdb soft memlock 250000000
unvdb hard memlock 250000000

保存文件后,执行su - unvdb,执行ulimit -a 检查是否生效。

配置管理节点到其它所有节点免密登录

su - unvdb 在管理节点切换到 unvdb 用户

ssh-keygen 在管理节点生成密钥

cat $INSTALL_DIR/dt/.ssh/id_rsa.pub 在管理节点查看公钥

echo "上面的公钥" >> $INSTALL_DIR/dt/.ssh/authorized_keys 将公钥配置到所有节点(在所有节点上执行)

ssh 192.168.2.31 在管理节点登录其它节点,检查免密是否成功

交互式安装

解压安装包

unzip udbtx-dt-22.4.1-linux-aarch64.zip
cd udbtx-dt-22.4

执行安装程序

[unvdb@ecs-8a29 udbtx-dt-22.4]$ ./udb_tool
--------------------------------------------------------------------------
本程序引导您完成UDB-TX 分布式版本的安装、卸载、升级等操作

节点名称说明:
-------------
Mgr        : 管理节点
GTM        : 全局事务节点
Coordinator: 协调节点
Datanode   : 数据节点
Slave      : 备节点

安装说明:
----------
安装过程步骤输入'y'、'yes'、'ok'或回车键表示接受默认值

功能菜单为:
----------
1. 创建Demo集群 (在当前主机部署所有节点,仅用于测试使用)
2. 创建集群 (部署UDB-TX分布式集群,要求主机数必须大于2台)
3. 重置集群 (重新初始化集群,所有数据将被清除请谨慎使用)
4. 卸载集群 (卸载集群所有节点并删除数据目录)
5. 升级集群 (将集群升级到指定版本,操作前请参考九有数据库公司官网对应版本升级的注意事项)
6. 管理集群 (登录管理节点,可执行集群的启停、状态查看、扩容等操作)
7. 显示安装参数(显示集群安装时生成的配置信息)
--------------------------------------------------------------------------
请选择菜单项:2

输入配置信息

请输入Mgr节点端口号, 默认(8888):
请输入Coordinator节点端口号, 默认(5678):
请输入Bin安装路径, 默认(/data/dt/udbtx-dt):
请输入数据目录路径, 默认(/data/dt/udbtx-dt/data):
请输入您拥有的主机台数:3
------------
Host 1:
------------
主机名称   :host1
IP地址     :192.168.0.81
SSH端口(22):22
------------
Host 2:
------------
主机名称   :host2
IP地址     :192.168.0.91
SSH端口(22):22
------------
Host 3:
------------
主机名称   :host3
IP地址     :192.168.0.211
SSH端口(22):22

请选择安装方式
1.快速安装  :根据主机数自动规划节点,副本交叉部署
2.自定义安装:自定义规划节点,指定副本数
输入序号:

快速安装

选择快速安装方式,只需要输入要安装的副本数或按回车键接受默认值即可,安装程序将根据主机数自动规划节点。而选择自定义安装方式,你将可以根据实际需要及主机硬件配置情况灵活自主规划节点。

请选择安装方式
1.快速安装  :根据主机数自动规划节点,副本交叉部署
2.自定义安装:自定义规划节点,指定副本数
输入序号:1
输入您要安装的GTM Salve节点数。范围(0-2),默认(1): 1
输入您要安装的Coordinator节点数。范围(0-2),默认(0): 1
--------------------------------------------------------------------------
Ready To Install
----------------
[Base Info]
User      :unvdb
Bin   Path:/data/dt/udbtx-dt/
Data  Path:/data/dt/udbtx-dt/data/
Coord Port:5678
Gtm   Port:6678
Mgr   Port:8888
Agent Port:9888
Data  Port:10888

[Hosts Info]
HostName        IP                SSH Port
host1           192.168.0.81      22
host2           192.168.0.91      22
host3           192.168.0.211     22

[Nodes Info]
NodeType        NodeName    MasterHost      Port      SlaveHosts
Mgr             mgr         host1           8888      host2
GTM             gc1         host1           6678      host2
Coordinator     cn1         host3           5678  
Datanode        dn1         host2           10888     host3
Datanode        dn2         host3           10888     host2
--------------------------------------------------------------------------
是否继续安装?确认请输入'y',取消输入'n':

完成安装

看到以下提示表示已经安装成功。如安装失败请根据输出的错误信息定位问题。

安装成功! 现在您可以通过以下节点操作数据库:
gc1: host1           192.168.0.81    6678
cn1: host3           192.168.0.211   5678
通过以下命令连接数据库: 
/data/dt/udbtx-dt/bin/ud_sql [-h addr] -p 5678 -d unvdb [-U user]

添加环境变量

#管理节点,安装完成后安装包目录下会生成mgr_env.sh文件,请将xxx部分替换成实际路径
echo "source /xxx/mgr_env.sh" >> ~/.bashrc
#其他节点,Bin安装路径下会生成对应的udb_env.sh文件,请将xxx部分替换成实际路径,一般可不设置,通过管理节点机器操作即可
echo "source /xxx/udb_env.sh" >> ~/.bashrc

验证数据库是否正常运行

#连接管理节点查看集群状态
[unvdb@ecs-8a29 udbtx-dt-22.4]$ source ./mgr_env.sh 
[unvdb@ecs-8a29 udbtx-dt-22.4]$ ud_sql -p8888 -dunvdb
ud_sql (22.4 9c8dc02 based on udb-tx)
Type "help" for help.

unvdb=# monitor all;
 nodename |      nodetype      | status | description |     host      | port  | recovery |           boot time           | nodezone 
----------+--------------------+--------+-------------+---------------+-------+----------+-------------------------------+----------
 gc1      | gtmcoord master    | t      | running     | 192.168.0.81  |  6678 | false    | 2023-12-19 16:14:57.632171+08 | local
 gc1_1    | gtmcoord slave     | t      | running     | 192.168.0.91  |  6679 | true     | 2023-12-19 16:14:59.419653+08 | local
 cn1      | coordinator master | t      | running     | 192.168.0.211 |  5678 | false    | 2023-12-19 16:15:00.396161+08 | local
 dn1      | datanode master    | t      | running     | 192.168.0.91  | 10888 | false    | 2023-12-19 16:15:03.05147+08  | local
 dn2      | datanode master    | t      | running     | 192.168.0.211 | 10888 | false    | 2023-12-19 16:15:03.062892+08 | local
 dn1_1    | datanode slave     | t      | running     | 192.168.0.211 | 10889 | true     | 2023-12-19 16:15:04.487593+08 | local
 dn2_1    | datanode slave     | t      | running     | 192.168.0.91  | 10899 | true     | 2023-12-19 16:15:04.998033+08 | local
(7 rows)

#连接协调节点操作数据库
[unvdb@ecs-8a29 udbtx-dt-22.4]$ ud_sql -h192.168.0.211 -p5678 -dunvdb
ud_sql (22.4 9c8dc02 based on udb-tx)
Type "help" for help.

unvdb=# create table test(id int, name text);
CREATE TABLE
unvdb=# \dt
 public | test | table | unvdb

注册服务

切换到 root 用户,执行以下命令

cat << EOF > /lib/systemd/system/udbtx-dt.service
[Unit]
Description = udbtx-dt Service
After=network-online.target
Wants=network-online.target

[Service]
Type=forking
User=unvdb
Group=unvdb
WorkingDirectory = $INSTALL_DIR/dt/udbtx-dt/bin
Environment = "LD_LIBRARY_PATH=$INSTALL_DIR/dt/udbtx-dt/lib:$LD_LIBRARY_PATH"
Environment = "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:$INSTALL_DIR/dt/udbtx-dt/bin"
ExecStart = $INSTALL_DIR/dt/udbtx-dt/bin/mgr_ctl start -D $INSTALL_DIR/dt/udbtx-dt/data/mgr
ExecReload = $INSTALL_DIR/dt/udbtx-dt/bin/mgr_ctl restart -D $INSTALL_DIR/dt/udbtx-dt/data/mgr
ExecStop = $INSTALL_DIR/dt/udbtx-dt/bin/mgr_ctl stop -D $INSTALL_DIR/dt/udbtx-dt/data/mgr
TimeoutSec=30

[Install]
WantedBy = multi-user.target
EOF

启动服务 systemctl daemon-reload && systemctl start udbtx-dt && systemctl enable udbtx-dt

管理集群

登录管理节点

[unvdb@ecs-8a29 udbtx-dt-22.4]$ python3 udb_tool.py 
--------------------------------------------------------------------------
功能菜单为:
----------
1. 创建Demo集群 (在当前主机部署所有节点,仅用于测试使用)
2. 创建集群 (部署UDB-TX分布式集群,要求主机数必须大于2台)
3. 重置集群 (重新初始化集群,所有数据将被清除请谨慎使用)
4. 卸载集群 (卸载集群所有节点并删除数据目录)
5. 升级集群 (将集群升级到指定版本,操作前请参考九有数据库公司官网对应版本升级的注意事项)
6. 管理集群 (登录管理节点,可执行集群的启停、状态查看、扩容等操作)
7. 显示安装参数(显示集群安装时生成的配置信息)
--------------------------------------------------------------------------
请选择菜单项:6
/data/dt/udbtx-dt/bin/ud_sql -p 8888 -d unvdb -U unvdb
ud_sql (22.4 9c8dc02 based on udb-tx)
Type "help" for help.

unvdb=# 

查看节点状态

unvdb=# monitor all;
 nodename |      nodetype      | status | description |     host      | port  | recovery |           boot time           | nodezone 
----------+--------------------+--------+-------------+---------------+-------+----------+-------------------------------+----------
 gc1      | gtmcoord master    | t      | running     | 192.168.0.81  |  6678 | false    | 2023-12-19 16:14:57.632171+08 | local
 gc1_1    | gtmcoord slave     | t      | running     | 192.168.0.91  |  6679 | true     | 2023-12-19 16:14:59.419653+08 | local
 cn1      | coordinator master | t      | running     | 192.168.0.211 |  5678 | false    | 2023-12-19 16:15:00.396161+08 | local
 dn1      | datanode master    | t      | running     | 192.168.0.91  | 10888 | false    | 2023-12-19 16:15:03.05147+08  | local
 dn2      | datanode master    | t      | running     | 192.168.0.211 | 10888 | false    | 2023-12-19 16:15:03.062892+08 | local
 dn1_1    | datanode slave     | t      | running     | 192.168.0.211 | 10889 | true     | 2023-12-19 16:15:04.487593+08 | local
 dn2_1    | datanode slave     | t      | running     | 192.168.0.91  | 10899 | true     | 2023-12-19 16:15:04.998033+08 | local
(7 rows)

查看主机列表

unvdb=# list host;
 name  |    user    | port | protocol | agentport |    address    |          udbhome   
-------+------------+------+----------+-----------+---------------+----------------------------
 host1 | shiqianwei |   22 | ssh      |      9888 | 192.168.0.81  | /data/dt/udbtx-dt/
 host2 | shiqianwei |   22 | ssh      |      9888 | 192.168.0.91  | /data/dt/udbtx-dt/
 host3 | shiqianwei |   22 | ssh      |      9888 | 192.168.0.211 | /data/dt/udbtx-dt/
(3 rows)

查看节点列表

unvdb=# list node;
 name  | host  |        type        | mastername | port  | sync_state |                 path                 | initialized | incluster | zone  
-------+-------+--------------------+------------+-------+------------+--------------------------------------+-------------+-----------+-------
 gc1   | host1 | gtmcoord master    |            |  6678 |            | /data/dt/udbtx-dt/data/gc1   | t           | t         | local
 gc1_1 | host2 | gtmcoord slave     | gc1        |  6679 | sync       | /data/dt/udbtx-dt/data/gc1_1 | t           | t         | local
 cn1   | host3 | coordinator master |            |  5678 |            | /data/dt/udbtx-dt/data/cn1   | t           | t         | local
 dn1   | host2 | datanode master    |            | 10888 |            | /data/dt/udbtx-dt/data/dn1   | t           | t         | local
 dn2   | host3 | datanode master    |            | 10888 |            | /data/dt/udbtx-dt/data/dn2   | t           | t         | local
 dn1_1 | host3 | datanode slave     | dn1        | 10889 | sync       | /data/dt/udbtx-dt/data/dn1_1 | t           | t         | local
 dn2_1 | host2 | datanode slave     | dn2        | 10899 | sync       | /data/dt/udbtx-dt/data/dn2_1 | t           | t         | local
(7 rows)

集群启停

start all;
stop  all;