(一)基础准备
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。因此输出为空。
安装软件包有多种方式可选,对于PostgreSQL本文选用的方式是尽量选择yum安装默认版本的软件,以便后期维护。
2.2 安装与初始化pogstresql
三台机器安装过程相同。
(1)安装postgresql postgresql-server
yum install -y postgresql postgresql-server |
(2)查看安装结果。
rpm -qa | grep postgresql |
(3)初始化
service postgresql initdb |
(4)启动
systemctl start postgresql |
(5)开放端口(如果防火墙已经关闭则可以省略)
iptables -I INPUT -p tcp --dport 5432 -j ACCEPT |
(6)验证安装结果,首先输入 su - postgres切换用户,然后输入psql,如下图所示,则安装成功。
2.3 主节点配置
(1)创建用于主从访问的用户
# su - postgres -bash-4.2$ psql postgres=# create role repl login replication encrypted password 'postgres'; |
结果如图所示。
(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
(三)验证主从
3.1查看从节点信息
在主节点切换至psql界面,输入命令。
select client_addr,sync_state from pg_stat_replication; |
若两个从节点全部显示出来,如下图所示,则说明PostgreSQL集群搭建成功。
3.2 读写测试
(1)在主节点写数据,从节点读数据。
在主节点,切换到psql界面
create database test; |
可以看见提示创建成功。
在从节点上查看分别在创建之前和创建之后查看数据库。可以看见,数据库同步了。
(2)在从节点写数据
可以看见,提示,从节点是个只读数据库。