千家信息网

PostgresSQL 主从搭建

发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,由于工作需要,最近开始接触各种数据库,并尝试各种数据库产品的高可用方案。今天分享的是postgresSQL的主从配置,其实还是蛮简单的,跟随本文的步骤,保证能实现PG主从的搭建。1. 安装环境192.
千家信息网最后更新 2025年01月21日PostgresSQL 主从搭建

由于工作需要,最近开始接触各种数据库,并尝试各种数据库产品的高可用方案。

今天分享的是postgresSQL的主从配置,其实还是蛮简单的,跟随本文的步骤,保证能实现PG主从的搭建。


1. 安装环境

192.168.0.136 主库192.168.0.160 从库PORT: 5432USR: postgres

2. 主库已经运行一段时间,检查主库的version,保证主从数据库的version相同。

# psql --versionpsql (PostgreSQL) 9.4.11# rpm -qa|grep postgrespostgresql94-libs-9.4.11-1PGDG.rhel6.x86_64postgresql94-server-9.4.11-1PGDG.rhel6.x86_64postgresql94-9.4.11-1PGDG.rhel6.x86_64

3. 在从库上安装相同版本的软件

检查安装情况,已经安装和primary相同的软件版本

# rpm -qa|grep postgrespostgresql94-libs-9.4.11-1PGDG.rhel6.x86_64postgresql94-server-9.4.11-1PGDG.rhel6.x86_64postgresql94-9.4.11-1PGDG.rhel6.x86_64

4. 查询主库的数据库位置

# su - postgres$  echo $PGDATA/var/lib/pgsql/9.4/data$ cd /var/lib/pgsql/9.4/data$ lsbase    pg_clog      pg_hba.conf    pg_log      pg_multixact pg_replslot  pg_snapshots  pg_stat_tmp  pg_tblspc    PG_VERSION  postgresql.auto.conf  postmaster.opts global  pg_dynshmem  pg_ident.conf   pg_logical  pg_notify     pg_serial    pg_stat       pg_subtrans   pg_twophase  pg_xlog     postgresql.conf       postmaster.pid

确认配置文件位置

postgres=# show config_file;  config_file               ----------------------------------------- /var/lib/pgsql/9.4/data/postgresql.conf

查看数据文件目录

postgres=# show data_directory;     data_directory      ------------------------- /var/lib/pgsql/9.4/data

5. 准备修改主库的参数文件,先查询一下pg_hba.conf已有的参数内容

$ cat pg_hba.conf|grep -v '^#'local   all             all                                     peerhost    all             all             0.0.0.0/0            trusthost    all             all             ::1/128             ident

6. 在主库的pg_hba.conf中添加

$ more pg_hba.confhost    replication     replica     192.168.0.160                 md5

这样,就设置了replica这个用户可以从192.168.0.160 对应的网段进行流复制请求。


7. 在主库给postgres设置密码,登录和备份权限。

$psqlpostgres# CREATE ROLE replica login replication encrypted password 'replica123'

8. 修改postgresql.conf,注意设置下下面几个地方:

wal_level = hot_standby       # 这个是设置主为wal的主机max_wal_senders = 10           # 这个设置了可以最多有几个流复制连接,差不多有几个从,就设置几个wal_keep_segments = 256        # 设置流复制保留的最多的xlog数目wal_sender_timeout = 60s       # 设置流复制主机发送数据的超时时间max_connections = 100           # 这个设置要注意下,从库的max_connections必须要大于主库的archive_mode = onarchive_command = 'cp %p /var/lib/pgsql/9.4/archive/%f'

9. 创建对应archive log存放路径

mkdir -p /var/lib/pgsql/9.4/archive/

10. 重启主库,让配置生效

# service postgresql-9.4 startStarting postgresql-9.6 service:                           [  OK  ]

11. 在从库远程连接主数据库,验证replica用户是否可以正常访问

 psql -h IP-address -p 5432 dbname usename   psql -h 192.168.0.136 -p 5432 postgres replica

12. 然后在主库做一次基础备份(后面的Hot-standby主要使用data目录下文件):

postgres=# SELECT pg_start_backup('bak20170905');$tar czvf /var/lib/pgsql/9.4/backups/backup_data.tar.gz.20170905 /var/lib/pgsql/9.4/datapostgres=# SELECT pg_stop_backup();

13. 将备份文件sftp到从库,并解压,替换原有的data目录

cd  /var/lib/pgsql/9.4/mv data data_bkmv backup_data.tar.gz.20170905 backup_data.tar.gztar -xzvf backup_data.tar.gz

14. 删除一些就的身份信息,归档日志文件等

rm -rf data/pg_xlog/mkdir -p data/pg_xlog/archive_statusrm data/postmaster.pid

15. 查找并拷贝recovery.conf.sample文件到data目录下

find / -name recovery.conf.sample/root/postgresql/postgresql-9.2.20/src/backend/access/transam/recovery.conf.sample /usr/pgsql-9.4/share/recovery.conf.sample复制cp /usr/pgsql-9.4/share/recovery.conf.sample /var/lib/pgsql/9.4/data/recovery.conf

16. 然后编辑recovery.conf:

standby_mode = onrestore_command = 'cp /var/lib/pgsql/9.4/archive/%f %p'   #这个参数,我还需要确认具体含义primary_conninfo = 'host=192.168.0.136 port=5432 user=replica password=replica123'                      # 主服务器的信息以及连接的用户,这条信息最重要recovery_target_timeline = 'latest'

17. 拷贝下面配置文件

cp  /var/lib/pgsql/9.4/data.bk/postgresql.conf  /var/lib/pgsql/9.4/data/postgresql.confcp  /var/lib/pgsql/9.4/data.bk/pg_hba.conf  /var/lib/pgsql/9.4/data/pg_hba.conf

18. 然后编辑pstgresql.conf:

hot_standby = on

19. 启动Hot-Standby:

/usr/pgsql-9.4/bin/postmaster -D /var/lib/pgsql/9.4/data --port=5432

20. 验证是否部署成功

在主节点上执行,验证已经成功搭建,说明5.160是从服务器,在接收流,而且是异步流复制。

postgres=# select client_addr,sync_state from pg_stat_replication; client_addr | sync_state -------------+------------ 192.168.0.160 | async

21. 查询更多数据同步信息:

postgres=# select usename,application_name,client_addr,client_port,backend_start,backend_xmin,state,sent_location,write_location,flush_location,replay_location,sync_priority,sync_state  from pg_stat_replication; usename | application_name | client_addr | client_port |         backend_start         | backend_xmin |   state   | sent_location | write_location | flush_location | replay_location | sync_priority | sync_state ---------+------------------+-------------+-------------+-------------------------------+--------------+-----------+---------------+----------------+----------------+-----------------+---------------+------------ replica | walreceiver      | 192.168.0.160 |       39375 | 2017-09-05 17:49:22.512393+08 |              | streaming |         5/1049488     | 5/1049488        | 5/1049488      |   5/1049488       |             0 |          async

22. 此外,还可以分别在主、从节点上运行 ps aux | grep postgres 来查看进程:

主服务器上,可以看到有一个 wal sender 进程,还有archiver进程等

# ps aux | grep postgrespostgres  1104  0.0  0.1 324652 15120 ?        S    14:26   0:00 /usr/pgsql-9.4/bin/postmaster -D /var/lib/pgsql/9.4/data                      postgres  1111  0.0  0.0 324652  5844 ?        Ss   14:26   0:00 postgres: wal writer process                              postgres  1113  0.0  0.0 179796  1544 ?        Ss   14:26   0:00 postgres: archiver process   last was 000000010000000500000000.00000060.backuppostgres  8515  0.0  0.0 325448  3108 ?        Ss   17:49   0:00 postgres: wal sender process replica 192.168.0.160(39375) streaming 5/103A1D0

从服务器上,可以看到 wal receiver 进程,和recovering进程正在恢复archive log

$ ps aux | grep postgrespostgres 11508  0.0  0.1 324684 15128 ?        S    17:49   0:00 /usr/pgsql-9.4/bin/postmaster -D /var/lib/pgsql/9.4/datapostgres 11510  0.0  0.0 324796  4336 ?        Ss   17:49   0:00 postgres: startup process   recovering 000000010000000500000001postgres 11513  0.0  0.0 331892  3700 ?        Ss   17:49   0:00 postgres: wal receiver process   streaming 5/103A1D0

23. 可以在下面路径中,看到从库接收的archive log文件

# pwd/var/lib/pgsql/9.4/data/pg_xlog# ls000000010000000500000001  000000010000000500000002  archive_status

至此,PostgreSQL主从流复制安装部署完成。

在主服务器上插入数据或删除数据,在从服务器上能看到相应的变化。从服务器上只能查询,不能插入或删除数据


24. 第12、13、14步骤,可以通过另一种拷贝主库到从库的方法,pg_basebackup命令拷贝文件

pg_basebackup -F p --progress -D /var/lib/pgsql/9.4/data2 -h 192.168.0.136 -p 5432 -U replica --password

进入到/var/lib/pgsql/9.4/data2目录,修改recovery.conf,这个文件可以从pg的安装目录的share文件夹中获取,比如

cp /usr/pgsql-9.6/share/recovery.conf.sample /var/lib/pgsql/9.6/data2/recovery.conf

确保文件夹权限是700,这个很关键,其他权限,不能正常启动

$ chmod 0700 /var/lib/pgsql/9.6/data2

使用下面命令启动standby

$ /usr/pgsql-9.6/bin/postmaster -D /var/lib/pgsql/9.6/data2


文件 数据 服务器 服务 目录 数据库 进程 主从 信息 拷贝 查询 配置 相同 参数 备份 权限 用户 验证 成功 主机 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络技术对传统银行业发展 软件开发区块链各种系统 西南民族大学网络安全 企业管理软件开发公司的使命 台式电脑网络安全密钥 营口计算机软件开发学校 互联网引领科技创新的表现 智能水务系统软件开发语言 西安地理信息系统软件开发 软件开发阶段流程 计算机网络安全有什么性 网络安全中的举报 计算机网络技术的学习内容 数据库工程师和数据库原理 空间数据库概论答案 网络安全的手段不断发展 腾讯轻量级服务器能挂机器人吗 村开展网络安全宣传简报 辽宁专升本数据库应用技术 灞桥区软件开发推荐 网络安全告警学习心得体会 帝国神话云服务器搭建 鸠鸠互联网科技是什么 滨州服务器数据恢复 苏州通信网络技术收费 网络技术的纵向职业群 华为5885服务器管理 软件开发成估算方法有哪些 群晖搭建服务器怎么备案 计算机网络技术初级证书
0