分布式存储引擎管理
HSM 为分布式存储系统,专用于 Halo 数据库的共享存储管理系统。HSM 包含以下模块:
- hsmmaster:分布式文件系统管理模块
- datanode:存储节点
- libhsmsdk.so、libcrypto_plugin.so:Halo 数据库依赖库,需放置于 HALO_HOME/lib 目录,并确保该路径在库搜索路径中
- hsmdclient:客户端,用于集群管理和文件系统管理
部署
服务器配置
| 序号 | ip | 作用 |
|---|---|---|
| 1 | 192.168.10.160 | etcd,HaloDB 实例 |
| 2 | 192.168.10.163 | hsmmaster1、datanode1 |
| 3 | 192.168.10.164 | hsmmaster2、datanode2 |
| 4 | 192.168.10.165 | datanode3 |
相关依赖包
| 序号 | 包 | 版本 |
|---|---|---|
| 1 | sysstat | |
| 2 | libleveldb | |
| 3 | libprotobuf | |
| 4 | libgflags |
安装命令:
[root@hsmd1 ~]# yum install -y libprotobuf* libgflags* libleveldb* sysstat --skip-broken
hsmmaster 部署运行
安装包内文件结构,hsmmaster 是需要两个节点,为 hsmmaster1 和 hsmmaster2。
安装在 /opt 目录下(或其他自定义目录,不要放在 root 目录下):
[root@hsmd1 ~]# cd hsmd
[root@hsmd1 hsmd]# tree
.
├── datanode
├── datanode1.pf
├── datanode2.pf
├── datanode3.pf
├── etcdnodes.conf
├── hsm_conf # 该目录下后期需要拷贝到 HaloDB 的 lib 目录同级
│ ├── crypto_plugin.conf
│ └── hsm.conf
├── hsmdclient
├── hsmdclient.conf
├── hsmmaster
├── hsmmaster1.pf
├── hsmmaster2.pf
├── libcrypto_plugin.so # 需要后期放到 HaloDB 的 lib 目录下
└── libhsmsdk.so # 需要后期放到 HaloDB 的 lib 目录下
1 directory, 14 files
以下以 hsmmaster1 节点安装为例。
1)环境变量
在部署机器相对用户下设置环境变量 HALO_HOME,以 root 用户下设置为例。
方法一:
[root@hsmd1 ~]# vi /root/.bash_profile
# 增加
export HALO_HOME=/opt/hsmd
# 保存
[root@hsmd1 ~]# source /root/.bash_profile
方法二:
[root@hsmd1 ~]# cat <<EOF>> /root/.bash_profile
export HALO_HOME=/opt/hsmd
EOF
[root@halo163 ~]# source /root/.bash_profile
2)配置文件
(1)修改配置文件 ./hsm_conf/hsm.conf
hsm 的配置文件:
[root@halo160 hsmd]# cd hsm_conf
[root@halo160 hsm_conf]# ls -l
total 8
-rw-r--r-- 1 root root 8 Mar 4 2025 crypto_plugin.conf
-rw-r--r-- 1 root root 504 Dec 16 15:53 hsm.conf
[root@halo160 hsm_conf]# pwd
/opt/hsmd/hsm_conf
[root@halo160 hsm_conf]# cat hsm.conf
#以下为分布式hsm需要填的配置
#hsm集群ID,用于在etcd中标识不同的目录
hsm_cluster=hsmdev # 自己搭建的可以不用改,如果使用别人的,要区分etcd上有没有同名的
#是否使用rdma,填 0 或 1
use_rdma=0
#master1_endpoint=127.0.0.1:8000
#master2_endpoint=127.0.0.1:8002
master1_endpoint=192.168.10.203:8000 # 实际hsmmaster1的IP需要修改,后面端口不需修改
master2_endpoint=192.168.10.203:8002 # 实际hsmmaster2的IP需要修改,后面端口不需修改
#master1_endpoint=192.168.10.109:8000
#master2_endpoint=192.168.10.110:8002
此横线以上必填
#----------------------------------------------------------------------------------------------
#日志等级 INFO = 0, NOTICE = 1, WARN=2, ERROR=3
log.level=0
Debug=0
修改配置文件:
[root@hsmd1 ~]# sed -i "s/master1_endpoint=192.168.10.203/master1_endpoint=192.168.10.163/" /opt/hsmd/hsm_conf/hsm.conf
[root@hsmd1 ~]# sed -i "s/master2_endpoint=192.168.10.203/master2_endpoint=192.168.10.164/" /opt/hsmd/hsm_conf/hsm.conf
(2)修改配置文件 hsmmaster1.pf
查看配置文件内容:
[root@hsmd1 hsmd]# cat hsmmaster1.pf
[common]
module=master1
[master]
master.datapath=./hsmmaster_data1
master.backupType=2
master.walpath=./hsmmaster_data1
[network]
net.public_ip = 192.168.10.203 # 需要修改为实际hsmmaster节点的IP
net.public_port= 8000
net.private_ip=
net.private_port=
[brpc]
brpc.num_threads =8
brpc.max_concurrency =500
brpc.worker_core_mask =
[log]
#日志等级 INFO = 0, NOTICE = 1, WARN=2, ERROR=3
log.level = DEBUG
log.path = ./log/hsmmaster1
log.maxsizem = 500M
log.savedays = 60
log.prefix =
mon.port=8001
debug=0
修改配置内容:
[root@hsmd1 hsmd]# sed -i "s/192.168.10.203/192.168.10.163/" /opt/hsmd/hsmmaster1.pf
[root@hsmd1 hsmd]# sed -i "s/192.168.10.203/192.168.10.164/" /opt/hsmd/hsmmaster2.pf
(3)修改配置文件 etcdnodes.conf
查看配置文件内容:
[root@hsmd1 hsmd]# cat etcdnodes.conf
192.168.10.155:2379
修改配置文件内容:
[root@hsmd1 hsmd]# sed -i "s/192.168.10.155/192.168.10.160/" /opt/hsmd/etcdnodes.conf
(4)修改配置文件 hsmdclient.conf
这是 hsmdclient 客户端的配置文件。
查看配置文件:
[root@hsmd1 hsmd]# cat hsmdclient.conf
#以下为分布式hsm需要填的配置
#etcd节点,多个节点间逗号分隔
etcd_nodes=192.168.10.155:2379
#hsm集群ID,用于在etcd中标识不同的目录
hsm_cluster=hsmdev
#是否使用rdma,填 0 或 1
use_rdma=0
#master1_endpoint=127.0.0.1:8000
#master2_endpoint=127.0.0.1:8002
master1_endpoint=192.168.10.203:8000 # 实际hsmmaster1的IP需要修改,后面端口不需修改
master2_endpoint=192.168.10.203:8002 # 实际hsmmaster2的IP需要修改,后面端口不需修改
#master1_endpoint=192.168.10.109:8000
#master2_endpoint=192.168.10.110:8002
UseSrpc=0
修改配置文件:
[root@hsmd1 ~]# sed -i "s/master1_endpoint=192.168.10.203/master1_endpoint=192.168.10.163/" /opt/hsmd/hsmdclient.conf
[root@hsmd1 ~]# sed -i "s/master2_endpoint=192.168.10.203/master2_endpoint=192.168.10.164/" /opt/hsmd/hsmdclient.conf
3)启动
[root@hsmd1 hsmd]# ./hsmmaster -conf=/opt/hsmd/hsmmaster1.pf
mon.port 8001
LogPath=/opt/hsmd/./log/hsmmaster1/
21:45:04.777 master x64 ver:2025-12-26
start time 启动时间: 2026-01-22 21:45:04
21:45:04.777 fileRecs.RowCount=0
21:45:04.777 fileExSegs.RowCount=0
21:45:04.777 aliasRecs.RowCount=0
21:45:04.777 dnsTable.LoadFromFile failed, dnlistfilename: ./hsmmaster_data1/dnlist.tb
21:45:05.078 tasks:
21:45:05.078
ens33 IPv4: 192.168.10.163
21:45:05.079 localhost is master1 ip:192.168.10.163
21:45:05.110 WalFiles::Load lastFileidx=0, lastWalid=0
21:45:05.110 brpc::policy::FileNamingService("/opt/hsmd/etcdnodes.conf"): added 1
21:45:05.129 create cluster info: /hsmdev
21:45:05.151 LoadMembers /hsmdev/members 2026-01-22 21:45:05
21:45:05.152 LoadMembers /hsmdev/members/master1 2026-01-22 21:45:05
21:45:05.152 LoadMembers /hsmdev/members/master1/endpoint 192.168.10.163:8000
21:45:05.152 LoadMembers /hsmdev/members/master2 2026-01-22 21:45:05
21:45:05.152 LoadMembers /hsmdev/members/master2/endpoint 192.168.10.164:8002
21:45:05.153 ERROR [/opt/hsm/hsmmaster/ha/etcd3dcs.cpp:167] client.Get /hsmdev/leader failed ERROR_NOTFOUND
...省略中间...
21:54:56.905 check_leader: I am leader
21:54:58.027 OnVoteLeader is_leader=1, leadname=master1, LastWalid=0
21:54:58.028 VoteLeader failed, ERROR_VOTE_LEADER_EQUAL , I am leader
21:54:58.907 ERROR_NETWORK 192.168.10.164:8002 RpcClientMaster::VoteLeader call failed [E112]Not connected to 192.168.10.164:8002 yet, server_id=0 [R1][E112]Not connected to 192.168.10.164:8002 yet, server_id=0 [R2][E112]Not connected to 192.168.10.164:8002 yet, server_id=0 [R3][E112]Not connected to 192.168.10.164:8002 yet, server_id=0
21:54:58.927 check_leader: I am leader
21:54:59.721 Revived Socket{id=0 addr=192.168.10.164:8002} (0x22bfc50) (Connectable)
21:55:00.007 VoteLeader failed, ERROR_VOTE_LEADER_EQUAL , I am leader
21:55:00.934 192.168.10.164:8002 RpcClientMaster::VoteLeader failed status=ERROR_VOTE_LEADER_EQUAL, ERROR_VOTE_LEADER_EQUAL
21:55:02.010 VoteLeader failed, ERROR_VOTE_LEADER_EQUAL , I am leader
21:55:02.937 192.168.10.164:8002 RpcClientMaster::VoteLeader failed status=ERROR_VOTE_LEADER_EQUAL, ERROR_VOTE_LEADER_EQUAL
21:55:04.013 VoteLeader failed, ERROR_VOTE_LEADER_EQUAL , I am leader
21:55:04.939 192.168.10.164:8002 RpcClientMaster::VoteLeader failed status=ERROR_VOTE_LEADER_EQUAL, ERROR_VOTE_LEADER_EQUAL
21:55:06.016 VoteLeader failed, ERROR_VOTE_LEADER_EQUAL , I am leader
注:hsmmaster2 节点按照上述步骤再做一次。
datanode 部署运行
datanode 需要三节点分别为:datanode1、datanode2、datanode3,每个节点需要挂载 3 块磁盘。
1)修改配置文件 datanode1.pf
datanode1 的配置文件,datanode2 相对应的配置文件是 datanode2.pf,以此类推。
(1)查看配置文件内容
[root@hsmd1 hsmd]# cat datanode1.pf
[common]
module=datanode1
[master]
[datanode]
datanode.dnid=1
datanode.disks=sde # 需要修改,根据实际的盘符
datanode.rack=1
datanode.enableSmartCheck=0
datanode.cache_size_m=4G
datanode.cache_active_time_sec=1800
[network]
net.public_ip = 192.168.10.203 # 需要修改为实际datanode节点的IP
net.public_port = 8004
net.private_ip =
net.private_port=
net.manager_port=
[brpc]
brpc.num_threads =6
brpc.max_concurrency =500
brpc.worker_core_mask=
[log]
log.level = DEBUG
log.path = ./log/datanode1
log.maxsizem = 500M
log.savedays = 60
log.prefix =
mon.port=8005
alert.to=
alert.toCritical=
(2)查看磁盘盘符
# 查看磁盘盘符
[root@hsmd1 hsmd]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 59G 0 part
├─klas-root 253:0 0 37G 0 lvm /
├─klas-swap 253:1 0 3.9G 0 lvm [SWAP]
└─klas-backup 253:2 0 18.1G 0 lvm /backup
sdb 8:16 0 20G 0 disk # 第一个磁盘
sdc 8:32 0 20G 0 disk # 第二个磁盘
sdd 8:48 0 20G 0 disk # 第三个磁盘
sr0 11:0 1 1024M 0 rom
(3)修改配置
[root@hsmd1 hsmd]# sed -i "s/datanode.disks=sde/datanode.disks=sdb,sdc,sdd/" /opt/hsmd/datanode1.pf
[root@hsmd1 hsmd]# sed -i "s/192.168.10.203/192.168.10.163/" /opt/hsmd/datanode1.pf
2)初始化 datanode1
[root@hsmd1 hsmd]# cd /opt/hsmd
[root@hsmd1 hsmd]# ./datanode init -conf=/opt/hsmd/datanode1.pf
mon.port 8005
LogPath=/opt/hsmd/./log/datanode1/
22:19:52.939 datanode x64 ver:2025-12-26
start time 启动时间: 2026-01-22 22:19:52
22:19:52.971 QueryLeader leaderEndpoint=192.168.10.163:8000
22:19:52.972 Init datanode success
22:19:53.307 sdc auid=0, diskHead.flag is invalid:
22:19:53.308 sdc auid=10, diskHead.flag is invalid:
22:19:53.308 fdatasync success diskid=-1, sdc
22:19:53.310 dm-0 auid=0, diskHead.flag is invalid: XFSB
22:19:53.311 dm-0 auid=10, diskHead.flag is invalid: 1 -ot F
22:19:53.311 fdatasync success diskid=-1, dm-0
22:19:53.313 dm-2 auid=0, diskHead.flag is invalid: XFSB
22:19:53.314 dm-2 auid=10, diskHead.flag is invalid:
22:19:53.314 fdatasync success diskid=-1, dm-2
22:19:53.433 sr0 ERROR_OPEN_DISK
22:19:53.436 sdb auid=0, diskHead.flag is invalid:
22:19:53.457 sdb auid=10, diskHead.flag is invalid:
22:19:53.457 fdatasync success diskid=-1, sdb
22:19:53.458 sdd auid=0, diskHead.flag is invalid:
22:19:53.458 sdd auid=10, diskHead.flag is invalid:
22:19:53.458 fdatasync success diskid=-1, sdd
22:19:53.459 dm-1 auid=0, diskHead.flag is invalid:
22:19:53.480 dm-1 auid=10, diskHead.flag is invalid:
22:19:53.480 fdatasync success diskid=-1, dm-1
22:19:53.480
DiskGroup::Init groupName=node1, ausize=1048576, backupType=1, disks=sdb|sdc|sdd
22:19:53.547 DiskHead: flag: HSMDISK
version: 1
headlen: 4086
crc: 0
timestamp: 0
diskid: 0
status: ACTIVE
reserve: 0
hdrstatus: 3
backupType: 1
diskname: sdb
grpname: node1
fgname:
createtime: 2026-01-22 22:19:53
mounttime: 2026-01-22 22:19:53
fileDirPos: 2
blocksize: 4096
ausize: 1048576
diskSize: 20480
chunkSpaceSize: 131073
chunkItemSize: 16
chunkCount: 1
... 省略中间部分...
22:19:53.670 chunk-0: start:1, size:20479, firstAtAuid:1, backupAtAuid:12, freeAUCount=20476
22:19:53.691 PST:
flag: HSMPST
version: 1
headlen: 60
crc: 0
timestamp: 0
grpname: node1
ausize: 1048576
backupType: 1
dbcompat: 14
itemCount: 3
itemSize: 66
items:
diskid:0, diskname:sdb, status:ACTIVE, diskno:
diskid:1, diskname:sdc, status:ACTIVE, diskno:
diskid:2, diskname:sdd, status:ACTIVE, diskno:
22:19:53.691 SavePST disk(0-sdb) success
22:19:53.691 SavePST disk(1-sdc) success
22:19:53.691 SavePST disk(2-sdd) success
22:19:53.693 DiskGroup::Init success
22:19:53.693 diskGroup.Init SUCCESS
22:19:53.704 fdatasync success diskid=0, sdb
22:19:53.715 fdatasync success diskid=1, sdc
22:19:53.723 fdatasync success diskid=2, sdd
3)启动 datanode1
[root@hsmd1 hsmd]# cd /opt/hsmd
[root@hsmd1 hsmd]# ./datanode -conf=/opt/hsmd/datanode1.pf
mon.port 8005
LogPath=/opt/hsmd/./log/datanode1/
22:20:05.360 datanode x64 ver:2025-12-26
start time 启动时间: 2026-01-22 22:20:05
22:20:05.383 QueryLeader leaderEndpoint=192.168.10.163:8000
22:20:05.384 Init datanode success
22:20:05.685 srpc listen port:8104
22:20:05.685 DataNode::Init storage_->LoadDataNodes...
22:20:05.686 EpollServer startup, port 8104
22:20:05.687 ERROR [/opt/hsm/datanode/storage.cpp:75] seg_router_mgr_->Count() <= 0
22:20:05.687 master backupType=2
22:20:05.687 LoadDisk...
22:20:05.715 LoadSummary sdc
22:20:05.717 chunk-0: start:1, size:20479, firstAtAuid:1, backupAtAuid:12, freeAUCount=20476
22:20:05.717 LoadSummary success 1-sdc , totalAU=20480, freeAU=20476
...省略中间部分...
22:21:47.527 asyncThreadPool.start...
22:21:47.527 LoadFile1Head...
22:21:47.527 File1Head:
type: 2
backupType: 2
state: 0
createTime: 2026-01-22 22:19:53
modifyTime: 2026-01-22 22:19:53
size: 53361
padLen: 0
extentCount: 1
extentItems:
extentid= 0[0,2],[2,2]
idirectExtentItems:
0[0,0], 1[0,0], 2[0,0],
22:21:47.530 LoadCrcTask...
22:21:47.530 LoadTask...
22:21:47.530 LoadRecycleTask...
22:21:47.530 LoadFileAlias...
22:21:47.530 crypto_init success, cipher_id=0, cipher_name=aes, blk_size=16
22:21:47.530 DiskGroup::Load success
22:21:47.579 Register services finished
22:21:47.582 Fail to set concurrency by tag: 0, tag concurrency should be larger than old oncurrency. old concurrency: 9, new concurrency: 6
22:21:47.583 Server[datanode::DataNodeServiceImpl] is serving on port=8004.
22:21:47.587 Check out http://hsmd1:8004 in web browser.
22:21:47.587 server_.Start success port=8004
22:21:47.587 DataNode has started
4)将 datanode1 加入到集群
[root@hsmd1 hsmd]# ./hsmdclient adddn dnid=1 publicip=192.168.10.163 publicport=8004 disks=sdb,sdc,sdd
参数说明:
dnid为编号publicip为 ip 地址(根据实际情况填写)publicport为端口号(根据实际情况填写)disks为磁盘(根据实际情况填写)
注:datanode2,datanode3 按照顺序再做一遍。
hsmclient
整个集群启动后,检查是否安装准确,校验 hsmclient 客户端工具。
[root@hsmd1 hsmd]# ./hsmdclient listdir
hsm_cluster=hsmdev, master=192.168.10.163:8000,192.168.10.164:8002, use_rdma=0
QueryLeader leaderEndpoint=192.168.10.163:8000
count = 0
name id size createtime
listdir success
[root@hsmd1 hsmd]# ./hsmdclient mkdir test
hsm_cluster=hsmdev, master=192.168.10.163:8000,192.168.10.164:8002, use_rdma=0
QueryLeader leaderEndpoint=192.168.10.163:8000
mkdir success
[root@hsmd1 hsmd]# ./hsmdclient listdir
hsm_cluster=hsmdev, master=192.168.10.163:8000,192.168.10.164:8002, use_rdma=0
QueryLeader leaderEndpoint=192.168.10.163:8000
count = 1
name id size createtime
test 1 DIR
listdir success
操作
命令查看
[root@hsmd3 hsmd]# ./hsmdclient # 列出命令清单
There are the following commands that can be used:
adddn dropdn updatedn querydn listdn rebalance listtask
dirstat mkdir rmdir listdir dircount compdir
createfile delfile del unlink stat fstat ftruncate filetruncate fsyncrange findfile rename cat
get put copy compfile
queryfilesegs listseg getseg
testperf testrwone testcore
每个命令后加 help 会有提示:
[root@kylin-113 hsmd]# ./hsmdclient stat help
useage: stat path
[root@kylin-113 hsmd]# ./hsmdclient listdn help
useage: listdn
验证集群:
[root@kylin-113 hsmd]# ./hsmdclient listdn
hsm_cluster=w1, master=192.168.10.113:8000,192.168.10.114:8002, use_rdma=0
QueryLeader leaderEndpoint=192.168.10.113:8000
backuptype=2
dnid status weight disk_free disk_total disks public_endpoint private_endpoint addtime rack cpu mem_used mem_free
1 OK 100 203504 204800 vdb 192.168.10.113:8004 :0 2026-03-04 17:53:52 0 2573 515
2 OK 100 203567 204800 vdb 192.168.10.114:8006 :0 2026-03-04 17:54:21 0 2420 485
3 OK 100 203494 204800 vdb 192.168.10.115:8008 :0 2026-03-04 17:55:06 0 2561 553
listdn success
创建文件夹
[root@hsmd1 hsmd]# ./hsmdclient listdir
hsm_cluster=hsmdev, master=192.168.10.163:8000,192.168.10.164:8002, use_rdma=0
QueryLeader leaderEndpoint=192.168.10.163:8000
count = 0
name id size createtime
listdir success
[root@hsmd1 hsmd]# ./hsmdclient mkdir test
hsm_cluster=hsmdev, master=192.168.10.163:8000,192.168.10.164:8002, use_rdma=0
QueryLeader leaderEndpoint=192.168.10.163:8000
mkdir success
[root@hsmd1 hsmd]# ./hsmdclient listdir
hsm_cluster=hsmdev, master=192.168.10.163:8000,192.168.10.164:8002, use_rdma=0
QueryLeader leaderEndpoint=192.168.10.163:8000
count = 1
name id size createtime
test 1 DIR
初始化 Halo 数据库
修改环境变量
[root@rac1 ~]# cat <<EOF>> /home/halo/.bash_profile
export HALO_HOME=/u01/app/halo/halodb_hsm
export LD_LIBRARY_PATH=$HALO_HOME/lib:$LD_LIBRARY_PATH
export LD_PRELOAD=$HALO_HOME/lib/libhsmsdk.so
export HALO_CLUSTER=cluster_rac # hsm集群名字
export HALO_INST=rac1 # 主实例名字
export PGDATA=/data/halo # 本地数据目录
export PATH=$HALO_HOME/bin:$PATH
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
EOF
修改完成之后:
source /home/halo/.bash_profile
创建数据目录
su - halo -c "mkdir -p /data/halo"
初始化数据库
su - halo -c "init -d -D /data/halo"
修改配置文件
退出 halo 用户,重新进入。
因为 hsmdclient 目前只会在当前目录下找配置文件,因此需要先进入目录中,再执行 hsmdclient 工具:
export LD_PRELOAD=
cd $HALO_HOME/bin
./hsmdclient
以下是执行结果,不加命令行参数运行,将列出目前实现的文件管理命令:
[halo@rac1 ~]$ cd $HALO_HOME/bin
[halo@rac1 bin]$ ./hsmdclient
There are the following commands that can be used:
adddn dropdn updatedn querydn listdn
rebalance queryfilesegs listseg
dirstat mkdir rmdir listdir dircount compdir
delfile del unlink stat fstat ftruncate findfile rename cat
get put copy compfile
列出主实例在 HSM 中的私有文件:
[halo@rac1 bin]$ ./hsmdclient listdir /cluster_rac/rac1
将主实例配置参数文件拷贝出来:
[halo@rac1 bin]$ ./hsmdclient copy hsm:/cluster_rac/rac1/postgresql.conf /tmp/postgresql.conf
注:文件名不可省略。
修改上一步拷贝出来的配置参数文件有如下项需要修改。
方法一:
[halo@rac1 bin]$ vi /tmp/postgresql.conf
listen_addresses = '*' # 根据实际需求设置
port = 6023 # 根据实际需求设置
unix_socket_directories = '/tmp' # 根据实际需求设置
admin_port = 9001
full_page_writes = off # HSM 不再需要打开 full_page_writes
wal_level = replica # 默认值
# HSM RAC相关参数
database_storage_type = hsm # 目前压缩包内该项初始化时就是hsm
hsm_group = 'cluster_rac' # 有时候该选项是已经修改了
cluster_instance_type = PRIMARY_INST # 设置此实例为主实例。
方法二:
[halo@rac1 bin]$ sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/" /tmp/postgresql.conf
[halo@rac1 bin]$ sed -i "s/#port = 1921/port = 6023/" /tmp/postgresql.conf
[halo@rac1 bin]$ sed -i "s/#unix_socket_directories = '\/var\/run\/halo'/unix_socket_directories = '\/tmp'/" /tmp/postgresql.conf
[halo@rac1 bin]$ sed -i "s/#admin_port = 9001/admin_port = 9001/" /tmp/postgresql.conf
[halo@rac1 bin]$ sed -i "s/#full_page_writes = on/full_page_writes = off/" /tmp/postgresql.conf
[halo@rac1 bin]$ sed -i "s/#wal_level = replica/wal_level = replica/" /tmp/postgresql.conf
[halo@rac1 bin]$ sed -i "s/#unix_socket_directories/unix_socket_directories/" /tmp/postgresql.conf
[halo@rac1 bin]$ cat <<EOF>> /tmp/postgresql.conf
cluster_instance_type = PRIMARY_INST
EOF
再将配置文件拷贝回 HSM 中:
[halo@rac1 bin]$ ./hsmdclient copy /tmp/postgresql.conf hsm:/cluster_rac/rac1/postgresql.conf
拷贝 pg_hba.conf:
[halo@rac1 bin]$ ./hsmdclient copy hsm:/cluster_rac/rac1/pg_hba.conf /tmp/pg_hba.conf
修改 pg_hba.conf:
[halo@rac1 bin]$ vim /tmp/pg_hba.conf
# IPv4 local connections:(增加)
host all all 0/0 md5
# replication privilege.(增加)
host replication replica 0/0 md5
修改:
[halo@rac1 bin]$ cat <<EOF>> /tmp/pg_hba.conf
# IPv4 local connections:
host all all 0/0 md5
# replication privilege.
host replication replica 0/0 md5
EOF
将文件拷贝回 HSM:
[halo@rac1 bin]$ ./hsmdclient copy /tmp/pg_hba.conf hsm:/cluster_rac/rac1/pg_hba.conf
启动数据库
[halot@rac1 ~]$ pg_ctl -D /data/halo -l logfile start