本文将搭建一个简单的lightdb高可用环境,包含单个主节点与一个备用节点。首先简要描述个人理解的高可用。
理解高可用
顾名思义,高可用指的是整个系统具有很强的鲁棒性。像常用的备份磁盘数据的RAID1技术,便属于高可用。数据库高可用指的是通过构造一套多节点(一般每个节点位于不同机器),分配一个主节点,其余节点为备份节点,主节点通过流复制或是传输日志文件(重演日志以同步数据),将那些需要改动数据内容的事务赋予备用节点进行备份。
环境搭建
本文演示搭建主节点与单个备份节点组成的高可用环境,多备份节点的搭建方式与单备份节点相似,只需要在多个机器上搭建单节点,并注册上游节点即可。
前期准备
安装lightdb包,下载地址如下:
lightdb官网下载安装
需要操作包内的initdb、ltctl、ltcluster等命令行程序。
主节点配置
1.使用initdb -D /home/lightdb/instance创建数据库实例,该实例即为高可用所保障的数据库文件,ltcluster也将与该实例绑定。
2.修改instance目录下lightdb.conf,使能如下选项:
max_wal_senders = 3
max_replication_slots = 3
wal_level = 'hot_standby'
hot_standby = on
archive_mode = on
archive_command = '/bin/true'
各参数的意义本文不再赘述,参考文档
lightdb.conf参数配置
3.新建lightdb超级用户ltcluster,并创建ltcluster数据库用于存放ltcluster的元数据。
createuser -s ltcluster
createdb ltcluster -O ltcluster
4.编辑lt_hba.conf,该文件控制链接的用户、ip地址等条件所构成集合具有的权限,如为trust,则该集合内的元素与该节点连接时便无需密码。
local replication ltcluster trust
host replication ltcluster 127.0.0.1/32 trust
host replication ltcluster 0.0.0.0/0 md5
local ltcluster ltcluster trust
host ltcluster ltcluster 127.0.0.1/32 trust
host ltcluster ltcluster 0.0.0.0/0 md5
这里需要设置成本机的ip地址或是将0.0.0.0/0的权限改为trust。
6.新建ltcluster.conf文件,注意该文件不应放于实例目录内,即本文中的/home/lightdb/instance。这里将其置于/home/lightdb/下。向其写入如下信息:
node_id=1 # 节点标号
node_name='node_primary' # 节点名称
# ltcluster与本机实例的连接参数。特别的,对于开启多lightdb服务的机器,使用指定端口号与对应实例(lightdb服务)相连接
conninfo='host=本机ip user=ltcluster dbname=ltcluster connect_timeout=2 port=指定实例端口'
data_directory='/home/lightdb/instance' # 实例路径
7.注册主节点,如下指令将安装ltcluster插件,并添加主节点的元数据记录。
ltcluster -f /home/lightdb/ltcluster.conf primary register -p '主节点实例服务端口号'
执行后看到如下打印内容表示注册成功:
INFO: connecting to primary database...
NOTICE: attempting to install extension "ltcluster"
NOTICE: "ltcluster" extension successfully installed
NOTICE: primary node record (id: 1) registered
配置备份节点
1.在另一台机器上,新建一个空目录,名字与主节点实例名称一致,此处为/home/lightdb/instance,并将instance目录的权限改为700。instance的父目录可不与主节点一致。
可通过执行
ltsql 'host=主节点ip user=ltcluster dbname=ltcluster connect_timeout=2 port=主节点端口号'
检查是否可连接到主节点服务。
2.在从节点上亦新建ltcluster.conf文件,用于备份当前主节点快照,该文件亦不放至于instance目录下。填充与主节点ltcluster.conf相同的参数键,其值需要改动,如下所示:
node_id=2
node_name='node_standby1'
conninfo='host=主节点ip user=ltcluster dbname=ltcluster connect_timeout=2 port=主节点端口号'
data_directory=主节点目录 (此处为/home/lightdb/instance)'
之后执行:
ltcluster -h 主节点ip -U ltcluster -d ltcluster -f /home/lightdb/ltcluster.conf standby clone
其将通过lt_basebackup完成主节点至从节点的数据传输备份。
等待传输完成后便可在主节点上查看从节点的流拷贝参数信息与日志接收信息:
select * from pg_stat_replication; # 流拷贝信息
select * from pg_stat_wal_receiver; # 日志接收信息
3.最后,注册从节点。在从节点上新建配置文件ltcluster_standby.conf,填充如下参数:
node_id=2
node_name='node_standby1'
# 此处连接信息为从节点服务,即ip为从节点机器ip,端口号为从节点服务端口号
conninfo='host=127.0.0.1 user=ltcluster dbname=ltcluster connect_timeout=2 port=5432'
# 此处实例目录为从节点实例目录,即备份目录
data_directory='/home/lightdb/instance'
ltcluster -f /home/lightdb/ltcluster_standby.conf standby register -p '从节点实例服务端口号'
至此,主从高可用环境已搭建完成,可通过在节点上执行
ltcluster -f /home/lightdb/ltcluster.conf cluster show
查看高可用环境主从节点信息。