推荐阅读

Helm3(K8S 资源对象管理工具)视频教程:https://edu.csdn.net/course/detail/32506
Helm3(K8S 资源对象管理工具)博客专栏:https://blog.csdn.net/xzk9381/category_10895812.html

本文原文链接:https://blog.csdn.net/xzk9381/article/details/110385135,转载请注明出处。如有发现文章中的任何问题,欢迎评论区留言。

  • Postgresql 版本:12.5

  • 操作系统版本:CentOS Linux release 7.6.1810 (Core)

  • 主节点 IP:10.211.55.11

  • 从节点 IP:10.211.55.12

一、环境准备

以下操作均在两台机器中执行。

1. 下载源码包

PostgreSQL 12.5 版本源码包下载地址:https://ftp.postgresql.org/pub/source/v12.5/postgresql-12.5.tar.gz

下载完成后,在两台机器中创建如下目录:

mkdir -p /opt/postgresql_data/{data,logs}

2. 配置 yum 源

在机器中配置阿里 yum 仓库:

wget http://mirrors.aliyun.com/repo/Centos-7.repo -O /etc/yum.repos.d/CentOS7-Base-ali.repo
sed -i 's/$releasever/7/g' /etc/yum.repos.d/CentOS7-Base-ali.repo

安装 PostgreSQL 依赖包:

yum -y install readline-devel zlib-devel

3. 关闭防火墙和 SELinux

为了避免访问被拒绝,需要关闭防火墙和 SELinux:

systemctl stop firewalld && systemctl disable firewalld
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

4. 创建用户

PostgreSQL 建议使用 postgres 用户来管理,首先创建相应的用户和组:

groupadd postgres
useradd -g postgres -G postgres -d /home/postgresql postgres
echo postgres_admin | passwd --stdin postgres

将 /opt/postgresql_data 目录的属主和属组改为 postgres:

chown postgres.postgres -R /opt/postgresql_data/

二、安装主节点

1. 安装 PostgreSQL

在 10.211.55.11 中,解压 PostgreSQL 源码包:

tar zxf postgresql-12.5.tar.gz -C /opt

在解压后的目录中执行如下编译安装命令:

./configure --prefix=/opt/postgresql_data
make && make install# 下面的命令可以安装 PostgreSQL 的第三方工具
cd contrib
make && make install

安装完成,在 /opt/postgresql_data 目录下会存储可执行文件和库文件:

[root@localhost ~]# tree -L 1 -d /opt/postgresql_data/
/opt/postgresql_data/
├── bin
├── data
├── include
├── lib
├── logs
└── share6 directories

接下来在 postgres 用户下设置环境变量,将以下两行内容添加至 postgres 用户家目录下的 .bash_profile 文件中并使其生效:

export LD_LBRARY_PATH=/opt/postgresql_data/lib:$LD_LIBRARY_PATH
export PATH=/opt/postgresql_data/bin:$PATH

2. 初始化数据库

以下步骤使用 postgres 用户执行:

首先初始化 PostgreSQL,指定数据目录为 /opt/postgresql_data/data 目录:

initdb --locale=C -E UNICODE -D /opt/postgresql_data/data/

命令执行成功后会输出如下内容:

The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.The database cluster will be initialized with locale "C".
The default text search configuration will be set to "english".Data page checksums are disabled.fixing permissions on existing directory /opt/postgresql_data/data ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... Asia/Shanghai
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... okinitdb: warning: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.Success. You can now start the database server using:pg_ctl -D /opt/postgresql_data/data/ -l logfile start

3. 修改配置文件

初始化完成后查看一下 /opt/postgresql_data/data 目录下的内容:

[postgres@localhost ~]$ ls /opt/postgresql_data/data/
base          pg_hba.conf    pg_notify     pg_stat      pg_twophase  postgresql.auto.conf
global        pg_ident.conf  pg_replslot   pg_stat_tmp  PG_VERSION   postgresql.conf
pg_commit_ts  pg_logical     pg_serial     pg_subtrans  pg_wal
pg_dynshmem   pg_multixact   pg_snapshots  pg_tblspc    pg_xact

其中主要配置文件是 postgresql.conf,远程访问权限配置文件是 pg_hba.conf。

首先修改 postgresql.conf 文件内容,修改如下配置项:

listen_addresses = '*'                     # 修改监听地址为 *
max_connections = 1000                     # 修改最大连接数为 1000
log_destination = 'stderr'                 # 去掉该配置项的注释
logging_collector = on                     # 去掉该配置项的注释,并将 off 修改为 on,代表开启日志记录
log_directory = '../logs'                  # 去掉该配置项的注释,并指定写入日志的目录
log_filename = 'postgresql-%Y-%m-%d.log'   # 去掉该配置项的注释,并指定日志名称的格式

接下里修改 pg_hba.conf 配置文件,添加如下行:

host    all             all             0.0.0.0/0               trust

这个代表允许所有用户在远程的任何机器上使用密码访问数据库。

4. 启动数据库

启动数据库有两种方式,一种是手动启动,另外一种是通过脚本启动。

4.1 手动启动

手动启动数据库需要使用 postgres 用户执行 pg_ctl 命令,执行命令时需要指定数据目录的路径,命令如下:

pg_ctl -D /opt/postgresql_data/data/ -l ../log/start_log start

-l 参数是将启动时的日志输出到指定的文件中

停止数据库只需要将 start 换成 stop 即可。

4.2 脚本启动

在 PostgreSQL 的源码包中,提供启动数据库的脚本命令,路径如下:

[postgres@localhost ~]$ ls /opt/postgresql-12.5/contrib/start-scripts/
freebsd  linux  macos

其中 linux 文件就是用于在 Linux 中启动服务的脚本。使用 root 用户将该脚本拷贝到 /etc/init.d 目录下并重命名为 postgresql:

cp -pr /opt/postgresql-12.5/contrib/start-scripts/linux /etc/init.d/postgresql
chmod u+x /etc/init.d/postgresql

修改脚本中的如下配置项:

# Installation prefix
prefix=/opt/postgresql_data# Data directory
PGDATA="/opt/postgresql_data/data"# Who to run the postmaster as, usually "postgres".  (NOT "root")
PGUSER=postgres# Where to keep a log file
PGLOG="/opt/postgresql_data/logs/serverlog"

设置开机启动:

chkconfig --add postgresql

然后就可以使用脚本来控制服务器启停:

service postgresql start

本文原文链接:https://blog.csdn.net/xzk9381/article/details/110385135,转载请注明出处。如有发现文章中的任何问题,欢迎评论区留言。

5. 创建复制角色

使用 postgres 用户操作 PostgreSQL 创建一个用于主从复制的角色:

[postgres@localhost ~]$ createuser --replication -P -e replicator
Enter password for new role:
Enter it again:
SELECT pg_catalog.set_config('search_path', '', false);
CREATE ROLE replicator PASSWORD 'md5eb5c69398a31748cd75327d33bc1f52b' NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN REPLICATION;

-P 选项用于设置密码;

-e 选项用于设置回显;

为这个角色设置远程访问权限,在 pg_hba.conf 文件中添加如下一行内容:

host    replication     replicator      10.211.55.12/24         md5

这个代表允许在 10.211.55.12 机器上使用 replicator 角色远程访问数据库执行复制操作。

重启数据库:

service postgresql restart

三、安装从节点

首先按照安装主节点的步骤,执行第 1 - 4 步。

然后停掉从节点的服务,将数据目录下的数据备份,然后清除。使用 postgres 用户执行 pg_basebackup 命令连接远程主节点进行备份:

pg_basebackup -h 10.211.55.11 -D /opt/postgresql_data/data/ -U replicator -P -v  -R -X stream -C -S pgstandby1
  • -h :指定作为主服务器的主机。
  • -D :指定数据目录。
  • -U :指定连接用户。
  • -P :启用进度报告。
  • -v :启用详细模式。
  • -R :启用恢复配置的创建:创建一个standby.signal文件,并将连接设置附加到数据目录下的postgresql.auto.conf
  • -X :用于在备份中包括所需的预写日志文件(WAL文件)。流的值表示在创建备份时流式传输WAL。
  • -C :在开始备份之前,允许创建由-S选项命名的复制插槽。
  • -S :指定复制插槽名称。

运行命令后会输出如下内容:

Password:
pg_basebackup: initiating base backup, waiting for checkpoint to complete
pg_basebackup: checkpoint completed
pg_basebackup: write-ahead log start point: 0/2000028 on timeline 1
pg_basebackup: starting background WAL receiver
pg_basebackup: created replication slot "pgstandby1"
24591/24591 kB (100%), 1/1 tablespace
pg_basebackup: write-ahead log end point: 0/2000100
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: syncing data to disk ...
pg_basebackup: base backup completed

备份过程完成后,会在data目录下创建了一个standby.signal文件,并将primary_conninfo写入postgresql.auto.conf文件:

[postgres@CentOS-2 data]$ cat postgresql.auto.conf
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.
primary_conninfo = 'user=replicator password=admin host=10.211.55.11 port=5432 sslmode=disable sslcompression=0 gssencmode=disable krbsrvname=postgres target_session_attrs=any'
primary_slot_name = 'pgstandby1'

启动从节点服务:

service postgresql start

四、验证主从同步

首先在主节点中使用 postgres 用户查看复制插槽信息:

[postgres@localhost ~]$ psql -c "\x" -c "SELECT * FROM pg_replication_slots"
Expanded display is on.
-[ RECORD 1 ]-------+-----------
slot_name           | pgstandby1
plugin              |
slot_type           | physical
datoid              |
database            |
temporary           | f
active              | t
active_pid          | 12331
xmin                |
catalog_xmin        |
restart_lsn         | 0/3000148
confirmed_flush_lsn |

在从服务器中查看从服务器(WAL接收器进程)状态(进程和数据库):

进程状态:

[postgres@CentOS-2 ~]$ ps aux | grep walreceiver | grep -v grep
postgres 11225  0.0  0.0 318820  1868 ?        Ss   17:00   0:00 postgres: walreceiver   streaming 0/3000148

数据库状态:

[postgres@CentOS-2 ~]$ psql -c "\x" -c "SELECT * FROM pg_stat_wal_receiver;"
Expanded display is on.
-[ RECORD 1 ]---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
pid                   | 11225
status                | streaming
receive_start_lsn     | 0/3000000
receive_start_tli     | 1
received_lsn          | 0/3000148
received_tli          | 1
last_msg_send_time    | 2020-11-27 17:05:20.341976+08
last_msg_receipt_time | 2020-11-27 17:05:20.486497+08
latest_end_lsn        | 0/3000148
latest_end_time       | 2020-11-27 17:01:19.763682+08
slot_name             | pgstandby1
sender_host           | 10.211.55.11
sender_port           | 5432
conninfo              | user=replicator password=******** dbname=replication host=10.211.55.11 port=5432 fallback_application_name=walreceiver sslmode=disable sslcompression=0 gssencmode=disable krbsrvname=postgres target_session_attrs=any

接下来在主库中创建一个新的库:

[postgres@localhost ~]$ psql -c "create database repli_test;"
CREATE DATABASE
[postgres@localhost ~]$ psql -c "\l"List of databasesName    |  Owner   | Encoding | Collate | Ctype |   Access privileges
------------+----------+----------+---------+-------+-----------------------postgres   | postgres | UTF8     | C       | C     |repli_test | postgres | UTF8     | C       | C     |template0  | postgres | UTF8     | C       | C     | =c/postgres          +|          |          |         |       | postgres=CTc/postgrestemplate1  | postgres | UTF8     | C       | C     | =c/postgres          +|          |          |         |       | postgres=CTc/postgres
(4 rows)

到从库中查看是否有这个库:

[postgres@CentOS-2 ~]$ psql -c "\l"List of databasesName    |  Owner   | Encoding | Collate | Ctype |   Access privileges
------------+----------+----------+---------+-------+-----------------------postgres   | postgres | UTF8     | C       | C     |repli_test | postgres | UTF8     | C       | C     |template0  | postgres | UTF8     | C       | C     | =c/postgres          +|          |          |         |       | postgres=CTc/postgrestemplate1  | postgres | UTF8     | C       | C     | =c/postgres          +|          |          |         |       | postgres=CTc/postgres
(4 rows)

可以看到数据库信息已经同步,代表当前同步正常。

本文原文链接:https://blog.csdn.net/xzk9381/article/details/110385135,转载请注明出处。如有发现文章中的任何问题,欢迎评论区留言。

使用源码安装 PostgreSQL 12.5 主从集群相关推荐

  1. DJI ManiFold-2G(Nvidia Jetson TX2)源码安装Tensorflow-1.12.0

    Dji ManiFold-2G(Nivida Jetson TX2)源码安装Tensorflow-1.12.0 Cuda 9.0 Jetpack 3.3 Python 3.5 cuDNN 7.4.1( ...

  2. [附源码]计算机毕业设计JAVA面向服装集群企业的个性化定制服务系统

    [附源码]计算机毕业设计JAVA面向服装集群企业的个性化定制服务系统 项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Ec ...

  3. Centos 7环境下源码安装PostgreSQL数据库

    马上就要去实习了,工作内容是搞数据仓库方面的,用的是postgresql关系型数据库,于是自己先来了解下这种数据的用法,之后说说这个数据库和MySQL的关系和区别. 1.Postgresql简介 看了 ...

  4. Dubbo源码学习总结系列三 dubbo-cluster集群模块

    Dubbo集群模块的目的是将集群Invokers构造一个透明的Invoker对象,其中包含了容错机制.负载均衡.目录服务(服务地址集合).路由机制等,为RPC层提供高可用.高并发.自动发现.可治理的S ...

  5. dubbo源码解析(四十一)集群——Mock

    集群--Mock 目标:介绍dubbo中集群的Mock,介绍dubbo-cluster下关于服务降级和本地伪装的源码. 前言 本文讲解两块内容,分别是本地伪装和服务降级,本地伪装通常用于服务降级,比如 ...

  6. [附源码]SSM计算机毕业设计面向服装集群企业的个性化定制服务系统JAVA

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  7. 源码安装postgresql

    参考: 主要:http://www.cnblogs.com/shuaixf/archive/2011/11/29/2268378.html http://blog.chinaunix.net/uid- ...

  8. 【Nacos】源码之服务端AP架构集群节点的心跳检测

    当Nacos服务端启动时怎么知道集群中有哪些节点?当新的节点加入集群或者集群中有节点下线了,集群之间可以通过健康检查发现.健康检查的频率是怎么样的?节点的状态又是如何变动的?状态的变动又会触发什么动作 ...

  9. PostGreSQL(1)-源码安装

    目录 简述 一.格式化磁盘 二.源码安装 PostGreSql 1. 安装 readline-devel 2. 安装 PostGresql 3. 设置环境变量 三. 初始化 1. 设置运行用户 2. ...

最新文章

  1. 一条数据的漫游奇遇记
  2. ntop linux,Linux下开源监控软件Ntop的性能提升方案
  3. 数据结构--二叉树--路径 假设二叉树采用二叉链表方式存储, root指向根结点,node 指向二叉树中的一个结点, 编写函数 path,计算root到 node 之间的路径,(该路径包括root结
  4. 使用Spring Reactor Core进行分散收集
  5. gdb tui的使用
  6. 动词ing基本用法_如果实在分不清英语动名词和现在分词,那就直接学习-ing分词...
  7. php 子进程_PHP 多进程入门
  8. Hadoop生态系统常用组件导图
  9. scrapy实例三 【豆瓣电影Top250】
  10. dsp 链接命令文件的写法
  11. 四川2021年5月计算机二级报名时间,四川2021年3月计算机等级考试什么时候报名...
  12. AtCoder题解——Beginner Contest 168——E - ∙ (Bullet)
  13. 腾讯2019广告算法大赛总结
  14. CommonAPI-SomeIP 使用
  15. Dart Web开发环境搭建及新建运行项目
  16. backtrack渗透测试中常用的命令总结
  17. 解决手机浏览器无法显示本地html文件
  18. 螃蟹保存方法保存时间_活面包蟹怎么保存?面包蟹能保存多久
  19. STM32F103C8T6下载电路设计
  20. Blender插件开发:bpy.utils模块

热门文章

  1. Bailian4104 单词翻转(POJ NOI0107-27)【堆栈+字符流】
  2. 【清单】—— 编程方法、整洁代码与重构
  3. 树莓派相机操作 —— luvcview 的安装、raspistill:摄像头命令
  4. TensorFlow 学习(七) — 常用函数 api、tf.nn、tf.keras
  5. 数据集(benchmark)、常用数据集的解析(cifar-10、)
  6. 中英文对照 —— 宗教
  7. return 的理解
  8. 图像(帧)分块机制(patch mechanism)
  9. matlab 可视化(specifier)
  10. 机器学习基础(十二)—— 数学基本理论拾遗