暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【磐维数据库】基于PanWeiDB集群的PostGIS部署方案

Darcy 2024-04-28
804

作者:gb

1. PostGIS概述

本文档的部署方案为PanWeiDB数据库上部署,但实操方案基于 OpenGauss 3.0.0的PostGIS部署方案编写,官方参考网址:Post Gis Extension (opengauss.org)

OpenGauss提供 PostGIS Extension(版本为PostGIS-2.4.2),PostGIS Extension是PostgreSQL的空间数据库扩展,提供如下空间信息服务功能:空间对象、空间索引、空间操作函数和空间操作符,PostGIS Extension完全遵循OpenGIS规范。安装PostGIS Extension依赖第三方开源软件如下:

  • Geos 3.6.2
  • Proj 4.9.2
  • Json 0.12.1
  • Libxml2 2.7.1
  • Gdal 1.11.0

2. PostGIS环境

本次安装测试环境为腾讯云CentOS 7.6_X86架构下的PanWeiDB单实例数据库上进行安装部署测试。实际生产环境OS可能为BCLiunx、CentOS、Kylin等系统环境,包括X86或ARM等两种不同架构,这与实际测试中X86架构下的安装部署步骤基本相同。该单实例部署同样可适用于PanWeiDB的一主二从集群环境部署,后面会介绍集群环境下的免部署安装方式。以下为安装配置PostGIS中需要涉及下载的安装包或插件包的下载地址:

  • gcc-7.3.0下载地址

https://ftp.gnu.org/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz

  • gmp-6.1.0下载地址

https://ftp.gnu.org/gnu/gmp/gmp-6.1.0.tar.xz

  • mpfr-3.1.4下载地址

https://ftp.gnu.org/gnu/mpfr/mpfr-3.1.4.tar.gz

  • mpc-1.0.3下载地址

https://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz

  • zlib下载地址

https://sourceforge.net/projects/libpng/files/zlib/1.2.8/zlib-1.2.8.tar.gz/download

  • postGIS下载地址

https://opengauss.obs.cn-south-1.myhuaweicloud.com/dependency/postgis-xc-master-2020-09-17.tar.gz

  • postgis_2.4.2-1.patch下载地址

https://gitee.com/opengauss/openGauss-third_party/blob/master/gpl_dependency/postgis/postgis_2.4.2-1.patch

  • extension_dependency.h下载地址

https://gitee.com/opengauss/openGauss-third_party/blob/master/gpl_dependency/postgis/extension_dependency.h

  • openGauss-third_party_binarylibs.tar (非必须)下载地址

https://gitee.com/link?target=https%3A%2F%2Fopengauss.obs.cn-south-1.myhuaweicloud.com%2F3.0.0%2FopenGauss-third_party_binarylibs.tar.gz

以上为安装部署中需要涉及到安装包或插件包,可先下载后上传,也可以通过wget在线下载。在进行上传或下载安装时需注意要修改其所属组omm:dbgrp及权限700,禁止将权限修改为755,这将导致安装完成后重启集群将无法正常启动。

3. PostGIS安装

整个PostGIS的安装主要分为两个环境的编译安装部署,即GCC-7.3.0环境的编译安装和PostGIS插件的编译安装,下面介绍这两部分的安装方法。

3.1 GCC-7.3.0编译安装

若数据库中已经安装好GCC-7.3.0,则跨过此步骤。GCC-7.3.0 编译器推荐使用源码由低版本的 gcc 和 g++ 编译器进行升级安装。若数据库实例中没有低版本 gcc 和 g++ 编译器,可以通过挂载操作系统镜像等方法进行安装,这里不做赘述。GCC-7.3.0编译器相关依赖软件包,包括 GCC-7.3.0、gmp-6.1.0、mpfr-3.1.4、mpc-1.0.3。

这里需要特别注意的是,实际生产环境中已存在的GCC版本可能低于7.3.0或高于7.3.0,无论哪种情况均需要将GCC重新编译为7.3.0这个版本,本次测试是在低于该版本的情况下进行的编译安装,若出现高于该版本的GCC可通过手工编译安装(未测试)或下载 openGauss-third_party_binarylibs.tar 包的方式替换路径进行平替式的编译安装。

3.1.1 创建gcc相关目录并上传关联依赖包解压

以下安装依赖包操作通过任一台主机登录omm用户进行,将gcc-7.3.0、gmp-6.1.0、mpfr-3.1.4、mpc-1.0.3上传到packages目录中并进行解压,同时创建对应的编译安装目录。

su – omm

mkdir $GAUSSHOME/gcc

mkdir $GAUSSHOME/gcc/packages

cd $GAUSSHOME/gcc/packages

tar -xzf gcc-7.3.0.tar.gz

tar -xvJf gmp-6.1.0.tar.xz

tar -xzf mpc-1.0.3.tar.gz

tar -xzf mpfr-3.1.4.tar.gz

chown -R omm:dbgrp /database/panweidb

chmod -R 700 /database/panweidb

mkdir $GAUSSHOME/gcc/gcc-7.3.0

mkdir $GAUSSHOME/gcc/gcc-7.3.0/depend

mkdir $GAUSSHOME/gcc/gcc-7.3.0/depend/gmp-6.1.0

mkdir $GAUSSHOME/gcc/gcc-7.3.0/depend/mpfr-3.1.4

mkdir $GAUSSHOME/gcc/gcc-7.3.0/depend/mpc-1.0.3

mkdir $GAUSSHOME/gcc/gcc-7.3.0/depend/gcc

【备注】再次注意 /database/panweidb 的权限不要给755,否则安装后重启集群或创建、插入等操作均会出现集群宕掉的情况。

3.1.2 编译安装gmp-4.3.2

cd $GAUSSHOME/gcc/packages/gmp-6.1.0

./configure --prefix $GAUSSHOME/gcc/gcc-7.3.0/depend/gmp-4.3.2

make -sj && make install -sj

3.1.3 编译安装mpfr-2.4.2

cd $GAUSSHOME/gcc/packages/mpfr-3.1.4

./configure --prefix $GAUSSHOME/gcc/gcc-7.3.0/depend/mpfr-3.1.4 --with-gmp=$GAUSSHOME/gcc/gcc-7.3.0/depend/gmp-4.3.2

make -sj && make install -sj

3.1.4 编译安装mpc-1.0.3

cd $GAUSSHOME/gcc/packages/mpc-1.0.3

./configure --prefix=$GAUSSHOME/gcc/gcc-7.3.0/depend/mpc-1.0.3 --with-gmp=$GAUSSHOME/gcc/gcc-7.3.0/depend/gmp-4.3.2 --with-mpfr=$GAUSSHOME/gcc/gcc-7.3.0/depend/mpfr-3.1.4

make -sj && make install -sj

3.1.5 编译安装gcc-7.3.0

  • 添加 lib 路径至 ~/.bashrc

vim ~/.bashrc

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$GAUSSHOME/gcc/gcc-7.3.0/depend/gmp-4.3.2/lib:$GAUSSHOME/gcc/gcc-7.3.0/depend/mpfr-3.1.4/lib:$GAUSSHOME/gcc/gcc-7.3.0/depend/mpc-1.0.3/lib

source ~/.bashrc

  • 执行下列命令完成 gcc 安装操作

cd $GAUSSHOME/gcc/packages/gcc-7.3.0

./configure --prefix=$GAUSSHOME/gcc/gcc-7.3.0/depend/gcc -disable-multilib --with-gmp=$GAUSSHOME/gcc/gcc-7.3.0/depend/gmp-4.3.2 -enable-languages=c,c++ --with-mpfr=$GAUSSHOME/gcc/gcc-7.3.0/depend/mpfr-3.1.4 --with-mpc=$GAUSSHOME/gcc/gcc-7.3.0/depend/mpc-1.0.3

make -sj && make install -sj

【备注】该操作等待的时间较长,请耐心等待;

  • 设置环境变量

vim ~/.bashrc

export CC=$GAUSSHOME/gcc/gcc-7.3.0/depend/gcc/bin/gcc

export CXX=$GAUSSHOME/gcc/gcc-7.3.0/depend/gcc/bin/g++

export LD_LIBRARY_PATH=$GAUSSHOME/gcc/gcc-7.3.0/depend/gcc/lib64:$LD_LIBRARY_PATH

export PATH=$GAUSSHOME/gcc/gcc-7.3.0/depend/gcc/bin:$PATH

source ~/.bashrc

gcc -v

以上即完成了GCC-7.3.0的编译安装,通过gcc -v确认版本即可。

3.2 确认zlib、autoconf和automake已安装

Libxml2软件包编译安装依赖zlib无损数据压缩库,可通过在omm账户下执行命令find $GAUSSHOME/ -name libz.so查看zlib是否安装,如果libz.a存在则zlib已安装。

JSON-C 软件包编译安装依赖 autoconf 和 automake 工具,若数据库实例中没有 autoconf 和 automake 工具,可以通过挂载操作系统镜像等方法进行安装,这里不做赘述。

3.3 PostGIS依赖安装

3.3.1 上传postgis-xc-master-2020-09-17.tar包上传、解压并更名

cd $GAUSSHOME

tar zxvf postgis-xc-master-2020-09-17.tar.gz

mv postgis-xc-master postgis-xc

3.3.2 将postgis_2.4.2-1.patch文件上传至$GAUSSHOME目录并编译

cd $GAUSSHOME/postgis-xc/

patch -p1 < $GAUSSHOME/postgis_2.4.2-1.patch

3.3.3 将extension_dependency.h_v3.0.0文件上传到$GAUSSHOME/include/postgresql/server/目录中并改名

cd $GAUSSHOME/include/postgresql/server/

mv extension_dependency.h_v3.0.0 extension_dependency.h

3.3.4 编译安装Geos并生成相关动态链接库

cd $GAUSSHOME/postgis-xc/geos-3.6.2

chmod +x ./configure

./configure --prefix=$GAUSSHOME/install/geos

make -sj

make install -sj

3.3.5 编译安装Proj并生成相关动态链接库

cd $GAUSSHOME/postgis-xc/proj-4.9.2

chmod +x ./configure

./configure --prefix=$GAUSSHOME/install/proj

make -sj

make install -sj

3.3.6 编译安装Libxml2并生成相关动态链接库

cd $GAUSSHOME/postgis-xc/libxml2-2.7.1

chmod +x ./configure

./configure --prefix=$GAUSSHOME/install/libxml2

make -sj

make install -sj

3.3.7 编译安装PostGIS并生成相关动态链接库

cd $GAUSSHOME/postgis-xc/postgis-2.4.2

chmod +x ./configure

./configure --prefix=$GAUSSHOME/install/postgis2.4.2 --with-pgconfig=$GAUSSHOME/bin/pg_config --with-projdir=$GAUSSHOME/install/proj --with-geosconfig=$GAUSSHOME/install/geos/bin/geos-config --with-jsondir=$GAUSSHOME/install/json --with-xml2config=$GAUSSHOME/install/libxml2/bin/xml2-config --without-raster --without-topology CFLAGS='-O2 -fpermissive -DPGXC -pthread -D_THREAD_SAFE -D__STDC_FORMAT_MACROS -DMEMORY_CONTEXT_CHECKING -w' CC=g++

make -sj

make install -sj

【备注】在进行该步骤操作前需完成如下两步的更改操作:

  • 需按如下图示将“OpenGauss”名称修改为“PanWeiDB”并保存;

  • 将lock文件夹里的所有文件上传到/database/panweidb/app/include/postgresql/server/storage/lock 中

3.4 将以上编译安装完成的PostGIS相关动态链接库分发到数据库实例节点中

mv $GAUSSHOME/lib/postgresql/postgis-2.4.so $GAUSSHOME/install/postgis-2.4.so

cp $GAUSSHOME/install/postgis-2.4.so $GAUSSHOME/lib/postgresql/postgis-2.4.so

cp $GAUSSHOME/install/json/lib/libjson-c.so.2 $GAUSSHOME/lib/libjson-c.so.2

cp $GAUSSHOME/install/geos/lib/libgeos_c.so.1 $GAUSSHOME/lib/libgeos_c.so.1

cp $GAUSSHOME/install/proj/lib/libproj.so.9 $GAUSSHOME/lib/libproj.so.9

cp $GAUSSHOME/install/geos/lib/libgeos-3.6.2.so $GAUSSHOME/lib/libgeos-3.6.2.so

cp $GAUSSHOME/install/postgis2.4.2/lib/liblwgeom-2.4.so.0 $GAUSSHOME/lib/liblwgeom-2.4.so.0

cp $GAUSSHOME/postgis-xc/postgis-2.4.2/postgis--2.4.2.sql $GAUSSHOME/share/postgresql/extension/postgis--2.4.2.sql

cp $GAUSSHOME/postgis-xc/postgis-2.4.2/postgis.control $GAUSSHOME/share/postgresql/extension/postgis.control

# cp $GAUSSHOME/bin/pgsql2shp $GAUSSHOME/bin/pgsql2shp

# cp $GAUSSHOME/bin/shp2pgsql $GAUSSHOME/bin/shp2pgsql

【备注】pgsql2shp和shp2pgsql文件在在实验环境下编译过程中已存在于$GAUSSHOME/bin/目录中,因此无需进行cp动作;此外,在PanWeiDB一主二从的集群环境下,只需将以上十个需要复制的文件分别CP到两个从库实例对应的路径上即可实现postGIS的免安装使用。

4. PostGIS免安装配置文件

以上通过复制已编译安装完成的配置文件到从库上,从而实现从库免安装PostGIS的方法,仅限于主从实例环境完全相同的集群,且在生产环境下仅限于应用于从库上,主库依然建议手工编译安装PostGIS,这样才可最大限度的实现PostGIS的适配兼容。

最后修改时间:2025-09-30 00:31:48
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论