pgsql 主从流复制安装及测试

目录
  • pgsql 主从流复制安装及测试
    • 安装前准备
    • 安装pgsql
    • pgsql主131服务器操作
    • pgsql主132服务器操作
    • 验证
    • pgsql复制模式简介

pgsql 主从流复制安装及测试

pgsql 提供了多种复制模式,可以参考文章最后简介部分

安装前准备

我这准备了两台centos7.8的机器 ,安装pgsql12版本
192.168.40.131 主
192.168.40.132 从

# 安装前做一些系统优化,不做的话可能导致初始化失败或者主从同步失败
# 修改添加limit的配置,修改后重启,执行 ulimit -a 查看,如果没能生效检查下 .bashrc 或 /etc/profile ,这里过小会导致数据库初始化失败。
# 临时设置的 ulimit -s 102400 这种在初始化时也会失败,需要持久化到配置文件。
vim /etc/security/limits.conf  
* soft stack 102400
* hard stack 102400# 关闭selinux
sed -i "s/^SELINUX=.*/SELINUX=disable/g" /etc/selinux/config
setenforce 0 # 检查本地防火墙是否有开启,可以根据实际情况进行关闭
systemctl status firewalld
systemctl status ipatbles   # centos7中正常不存在

安装pgsql

注:两台机器都需要安装

#创建镜像源文件
vim  /etc/yum.repos.d/pgsql12.repo
[pgdg12]
name=PostgreSQL 12 for RHEL/CentOS $releasever - $basearch
baseurl=https://mirrors.aliyun.com/postgresql/repos/yum/12/redhat/rhel-$releasever-$basearch
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/postgresql/repos/yum/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1# 安装pgsql
yum install  postgresql12-server-12.9 -y 
# 检查
[root@dev-k8s-01-6-68 ~]# rpm -qa|grep postgres
postgresql12-server-12.9-1PGDG.rhel7.x86_64
postgresql12-devel-12.9-1PGDG.rhel7.x86_64
postgresql12-12.9-1PGDG.rhel7.x86_64
postgresql12-libs-12.9-1PGDG.rhel7.x86_64# 如果缺少 postgresql12-devel,可以执行以下命令
yum install centos-release-scl-rh -y 
yum install llvm-toolset-7-clang -y
yum  install postgresql12-devel.x86_64 -y

pgsql主131服务器操作

# 编辑pgsql初始化前的配置文件
vi /usr/lib/systemd/system/postgresql-12.service
# 编辑服务配置 修改数据库目录位置,根据实际情况来
Environment=PGDATA=/var/lib/pgsql/12/data    # 初始化数据库
/usr/pgsql-12/bin/postgresql-12-setup initdb
# 初始化完成之后,会在/var/lib/pgsql/12/data 生成pgsql主的配置文件 postgresql.conf
# 修改主的配置文件
vim postgresql.conf
#允许来自任何主机的连接
listen_addresses = '*'
#最大连接数,从库的max_connections必须要大于主库的
max_connections = 100
# 添加如下配置项
# 设置主pgsql为生成wal的主机
wal_level = replica
max_wal_senders = 32 # 同步最大的进程数量
wal_sender_timeout = 60s # 流复制主机发送数据的超时时间
# 默认值为“80MB”,该值通常太小,很容易导致备库失效,也需要设置得大一些
min_wal_size = 800MB
# 修改pg_hba.conf,为从服务器添加权限
vim /var/lib/pgsql/12/data/pg_hba.conf
host    replication     replica         192.168.40.132/32       md5   #也可以将md5改为 scram-sha-256,据说这个算法更安全
host    all             all             0.0.0.0/0       md5   # 这个视情况添加
# 启动pgsql 并加入开机自启
systemctl start postgresql-12.service && systemctl enable postgresql-12.service
# 创建一个账户密码,方便从服务器接收数据
su - postgres   # 切换postgres 用户
psql -U postgres   # 登陆pgsql
create role replica with replication login password '123456';
alter user replica with password '123456';# 也可以无需重制密码
# 设置postgres密码
\password postgres

pgsql主132服务器操作

# 132的从服务器,在安装完pgsql后无需初始化,直接通过命令可以将主的配置拷贝过来
# 注意的是,下面命令不可直接粘贴执行,需要进行替换
# 192.168.40.131是我们主的ip地址,replica是我们上面新建的role,/var/lib/pgsql/12/data/ 是上面初始化时 PGDATA设置的地址
pg_basebackup -h 192.168.40.131 -p 5432 -U replica -Fp -Xs -Pv -R -D /var/lib/pgsql/12/data/#其他参数:-h 启动的主库数据库地址-p 主库数据库端口-U 流复制用户-W 使用密码验证,要用repl的密码 pg_basebackup 的 -W 使用密码验证;小写 -w 是免密登陆,主库的 pg_hba.conf 中流复制 METHOD 选择 trust-Fp 备份输出正常的数据库目录-Xs 使用流复制的方式进行复制-Pv 输出复制过程的详细信息-R 为备库创建recovery.conf文件。但是pgsql 10以后的新版本的pgsql不需要这个文件了。-R则是用于创建用于replication的配置文件,其实就是生成$PGDATA/standby.signal文件。如果执行pg_basebackup的时候忘记加-R这个参数了,可以手动在备库的$PGDATA下touch standby.signal同时在postgresql.auto.conf中生成对应的primary_conninfo参数信息-D 指定创建的备库的数据库目录
# 修改从的配置文件
vim /var/lib/pgsql/12/data/postgresql.conf 
# 标明去主同步的ip,端口,账号,密码
primary_conninfo = '192.168.40.131 port=5432 user=replica password=123456'
recovery_target_timeline = 'latest'
hot_standby = on# 修改pg_hba.conf,为主131主添加访问132从的权限
vim /var/lib/pgsql/12/data/pg_hba.confhost replication replica 192.168.40.131/32 md5# 修改从的文件夹权限和属主属组,否则无法同步
chown -R postgres:postgres /var/lib/pgsql/12/data
chmod -R 0700 /var/lib/pgsql/12/data# 启动从的pgsql
systemctl start postgresql-12.service && systemctl enable postgresql-12.service

验证

主库查看

# 主库查看,可以看到主正向从 192.168.40.132 发送
[root@centos7-0-1 data]# ps -ef | grep send
postgres  13006  12759  0 21:54 ?        00:00:00 postgres: walsender replica 192.168.40.132(58116) streaming 0/16000148#登陆pgsql查看
su - postgres
psql -U postgres
# 执行sql1
select client_addr,sync_state from pg_stat_replication;
# 执行sql2
select pid, usename, application_name, client_addr, backend_start, client_port, state, sync_state from pg_stat_replication;pid  | usename | application_name |  client_addr   |         backend_start         | client_port |   state   | sync_state 
-------+---------+------------------+----------------+-------------------------------+-------------+-----------+------------13006 | replica | walreceiver      | 192.168.40.132 | 2024-05-23 21:54:38.231088+08 |       58116 | streaming | async
(1 row)

从库查看

[root@centos7-0-2 system]# ps aux | grep receiver
postgres  13321  0.1  0.2 404248  4620 ?        Ss   13:54   0:05 postgres: walreceiver   streaming 0/16000148

pgsql复制模式简介

pgsql提供了5种复制模式,我们上面安装的是第一种

  • 流复制(Streaming Replication):
    这是最常用的复制模式之一。
    主库将事务日志以流的形式传送到备库,备库实时应用这些变更。
    支持同步和异步复制模式。

  • 逻辑复制(Logical Replication):
    基于变更数据捕获(CDC)的复制方式。
    备库可以选择性地订阅主库的部分数据表。
    支持跨版本复制,主备可以运行不同版本的 PostgreSQL。

  • 物理复制(Physical Replication):
    也称为基于块级别的复制。
    主库将磁盘数据块以原始形式传输到备库。
    备库可以直接从主库的数据文件中恢复数据。

  • 多主复制(Multi-Master Replication):
    允许多个节点同时作为主库,相互复制数据。
    需要处理数据冲突的问题。
    通常用于读写分离和负载均衡。

  • 复制集群(Replication Cluster):
    基于 Patroni 等复制管理工具构建的高可用集群。
    提供自动故障切换和主备切换的能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/15560.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac JDK和SDK环境变量配置

一、Java JDK配置 1.下载并安装Java jdk1.8及以上,这个可以在网上自行搜索下载,这里不在详细描述 2.如果不知道JAVA_HOME的安装路径,可以输入命令查看:/usr/libexec/java_home -V ,如图 3.在终端输入命令&#xff1…

算法之堆排序

堆排序是一种基于比较的排序算法,通过构建二叉堆(Binary Heap),可以利用堆的性质进行高效的排序。二叉堆是一个完全二叉树,可以有最大堆和最小堆两种形式。在最大堆中,父节点的值总是大于或等于其子节点的值…

UIKit之猜图器Demo

需求 实现猜图器Demo 功能分解: 1>下一题切换功能 2>点击图片后能放大并背景变暗(本质是透明度的变化)。再次点击则缩小,删除暗色背景。 3> 答案区按钮点击则文字消失,选择区对应文字恢复。 4> 选择区…

springboot项目,@Test写法 @Before @After

某文件示例 package cn.xxx.crm.boss;import cn.xxxx.crm.manager.mq.rabbit.AliyunCredentialsProvider; import com.rabbitmq.client.AMQP; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; im…

第十九届全国环境友好科技竞赛(绿色创业类)正式启动

近日,第十九届全国环境友好科技竞赛(绿色创业类)正式拉开帷幕。本次竞赛由清华大学、同济大学、西安建筑科技大学及中国环境科学学会共同主办,旨在通过学科竞赛的方式鼓励全国高校学生积极参与到资源节约型和环境友好型的和谐社会…

探索python字典:遍历与访问的艺术

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、获取字典的键与值 1. 获取字典的键 2. 获取字典的值 二、遍历字典的键值对 1. 使用 …

2146. 【2017.6.17普及组模拟】小明解密码

题目描述 “天阶夜色凉如水,卧看牵牛织女星。” 小明是一个喜爱幻想的孩子。每天晚上,他都会静静地躺在家门前的草地上,抬头仰望天空,幻想着天上星星的故事,天空中,数颗星星一闪一闪地眨着眼睛,好像…

mybatis plus使用 (基本使用 生成器 逻辑删除等)

Mybatis plus 先查询再根据查询结果判断是否插入,并发情况下出现重复数据 解决:1、java代码中加同步代码块或加锁(保证查询、插入是一个原子性操作) 2、直接在数据库设置唯一键,java中无需先查询判断。捕获唯一键异常:org.spri…

【全开源】二手车置换平台系统小程序(FastAdmin+ThinkPHP+Uniapp)

二手车置换平台系统 特色功能: 车辆评估:系统提供车辆状况、性能和价值的评估功能,通过拍照、上传图片等方式自动识别车辆信息并给出估价建议,帮助买家和卖家更准确地了解车辆价值。 在线交易:平台提供在线购车、售车…

Idea中flume的Interceptor的编写教程

1.新建-项目-新建项目 注意位置是将来打包文件存放的位置&#xff0c;即我们打包好的文件在这/export/data个目录下寻找 2. 在maven项目中导入依赖 Pom.xml文件中写入 <dependencies> <dependency> <groupId>org.apache.flume</groupId> <artifa…

【C#实战】Newtonsoft.Json基类子类解析

情景再现 假设你有如下类&#xff1a; public class Item {public int Id;public string Name; }public class Weapon: Item {public int CurrentAmmo; }public class Inventory {public List<Item> Items; } 其中你序列化的是Inventory类&#xff0c;Items列表里混杂着…

❤Element的使用element

❤Element的使用 1、input输入框 禁止自动补全和下拉提示 input 输入框在输入后浏览器会记录用户输入的值&#xff0c;在下次输入的时候会将记录的值提示在输入框的下面&#xff0c;当输入框是密码的时候&#xff0c;这样可以看见上次输入的密码&#xff0c;这样用户体验不好…

python使用jsonpath来查找key并赋值

目录 一、引言 二、JsonPath简介 三、Python中的JsonPath库 四、使用JsonPath查找JSON Key 五、使用JsonPath赋值JSON Key 六、高级用法 七、结论 一、引言 在数据驱动的现代应用中&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;已成为一种广泛使…

Java 微信小程序登录(openId方式)

1 需求 在开发微信小程序项目时&#xff0c;登录采用的是openId方式&#xff0c;这是一种用户无感的登录方式&#xff0c;用户点开微信小程序时&#xff0c;去调用后端的登录接口。 核心代码 Slf4j Component public class WeChatUtil {private static final String …

基于大数据的支付风险智能防控技术规范

随着大数据、移动互联、人工智能、生物特征识别等技术的快速发展&#xff0c;支付方式正在发生着巨大而深刻的变革&#xff0c;新技术在丰富支付手段、提高支付效率的同时&#xff0c;带来了新的隐患&#xff0c;也对从业机构的风险防控能力提出了更高的要求。 传统的风控技术…

springboot利用Spring的自动装配,策略模式提高系统接口扩展能力,

前段时间有个简单的短信登录功能&#xff0c;需要集成短信服务实现短信发送&#xff0c;一开始用的阿里云&#xff0c;后面领导又说用天翼云&#xff0c;还说阿里云的保留&#xff0c;以后说不准还会集成其他的服务商&#xff0c;于是用nacos的热更新来解决动态切换&#xff0c…

unity InputField的问题

unity 的inputField当focus时&#xff0c;弹起来的键盘样式会携带有一个输入显示。如果想自定义输入框的样式&#xff0c;就需要关闭inputfield的activateInput就是激发输入框的显示然后当inputfield被点击的时候&#xff0c;调用android原生键盘&#xff0c;并设置内容回调。我…

01-02.Vue的常用指令(二)

01-02.Vue的常用指令&#xff08;二&#xff09; 前言v-model&#xff1a;双向数据绑定v-model举例&#xff1a;实现简易计算器Vue中通过属性绑定为元素设置class 类样式引入方式一&#xff1a;数组写法二&#xff1a;在数组中使用三元表达式写法三&#xff1a;在数组中使用 对…

【全部更新完毕】2024电工杯B题详细思路代码成品文章教学:大学生平衡膳食食谱的优化设计及评价

大学生平衡膳食食谱的优化设计及评价 摘要 大学阶段是学生获取知识和身体发育的关键时期&#xff0c;也是形成良好饮食习惯的重要阶段。然而&#xff0c;当前大学生中存在饮食结构不合理和不良饮食习惯的问题&#xff0c;主要表现为不吃早餐或早餐吃得马虎&#xff0c;经常食用…

CentOS 常见命令详解

CentOS 是一种基于 Red Hat Enterprise Linux (RHEL) 的免费开源操作系统&#xff0c;以其稳定性和高效性广泛应用于服务器和企业环境中。对于系统管理员和开发人员来说&#xff0c;掌握 CentOS 的常见命令是日常工作中的必备技能。本文将详细介绍一些在 CentOS 上常用的命令&a…