Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Linux】PostgreSQL 主从模式部署(源码编译方式)

【Linux】PostgreSQL 主从模式部署(源码编译方式)

作者头像
行者Sun
发布于 2024-09-02 03:56:42
发布于 2024-09-02 03:56:42
47800
代码可运行
举报
文章被收录于专栏:LinuxLinux
运行总次数:0
代码可运行

以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!

如果对您有帮助,烦请点赞、关注、转发!如果您有其他想要了解的,欢迎私信联系我~

背景介绍

近期,笔者承接了在 Linux 操作系统下部署 PostgreSQL 主从模式的需求,且客户要求必须是非容器化部署。

本文基于 PostgreSQL 11.6 版本,第一阶段选择源码编译方式,在 CentOS 7 操作系统下完成了 PostgreSQL 主从模式(1主1从)的部署验证工作,以下为完整过程。

过程回顾

1、创建安装目录、数据目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir -p /data/pg11 /data/pg11-data

2、下载源码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wget https://ftp.postgresql.org/pub/source/v11.6/postgresql-11.6.tar.gz
tar -xzf postgresql-11.6.tar.gz -C /data

附源码地址:https://www.postgresql.org/ftp/source/v11.6

3、安装依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rpm -qa | grep ncurses-devel || yum install -y ncurses-devel
rpm -qa | grep readline-devel || yum install -y readline-devel
rpm -qa | grep zlib-devel || yum install -y zlib-devel

4、编译安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd /data/postgresql-11.6
./configure --prefix=/data/pg11
make && make install
############################################################################
cd /data/postgresql-11.6/contrib
make && make install

5、创建用户、用户组

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
groupadd postgres
useradd -g postgres postgres

# 为了安全考虑 PostgreSQL 不允许使用 root 用户操作数据库
# 因此需要创建 postgres 作为数据库的超级用户

6、修改目录属主、属组

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
chown -R postgres:postgres /data/pg11-data
chown -R postgres:postgres /data/postgresql-11.6
ll /data

7、切换用户

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
su - postgres

8、修改环境变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat >> /home/postgres/.bash_profile <<EOF

export PATH=/data/pg11/bin:$PATH
export MANPATH=/data/pg11-data/share/man:$MANPATH
export LANG=en_US.utf8
export DATE="$(date +"%Y-%m-%d %H:%M:%S")"
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
EOF
############################################################################
tail /home/postgres/.bash_profile && source /home/postgres/.bash_profile

9、初始化数据库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
initdb -D /data/pg11-data

10、启动服务、查看状态

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pg_ctl -D /data/pg11-data -l /home/postgres/logfile_$(date +"%Y%m%d_%H%M") start
netstat -nltp | grep 5432

11、设置开机启动

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cp /data/postgresql-11.6/contrib/start-scripts/linux /etc/init.d/postgres
sed -i 's#prefix=/usr/local/pgsql#prefix=/data/pg11#g' /etc/init.d/postgres
sed -i 's#PGDATA="/usr/local/pgsql/data"#PGDATA="/data/pg11-data"#g' /etc/init.d/postgres
chmod +x /etc/init.d/postgres

grep -E "^prefix|^PGDATA" /etc/init.d/postgres
chkconfig --list 2>/dev/null | grep postgres

# 完成上述操作后,部分操作系统下服务启动、停止、查看状态也可以使用:
# systemctl start postgres
# systemctl stop postgres
# systemctl status postgres

12、设置PostgreSQL默认用户postgres的密码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
psql -c "ALTER USER postgres WITH PASSWORD 'new_password'"

🔔 若选择主从模式,主库、从库所在服务器都需要执行以上步骤

13、配置主从模式 - 主库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 编辑 /data/pg11-data/pg_hba.conf,在指定位置添加以下内容
vi /data/pg11-data/pg_hba.conf
# IPv4 local connections:
host    all             all             0.0.0.0/0               md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
host    replication     all             <从节点IP>/32           trust
# 编辑 /data/pg11-data/postgresql.conf,修改为以下内容
vi /data/pg11-data/postgresql.conf
listen_addresses = '*'
wal_level = replica
max_connections = 10000
archive_mode = on
archive_command = 'cp %p /data/pg11/archive/%f'
max_wal_senders = 10
wal_sender_timeout = 120s
hot_standby = on

14、重启主库服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pg_ctl -D /data/pg11-data -l /home/postgres/logfile_$(date +"%Y%m%d_%H%M") restart

15、配置主从模式 - 从库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 切换至 root 用户
cd /data && mkdir tmp && mv pg11-data/* tmp

# 切换至 postgres 用户
pg_basebackup -h <主库IP> -p 5432 -U postgres  -P -X stream -D /data/pg11-data -R
cp tmp/postmaster.* pg11-data/

# 若直接执行 pg_basebackup 会报错:pg_basebackup: directory "/data/pg11-data" exists but is not empty
# 需要将pg11-data目录下文件全部移走再执行 pg_basebackup,然后将postmaster.pid和postmaster.opts两个文件再移回去,最后重启即可

16、重启从库服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pg_ctl -D /data/pg11-data -l /home/postgres/logfile_$(date +"%Y%m%d_%H%M") restart

# 在主库查看集群状态
psql -x -d postgres -c "select * from pg_stat_replication"

17、测试主从数据同步

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 主库服务器执行
psql -c "create database test"
psql -c "\l"
############################################################################
# 从库服务器执行
psql -c "\l"
# 若从库执行 psql -c "create database test1" 则会报错:
# ERROR:  cannot execute CREATE DATABASE in a read-only transaction

18、测试主从切换

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 主库服务器执行,模拟故障
pg_ctl stop -m fast

# 从库服务器执行
psql -c "select pg_is_in_recovery()"      # 查看是否处于恢复模式
pg_ctl -D /data/pg11-data promote         # 停止恢复模式,切换为主库
psql -c "select pg_is_in_recovery()"

# pg_ctl promote:使从库停止恢复模式,并升级为主库
# 若需要恢复回去,需要重新执行 15 的步骤
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 实施运维知识交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
进阶数据库系列(十五):PostgreSQL 主从同步原理与实践
在正式介绍 PostgreSQL 主从同步复制 之前,我们先了解一下 PostgreSQL 的预写日志机制(WAL)。
民工哥
2023/08/22
5.6K0
进阶数据库系列(十五):PostgreSQL 主从同步原理与实践
用Keepalived实现PostgreSQL高可用
Keepalived可提供VRRP以及health-check功能,可以只用它提供双机浮动的vip(VRRP虚拟路由功能),这样可以简单实现一个双机热备高可用功能。
数据和云
2021/10/28
3.2K0
用Keepalived实现PostgreSQL高可用
PostgreSQL 12.1 版本Linux平台安装方法
今天应业务需求,在linux平台上安装了postgresql的一套环境,由于之前对postgresql不太了解,所以这里特地记录了一下安装过程。
AsiaYe
2022/05/17
9090
Postgresql主从复制--物理复制
PostgreSQL支持物理复制(流复制)及逻辑复制2种。通过流复制技术,可以从实例级复制出一个与主库一模一样的实例级的从库。流复制同步方式有同步、异步两种。
俊才
2019/09/26
6.9K0
使用源码编译来安装PostgreSQL数据库(从PG9.4到PG16各个版本通用)
PG安装方法很多,和MySQL类似,给用户提供很大的选择空间。如:RPM包安装(在线、离线)、源码编译安装、系统自带、二进制、NDB安装等。
AiDBA宝典
2023/09/08
2.6K0
使用源码编译来安装PostgreSQL数据库(从PG9.4到PG16各个版本通用)
PostgreSQL 之 pg_rewind使用详解
是postgresql主丛数据库之同步数据目录的工具。需要目标服务器在postgresql.conf 中允许wal_log_hints,或者在 initdb初始化集群时允许 checksums ,full_page_writes也必须为on
星哥玩云
2022/08/17
1.6K0
PostgreSQl 12主从流复制及归档配置
上一篇文章说道PostgreSQL 12 的源码部署,这里我们说一下PostgreSQl 12的主从流复制和归档配置。
没有故事的陈师傅
2022/02/09
2.7K0
postgresql主备配置步骤
rpm -e --nodeps postgresql95-contrib-9.5.3-2PGDG.rhel7.x86_64
felixxue
2022/12/29
1.5K0
Postgresql主从复制
Postgresql主从复制 主备数据库启动,备库启动wal_receiver进程,wal进程向主库发送连接请求; 主库收到连接请求后启动wal_sender进程,并与wal_receiver进程建立tcp连接; 备库wal_receiver进程发送最新的wal lsn 给主库; 主库进行lsn 对比,定期向备库发送心跳信息,来确认备库的可用性,并且将没有传递的wal日志文件进行发送,同时调用SyncRepWaitForLSN()函数来获取锁存器,并且等待备库响应;锁存器的释放时机和主备同步模式的选择有
用户7353950
2022/05/11
9020
Postgresql主从复制
【DB宝91】PG高可用之主从流复制+keepalived 的高可用
通过keepalived 来实现 PostgreSQL 数据库的主从自动切换,以达到高可用。当主节点宕机时,从节点可自动切换为主节点,继续对外提供服务。
AiDBA宝典
2022/02/23
2.9K0
【DB宝91】PG高可用之主从流复制+keepalived 的高可用
【DB宝62】PG高可用之repmgr(1主2从+1witness)+Pgpool-II实现主从切换+读写分离+负载均衡
第二次执行时不再提示输入yes,并且可以成功执行命令,则表示SSH对等性配置成功。
AiDBA宝典
2021/07/29
1.8K1
WAL has already been removed修复
备节点查看select pg_last_xlog_receive_location();值没有变化,已经不从主节点同步。
DB之路
2021/03/13
4.1K0
PostgreSQL 16数据库的各种安装方式汇总(yum、编译、docker等)
详细使用请参考:https://www.xmmup.com/dbbao69zaidockerzhongkuaisushiyonggegebanbendepostgresqlshujuku.html
AiDBA宝典
2023/09/19
7.1K0
PostgreSQL 16数据库的各种安装方式汇总(yum、编译、docker等)
PostgreSQL集群篇——2、PG环境安装准备
PostgreSQL官方文档中讲到了多种高可用、负载均衡和复制特性解决方案,如下图所示:
cn華少
2021/07/15
3.1K1
PostgreSQL主备库搭建
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
雪人
2022/10/13
2.8K0
PostgreSQL 备份与恢复(第二章)
该备份工具自动执行 pg_start_backup()和 pg_stop_backup()函数,而且备份速度和数据都比手动的备份快。
DB之路
2021/07/15
2.1K0
PostgreSQL从小白到高手教程 - 第44讲:pg流复制部署
PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。
用户5892232
2024/02/02
5040
PostgreSQL从小白到高手教程 - 第44讲:pg流复制部署
docker 部署 postgresql的主从数据库
docker exec -it -u postgres pgsslave /bin/bash
liuyunshengsir
2021/09/17
1.9K0
PostgreSQL13流复制主从同步配置,切换步骤
本文档详细记录如何一步一步在两台Linux服务器上,搭建PostgreSQL数据库主从模式的高可用数据库环境,以及如何手工切换主备库,及其注意事项。
用户8006012
2022/05/31
7.7K0
【DB宝68】使用源码编译来安装PostgreSQL13.3数据库
PG安装方法很多,和MySQL类似,给用户提供很大的选择空间。如:RPM包安装(在线、离线)、源码编译安装、系统自带、二进制、NDB安装等。
AiDBA宝典
2021/08/25
9200
推荐阅读
相关推荐
进阶数据库系列(十五):PostgreSQL 主从同步原理与实践
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验