AntDB 分布式集群模式部署
1 说明
如下图所示,AntDB 分布式数据库,包含计算节点(CN)、数据节点(DN)、全局事务管理
节点(GTM)和集群管理节点(MGR),共 4 个组成部分。
在生产环境中,antdb分布式集群架构规范配置要求如下:
- GTM 节点和 MGR 节点有且仅有 1 个,GTM 节点一定要独占 1 台服务器。
- CN(至少 2 个)和 DN 节点可以根据业务需求部署多个。
- DN 节点数量根据数据量来规划
- CN 节点数量为 DN 节点个数除以 4,但是至少保证有 2 个。
业务在访问数据库时,可以通过一个负载均衡来连接 CN 节点,也可以直连 CN 节点。
具体配置需求如下:
节点类型 | 推荐配置 | 最小配置 |
---|---|---|
MGR | 独占1台服务器 1主1备 | 可以和GTM节点交叉部署 |
GTM | 独占1台服务器 1主1备 | 可以和MGR节点交叉部署 |
DN | 根据数据量来规划节点个数 推荐1主2备,同步复制 | 根据数据量来规划节点个数 最小1主1备,异步复制 |
CN | DN个数除以4 最少2个CN | 2个CN |
ps:GTM 和 MGR 节点的服务器,对磁盘、内存需求不高,可以选择配置相对低一些的机器。
交叉部署的含义是,GTM 的主库和 MGR 的备库在同一台服务器上,GTM 的备库和 MGR 的主库
在同一台服务器上。
提示:实际上,就部署的可行性来说,并不要求强制按照上述规范,如果你愿意,MGR、GTM、DN、CN也可以都部署在同一台机器上。
MGR/GTM节点独占一台服务器的意思应该是主备不能在同一台服务器上。
2 环境规划
此次安装为侧式环境,因此为了方便起见,不按照生产部署规范来执行。计划创建3个节点,MGR和GTM节点交叉部署,dn和cn节点均匀分布在每个节点上。具体配置如下:
主机名 | ip地址 | 节点类型 | 节点端口号 | 服务器版本 | 说明 |
---|---|---|---|---|---|
adb-dcn1 | 192.168.131.7 | mgr | 16432 | RHEL7.9 | mgr节点 |
adb-dcn2 | 192.168.131.8 | standby1 | 16432 | RHEL7.9 | mgr备节点 |
adb-dcn3 | 192.168.131.9 | standby2 | 16432 | RHEL7.9 | mgr备节点 |
adb-dcn1 | 192.168.131.7 | gc_1 | 16655 | RHEL7.9 | gtm节点 |
adb-dcn2 | 192.168.131.8 | gc_2 | 16655 | RHEL7.9 | gtm备节点(sync) |
adb-dcn3 | 192.168.131.9 | gc_3 | 16655 | RHEL7.9 | gtm备节点(async) |
adb-dcn1 | 192.168.131.7 | cn1 | 15432 | RHEL7.9 | cn节点1 |
adb-dcn2 | 192.168.131.8 | cn2 | 15432 | RHEL7.9 | cn节点2 |
adb-dcn3 | 192.168.131.9 | cn3 | 15432 | RHEL7.9 | cn节点3 |
adb-dcn1 | 192.168.131.7 | dn1 | 14432 | RHEL7.9 | dn节点1 |
adb-dcn2 | 192.168.131.8 | dn1a | 14432 | RHEL7.9 | dn1备节点1(sync) |
adb-dcn3 | 192.168.131.9 | dn1b | 14432 | RHEL7.9 | dn1备节点2(async) |
adb-dcn1 | 192.168.131.7 | dn2 | 14433 | RHEL7.9 | dn节点2 |
adb-dcn2 | 192.168.131.8 | dn2a | 14433 | RHEL7.9 | dn2备节点1(sync) |
adb-dcn3 | 192.168.131.9 | dn2b | 14433 | RHEL7.9 | dn1备节点2(async) |
adb-dcn1 | 192.168.131.7 | dn3 | 14434 | RHEL7.9 | dn节点3 |
adb-dcn2 | 192.168.131.8 | dn3a | 14434 | RHEL7.9 | dn3备节点1(sync) |
adb-dcn3 | 192.168.131.9 | dn3b | 14434 | RHEL7.9 | dn3备节点2(async) |
说明:主机名adb-dcn1的含义是[antdb]_[distributed][cluster][node][1-9]
3 服务器配置检查
3.1 操作系统版本
操作系统版本 | 说明 |
---|---|
Red Hat Enterprise Linux | v7.5 及以上 |
CentOS | v7.5 及以上 |
Kylin | v10 及以上 |
BC-openeuler | Euler20 及以上 |
BC-anolis | anolis7.6,anolis8.0 及以上 |
OpenEuler | 20 及以上 |
Anolis | 7.6 及以上 |
3.1 硬件环境
官方建议配置:
配置项 | 配置内容 | 说明 |
---|---|---|
CPU | 建议大于 16 核 | x86和arm架构均可 |
物理内存 | 建议大于 32G | |
硬盘剩余空间 | 根据实际业务需求 ,冗余 20% |
经过测试,配置低于上述要求也可以正常运行。
生产推荐配置:
配置项 | 配置内容 | 说明 |
---|---|---|
CPU | 40核以上 | x86和arm架构均可 |
物理内存 | 256G以上 | |
硬盘剩余空间 | SSD盘,至少配置raid5 | 容量根据业务数据量而定 测试环境可以不配置 raid |
网卡 | 双网卡绑定,万兆以上 | |
文件系统 | ext4或者xfs |
磁盘容量考虑以下几点:
- 日常使用时,确保数据盘使用率不超过 80%
- 初始迁移时,源库的数据量乘 1.2 作为 AntDB 的数据量需求
- 在上述 2 者的基础之上,再乘 1.3 作为最终的磁盘需求(因为有 WAL 日志文件占用磁盘)
3.2 磁盘
查看磁盘使用率:
df -h
确认各个目录的空间,home 目录不少于 20GB。
测试磁盘的 IO 能力:
time dd if=/dev/zero of=io_test bs=1k count=1048576 oflag=direct
3.3 网络
利用 linux 的 iperf3 命令测试测试网络速度
1. 服务端和客户端都安装 iperf3
yum install -y iperf*
2. AntDB 主库所在主机上执行
iperf3 -s
3. AntDB 备库所在主机上执行,观察传输速度是否满足万兆网络的速度60s
# -d 表示双向传输,上行下行均有
iperf3 -c 192.168.131.7 -t 60 -d
3.4 打开PAM认证
grep UsePAM /etc/ssh/sshd_config
# 预期结果
UsePAM yes
# 如果是 no,那么需要改为 yes,并且重启 sshd 服务
systemctl restart sshd.service
4 操作系统设置
AntDB 集群内的每台服务器都需要执行这个章节的配置。
4.1 关闭防火墙
关闭防火墙服务:
systemctl stop firewalld.service
关闭防火墙自启动服务:
systemctl disable firewalld.service
检查防火墙状态:
systemctl status firewalld.service
4.2 关闭SELINUX
永久关闭
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/selinux/config
更新/etc/selinux/config文件,重启生效。
重启
reboot
检查是否关闭
/usr/sbin/sestatus –v
# 期待结果
SELinux status: disabled
4.3 关闭透明大页
透明大页(即 Transparent Huge Pages,缩写为 THP)的使用可能会引起性能问题,因此建议关闭。
检查透明大页的开启状态;
cat /sys/kernel/mm/transparent_hugepage/enabled
如果结果是 [always] madvise never,则透明大页是开启状态,需要关闭;
如果结果是 always madvise [never],则透明大页是关闭状态,跳过此步骤;
关闭透明大页;
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
再次检查透明大页开启情况;
cat /sys/kernel/mm/transparent_hugepage/enabled
4.4 关闭NUMA和禁用透明大页
grubby --update-kernel=ALL --args="numa=off transparent_hugepage=never"
grub2-mkconfig
systemctl stop tuned
systemctl disable tuned
重启
# 验证 grub 的 cmdline,在输出的行里面有这个内容: numa=off transparent_hugepage=never 即为正确
cat /proc/cmdline
# 检查 numa,预期结果为:numa=off
grep -i numa /var/log/dmesg
# 检查 transparent_hugepage,预期结果为:always madvise [never]
cat /sys/kernel/mm/transparent_hugepage/enabled
4.4 依赖安装
一键部署需要提前安装下表中的依赖。
依赖项 | 必要性 | 被依赖模块 | 补充说明 |
---|---|---|---|
sudo | 必要–超级权限 | 安装脚本、部署脚本、adbdcs、adbhamgr、 | |
gnu 工具集 | 必要–指令 | 安装脚本、部署脚本、adbdcs、adbhamgr | linux 自带 |
tar | 必要–解压 tar | 安装脚本 | |
gzip | 必要–解压 gz | 安装脚本 | |
rsync | 必要–数据同步 | AntDB 内核、部署脚本 | |
ipcalc | 必要–配置 IP | 部署脚本 | |
SSH | 必要–ssh连接 | 部署脚本、adbdcs | |
nproc | 必要–检查 cpu | 部署脚本 | |
expect | 必要–互信需要 | 安装脚本–白名单配置 | |
lsof | 必要–检查端口占用 | 部署脚本 | |
jq | 必要–adbhamgr 监控 | adbdcs、adbhamgr | |
net-tools | 必要–netstat 命令 | 部署脚本 | |
curl | 不必要–高可用监控 | adbdcs 监控 | 检查 adbdcs 状态用途,为客户端所需 |
拓展源:
curl https://mirrors.aliyun.com/repo/epel-7.repo -O
依赖包:
rpm -q perl-ExtUtils-Embed flex bison readline-devel zlib-devel openssl-devel pam-devel libxml2-devel libxslt-devel openldap-devel python-devel gcc-c++ libssh2-devel tar gzip rsync expect lsof jq | grep "is not installed"
package perl-ExtUtils-Embed is not installed
package flex is not installed
package bison is not installed
package readline-devel is not installed
package openssl-devel is not installed
package pam-devel is not installed
package libxml2-devel is not installed
package libxslt-devel is not installed
package openldap-devel is not installed
package python-devel is not installed
package libssh2-devel is not installed
package lsof is not installed
package jq is not installed
安装缺的包:
yum install -y perl-ExtUtils-Embed flex bison readline-devel zlib-devel pam-devel openldap-devel gcc-c++ tar gzip rsync expect lsof jq
#下面这些安装可能会有点小问题,单独安装
yum install krb5-devel
yum install -y openssl-devel
yum install -y libxml2-devel
yum install -y python-devel
yum install -y libssh2-devel
4.4 用户配置
创建antdb用户
在需要安装 AntDB 的所有主机上新建一个普通的用户,如 antdb(或者使用已有的普通用户)。
groupadd antdb
useradd -m antdb -g antdb -s /bin/bash -d /home/antdb
passwd antdb
配置用户limit参数
编辑 /etc/security/limits.conf 文件,配置 antdb 用户参数:
vi /etc/security/limits.conf
#AntDB SETTING
antdb soft nproc 65536
antdb hard nproc 65536
antdb soft nofile 278528
antdb hard nofile 278528
antdb soft stack unlimited
antdb soft core unlimited
antdb hard core unlimited
antdb soft memlock 250000000
antdb hard memlock 250000000
保存文件后,执行 su - antdb 切换到 antdb 用户,执行 ulimit -a 检查是否生效。
配置用户 sudo 权限
在安全允许的条件下,建议给 antdb 用户加上 sudo 权限。 root 用户编辑/etc/sudoers文件,找到 Allow root to run any commands anywhere 所在行,在行下面添加:
vi etc/sudoers
antdb ALL=(ALL) NOPASSWD: ALL
保存文件退出。su - antdb 切换到 antdb 用户,执行 sudo id,预期会提示输入用户密码,输出为:
$ sudo id
uid=0(root) gid=0(root) groups=0(root)
表示 sudo 权限添加成功。
4.5 配置内核参数
编辑/etc/sysctl.conf文件,添加以下os内核参数:
vi /etc/sysctl.conf
# add for antdb
kernel.shmmax=137438953472 137438953472
kernel.shmall=53689091
kernel.shmmni=4096
kernel.msgmnb=4203520
kernel.msgmax=65536
kernel.msgmni=32768
kernel.sem=501000 641280000 501000 12800
fs.aio-max-nr=6553600
fs.file-max=26289810
net.core.rmem_default=8388608
net.core.rmem_max=16777216
net.core.wmem_default=8388608
net.core.wmem_max=16777216
net.core.netdev_max_backlog=262144
net.core.somaxconn=65535
net.ipv4.tcp_rmem=8192 87380 16777216
net.ipv4.tcp_wmem=8192 65536 16777216
net.ipv4.tcp_max_syn_backlog=262144
net.ipv4.tcp_keepalive_time=180
net.ipv4.tcp_keepalive_intvl=10
net.ipv4.tcp_keepalive_probes=3
net.ipv4.tcp_fin_timeout=1
net.ipv4.tcp_synack_retries=1
net.ipv4.tcp_syn_retries=1
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_timestamps=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_max_tw_buckets=256000
net.ipv4.tcp_retries1=2
net.ipv4.tcp_retries2=3
vm.dirty_background_ratio=5
vm.dirty_expire_centisecs=6000
vm.dirty_writeback_centisecs=500
vm.dirty_ratio=20
vm.overcommit_memory=0
vm.overcommit_ratio=120
vm.vfs_cache_pressure=100
vm.swappiness=10
vm.drop_caches=2
vm.min_free_kbytes=2048000
vm.zone_reclaim_mode=0
kernel.core_uses_pid=1
kernel.core_pattern=core-%e-%p-%s-%t
fs.suid_dumpable=1
kernel.sysrq=0
4.6 创建相关目录
root用户执行:
mkdir -p /antdata/data/{mgr,cn1,cn2,cn3,dn1,dn2,dn3,ds1a,ds1b,ds2a,ds2b,ds3a,ds3b,gc_1,gc_2,gc_3}
mkdir -p /antdata/core
mkdir -p /antdata/etcd/adbdcs
mkdir -p /antdb/soft_src
mkdir -p /antdb/app
chown -R antdb:antdb /antdb
chown -R antdb:antdb /antdata
chown -R antdb:antdb /antdb/app
chown -R antdb:antdb /antdata/data
chown -R antdb:antdb /antdata/core
chown -R antdb:antdb /antdb/soft_src
cd /antdata/data
chmod 0700 *
目录结构:
[root@adb-dcn1 ~]# ls -lth / | grep ant*
drwxr-xr-x 4 antdb antdb 33 Dec 3 13:20 antdb
drwxr-xr-x 4 antdb antdb 30 Dec 3 13:20 antdata
[root@adb-dcn1 ~]# tree -L 1 /antdata/
/antdata/
├── core
├── data
└── etcd
3 directories, 0 files
[root@adb-dcn1 ~]# tree -L 2 /antdata/
/antdata/
├── core
├── data
│ ├── cn1
│ ├── cn2
│ ├── cn3
│ ├── dn1
│ ├── dn2
│ ├── dn3
│ ├── ds1a
│ ├── ds1b
│ ├── ds2a
│ ├── ds2b
│ ├── ds3a
│ ├── ds3b
│ ├── gc_1
│ ├── gc_2
│ ├── gc_3
│ └── mgr
└── etcd
└── adbdcs
20 directories, 0 files
4.7 配置环境变量
配置antdb用户的环境变量
# su - antdb
$ vi .bash_profile
export ADB_HOME=/antdb/app
export PATH=${ADB_HOME}/bin:$PATH
export LD_LIBRARY_PATH=${ADB_HOME}/lib:$LD_LIBRARY_PATH
export mgrdata=/antdata/data/mgr
alias adbmgr='psql -p 16432 -d postgres '
alias mgr_stop='mgr_ctl stop -D $mgrdata -m fast'
alias mgr_start='mgr_ctl start -D $mgrdata'
$ source .bash_profile
4.8 设置系统时区
确认本机的时区:
$ timedatectl status
Local time: Sun 2024-12-01 22:53:10 CST
Universal time: Sun 2024-12-01 14:53:10 UTC
RTC time: Sun 2024-12-01 14:53:10
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: no
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
如果不为上海,则需要修改修改主机的时区:
timedatectl list-timezones
timedatectl set-timezone Asia/Shanghai
4.9 节点重复操作
其他节点按照以上步骤重复操作配置。
如果可以克隆,克隆后仅需修改hostname和IP地址即可。
5 互信和时钟同步
5.1 互信配置
配置集群内主机之间的 ssh 互信。
方式1:****工具配置
进入安装包 cd antdb-t-ee-release-7.2.generic.*/setup/tool 目录下对 sshconfig.ini 进行配置。
## ip_list:ip地址用逗号分隔
## port、user、password 只能填写一个,因此各主机需要使用相同的端口、用户、密码
[host]
ip_list = 192.168.131.7,192.168.131.8,192.168.131.9
port = 22
user = antdb
password = antdb
注意: 该配置文件最后的换行符不可全删掉(配置文件最后要有换行符)。
执行配置:
sh antdb_sshmutualtrust -c sshconfig.ini
方式2:命令行配置
# 切换到antdb用户
su - antdb
# 生成公钥和密钥
# 执行下面的命令,按三次回车
ssh-keygen -t rsa
# 用ssh-copy-id 把公钥复制到远程主机上
# $sshport替换为相应主机SSH服务端口号,一般为22或者22022(默认为22)
# antdb用户名替换为相应的用户名,例如:antdb。
# 目标ip换成其他主机的ip
ssh-copy-id -p 22 -i ~/.ssh/id_rsa.pub antdb@192.168.131.7/8
# 循环在每个节点执行上面的步骤,让每个节点之间互信
验证互信是否生效,如果不需要密码即可远程登录,就表示已经生效:
5.2 配置节点间时钟同步
配置数据库主机之间的时钟同步(NTP),如果只有单台主机可跳过。默认选择 AntDB 主库mgr节点作为 NTP 的服务端,备库作为 NTP 客户端。
一、服务端配置
1.安装ntp软件:
yum install –y ntp
2.修改 NTP 配置文件/etc/ntp.conf :
vi /etc/ntp.conf
# 注释掉原有的 server
#server 0.rhel.pool.ntp.org iburst
#server 1.rhel.pool.ntp.org iburst
#server 2.rhel.pool.ntp.org iburst
#server 3.rhel.pool.ntp.org iburst
# 默认以主库的时钟为准(如果有特别的时钟服务器,也可以指定 IP)
# server 指定 ip
server 127.127.1.0 #使用本地的时间
fudge 127.127.0.1 stratum 8 #服务器的层级。作为局域网的时间同步
3.退出 vi,开启 ntp server:
# ntpd -gq
ntpd: time slew +0.000000s
# systemctl start ntpd
# systemctl status ntpd
● ntpd.service - Network Time Service
Loaded: loaded (/usr/lib/systemd/system/ntpd.service; disabled; vendor preset: disabled)
Active: active (running) since Sun 2024-12-01 22:58:09 CST; 5s ago
Process: 5906 ExecStart=/usr/sbin/ntpd -u ntp:ntp $OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 5908 (ntpd)
Tasks: 1
CGroup: /system.slice/ntpd.service
└─5908 /usr/sbin/ntpd -u ntp:ntp -g
4.设置开机自启动:
systemctl enable ntpd
二、接下来配置 ntp 的客户端
每台客户机都要执行
1.安装ntp软件:
yum install –y ntp
2.在客户端主机上编辑配置文件/etc/ntp.conf
vi /etc/ntp.conf
# 注释掉原有的 server
#server 0.rhel.pool.ntp.org iburst
#server 1.rhel.pool.ntp.org iburst
#server 2.rhel.pool.ntp.org iburst
#server 3.rhel.pool.ntp.org iburst
# 默认以主库的时钟为准(如果有特别的时钟服务器,也可以指定 IP)
#server 主库的IP
server adb-dcn1
3.退出 vi,开启 ntp 服务和设置开机启动
systemctl start ntpd
systemctl enable ntpd
systemctl status ntpd
4.查看同步状态
[root@adb-dcn2 ~]# ntpstat
#刚刚配置完不会马上就同步,需要等几分钟 unsynchronised
unsynchronised
time server re-starting
polling server every 8 s
#几分钟后再次查看 synchronised
synchronised to NTP server (192.168.131.7) at stratum 7
time correct to within 21 ms
polling server every 128 s
6 集群安装
后续操作默认均在 MGR 主节点上,用 antdb 用户执行。
6.1 上传安装包
把按照包上传到mgr主节点的/antdb/soft_src
目录下:
赋权:
# whoami
root
# cd /antdb/soft_src/
# chown -R antdb:antdb antdb-ce-7.2.24.generic.x86_64.tar.gz
# ls -lth
total 402M
-rw-r--r-- 1 antdb antdb 402M Nov 27 13:01 antdb-ce-7.2.24.generic.x86_64.tar.gz
解压缩安装包:
su - antdb
cd /antdb/soft_src/
tar -zxvf antdb-ce-7.2.24.generic.x86_64.tar.gz
压缩包内容:
[antdb@adb-dcn1 soft_src]$ tree antdb-ce-7.2.24.generic.x86_64
antdb-ce-7.2.24.generic.x86_64
├── antdb_init.sh
├── antdb_install.sh
├── antdb-t-ce-release-7.2.24.generic.x86_64.sha256
├── antdb-t-ce-release-7.2.24.generic.x86_64.tar.gz
├── antdb_upgrade.sh
├── release.md
├── setup
│ ├── common
│ │ ├── AntDB-license-agreement-Community.txt
│ │ ├── initconf-c.ini
│ │ ├── initconf-d.ini
│ │ ├── initialization
│ │ ├── kernel_limits.conf
│ │ ├── kernel_sysctl.conf
│ │ ├── postgresql.conf.template
│ │ ├── set_antdb_config
│ │ ├── setup
│ │ ├── sshMutualTrust
│ │ ├── upgrade_conf.ini
│ │ ├── utility
│ │ └── var
│ ├── tool
│ │ ├── antdb_sshmutualtrust
│ │ └── sshconfig.ini
│ └── uninstall
│ └── antdb_uninstall.sh
└── version
4 directories, 23 files
说明:
- antdb_init.sh:初始化执行脚本
- antdb_install.sh:数据库安装执行脚本
- setup:存放配置文件的目录
6.2 安装数据库
执行安装程序:
cd /antdb/soft_src/antdb-ce-7.2.24.generic.x86_64/
sh antdb_install.sh
交互式:
$ sh antdb_install.sh
[Info] AntDB install begins
[Info] Checking OS information ... ok
[Info] Checking hardware information ... ok
[Info] Checking SHA256 ... ok
# 第一处交互,默认选择Y。选择N即退出本次安装。
[Attention] What will be shown below is AntDB product use agreement. Ready to read it? [yes/no, Default: yes] yes
Hunan AsiaInfo Anhui Technologies Co., Ltd.
Software End User License Agreement
...
Postcode: 310000
Tel: 86-571-8190 3773
Website: www.antdb.net
National Service Hotline: 4001068668
# 第二处交互,默认选择Y。选择N即退出本次安装。
[Caution] Do you agree to the product agreement? [yes/no] yes
# 第三处交互,(c)entralized代表安装的是集中式,(d)istributed代表安装的是分布式。默认选择c。
# 此处填d,选择分布式。
[Info] Choose AntDB type "(c)entralized" or "(d)istributed" for installation. [Default: centralized] d
# 第四处交互,安装路径选择。
# 默认的安装路径是”用户目录/antdb“,用户也可以输入其它的空目录,注意,该目录必须为空。
#此处填/antdb/app。
[Info] Choose an empty directory to install AntDB. [Default: /home/antdb/antdb] /antdb/app
# 第五处交互,选择是否执行初始化。选择no退出默认配置初始化数据库/选择yes使用默认配置初始化数据库。
# 此处填写no,不执行初始化!!
[Attention] Continue to do AntDB initialization? [yes/no, Default: yes] no
[Info] AntDB init terminates
[Attention] Excute 'source /home/antdb/.bashrc' to make the environment variables take effect.
注意最后一行提示要执行source 环境变量:
source /home/antdb/.bashrc
安装完后安装目录生成以下内容:
此外,在/antdb/app/setup/common
目录下会生成两个系统参数文件供参考:
$ ll /antdb/app/setup/common/kernel_*
-rwxr-xr-x 1 antdb antdb 406 Dec 3 17:32 /antdb/app/setup/common/kernel_limits.conf
-rwxr-xr-x 1 antdb antdb 1361 Dec 3 17:32 /antdb/app/setup/common/kernel_sysctl.conf
6.3 初始化配置
安装包的setup/common目录下initconf-d.ini文件时分布式架构的初始化配置文件。
# 进入目录
$ cd /antdb/soft_src/antdb-ce-7.2.24.generic.x86_64/setup/common/
#备份
$ cp initconf-d.ini initconf-d.ini.241203.bak
#编辑
$ vi initconf-d.ini
根据实际环境信息编辑配置文件:
## cluster_info 配置项说明:
##
## cluster_type 分类:
## D 表示分布式版本:需要配置此文件内所有信息
## D_HA 表示分布式高可用集群版本:需要配置此文件内所有信息
## cluster_name:数据库集簇的名称
## cluster_user: 数据库的超级用户,一般设定为执行此安装程序的操作系统用户
[cluster_info]
cluster_type = D_HA
cluster_name = antdbcluster
cluster_user = antdb
## mgr_info 配置项说明(mgr 为分布式管理节点):
##
## antdb_apppath:mgr 节点数据库程序目录
## antdb_datapath:mgr 节点数据库的数据目录;需要设定为空目录,且不要和其它配置项中的目录交叉
## antdb_password:数据库的超级用户的初始密码(超级用户名参见 “cluster_user”)
## antdb_port:mgr 节点数据库端口号
## primary_ip:mgr 节点数据库 ip,即执行此安装程序的主机 ip
## primary_sshport:执行此安装程序的主机的 SSH 服务端口号
[mgr_info]
primary_ip = 192.168.131.7
primary_sshport = 22
antdb_apppath = /antdb/app
antdb_datapath = /antdata/data/mgr
antdb_password = antdb
antdb_port = 16432
## host_info 配置项说明
##
## host_info 格式:hostname,protocol_port,protocol,antdb_apppath,antdb_agent_port,host_user,host_ip
## host_name:在 AntDB 内部标识一台主机所用的名称,唯一
## protocol_port:AntDB 所用的通信协议服务端口号(目前为 SSH 端口)
## protocol:AntDB 依赖的通信协议(目前为 SSH)
## antdb_apppath:主机上 AntDB 程序的安装目录;需要指定为空目录,在初始化过程中自动安装
## antdb_agent_port: 主机上 AntDB Agent 程序使用的端口号
## host_user: 主机上操作系统用户,一般与 mgr_info 中使用相同用户名
## host_ip:主机 ip 地址
[host_info]
host = adb01,22,ssh,/antdb/app,18432,antdb,192.168.131.7
host = adb02,22,ssh,/antdb/app,18432,antdb,192.168.131.8
host = adb03,22,ssh,/antdb/app,18432,antdb,192.168.131.9
## node_info 配置项说明
##
## node_info 格式:node_name,node_type,host_name,antdbdb_port,antdb_datapath,role[,master_nodename,sync_mode]
## node_name:分布式节点名称,作为 AntDB 内部的标识,唯一
## node_type:分布式节点类型,包括 GC、CN、DN
## host_name:此节点所在的 host,参加上述 host_info
## antdbdb_port:此节点使用的端口号
## antdb_datapath:此节点使用的数据库数据目录;需要指定为空目录
## role:此节点的角色,包括 master(主节点)、slave(备节点)
## master_nodename:主节点名称;当节点类型为 slave 时需要填写此项
## sync_mode:备节点类型,包括 sync(同步)、async(异步);当节点类型为 slave 时需要填写此项
[node_info]
node = cn1,CN,adb01,15432,/antdata/data/cn1,master
node = cn2,CN,adb02,15432,/antdata/data/cn2,master
node = cn3,CN,adb03,15432,/antdata/data/cn3,master
node = dn1,DN,adb01,14432,/antdata/data/dn1,master
node = dn2,DN,adb02,14433,/antdata/data/dn2,master
node = dn3,DN,adb03,14434,/antdata/data/dn3,master
node = ds1a,DN,adb02,14432,/antdata/data/ds1a,slave,dn1,sync
node = ds1b,DN,adb03,14432,/antdata/data/ds1b,slave,dn1,async
node = ds2a,DN,adb01,14433,/antdata/data/ds2a,slave,dn2,sync
node = ds2b,DN,adb03,14433,/antdata/data/ds2b,slave,dn2,async
node = ds3a,DN,adb01,14434,/antdata/data/ds3a,slave,dn3,sync
node = ds3b,DN,adb02,14434,/antdata/data/ds3b,slave,dn3,async
node = gc_1,GC,adb01,16655,/antdata/data/gc_1,master
node = gc_2,GC,adb02,16655,/antdata/data/gc_2,slave,gc_1,sync
node = gc_3,GC,adb03,16655,/antdata/data/gc_3,slave,gc_1,async
## standbyinfo 配置项说明:
##
## 分布式集群高可用集群:配置的节点目前只能是mgr节点
## standby_node 格式:name,standby_ip,standby_sshport,antdb_apppath,antdb_datapath,antdb_port
## name:备节点名称,仅作为标识,唯一。
## standby_ip:备节点 ip 地址
## standby_sshport:备节点 SSH 服务端口号
## antdb_apppath:备节点存放数据库应用程序的目录,建议与主节点使用相同路径
## antdb_datapath:备节点存放数据库数据的目录,建议与主节点使用相同路径
## antdb_port:备节点数据库的端口号
[standby_info]
standby_node = standby1,192.168.131.8,22,/antdb/app,/antdata/data/mgr,16432
standby_node = standby2,192.168.131.9,22,/antdb/app,/antdata/data/mgr,16432
## adbdcs_info 配置项说明:
##
## adbdcs_node 格式:name,adbdcs_datapath,clienport,peerport,hostinfo
## name:adbdcs 节点名称,唯一
## adbdcs_datapath:adbdcs 数据目录,不要与数据库数据目录交叉
## clienport:客户端访问 adbdcs 使用的端口号
## peerport:adbdcs 通信端口号
## hostinfo:数据库节点名称,primary 表示主节点,其它为备节点名称;标识了 adbdcs 与哪个数据库节点位于同一节点
[adbdcs_info]
adbdcs_node = adbdcs-1,/antdata/etcd/adbdcs,12379,12380,primary
adbdcs_node = adbdcs-2,/home/antdb/adbdcs,12379,12380,standby1
adbdcs_node = adbdcs-3,/home/antdb/adbdcs,12379,12380,standby2
## adbhamgr_info 配置项说明:
##
## adbhamgr_node 格式:name,adbhamgr_port,hostinfo
## name:adbhamgr 节点的名称,唯一
## adbhamgr_port:adbhamgr 服务使用的端口号
## hostinfo:数据库节点名称,primary 表示主节点,其它为备节点名称;标识了 adbhamgr 与哪个数据库节点位于同一节点
[adbhamgr_info]
adbhamgr_node = adbhamgr-1,12378,primary
adbhamgr_node = adbhamgr-2,12378,standby1
adbhamgr_node = adbhamgr-3,12378,standby2
## parameter 配置项说明:
##
## 此配置项用于设定数据库配置选项。
## config 格式:config_name=config_value
## config_name: 配置项名称
## config_value:配置项值
##
## 注意:
## 1、‘=’作为名称和值的分隔符,请注意按此格式书写。
## 2、config_value 的格式请按照数据库全局配置时的格式书写(集中式与分布式可能存在区别),安装工具不会对 config_value 的格式进行检查。
# [parameter]
# shared_buffers = '128MB'
# max_locks_per_transaction = 256
## init_option 配置项说明:
##
## 此配置项用于设定数据库初始化选项。
## config initall=init_value
## initall:为初始化配置项的的固定名称,不需要修改
## init_value:初始化选项。下面示例的含义为:设置 walsegsize 为 256MB
##
## 注意:
## 1、分布式仅支持设置 walsegsize。
# [init_option]
# initall = walsegsize,256
initall = walsegsize,256 encoding,UTF8 locale,C
注意,****配置文件最后的换行符不可全删掉(配置文件最后要有换行符)。
补充说明:
根据官方文档,可知高可用架构是使用adbdcs和adbhamgr进行管理的:
因此,cluster_type = D时,standby_info,adbdcs_info,adbhamgr_info这三部分应该不需要配置。这三部分配置是针对分布式高可用集群版本(cluster_type = D_HA)。见下图安装程序源码:
6.4 初始化
$ cd /antdb/soft_src/antdb-ce-7.2.24.generic.x86_64
$ sh antdb_init.sh -c setup/common/initconf-d.ini
在初始化过程中,选择wal_segsize的大小,可以保持默认,安装完成后再统一修改参数。
[Info] Please enter a size for wal-segsize [Default: 128] 128
如果初始化时参数设置不合理,会报错导致安装失败,例如:
安装过程截图:
6.5 安装后检查
一、集群状态
安装完成后,在mgr节点使用adbmgr
命令登录数据库检查集群状态:
$ adbmgr
# monitor all查看所有节点状态
postgres=# monitor all;
nodename | nodetype | status | description | host | port | recovery | boot time | nodezone
----------+--------------------+--------+-------------+---------------+-------+----------+-------------------------------+----------
gc_1 | gtmcoord master | t | running | 192.168.131.7 | 16655 | false | 2024-12-25 00:50:38.685116+08 | local
gc_2 | gtmcoord slave | t | running | 192.168.131.8 | 16655 | true | 2024-12-25 00:50:39.662477+08 | local
gc_3 | gtmcoord slave | t | running | 192.168.131.9 | 16655 | true | 2024-12-25 00:50:39.677364+08 | local
cn1 | coordinator master | t | running | 192.168.131.7 | 15432 | false | 2024-12-25 00:50:40.728518+08 | local
cn2 | coordinator master | t | running | 192.168.131.8 | 15432 | false | 2024-12-25 00:50:40.819707+08 | local
cn3 | coordinator master | t | running | 192.168.131.9 | 15432 | false | 2024-12-25 00:50:40.800616+08 | local
dn1 | datanode master | t | running | 192.168.131.7 | 14432 | false | 2024-12-25 00:50:42.077856+08 | local
dn2 | datanode master | t | running | 192.168.131.8 | 14433 | false | 2024-12-25 00:50:41.907799+08 | local
dn3 | datanode master | t | running | 192.168.131.9 | 14434 | false | 2024-12-25 00:50:41.947883+08 | local
ds1a | datanode slave | t | running | 192.168.131.8 | 14432 | true | 2024-12-25 00:50:43.085111+08 | local
ds1b | datanode slave | t | running | 192.168.131.9 | 14432 | true | 2024-12-25 00:50:43.132276+08 | local
ds2a | datanode slave | t | running | 192.168.131.7 | 14433 | true | 2024-12-25 00:50:43.081548+08 | local
ds2b | datanode slave | t | running | 192.168.131.9 | 14433 | true | 2024-12-25 00:50:43.564746+08 | local
ds3a | datanode slave | t | running | 192.168.131.7 | 14434 | true | 2024-12-25 00:50:43.232018+08 | local
ds3b | datanode slave | t | running | 192.168.131.8 | 14434 | true | 2024-12-25 00:50:43.361018+08 | local
(15 rows)
二、进程
mgr主节点相关进程:
$ ps -ef|grep adbmgr | grep -v grep
mgr备节点相关进程:
注意wal日志进程,对于MGR主节点能看到walsender进程,而在MGR备节点能看到walreceiver进程。