- postgreSQL集群部署
- 1环境准备(三台服务器全部执行)
2.1.1 准备三台虚拟机
| 服务器名称 | 服务器IP | 描述 |
| Pgsql-0 | xxx.xxx.xxx.xxx | master节点 |
| Pgsql-1 | xxx.xxx.xxx.xxx | slave1节点 |
| Pgsql-2 | xxx.xxx.xxx.xxx | slave2节点 |
2.1.2 安装编译需要的相关依赖(三台服务器全部执行)
yum install -y gcc readline-devel zlib-devel openssl-devel automake autoconf libtool make -y
yum install -y bison flex -y
yum install docbook-dtds docbook-style-xsl libxslt -y
2.1.3 创建用户(三台服务器全部执行)
创建组 groupadd postgres
创建用户 useradd -g postgres postgres
-
- 编译安装(三台服务器全部执行)
2.2.1 上传pgsql编译包
上传pgsql的编译包到/opt目录下,并解压

2.2.2 执行编译命令
进入到解压好的目录,执行如下命令:
| ./configure --prefix=/usr/local/pgsql/postgresql-12.2 |

make

| make install |

执行完上面的三个命令后,可以看到在 /usr/local/pgsql 下已经安装好了 pgsql

执行如下命令:
| chown -R postgres:postgres /usr/local/pgsql |
-
- 初始化数据库(三台服务器全部执行)
2.3.1 初始化数据库
执行如下命令,创建数据库文件夹。
| mkdir -p /usr/local/pgsql/postgresql-12.2/data |
执行命令,切换用户。
| su postgres |
执行命令,初始化数据库。
| /usr/local/pgsql/postgresql-12.2/bin/initdb -D /usr/local/pgsql/postgresql-12.2/data/ |
2.3.2 修改配置文件
执行命令:
| cd /usr/local/pgsql/postgresql-12.2/data/ |
| cp postgresql.conf postgresql.conf_bak |
| vi postgresql.conf |
修改 listen_addresses = '*' 前面的#号需要去掉。

增加最大连接数
max_connections = 1000

保存 postgresql.conf 文件。
| vi /usr/local/pgsql/postgresql-12.2/data/pg_hba.conf |
执行命令:
在文件底部,增加如下配置,并保存文件
| host all all 0.0.0.0/0 password |
执行命令:
| su root |
修改环境变量,执行命令
| vi /etc/profile |
在文件末尾,添加如下配置
| export PGHOME=/usr/local/pgsql/postgresql-12.2 export PGDATA=/usr/local/pgsql/postgresql-12.2/data PATH=$PATH:$HOME/bin:$PGHOME/bin |
执行命令,让新增的配置生效
| source /etc/profile |
-
- 数据库操作(master节点)
2.4.1 启动数据库
| su postgres |
| /usr/local/pgsql/postgresql-12.2/bin/pg_ctl -D /usr/local/pgsql/postgresql-12.2/data/ -l logfile start |
2.4.2 修改默认密码
| psql -U postgres |
| ALTER USER postgres with encrypted password '你的密码'; |

2.4.3 停止数据库
| /usr/local/pgsql/postgresql-12.2/bin/pg_ctl -D /usr/local/pgsql/postgresql-12.2/data/ stop |
-
- 集群配置
2.5.1 创建同步用户(master节点)
执行如下命令:
| su postgres |
| psql -U postgres |
| CREATE ROLE rep login replication encrypted password 'rep'; |

2.5.2 修改pg_hba.conf
| vi /usr/local/pgsql/postgresql-12.2/data/pg_hba.conf |
在末尾增加如下配置
| host replication rep 0.0.0.0/0 password |
2.5.3 修改 postgresql.conf文件
配置如下配置
| archive_mode = on #开启归档模式 archive_command = 'cp %p /usr/local/pgsql/postgresql-12.2/data/%f' #归档命令 wal_level = replica #热备模式 |
重启数据库,执行命令:
| /usr/local/pgsql/postgresql-12.2/bin/pg_ctl -D /usr/local/pgsql/postgresql-12.2/data/ stop |
| /usr/local/pgsql/postgresql-12.2/bin/pg_ctl -D /usr/local/pgsql/postgresql-12.2/data/ -l logfile start |
从节点测试连通性
| psql -h 10.10.12.75 -U postgres |
-
- Slave节点配置
2.6.1 删除从库
执行命令:
| su postgres |
| rm -rf /usr/local/pgsql/postgresql-12.2/data/* |
2.6.2 主库同步数据到从库
| su postgres |
| /usr/local/pgsql/postgresql-12.2/bin/pg_basebackup -h (master节点ip) -p 5432 -U rep -Fp -Xs -Pv -R -D /usr/local/pgsql/postgresql-12.2/data/ |
| 输入密码:rep |
2.6.3 修改 standby.signal文件
执行命令:
| vi /usr/local/pgsql/postgresql-12.2/data/standby.signal |
增加配置:
| standby_mode = on |
2.6.4 修改 postgresql.conf 文件
执行命令:
| vi /usr/local/pgsql/postgresql-12.2/data/postgresql.conf |
修改如下配置:
| primary_conninfo = 'host=10.10.12.75 port=5432 user=rep password=rep' wal_level = replica #热备模式 hot_standby = on #说明这台机器不仅用于数据归档,还可以用于数据查询 hot_standby_feedback = on #r出现错误复制,向主机反馈 |
重启数据库,执行命令:
| /usr/local/pgsql/postgresql-12.2/bin/pg_ctl -D /usr/local/pgsql/postgresql-12.2/data/ stop |
| /usr/local/pgsql/postgresql-12.2/bin/pg_ctl -D /usr/local/pgsql/postgresql-12.2/data/ -l logfile start |
-
- 集群测试
2.7.1 检查集群(master节点)
执行如下命令:
| su postgres |
| psql -U postgres |
| select client_addr,sync_state from pg_stat_replication; |
创建测试数据库,执行命令:
| create database test; |
在slave节点查看已经创建的数据库,发现数据已经同步过来了。

2.7.2 从节点创建数据库
执行命令:
| create database test; |
可以看见从节点是个只读数据库



![[离散数学] 函数](https://img-blog.csdnimg.cn/2b8b696d09444c03b1bbae9fe6075fd4.png)











![NSSCTF-[深育杯 2021]Press](https://img-blog.csdnimg.cn/ffcac2e9d6e242abbd0e972387bbe105.png)




