使用ConshFS的PolarDB共享存储集群方案
1.部署架构
polardb_conshfs中的ConshFS是作为共享存储集群中备库与Linux文件系统的中间件存在的,可以作为polardb的pfs文件系统的平替。
在polardb_conshfs共享存储集群中,主库初始化数据文件放在指定的/nvme1n1/shared_data目录。主库直接通过Linux文件系统高速缓冲区本地访问共享目录,备库则通过ConshFS程序走网络层远程访问共享目录。
2.机器规划
准备至少两台服务器或虚拟机用于polardb_conshfs共享存储集群的搭建,分别作为主节点和从节点。操作系统示例为CentOS7。
主机名 | IP | 主/从节点 | 是否存储数据 | 数据目录 | 共享存储目录 |
---|---|---|---|---|---|
polardb01 | 10.197.165.65 | 主节点 | 是 | /home/polardb/pgdata | /nvme1n1/shared_data |
polardb02 | 10.197.165.59 | 从节点 | 否 | /home/polardb/pgdata | N/A |
3.搭建步骤
3.1 安装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 install
3.2 创建用户组与用户
yum install -y sudo
创建用户
groupadd -g 701 -r polardb
useradd -u 701 -m -g polardb polardb -p ''
usermod -aG wheel polardb
给用户赋权(特别是sudo的权限)
chmod u+w /etc/sudoers
echo 'polardb ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
chmod u-w /etc/sudoers
# grant permission of accessing home directory to polardb
chown -R polardb:polardb /home/polardb/
echo 'source /etc/bashrc' >> /home/polardb/.bashrc
# for su polardb
sed -i 's/4096/unlimited/g' /etc/security/limits.d/20-nproc.conf
在/home/polardb/.bashrc设置环境变量:
export PATH=/usr/polardb/bin:$PATH
export LD_LIBRARY_PATH=/usr/polardb/lib:$LD_LIBRARY_PATH
export PGDATA=/home/polardb/pgdata
export PGHOST=/tmp
3.3 主节点部署
创建consh_fs共享存储目录
mkdir -p /nvme1n1/shared_data/
chown -R polardb:polardb /nvme1n1/shared_data
初始化数据库
su - polardb
initdb
初始化db的consh_fs共享数据目录
/usr/polardb/bin/polar-initdb.sh /home/polardb/pgdata/ /nvme1n1/shared_data/
在/home/polardb/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/polardb/pgdata/pg_hba.conf中增加如下配置,用于从节点能通过流复制访问主库
host replication polardb 10.197.165.59/32 trust
在/home/polardb/.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=1
3.4 从节点部署
在/home/polardb/.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 - polardb
initdb
在/home/polardb/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=polardb dbname=postgres application_name=replica1'
3.5 启动集群
在主节点和从节点分别启动consh_fs程序,注意该程序需要一直运行,建议在tmux窗口或后台运行。
su - polardb
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共享存储集群搭建完成了,可以进行使用了。
使用时在65主库上执行SQL语句,产生的数据文件会生成在/nvme1n1/shared_data/共享目录下。