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
47804
代码可运行
举报
文章被收录于专栏:LinuxLinux
运行总次数:4
代码可运行

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

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

背景介绍

近期,笔者承接了在 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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Hive】hive 数据倾斜、优化策略、hive执行过程、垃圾回收
group by和聚合函数(sum count max min)一起使用 group by和以上的聚合函数一起使用的时候会默认在map端执行一次combiner(局部聚合:减少reducetask的数据量,这个时候reduce端接受的数据就会大大减少 一般不会出现数据倾斜 select id,count(*) from course group by id;
从大数据到人工智能
2022/09/16
1.8K0
【Hive】hive 数据倾斜、优化策略、hive执行过程、垃圾回收
基于MapReduce的Hive数据倾斜场景以及调优方案
通常认为当所有的map task全部完成,并且99%的reduce task完成,只剩下一个或者少数几个reduce task一直在执行,这种情况下一般都是发生了数据倾斜。
火之高兴
2024/07/25
3410
hive优化总结
hive强大之处不要求数据转换成特定的格式,而是利用hadoop本身InputFormat API来从不同的数据源读取数据,同样地使用OutputFormat API将数据写成不同的格式。所以对于不同的数据源,或者写出不同的格式就需要不同的对应的InputFormat和OutputFormat类的实现。以stored as textFile为例,其在底层java API中表现是输入InputFormat格式:TextInputFormat以及输出OutputFormat格式:HiveIgnoreKeyTextOutputFormat。这里InputFormat中定义了如何对数据源文本进行读取划分,以及如何将切片分割成记录存入表中。而OutputFormat定义了如何将这些切片写回到文件里或者直接在控制台输出。
数字悠客
2020/05/27
1.8K0
Hive参数调优
  大多数的Hadoop Job是需要Hadoop提供的完整的可扩展性来处理大数据集的。不过,有时Hive的输入数据量是非常小的。在这种情况下,为查询触发执行任务时消耗可能会比实际job的执行时间要多的多。对于大多数这种情况,Hive可以通过本地模式在单台机器上处理所有的任务。对于小数据集,执行时间可以明显被缩短。
挽风
2021/04/13
1.6K0
Hive参数调优
Hive_
HiveSQL ->AST(抽象语法树) -> QB(查询块) ->OperatorTree(操作树)->优化后的操作树->mapreduce任务树->优化后的mapreduce任务树
挽风
2023/10/17
3490
Hive_
五万字 | Hive知识体系保姆级教程
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
数据社
2021/08/27
2.2K0
五万字 | Hive知识体系保姆级教程
「Hive进阶篇」万字长文超详述hive企业级优化
原创推文链接:https://mp.weixin.qq.com/s/GHwYVEwAS8WgNBLb14NC4A
大数据阶梯之路
2022/10/01
1.4K0
「Hive进阶篇」万字长文超详述hive企业级优化
拿美团offer,Hive进阶篇
https://blog.csdn.net/weixin_38754799/article/details/104306898
木野归郎
2020/06/15
7830
拿美团offer,Hive进阶篇
硬刚Hive | 4万字基础调优面试小总结
Hive是基于Hadoop的数据仓库工具,可对存储在HDFS上的文件中的数据集进行数据整理、特殊查询和分析处理,提供了类似于SQL语言的查询语言–HiveQL,可通过HQL语句实现简单的MR统计,Hive将HQL语句转换成MR任务进行执行。
王知无-import_bigdata
2021/06/01
2.1K0
硬刚Hive | 4万字基础调优面试小总结
Hive SQL 参数与性能调优
Hive作为大数据平台举足轻重的框架,以其稳定性和简单易用性也成为当前构建企业级数据仓库时使用最多的框架之一。
五分钟学大数据
2022/04/07
1.3K0
Hive知识归纳——详解 hive 各个知识点
CREATE FUNCTION [db_name.] function_name AS class_name [USING JAR|FILE|ARCHIVE 'file_uri' [, JAR|FILE|ARCHIVE 'file_uri'] ];
solve
2019/10/30
2.1K0
Hive知识归纳——详解 hive 各个知识点
最新Hive/Hadoop高频面试点小集合
如果其中有一张表为小表,直接使用map端join的方式(map端加载小表)进行聚合。
王知无-import_bigdata
2021/04/21
1.1K0
最新Hive/Hadoop高频面试点小集合
Hive快速入门系列(15) | Hive性能调优 [二] 表的优化
  将key相对分散,并且数据量小的表放在join的左边,这样可以有效减少内存溢出错误发生的几率;再进一步,可以使用map join让小的维度表(1000条以下的记录条数)先进内存。在map端完成reduce。 实际测试发现:新版的hive已经对小表JOIN大表和大表JOIN小表进行了优化。小表放在左边和右边已经没有明显区别。
不温卜火
2020/10/28
1.2K0
Hive快速入门系列(15) | Hive性能调优 [二] 表的优化
大数据技术之_08_Hive学习_04_压缩和存储(Hive高级)+ 企业级调优(Hive优化)
1、CentOS联网   配置CentOS能连接外网。Linux虚拟机 ping www.baidu.com 是畅通的。 注意:采用root角色编译,减少文件夹权限出现问题。 2、jar包准备(hadoop源码、JDK8、maven、protobuf) (1)hadoop-2.7.2-src.tar.gz (2)jdk-8u144-linux-x64.tar.gz (3)snappy-1.1.3.tar.gz (4)apache-maven-3.0.5-bin.tar.gz (5)protobuf-2.5.0.tar.gz
黑泽君
2019/03/11
1.2K0
大数据技术之_08_Hive学习_04_压缩和存储(Hive高级)+ 企业级调优(Hive优化)
Hive优化的21种方案
  Fetch抓取是指,Hive中对某些情况的查询可以不必使用MapReduce计算。例如:SELECT * FROM employees;在这种情况下,Hive可以简单地读取employee对应的存储目录下的文件,然后输出查询结果到控制台。
挽风
2021/04/13
4.9K0
Hive优化的21种方案
知行教育项目_Hive参数优化
我们知道传统的OLTP数据库一般都具有索引和表分区的功能,通过表分区能够在特定的区域检索数据,减少扫描成本,在一定程度上提高查询效率,我们还可以通过建立索引进一步提升查询效率。在Hive数仓中也有索引和分区的概念。
Maynor
2021/04/09
8240
快速学习-Hive企业级调优
Fetch 抓取是指,Hive 中对某些情况的查询可以不必使用 MapReduce 计算。例如:SELECT * FROM employees;在这种情况下,Hive 可以简单地读取 employee 对应的存储目录下的文件,然后输出查询结果到控制台。 在 hive-default.xml.template 文件中 hive.fetch.task.conversion 默认是 more,老版本 hive默认是 minimal,该属性修改为 more 以后,在全局查找、字段查找、limit 查找等都不走mapreduce。
cwl_java
2020/02/21
1K0
快速学习-Hive企业级调优
Hive常用性能优化方法实践全面总结
Apache Hive作为处理大数据量的大数据领域数据建设核心工具,数据量往往不是影响Hive执行效率的核心因素,数据倾斜、job数分配的不合理、磁盘或网络I/O过高、MapReduce配置的不合理等等才是影响Hive性能的关键。
大数据学习与分享
2020/12/14
2.8K0
Hive的调优你都知道那些?
我们在工作中还是在学习中有都会遇到我们写的HQL语句执行效率不高,那我们该怎么提高查询效率那,这篇文章就带你从不同维度讲解,让你的HQL瞬间提高一个档次。记得收藏
大数据老哥
2021/02/04
9810
Hive的调优你都知道那些?
Hive函数
**CONCAT_WS(separator, str1, str2,...):**多字符串拼接
ha_lydms
2023/11/19
5191
Hive函数
相关推荐
【Hive】hive 数据倾斜、优化策略、hive执行过程、垃圾回收
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档