CentOS 7 离线环境 PostgreSQL 12.2 编译安装 + PostGIS 3.0.1 编译安装 + 主从流复制配置

基础环境准备

yum本地源准备

从官方下载最新ISO库使用,推荐使用Everything,类别比较齐全。
CentOS-7-x86_64-Everything-2003.iso 阿里云镜像
需要注意的是,随着CentOS的版本迭代更新,可以到阿里云CentOS镜像总目录中取查看你感兴趣的版本

如果官方镜像下载过慢,也可考虑使用我的百*资源 ,提取码 tf51 。

下载完成后,可将iso文件拷贝到离线服务器中,例如存储在/opt位置,然后mount即可(等同于把光盘加载到光驱里)

# 创建一个用于挂载iso文件的文件夹,也可是挂载到一个其他的空文件夹上
mkdir /opt/iso
# 挂载iso文件
mount /opt/CCentOS-7-x86_64-Everything-2003.iso /opt/iso

挂载后,可能系统会警告read-only,不用关心,没有影响

接下来需要编辑一个yum repository的配置文件,指向本地yum仓库/opt/iso。例如,编辑文件/etc/yum.repos.d/local.repo,内容如下

[my-local-repository]
name=My Local Repository
baseurl=file:///opt/iso
gpgcheck=0
enabled=1

编辑完成后,以root用户执行以下命令,即可清除之前的yum索引,并新建基于本地Repository的库

yum clean all

yum makecache 

注意,如果涉及到多台服务器安装,需要使用HTTP服务作为YUM私服的话,则需要安装createrepo库。可通过Nginx或者HTTPD作为HTTP服务提供者。 在本文中不是重点,不再赘述。

安装基础库

yum -y install zlib-devel readline-devel 

创建postgres用户

以root用户执行以下命令

# 创建postgres用户
adduser postgres
# 给postgres用户设置密码
passwd postgres

PostgreSQL 12.2 编译安装

注意!!!以下编译安装的操作,都必须在postgres用户下进行,切换为postgres用户的方法如下

su - postgres

安装包下载

从官方下载PostgreSQL 12.2的压缩包。如果官方链接失效,可考虑从我的CSDN资源 PostgreSQL 12.2及校验下载

编译安装

下载完成后,将文件放在postgres的一个目录下,如/home/postgres/software中,则postgresql的路径为/home/postgres/software/postgresql-12.2.tar.gz,以下进行解压及编译预处理

# 切换为postgres用户
su - postgres

# 进入安装包所在文件夹
cd /home/postgres/software

# 解压安装包
tar xzvf postgresql-12.2.tar.gz 

# 进入解压后的安装包
cd postgresql-12.2

# 进行编译检查
# 设置安装目录为/home/postgres/pg12
./configure --prefix=/home/postgres/pg12

注意,./configure步骤可能会出现错误,缺少包,则通过报错信息,在互联网上搜索缺少的包对应的包名,再用yum安装即可。 通常缺少的为*-devel形式的依赖包

./configure无误后,编译安装

make 

make install

编译过程视机器性能有长短不同,如无报错信息,则安装完成。

环境变量配置

安装完成后,如果需要在任意环境下都能使用postgresql相关命令,则需要把$PGHOME/bin中的内容都加入PATH环境变量,编辑/etc/profile文件,如果只是在postgres用户下使用,则需要编辑/home/postgres/.bash_profile文件

export PGHOME=/home/postgres/pg12
export PATH=$PGHOME/bin:$PATH

# 如果需要设置一个单独的目录作为数据库目录,则需要明确指定PGDATA环境变量,且该文件夹的owner必须为postgres用户
# export PGDATA=/data/pgdata

若需要环境变量立即生效,则执行以下命令

source /etc/profile

source /home/postgres/.bash_profile

或者是退出当前SSH的Session,再重新登录即可

初始化数据库目录(单实例)

若配置好PG的bin目录为环境变量后,直接针对目标数据库执行以下命令(令数据库目录为/data/pgdata)

initdb -D /data/pgdata

若有调整WAL日志大小的需求(主要用于归档、主从配置的优化,一旦initdb初始化指定后,不可修改),则可以执行以下命令(非必要),–wal-segsize的单位为MB
initdb -D /data/pgdata --wal-segsize=128

若成功初始化以后,则需要编辑/data/pgdata/postgresql.conf文件调整数据库配置,关键配置如下

# 监听允许地址,安全要求不高的话,直接设置为*
listen_addresses = '*'

# 最大连接数
# 试机器性能和应用场景调整
max_connections = 500

# 服务端口,如有必要,可修改,默认为5432
port = 5432

# 共享区内存,调大以后,对于热点查询可以提升性能。 若服务器为独立的数据库服务器,建议这个值调整为系统的50%物理内存以上
shared_bufferes = 1024MB

编辑完成后,则可以启动数据库

pg_ctl start -D /data/pgdata -l postgresql.log

PostGIS 3.0.1编译安装

本部分内容大量参考了CentOS 7源码安装PostGIS(包含SFCGAL,PgRouting)

PostGIS和PostgreSQL的版本依赖矩阵详见UsersWikiPostgreSQLPostGIS
在这里插入图片描述

依赖包安装

依赖包下载

PostGIS依赖了大量的外部包,都需要编译安装,所需要的资源可以在PostGIS 3.0.1依赖包中下载,笔者已经确定版本无误,能够安装成功

或者,参考官方的PostGIS的依赖包版本关系,依次下载对应版本
官方PostGIS依赖关系图

GEOS编译安装

cd /root/software

tar xf geos-3.8.1.tar

cd geos-3.8.1

./configure

make && make install

PROJ编译安装

cd /root/software

tar xzf proj-6.2.1.tar.gz

cd proj-6.2.1

./configure

make && make install

执行./configure时,可能报错 No package ‘sqlite3’ found,执行yum -y install sqlite sqlite-devel即可

升级protobuf

cd /root/software

tar xzf protobuf-all-3.8.0.tar.gz

cd protobuf-3.8.0

./configure

make && make install

安装完成后,需要修改LD_LIBRARY_PATH和PKG_CONFIG_PATH环境变量,防止系统找不到新安装的protobuf。可编辑/etc/profile如下

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

正常情况下,/usr/local/lib/pkgconfig地址下应该有protobuf.pc文件,如果没有,则是安装异常。

安装protobuf-c

cd /root/software

tar xzf protobuf-c-1.3.2.tar.gz

cd protobuf-c-1.3.2

./configure

make && make install

安装成功后,执行命令protoc --version显示如下

libprotoc 3.8.0

安装json-c

cd /root/software

tar xzf json-c-json-c-0.13.1-20180305.tar.gz

cd json-c-json-c-0.13.1-20180305

./configure

make && make install

编译安装CMake(非必须,如果要装SFCGAL)

由于PostGIS对应的版本比较新,因此CentOS 7默认的CMake版本不足,需要编译安装新版本的CMake

CMake安装需要openssl相关库

yum -y install openssl openssl-devel

安装CMake

cd /root/software

tar xzf cmake-3.17.3.tar.gz

cd cmake-3.17.3

./bootstrap

gmake

make install

安装CGAL(非必须,如果要装SFCGAL)

CGAL存在一些系统依赖库要安装

yum -y install gmp-devel boost-devel mpfr-devel zlib-devel libxml2-devel
cd /root/software

unzip CGAL-4.14.3.zip

cd CGAL-4.14.3

mkdir build

cd build

cmake ..

make && make install

安装SFCGAL(非必须)

cd /root/software

tar xzf SFCGAL-1.3.7.tar.gc

cd SFCGAL-1.3.7

mkdir build

cd build

cmake ..

make && make install

安装完成后,需要配置软链接到libSFCGAL.so,防止后续gdal安装找不到

ln -s /usr/local/lib64/libSFCGAL.so /usr/local/lib/libSFCGAL.so
ln -s /usr/local/lib64/libSFCGAL.so.1 /usr/local/lib/libSFCGAL.so.1

安装GDAL

GDAL的安装,是整个安装步骤当中最慢的一步

cd /root/software

tar xzf gdal-3.0.4.tar.gc

cd gdal-3.0.4

./configure

make && make install

安装PostGIS

以下编译安装的操作,都必须在postgres用户下进行,切换为postgres用户的方法如下

su - postgres

PostGIS 3.0.1下载

PostGIS 3.0.1可以从官方渠道下载,也可以从笔者资源PostGIS 3.0.1及官方文档下载。

编译安装

令安装包资源路径为/home/postgres/software/postgis-3.0.1.tar.gz,执行操作如下

su - postgres

cd /home/postgres/software

tar xzf postgis-3.0.1.tar.gz

cd postgis-3.0.1

./configure 

make && make install

测试PostGIS是否安装成功

连接本地PG库

psql -U postgres -h localhost -d postgres

postgres=# create database test;
CREATE DATABASE
postgres=# \c test;
You ar now conneted to database "test" as user "postgres"
postgres=# create extension postgis;
CREATE EXTENSION

如果操作结果如上述代码所示,则PostGIS安装正常

主从流复制配置

主从配置主要参考了博文 Postgresql12主从配置及切换

需要注意的是,从PostgreSQL 12版本开始,不再使用recovery.conf的方式来配置主从流复制。使用postgresql.conf配置即可,且在从库数据目录中用standby.signal予以标识

具体步骤如下

主库IP为192.168.1.8,从库IP为192.168.1.9

主库修改配置

全部操作都以postgres用户进行

su - postgres

主库配置postgresql.conf信息

# 监听所有IP
listen_addresses = '*' 
# 最大连接数,要少于从库的该值。 基础同步后修改从库配置即可
max_connections = 100
 
# 开启归档
archive_mode = on 
# 归档时进行的操作。 高级使用场景里,可能需要对日志进行移动备份操作,若没有高级需求,简单命令即可
archive_command = '/bin/date'

# WAL级别设置
wal_level = replica

# 和WAL大小,共同决定备份的数量。 
# initdb时默认WAL大小是16MB
# 注意这个WAL总的日志大小,如果过小,数据写入频繁,可能会导致主从同步失败
# 因为pg_basebackup结束之前,产生的数据量如果超过了WAL总日志大小,那么会导致主库的增量数据丢失,永远无法对齐主从库。
# 需要调大wal_keep_segments的量,重新pg_basebackup
wal_keep_segments = 16
wal_sender_timeout = 60s

主库设置完成后,需要重启PG服务才能使以上配置生效

# pg_ctl关闭数据库
pg_ctl stop -D /data/pgdata

# pg_ctl启动数据库
pg_ctl start -D /data/pgdata -l /var/log/postgresql.log

主库增加replica用户

任一用户名都可以,为了和主流博文一致,设置replica为流复制用户

CREATE ROLE replica login replication encrypted password 'replica';

主库增加replica信任访问(pg_hba.conf)

# 编辑$PGDATA/pg_hba.conf文件
# 如果是单一IP可用,掩码是32,例如192.168.1.9/32
# 如果是一个网段可用,掩码是24,例如192.168.1.0/24
host replication replica 192.168.1.9/32 trust

从库进行基础备份

以postgres用户操作

su - postgres

创建一个目录,postgres拥有权限

mkdir /data/pgdata
chown postgres:postgres /data/pgdata -R

启动基础备份

pg_basebackup -h 192.168.1.8 -p 5432 -U replica -Fp -Xs -Pv  -D /data/pgdata

等待基础备份完成。 如果主库很大(例如上百GB),那么可能等待几个小时。

从库修改配置

从库基础备份完毕后,要进行若干操作。 先不要启动从库数据库

修改从库的postgresql.conf

listen_addresses = '*'

# 大于主节点连接数
max_connections = 100

primary_conninfo = 'host=192.168.1.8 port=5432 user=replica password=replica'

recovery_target_timeline = 'latest'

hot_standby = on

max_standby_streaming_delay = 30s

wal_receiver_status_interval = 10s

hot_standby_feedback = on

增加standby.signal文件

standby_mode = 'on'

从库设置完成后,需要启动PG服务,首次启动时间可能会很长,因为主从库需要对齐WAL日志记录的、在基础备份同步过程中主库增量的部分

# pg_ctl启动数据库
pg_ctl start -D /data/pgdata -l /var/log/postgresql.log

检查主从库同步状态

如果主从没有生效,主从库同步状态查不到任何信息

postgres=# select client_addr,sync_state from pg_stat_replication;

client_addr  | sync_state
-------------+------------
192.168.1.9  | async

(1 row)

同时,验证也可以在主库上新建库表在从库里检查。从库启动以后,自动就是readonly状态,连接session中是只读无法修改的。

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值