Postgres 搭建主从集群
简介本文介绍如何搭建 Postgres 主从集群操作系统为 CentOS7数据库版本是 postgresql-15官网地址https://www.postgresql.org/安装参考官方提供的下面这几条命令进行安装命令如下sudoyuminstall-yhttps://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpmsudoyuminstall-ypostgresql15-serversudo/usr/pgsql-15/bin/postgresql-15-setup initdbsudosystemctlenablepostgresql-15sudosystemctl start postgresql-15为防止网络原因rpm文件最好是浏览器下载下来传到服务器上离线安装若执行第二步sudo yum install -y postgresql15-server出现下面这些报错敲下面这两行命令解决yum-config-manager--disablepgdg12 yum-config-manager--disablepgdg13安装过程如下连接测试连接相关参考下面这篇博客需要进行一些设置这里不再赘述PostgreSQL安装/卸载CentOS、Windows搭建如下在这两台服务器上各自搭建了 Postgres 数据库账号均为postgres/123456关于如何设置账号参考下面这篇博客如何设置postgresql数据库的账户密码1主从库设置postgres 数据库主要的配置文件是以下两个postgresql.conf配置文件pg_hba.conf客户端访问权限控制文件搭建主从postgresql.conf需进行以下配置listen_addresses*wal_levelreplica max_wal_senders10wal_keep_size1GBmax_replication_slots10hot_standbyon这些配置在初始配置文件中都有有的被注释了打开即可另外一个配置文件pg_hba.conf配置如下末尾需开放主从复制的连接权限严格来的话这里需指定对应网段尽可能缩小连接访问范围设置完都需要重启 Postgres 数据库2主库设置以192.168.101.16为主库在服务器上敲下面的命令进行配置su- postgres psql -- 创建复制用户密码 Rep123456 CREATEUSERrepuser WITH REPLICATION PASSWORDRep123456;-- 创建物理复制槽防止主库wal日志清理导致从库断连 SELECT pg_create_physical_replication_slot(slot_slave_18);-- 查看确认创建成功 SELECT slot_name,active FROM pg_replication_slots;\q也可以直接在连接工具Datagrip中直接敲 SQL 语句3从库配置敲下面的命令systemctl stop postgresql-15# 备份原有数据防止出错回滚mv/var/lib/pgsql/15/data /var/lib/pgsql/15/data_bak# 新建空目录mkdir/var/lib/pgsql/15/datachownpostgres:postgres /var/lib/pgsql/15/datachmod700/var/lib/pgsql/15/data切换 Postgres 用户敲下面的命令设置主库su- postgres pg_basebackup-h192.168.101.16-p5432-Urepuser-D/var/lib/pgsql/15/data-Fp-Xs-P-R如下切回 root 用户重启 Postgres 数据库systemctl start postgresql-15 systemctlenablepostgresql-15验证以上就搭建完成了可敲下面的命令验证1主库验证su- postgres psql SELECT pid,usename,application_name,state,write_lag FROM pg_stat_replication;或在连接工具中敲 SQL 语句SELECTpid,usename,application_name,state,write_lagFROMpg_stat_replication;如下可见主从复制的进程记录表示主从复制在进行中2从库验证敲下面的命令su- postgres psql -- 返回true代表是备库 SELECT pg_is_in_recovery();-- 查看wal接收回放进度 SELECT pg_last_wal_receive_lsn(),pg_last_wal_replay_lsn();或者在连接工具中敲下面的 SQL-- 返回true代表是备库SELECTpg_is_in_recovery();-- 查看wal接收回放进度SELECTpg_last_wal_receive_lsn(),pg_last_wal_replay_lsn();如下使用在主库中创建一个数据库表插入一条记录CREATETABLEtest_sync(idint);INSERTINTOtest_syncVALUES(1);如下通过工具直接看从库数据库表和记录都同步过来了主库新增记录从库实时同步非常 Nice