在之前的文章中,给大家介绍了PolarDB+ConshFS的高性能数仓组合,使用ConshFS替代了传统的PFS,不再需要额外的共享存储软件,就可以快速搭建一套高性能PolarDB共享存储集群,加减只读节点也很方便。可以点击下面的链接直达之前的文章:
PolarDB+ConshFS高性能数仓解决方案
ConshFS的架构如下:

这篇文章主要教大家如何快速搭建一个ConshFS版本的PolarDB共享集群,机器规划如下:
准备至少两台服务器或虚拟机用于polardb_conshfs共享存储集群的搭建,分别作为计算的主节点和存储数据的从节点。操作系统示例为CentOS7。
主机名
IP
主节点/从节点
是否存储数据
数据目录
共享存储目录
polardb01
10.197.165.65
主节点
是
/home/postgres/pgdata
/nvme1n1/shared_data
polardb02
10.197.165.59
从节点
否
/home/postgres/pgdata
N/A
搭建步骤
1.创建用户组与用户
yum install -y sudo创建用户
groupadd -g 701 -r postgres useradd -u 701 -m -g postgres postgres -p usermod -aG wheel postgres给用户赋权(特别是sudo的权限)
chmod u+w /etc/sudoers echo postgres ALL=(ALL) NOPASSWD: ALL >> /etc/sudoers chmod u-w /etc/sudoers # grant permission of accessing home directory to postgres chown -R postgres:postgres /home/postgres/ echo source /etc/bashrc >> /home/postgres/.bashrc # for su postgres sed -i s/4096/unlimited/g /etc/security/limits.d/20-nproc.conf在/home/postgres/.bashrc设置环境变量:
export PATH=/usr/polardb/bin:$PATH export LD_LIBRARY_PATH=/usr/polardb/lib:$LD_LIBRARY_PATH export PGDATA=/home/postgres/pgdata export PGHOST=/tmp2.安装polardb_conshfs数据库软件
在root用户执行以下命令即可一键安装polardb_conshfs数据库软件
wget -qO /tmp/polardb_conshfs.sh —no-check-certificate https://get.csudata.com/csuinst/polardb_conshfs.sh && bash /tmp/polardb_conshfs.sh install3.主节点部署
创建consh_fs共享存储目录
mkdir -p /nvme1n1/shared_data/ chown -R postgres:postgres /nvme1n1/shared_data初始化数据库
su – postgres initdb初始化db的consh_fs共享数据目录
/usr/polardb/bin/polar-initdb.sh /home/postgres/pgdata/ /nvme1n1/shared_data/在
/home/postgres/pgdata/postgresql.conf设置数据库参数,注意polar_hostid参数值在集群里唯一,polar_disk_name和polar_datadir需要指定之后创建的consh_fs共享存储的目录。 port=5432 listen_addresses=* max_connections=1000 log_directory=pg_log logging_collector=on log_line_prefix=%p\t%r\t%u\t%m\t polar_hostid=1 polar_enable_shared_storage_mode=on polar_disk_name=nvme1n1 polar_datadir=/nvme1n1/shared_data/ polar_vfs.localfs_mode=off shared_preload_libraries=$libdir/polar_vfs,$libdir/polar_worker polar_storage_cluster_name=disk synchronous_standby_names=replica1 full_page_writes=off在
/home/postgres/pgdata/pg_hba.conf中增加如下配置,用于从节点能通过流复制访问主库 host replication postgres 10.197.165.59/32 trust在/home/postgres/.bashrc设置postgres用户的环境变量,其中的CONSHFS_REMOTE_ADDR的地址需要填写主节点的地址。
export CONSHFS_REMOTE_ADDR=10.197.165.65 export CONSHFS_REMOTE_PORT=5060 export CONSHFS_LOCAL_PORT=5060 export CONSHFS_MY_HOSTID=14.从节点部署
在/home/postgres/.bashrc设置环境变量,注意CONSHFS_MYHOSTID是唯一的,不能与其他节点相同。
export CONSHFS_REMOTE_ADDR=10.197.165.65 export CONSHFS_REMOTE_PORT=5060 export CONSHFS_LOCAL_PORT=5060 export CONSHFS_MY_HOSTID=2初始化数据目录
su – postgres initdb在
/home/postgres/pgdata/postgresql.conf设置数据库参数,注意polar_hostid参数值在集群里唯一,polar_disk_name和polar_datadir需要指定consh_fs共享存储的目录。 port=5432 polar_hostid=2 polar_enable_shared_storage_mode=on polar_disk_name=nvme1n1 polar_datadir=/nvme1n1/shared_data/ polar_vfs.localfs_mode=off shared_preload_libraries=$libdir/polar_vfs,$libdir/polar_worker polar_storage_cluster_name=disk logging_collector=on log_line_prefix=%p\t%r\t%u\t%m\t log_directory=pg_log listen_addresses=* max_connections=1000 full_page_writes=off在/home/postgres/pgdata/创建recovery.conf配置文件
polar_replica=on recovery_target_timeline=latest primary_slot_name=replica1 primary_conninfo=host=10.197.165.65 port=5432 user=postgres dbname=postgres application_name=replica15.启动集群
在主节点和从节点分别启动consh_fs程序,注意该程序需要一直运行,建议在tmux窗口或后台运行。
su – postgres cd /usr/polardb/bin ./consh_fs依此启动主节点、从节点数据库实例
pg_ctl start启动所有从节点数据库实例后,进入主节点的数据库内,创建物理复制槽。注意名称要和从库recovery.conf中配置的primary_slot_name相同。
select pg_create_physical_replication_slot(replica1);创建成功后查询pg_stat_replication视图若存在该复制槽且状态为steaming即可创建成功。
到这里,就成功把使用conshfs的polardb共享存储集群搭建完成了,可以进行使用了。