VastbaseG100集群部署实操
背景
近日的工作涉及到数据库的集群部署,为了熟悉过程,参考VastgbaseG100官方文档进行部署。
参考文档
https://docs.vastdata.com.cn/zh/docs/VastbaseG100Ver2.2.15/do...
实操
这里采用HAS+DCS+Vastbase的解决方案,详情可参考
海量智库第8期|Vastbase G100核心技术介绍之高可用软件实现原理
概述
总体包含dcs、vastbase、has的部署,并按照顺序依次部署。细节性的东西参考文档就行,不会描述,更多的是展示部署过程个各个步骤的截图
。
信息
IP信息
172.16.19.151~153
172.16.19.154 作为VIP
平台信息
系统:中科方德4.0
处理器:Intel x86
dcs
dcs节点
节点 | ip | 默认端口 | hostname |
---|---|---|---|
dcs节点1 | 172.16.19.151 | 2379、2380 | vb1 |
dcs节点2 | 172.16.19.152 | 2379、2380 | vb2 |
dcs节点2 | 172.16.19.153 | 2379、2380 | dcs |
配置
/etc/hosts
防火墙
直接关闭
安装
为了易于后续删除,二进制文件放在一个单独创建的目录。这里用/opt/vastdata/dcs存放相关文件
mkdir -p /opt/vastdata/dcs
获取安装程序
解压后将二进制文件放到/opt/vastdata/dcs/bin目录,并赋予执行权限
tree -L 2 .
添加配置文件
添加目录/opt/vastdata/dcs/etc存放配置文件,创建配置文件dcs.conf;添加目录data用于存放dcs的数据。
配置文件
- 172.16.19.151
- 172.16.19.152
- 172.16.19.153
其他节点修改ip和节点序号即可。
配置DCS服务
作为系统服务
在dcs目录创建dcs.service,并建立从系统目录到这里的软链接
创建软链接
ln -sf /opt/vastdata/dcs/dcs.service /usr/lib/systemd/system/dcs.service
配置其他节点
将本机上的配置文件复制到另外两台机器,并简单修改。
- 要改ip和节点编号
- 软链接别忘了创建
启动服务
systemctl daemon-reload
systemctl start dcs
# 查看状态
systemctl status dcs
vastbase
第二步部署数据库(一主一备)172.16.19.151部署主库,172.16.19.152部署备库
数据库版本采用2.2.15
数据库节点
节点名称 | IP | 默认端口 |
---|---|---|
数据库主节点 | 172.16.19.151 | 5432,5433,26001,26002,26003 |
数据库备节点 | 172.16.19.152 | 5432,5433,26001,26002,26003 |
安装数据库
和dcs放在同级目录,新建目录
/opt/vastdata/vastbase
将目录权限给数据库用户(这里使用vastbase)
chown -R vastbase:vastbase /opt/vastdata/vastbase
安装
获取安装包,按照单机安装的操作安装
安装路径选择上述目录
查看安装后目录
删掉omTmp并且取消软链接
主库配置
-
postgresql.conf
在/opt/vastdata/vastbase/data/vastbase/postgresql.conf
添加以下配置项#For Replication replication_type = 1 application_name = 'vb1' recovery_max_workers = 1 password_encryption_type=0 replconninfo1 = 'localhost=172.16.19.151 localport=26001 localheartbeatport=26002 localservice=26003 remotehost=172.16.19.152 remoteport=26001 remoteheartbeatport=26002 remoteservice=26003' wal_level=hot_standby hot_standby=on vastbase_login_info=false synchronous_commit=off synchronous_standby_names = '*' # * for sync, empty for async remote_read_mode='non_authentication'
-
pg_hba.conf
/opt/vastdata/vastbase/data/vastbase/pg_hba.conf
添加启动主库
vb_ctl -M primary start
创建用户
备库配置
- 参考主库安装
- 拷贝主库配置文件略作修改
-
postgresql.conf
#For Replication replication_type = 1 application_name = 'vb2' recovery_max_workers = 1 password_encryption_type=0 replconninfo1 = 'localhost=172.16.19.152 localport=26001 localheartbeatport=26002 localservice=26003 remotehost=172.16.19.151 remoteport=26001 remoteheartbeatport=26002 remoteservice=26003' wal_level=hot_standby hot_standby=on vastbase_login_info=false synchronous_commit=off synchronous_standby_names = '*' # * for sync, empty for async remote_read_mode='non_authentication'
启动备库
vb_ctl build
使用vb_ctl query查看状态
主库
备库
has
HAS节点
节点名称 | IP | 默认端口 |
---|---|---|
HAS1(数据库主节点) | 172.16.19.151 | 8008 |
HAS2(数据库备节点) | 172.16.19.152 | 8008 |
安装
和dcs、vastbase放在同一级目录
/opt/vastdata/has
获取压缩包并调整目录结构
配置HAS
配置文件放在/opt/vastdata/has/etc目录下
这里命名为vastbase.yml
scope: vastbase_ha_inst # 集群实例名称
namespace: /vastbase/ # 集群实例所在的命名空间,默认是/service
name: 'vb1' # 节点在集群内的名称,每个节点都必须不一样,通过hasctl list命令查看高可用集群状态时,在Member显示该名称
restapi:
listen: 172.16.19.151:8008 # has服务监听的套接字,192.168.100.1为本节点的IP地址,下面的配置信息涉及192.168.100.1均表示本节点IP地址
connect_address: 172.16.19.152:8008 # 高可用集群内,其他节点通过本参数的地址访问本节点的has服务
etcd:
hosts: 172.16.19.151:2379,172.16.19.152:2379,172.16.19.153:2379 # dcs地址集
bootstrap:
dcs:
ttl: 30 # 持有单个DCS key的最长时间,单位秒,例如主节点持有leader key,如果不能再该时间内更新leader key,那么可以认为发生failover
loop_wait: 10 # has两次执行工作之间的时间间隔,单位秒
retry_timeout: 10 # 重试次数
maximum_lag_on_failover: 1048576 # 从库允许被参与选举主库,最大的延迟字节数
synchronous_mode: 'true' # 是否开启同步模式,开启后,has会决定哪个节点是同步备库并覆盖数据库配置文件内的synchronous_standby_names参数
postgresql:
use_pg_rewind: true # 是否使用rewind,必须开启
use_slots: true # 是否使用复制槽,必须开启
parameters: # 实验目的这次不配置该部分
port: 5432 # 非必须
initdb:
- encoding: UTF8
pg_hba:
- host all vastbase 172.16.19.151/32 trust # 配置集群内所有节点的${initdb_user}用户远程访问为trust,否则增量build失败,${initdb_user}为初始化实例的用户,一般与操作系统用户同名;如果是IPV6地址,需要替换IP为IPV6,例如:- host all ${initdb_user} 2001:0:3238:e1:63::133/24 trust
- host all vastbase 172.16.19.151/32 trust
- host all vastbase 172.16.19.152/32 trust
- host all all 0.0.0.0/0 md5 # 此行配置必须在最后;如果是IPV6地址,需要替换IP为IPV6,例如:- host all all ::0/0 md5
postgresql:
callbacks:
on_start: /opt/vastdata/has/etc/has_vip.sh # 回调脚本路径,一般用于管理VIP
on_stop: /opt/vastdata/has/etc/has_vip.sh
on_role_change: /opt/vastdata/has/etc/has_vip.sh
listen: 0.0.0.0:5432
connect_address: 172.16.19.151:5432
use_unix_socket: true
use_extreme_rto: false # 如果开启极致RTO,该参数必须设置为true,开启极致RTO后,备机不可读
pg_ctl_timeout: 600 # 数据库启动超时时间,根据实际情况设置
data_dir: /opt/vastdata/vastbase/data/vastbase # 数据库实例路径
config_dir: /opt/vastdata/vastbase/data/vastbase # 数据库实例配置文件路径
bin_dir: /opt/vastdata/vastbase/bin # 数据库可执行文件路径
vastbase_lib_dir: /opt/vastdata/vastbase/lib://opt/vastdata/vastbase/jre/lib/amd64:/opt/vastdata/vastbase/jre/lib/amd64/server # 数据库共享库路径 amd64 for x86, aarch64 for arm
vastbase_home: /opt/vastdata/vastbase # 数据库安装路径
authentication:
replication:
username: tcpp #不能与初始化实例的用户同名
password: tcpp@123 #需提前将用户的密码修改为本配置项的取值。即本样例中应在部署has前将vbadmin用户的密码修改为Vbase@admin。
superuser:
username: tcpp #不能与初始化实例的用户同名
password: tcpp@123 #需提前将用户的密码修改为本配置项的取值。即本样例中应在部署has前将vbadmin用户的密码修改为Vbase@admin。
parameters: # 个性化配置部分,以下配置项建议写到该部分
application_name: vb1 # 数据库节点名称,建议与第3行的name参数保持一致,否则synchronous_mode开后后不生效,此外,此参数不要写在bootstrap部分
archive_mode: on # 是否开启归档,根据实际情况
archive_command: 'cp %p /data/archive/%f' # 根据实际情况配置
archive_dest: '/opt/vastdata/vastbase/data/vastbase/archive' # 直接指定归档目录,效率比archive_command高,设置本参数后archive_command参数失效
unix_socket_directory: '/tmp'
replconninfo1: 'localhost=172.16.19.151 localport=55434 localheartbeatport=55435 localservice=55436 remotehost=172.16.19.152 remoteport=55434 remoteheartbeatport=55435 remoteservice=55436'
配置HAS服务
添加has.service
目录层级为
注意这里有一个has_env文件,在里面配置一些环境变量,不然启动会报错。这些变量在/home/vastbase/.Vastbase配置了,仍然无法获取到只能添加这么个文件
- has.service
- has.env
创建软链接
ln -sf /opt/vastdata/has/has.service /usr/lib/systemd/system/has.service
配置VIP
创建has_vip.sh按照模板修改就行。
启动HAS
因为用vastbase用户启动服务,需要将has目录的owner改为vastbase
systemctl daemon-reload
systemctl start has
查看最终结果
总结
目录总体结构
主要是为了熟悉集群搭建的步骤,遇到的问题没有详细描述了,还有一些细节的操作还是要阅读官网文档。遇到的问题主要在HAS配置上,(就是has.env那里面的环境变量读不到导致启动不了。。。)。至于为什么搞成这个目录格式呢?因为有个做rpm包的任务,可能安装之后就长成这个样,然后可以帮助自己明确最后做出来的rpm包的效果吧。一是目录效果,二是安装之后提供怎样的功能,三是搞完了知道怎么去验证做的对不对。