(一)基础准备

1.1  创建三台虚拟机

虚拟机名

IP

hostname

主从划分

pgpool0

192.168.149.236

node236

主节点

pgpool1

192.168.149.237

node237

从节点1

pgpool2

192.168.149.238

node238

从节点2

 1.2  创建三台虚拟机

对于本文部署涉及到的软件版本如下表所示。

操作系统发行版本

CentOS Linux release 7.8.2003 (Core)

操作系统版本

Linux version 3.10.0-1127.el7.x86_64

PostgreSQL

9.2.24

pgpool-II

3.4.6

本地虚拟化软件

VMware® Workstation 15 Pro

(二)安装软件包 

2.1  查看软件版本

安装之前首先查看软件是否已经安装。输入命令

rpm -qa | grep postgresql

一般来讲,从虚拟机安装系统,自然是不会安装PostgreSQL。因此输出为空。

postgres集群组件 pg 集群部署_数据库

安装软件包有多种方式可选,对于PostgreSQL本文选用的方式是尽量选择yum安装默认版本的软件,以便后期维护。

2.2 安装与初始化pogstresql

三台机器安装过程相同。

(1)安装postgresql postgresql-server

yum install -y postgresql postgresql-server

(2)查看安装结果。

rpm -qa | grep postgresql

postgres集群组件 pg 集群部署_IP_02

(3)初始化

service postgresql initdb

(4)启动

systemctl start postgresql

(5)开放端口(如果防火墙已经关闭则可以省略)

iptables -I INPUT -p tcp --dport 5432 -j ACCEPT

(6)验证安装结果,首先输入 su - postgres切换用户,然后输入psql,如下图所示,则安装成功。

postgres集群组件 pg 集群部署_数据库_03

 

2.3 主节点配置

(1)创建用于主从访问的用户

# su - postgres

-bash-4.2$ psql

postgres=# create role repl login replication encrypted password 'postgres';

结果如图所示。

postgres集群组件 pg 集群部署_postgres集群组件_04

(2)在pg_hba.conf和postgresql.conf中增加配置内容

pg_hba.conf是对访问权限的以下配置,需要根据实际情况配置。其前两行中192.168.149.237和192.168.149.238是从节点的IP,用于主从的配置。repl是刚刚创建的用户。最后一行是用于子网内客户端的登录。

# vi /var/lib/pgsql/data/pg_hba.conf

host    replication    repl    192.168.149.236/32    trust

host    replication    repl    192.168.149.237/32    trust

host    replication    repl    192.168.149.238/32    trust

host    all    all    192.168.149.0/24    md5

postgresql.conf是postgresql本身配置。

# vi /var/lib/pgsql/data/postgresql.conf

addresses = '*'

wal_level = hot_standby

max_wal_senders= 6

wal_keep_segments = 10240

max_connections = 512

参数说明:

listen_addresses = '*'

可以连接服务器使用的IP,一般初始值为 localhost或者local,意味着只有本机可以连接数据库。这里一般设置为 " * " ,允许全部的IP连接数据库。

wal_level = hot_standby

wal_level中有三个主要的参数:minimal、archive和hot_standby

1.minimal是默认的值,它仅写入崩溃或者突发关机时所需要的信息(不建议使用)。

2.archive是增加wal归档所需的日志(最常用)。

3.hot_standby是在备用服务器上增加了运行只读查询所需的信息,一般是在流复制的时候使用到。

max_wal_senders= 6

最多多少个流复制链接

wal_keep_segments = 10240

流复制保留最多的xlog数,xlog这个日志是记录的Postgresql的WAL信息

max_connections = 512

允许的最大并发连接数,简单来说就是同时多少客户端能连接你的数据库。

(3)重启主节点

建议先停止,再启动,而不是重启。之后再验证一下是否启动成功

systemctl stop postgresql

systemctl start postgresql

2.4  从节点配置

从节点的操作建议全部在postgres用户下进行。

(1)切换postgres用户

su - postgres

(2)对主节点的数据进行备份,其中192.168.149.236对应主机IP,repl是上一节主节点创建的用户。

-bash-4.2$ rm -rf /var/lib/pgsql/data/*

-bash-4.2$ pg_basebackup -h 192.168.149.236 -U repl -D /var/lib/pgsql/data -X stream -P

(3)拷贝recovery.conf,编辑recovery.conf内容,其中192.168.149.236对应主机IP,repl是上一节主机创建的用户。

-bash-4.2$ cp /usr/share/pgsql/recovery.conf.sample /var/lib/pgsql/data/recovery.conf

-bash-4.2$ vi /var/lib/pgsql/data/recovery.conf

standby_mode = on

primary_conninfo = 'host=192.168.149.236 port=5432 user=repl password=ct-sfs'

recovery_target_timeline = 'latest'

参数说明。

standby_mode

开启standby模式

primary_conninfo

主节点信息

recovery_target_timeline = 'latest'

指定恢复到一个特定的时间线中。默认值是沿着基础备份建立时的当前时间线恢复。将这个参数设置为latest会恢复到该归档中能找到的最新的时间线。

trigger_file = '/tmp/trigger_file0'

'/tmp/trigger_file0'是一个自定义的文件,在后面主从切换的时候能够用得上。倘若检测到该文件的创建,则PostgreSQL由主节点的状态切换为主。如果下文在failover_stream.sh采用文件触发的办法,则必须配置此项,若采用命令触发方法则无需配置此项,但配置此项对命令方式没有影响。

(4)在postgresql.conf中添加一行,用于开启standby模式。

-bash-4.2$ vi /var/lib/pgsql/data/postgresql.conf

hot_standby = on

(5)退出postgres用户,重启PostgreSQL

postgres集群组件 pg 集群部署_postgresql_05

(三)验证主从

3.1查看从节点信息

在主节点切换至psql界面,输入命令。

select client_addr,sync_state from pg_stat_replication;

若两个从节点全部显示出来,如下图所示,则说明PostgreSQL集群搭建成功。

postgres集群组件 pg 集群部署_IP_06

3.2 读写测试

(1)在主节点写数据,从节点读数据。

在主节点,切换到psql界面

create database test;

可以看见提示创建成功。

postgres集群组件 pg 集群部署_IP_07

在从节点上查看分别在创建之前和创建之后查看数据库。可以看见,数据库同步了。

postgres集群组件 pg 集群部署_数据库_08

(2)在从节点写数据

postgres集群组件 pg 集群部署_IP_09

可以看见,提示,从节点是个只读数据库。