- 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; |
可以看见从节点是个只读数据库