PostgreSQL集群篇——1、PG环境安装准备

本文介绍了在面临高并发问题时,选择PostgreSQL的同步流复制解决方案来提升数据库的可用性和数据一致性。文章详细阐述了从选择流复制技术到决定使用PostgreSQL13.1版本的过程,并提供了详细的编译安装步骤,包括环境配置、编译安装、环境变量设置、数据库初始化以及服务自启动配置等。最后,文章指出已完成基础环境准备,接下来将进行流复制集群的设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PostgreSQL集群篇——1、PG环境安装准备

标签

PostgreSQL,PG,集群,DBA,架构师,PG安装,编译安装

背景

PostgreSQL官方文档中讲到了多种高可用、负载均衡和复制特性解决方案,如下图所示:

特性共享磁盘故障转移文件系统复制预写式日志传送逻辑复制基于触发器的主-备复制基于语句的复制中间件异步多主控机复制同步多主控机复制
最通用的实现NASDRBD内建流复制内建逻辑复制,pglogicalLondiste,Slonypgpool-IIBucardo
通信方法共享磁盘磁盘块WAL逻辑解码表行SQL表行表行和行锁
不要求特殊硬件
允许多个主控机服务器
无主服务器负载
不等待多个服务器with sync offwith sync off
主控机失效将永不丢失数据with sync onwith sync on
复制体接受只读查询with hot
每个表粒度
不需要冲突解决

我们在集群环境中使用这些技术,首先需要考虑的是我们目前面临的是什么问题,例如我现在面临的就是高并发问题如何来解决,按照上述图表中我选择了流复制解决方案。

在流复制解决方案中分为同步、异步两种,异步流复制通常采用的是基于wal日志来传送的方式进行,从节点通常比主节点要少一个wal日志块的数据,这给我们并发查询造成了影响,因此这里我们需要采用同步流复制解决方案,其采用的是数据流的方式,就像小溪一样,水一直流淌着,多条分支最终汇总到一处,同时接收处也在一直存储着。

流复制是从2010年推出pg9.0版本以后开始的,其版本到目前经历的阶段如下:

版本方式描述
PostgreSQL9.0流式物理复制开始支持流式物理复制,用户可以通过流式复制构建只读备库
PostgreSQL9.1同步流复制开始支持同步复制,只支持一个同步流复制节点,同步流复制能保证数据的0丢失
PostgreSQL9.2级联流复制开始支持联流复制,备库下面还可以再连接备库,形成级联架构
PostgreSQL9.2流式虚拟备库开始支持虚拟备库,即备库中没有数据文件,只包含wal文件。
PostgreSQL9.4逻辑复制开始支持逻辑复制,逻辑复制可以应对部分表复制的功能。
PostgreSQL9.6同步流复制改版同步流复制允许多个备用服务器以提高可靠性。
PostgreSQL10使用发布/订阅进行逻辑复制
PostgreSQL11-13持续优化

本次我们将采用PostgreSQL13.1版本进行搭建同步流复制环境,数据库安装我们采用了编译安装,如不清楚怎样安装,请查看之前的文章《PostgreSQL集群篇——1、PG环境安装准备》

环境

PostgreSQL集群篇整体采用3台虚拟机进行搭建,相关情况如下:

服务器IPCPU内存存储作用
10.28.1.1814核8G200G主master节点,
10.28.1.1824核8G200G从slave节点,
10.28.1.2104核8G200GVIP节点,虚拟IP

产品简介

内容:

安装脚本:

1、设置服务器使用的时区并校准时间
sudo tzselect
 #输入 4 9 1 1
 sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
 sudo apt-get update
 sudo apt-get install ntpdate -y
 sudo ntpdate us.pool.ntp.org
2、安装必要的编译环境
sudo apt-get install gcc make libreadline-dev zlib1g-dev -y
3、创建好准备安装的目录并创建pg基础用户,并将pg基础目录授权给该用户
sudo mkdir /pg
 # 授权pg用户目录操作权限,这里在安装完成后权限应是postgres用户
 sudo groupadd postgres
 sudo useradd -g postgres postgres -s "/bin/bash" -m
 sudo passwd postgres
 sudo chown -R postgres:postgres /pg

这里我们创建用户的同时对其进行设置了密码,设置一个密码,安全性上更有保障,同时默认密码随机,如果一直使用sudo su则会缺少环境变量,后续会带来不必要的麻烦。同时后续我们切换用户会使用su 直接切换不会增加sudo。

4、从官网下载PostgreSQL最新稳定版本,这里使用编译安装进行可控式安装

源码下载

su postgres
 mkdir /pg/install
 cd /pg/install
 wget https://ftp.postgresql.org/pub/source/v13.1/postgresql-13.1.tar.gz
5、开始进行编译
tar -zxf postgresql-13.1.tar.gz
 cd postgresql-13.1/
 ./configure --prefix=/pg
 # 编译主程序
 make
 # 编译文档与contrib
 make world
 # 安装主程序
 make install
 # 安装全部
 make install-world
 # 安装完成后清除源码中编译生成的文件,将其还原为发布时的源码包。便于后续时间需要使用时再次编译
 make distclean
  • make 编译主程序

  • make world 在编译主程序的同时将其文档与contrib共享库包全部编译

  • make install 安装主程序

  • make install-world 安装文档与contrib共享库,当我们把所有共享库都安装上并不代表数据库已经可用这些,而是需要我们在库中根据需要进行create extension启用插件。因此这里我们直接将原带的插件,对其性能不会

6、设置环境变量
sudo vim /etc/profile
 #在文件最底部增加
 export PGHOME=/pg
 export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
 export PATH=$PGHOME/bin:$PATH  # 主程序目录
 export PGDATA=$PGHOME/data      # 数据存储目录
 export MANPATH=$PGHOME/share/man:$MANPATH  # 共享包库
 export LANG=en_US.utf8
 ## wq 保存
 sudo reboot

这里我们在设置完成系统环境变量后直接进行了重启,而没有使用当前会话生效命令( source /etc/profile)是因其下面我们要多次切换用户,这时需要每次都执行一次过于麻烦。索性直接重启一次,所有会话下直接生效。

7、开始进行初始化数据库w
su postgres
 pg_ctl initdb

备注:这里我们进入postgres用户后直接使用了pg_ctl命令,是因为上面设置了系统环境变量PATH,其次我们切换用户时使用的是su,如果使用sudo su 进入用户会导致系统环境变量丢失,如果想使用该命令需要再去单独设置root用户的环境变量。


执行到这里后我们可以使用pg_ctl start 与pg_ctl stop 进行测试数据库是否正常启动停止,下面我们将开始对其服务器自启动进行设置,增加到日常linux服务管理中。


8、创建日志库,并添加系统启动项
cd /pg
 mkdir logfiles
9、进行编写服务器启动服务
exit    # 退出当前的postgres用户
sudo vim /etc/systemd/system/postgresql.service

文件内容如下:

[Unit]
 Description=PostgreSQL database server
 Documentation=man:postgres(1)
 After=network.target
 
 [Service]
 Type=forking
 User=postgres
 Group=postgres
 Environment=PGSTARTTIMEOUT=300
 Environment=PGDATA=/pg/data
 ExecStart=/pg/bin/pg_ctl start -D ${PGDATA} -s -w -t ${PGSTARTTIMEOUT} -l /pg/logfiles/pg_service_log
 ExecStop=/pg/bin/pg/pg_ctl stop -D ${PGDATA} -s -m -l /pg/logfiles/pg_service_log
 ExecRestart=/pg/bin/pg_ctl restart -D ${PGDATA} -s -l /pg/logfiles/pg_service_log
 ExecReload=/pg/bin/pg_ctl reload -D ${PGDATA} -s -l /pg/logfiles/pg_service_log
 KillMode=mixed
 KillSignal=SIGINT
 TimeoutSec=360
 
 [Install]
 WantedBy=multi-user.target
:wq  #保存文件
 sudo systemctl daemon-reload
10、测试使用postgresql服务进行启动数据库
systemctl start postgresql
 systemctl restart postgresql
 systemctl stop postgresql
 systemctl restart postgresql
ps -aux|grep postgres
 su postgres
 tail -1000f /pg/logfiles/pg_service_log  # 查看服务启停日志

至此集群环境下我们需要使用的基础pg环境已准备就绪,下一篇我们将开始对其这两台进行搭建流复制集群设置。

本文声明

88x31.png

知识共享许可协议 本作品由 cn華少 采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CN華少

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值