首页
产品
CLup:PostgreSQL高可用集群平台 CMiner: PostgreSQL中的CDC CData高性能数据库云一体机 CBackup数据库备份恢复云平台 CPDA高性能双子星数据库机 CSYun超融合虚拟机产品 ZQPool数据库连接池 ConshGuard数据保护产品
解决方案
数据库专业技术服务全栈式PostgreSQL解决方案Oracle分布式存储化数据库云PolarDB一体化解决方案
文章
客户及伙伴
中启开源
关于我们
公司简介 联系我们
中启开源
修改标题
往前插入
往后插入
删除

使用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/postgres/pgdata /nvme1n1/shared_data
polardb02 10.197.165.59 从节点 /home/postgres/pgdata N/A

3.搭建步骤

3.1 创建用户组与用户

  1. yum install -y sudo

创建用户

  1. groupadd -g 701 -r postgres
  2. useradd -u 701 -m -g postgres postgres -p ''
  3. usermod -aG wheel postgres

给用户赋权(特别是sudo的权限)

  1. chmod u+w /etc/sudoers
  2. echo 'postgres ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
  3. chmod u-w /etc/sudoers
  4. # grant permission of accessing home directory to postgres
  5. chown -R postgres:postgres /home/postgres/
  6. echo 'source /etc/bashrc' >> /home/postgres/.bashrc
  7. # for su postgres
  8. sed -i 's/4096/unlimited/g' /etc/security/limits.d/20-nproc.conf

在/home/postgres/.bashrc设置环境变量:

  1. export PATH=/usr/polardb/bin:$PATH
  2. export LD_LIBRARY_PATH=/usr/polardb/lib:$LD_LIBRARY_PATH
  3. export PGDATA=/home/postgres/pgdata
  4. export PGHOST=/tmp

3.2 安装polardb_conshfs数据库软件

在root用户执行以下命令即可一键安装polardb_conshfs数据库软件

  1. wget -qO /tmp/polardb_conshfs.sh --no-check-certificate https://get.csudata.com/csuinst/polardb_conshfs.sh && bash /tmp/polardb_conshfs.sh install

3.3 主节点部署

创建consh_fs共享存储目录

  1. mkdir -p /nvme1n1/shared_data/
  2. chown -R postgres:postgres /nvme1n1/shared_data

初始化数据库

  1. su - postgres
  2. initdb

初始化db的consh_fs共享数据目录

  1. /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共享存储的目录。

  1. port=5432
  2. listen_addresses='*'
  3. max_connections=1000
  4. log_directory='pg_log'
  5. logging_collector=on
  6. log_line_prefix='%p\t%r\t%u\t%m\t'
  7. polar_hostid=1
  8. polar_enable_shared_storage_mode=on
  9. polar_disk_name='nvme1n1'
  10. polar_datadir='/nvme1n1/shared_data/'
  11. polar_vfs.localfs_mode=off
  12. shared_preload_libraries='$libdir/polar_vfs,$libdir/polar_worker'
  13. polar_storage_cluster_name='disk'
  14. synchronous_standby_names='replica1'
  15. full_page_writes=off

在/home/postgres/pgdata/pg_hba.conf中增加如下配置,用于从节点能通过流复制访问主库

  1. host replication postgres 10.197.165.59/32 trust

在/home/postgres/.bashrc设置postgres用户的环境变量,其中的CONSHFS_REMOTE_ADDR的地址需要填写主节点的地址。

  1. export CONSHFS_REMOTE_ADDR=10.197.165.65
  2. export CONSHFS_REMOTE_PORT=5060
  3. export CONSHFS_LOCAL_PORT=5060
  4. export CONSHFS_MY_HOSTID=1

3.4 从节点部署

在/home/postgres/.bashrc设置环境变量,注意CONSHFS_MYHOSTID是唯一的,不能与其他节点相同。

  1. export CONSHFS_REMOTE_ADDR=10.197.165.65
  2. export CONSHFS_REMOTE_PORT=5060
  3. export CONSHFS_LOCAL_PORT=5060
  4. export CONSHFS_MY_HOSTID=2

初始化数据目录

  1. su - postgres
  2. initdb

在/home/postgres/pgdata/postgresql.conf设置数据库参数,注意polar_hostid参数值在集群里唯一,polar_disk_name和polar_datadir需要指定consh_fs共享存储的目录。

  1. port=5432
  2. polar_hostid=2
  3. polar_enable_shared_storage_mode=on
  4. polar_disk_name='nvme1n1'
  5. polar_datadir='/nvme1n1/shared_data/'
  6. polar_vfs.localfs_mode=off
  7. shared_preload_libraries='$libdir/polar_vfs,$libdir/polar_worker'
  8. polar_storage_cluster_name='disk'
  9. logging_collector=on
  10. log_line_prefix='%p\t%r\t%u\t%m\t'
  11. log_directory='pg_log'
  12. listen_addresses='*'
  13. max_connections=1000
  14. full_page_writes=off

在/home/postgres/pgdata/创建recovery.conf配置文件

  1. polar_replica='on'
  2. recovery_target_timeline='latest'
  3. primary_slot_name='replica1'
  4. primary_conninfo='host=10.197.165.65 port=5432 user=postgres dbname=postgres application_name=replica1'

3.5 启动集群

在主节点和从节点分别启动consh_fs程序,注意该程序需要一直运行,建议在tmux窗口或后台运行。

  1. su - postgres
  2. cd /usr/polardb/bin
  3. ./consh_fs

依此启动主节点、从节点数据库实例

  1. pg_ctl start

启动所有从节点数据库实例后,进入主节点的数据库内,创建物理复制槽。注意名称要和从库recovery.conf中配置的primary_slot_name相同。

  1. select pg_create_physical_replication_slot('replica1');

创建成功后查询pg_stat_replication视图若存在该复制槽且状态为steaming即可创建成功。

到这里,就成功把使用conshfs的polardb共享存储集群搭建完成了,可以进行使用了。

使用时在65主库上执行SQL语句,产生的数据文件会生成在/nvme1n1/shared_data/共享目录下。

目录
img