PostgreSQL主从复制部署

水深无声 2022-04-05 12:25 483阅读 0赞

目录

1.主从介绍

2.主从机器分配

3.安装postgresql

4.主库配置

4.1 创建复制用户,进行主从同步使用

4.2 主库上配置从库采用repl账号

4.3 修改主库配置文件data目录下的postgresql.conf,按照下面的配置进行修改。

4.4 重启主库服务

5.从库配置

5.1 从库安装完成后,不初始化,若已经初始化,删除其data目录

5.2 从库配置文件配置,根据下面的配置进行修改。

5.3 创建恢复文件recovery.conf

5.4 启动从库服务

  1. 验证主从配置

1.主从介绍

  1. PostgreSQL9之后引入了主从的流复制机制,集群中主库工作在连续归档模式下,备库工作在恢复模式下,备库持续从主服务器读取WAL文件;连续归档不需要对数据库表做任何改动,对主服务器的性能影响相对较低。我们采取的是基于文件日志传送和流复制的方式。

2.主从机器分配



















IP地址 DB版本 主从关系
172.18.1.23 9.6.3
172.18.1.24 9.6.3

3.安装postgresql

postgresql的单机部署

我们安装在2个机器上安装postgresql,上面的连接是单机部署文档。

4.主库配置

4.1 创建复制用户,进行主从同步使用

  1. psql (9.6.3)
  2. Type "help" for help.
  3. #授权
  4. postgres=# create role repl login replication encrypted password 'baifendian';
  5. CREATE ROLE

4.2 主库上配置从库采用repl账号

  1. vim /opt/postgresql/data/pg_hba.conf
  2. #只需要台添加下面两行,repl是用来做备份的用户,后面的172.18.1.0/24是该网段内的IP地址
  3. host replication repl 172.18.1.0/24 md5
  4. host all repl 172.18.1.0/24 trust

4.3 修改主库配置文件data目录下的postgresql.conf,按照下面的配置进行修改。

  1. [root@bfd-yiz-1p23 /opt/postgresql/data]# cat postgresql.conf |grep -v "^#"|grep -v "^$"|grep -v $'^\t'
  2. listen_addresses = '*' # what IP address(es) to listen on;
  3. port = 5432 # (change requires restart)
  4. max_connections = 512 # (change requires restart)
  5. shared_buffers = 128MB # min 128kB
  6. dynamic_shared_memory_type = posix # the default is the first option
  7. wal_level = replica # minimal, replica, or logical
  8. archive_mode = on # enables archiving; off, on, or always
  9. archive_command = 'cp %p /opt/postgresql/data/pg_archive/%f' # command to use to archive a logfile segment
  10. max_wal_senders = 6 # max number of walsender processes
  11. wal_keep_segments = 10240 # in logfile segments, 16MB each; 0 disables
  12. wal_sender_timeout = 60s # in milliseconds; 0 disables
  13. log_directory = '/opt/postgresql/log' # directory where log files are written

修改完,要创建刚刚配置的一些目录结构:

  1. [root@bfd-yiz-1p23 /opt/postgresql/data]# mkdir /opt/postgresql/data/pg_archive
  2. [root@bfd-yiz-1p23 /opt/postgresql]# mkdir log

4.4 重启主库服务

  1. pg_ctl -D /opt/postgresql/data -l logfile restart

查看进程:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d5bDk1Mjc_size_16_color_FFFFFF_t_70

5.从库配置

5.1 从库安装完成后,不初始化,若已经初始化,删除其data目录

这时候会把主节点那边的数据文件都拷贝过来了。

  1. [postgres@bfd-yiz-1p24 /opt/postgresql/data]$ rm -rf *
  2. [postgres@bfd-yiz-1p24 /opt/postgresql/data]$ ls
  3. [postgres@bfd-yiz-1p24 /opt/postgresql/data]$
  4. [postgres@bfd-yiz-1p24 /opt/postgresql/data]$ pg_basebackup -h 172.18.1.23 -U repl -D /opt/postgresql/data -X stream -P
  5. Password:
  6. 39209/39209 kB (100%), 1/1 tablespace
  7. [postgres@bfd-yiz-1p24 /opt/postgresql/data]$ ls #看到数据,文件都已经备份过来了
  8. backup_label.old pg_archive pg_hba.conf pg_notify pg_stat pg_twophase postgresql.conf
  9. base pg_clog pg_ident.conf pg_replslot pg_stat_tmp PG_VERSION postmaster.opts
  10. global pg_commit_ts pg_logical pg_serial pg_subtrans pg_xlog postmaster.pid
  11. logfile pg_dynshmem pg_multixact pg_snapshots pg_tblspc postgresql.auto.conf

备注:
-h,主库主机,-p,主库服务端口;
-U,复制用户;
-F,p是默认输出格式,输出数据目录和表空间相同的布局,t表示tar格式输出;
-P,同—progress,显示进度;
-D,输出到指定目录;

因为主库采用的是md5认证,这里需要密码认证。

5.2 从库配置文件配置,根据下面的配置进行修改。

  1. [root@bfd-yiz-1p24 /opt/postgresql/data]# cat postgresql.conf |grep -v "^#"|grep -v "^$"|grep -v $'^\t'
  2. listen_addresses = '*' # what IP address(es) to listen on;
  3. port = 5432 # (change requires restart)
  4. max_connections = 1000 # (change requires restart)
  5. shared_buffers = 128MB # min 128kB
  6. dynamic_shared_memory_type = posix # the default is the first option
  7. wal_level = replica # minimal, replica, or logical
  8. archive_mode = on # enables archiving; off, on, or always
  9. archive_command = 'cp %p /opt/postgresql/data/pg_archive/%f' # command to use to archive a logfile segment
  10. wal_sender_timeout = 60s # in milliseconds; 0 disables
  11. hot_standby = on # "on" allows queries during recovery
  12. max_standby_streaming_delay = 30s # max delay before canceling queries
  13. wal_receiver_status_interval = 10s # send replies at least this often
  14. hot_standby_feedback = on # send info from standby to prevent
  15. log_directory = '/opt/postgresql/log' # directory where log files are written,

5.3 创建恢复文件recovery.conf

  1. [postgres@bfd-yiz-1p24 /opt/postgresql]$ cp /opt/postgresql/share/recovery.conf.sample recovery.conf
  2. # 调整参数:
  3. recovery_target_timeline = 'latest' #同步到最新数据
  4. standby_mode = on #指明从库身份
  5. primary_conninfo = 'host=172.18.1.23 port=5432 user=repl password=baifendian' #连接到主库信息

5.4 启动从库服务

  1. pg_ctl -D /opt/postgresql/data -l logfile restart

查看你进程

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d5bDk1Mjc_size_16_color_FFFFFF_t_70 1

6. 验证主从配置

  1. [postgres@bfd-yiz-1p23 /opt/postrgesql]$ psql
  2. psql (9.6.3)
  3. Type "help" for help.
  4. postgres=# select client_addr,sync_state from pg_stat_replication;
  5. client_addr | sync_state
  6. -------------+------------
  7. 172.18.1.24 | async
  8. (1 row)
  9. postgres=#

在主机器上创建数据库,检查从数据库上是否同步。

主:我们创建一个数据库wyl

  1. [postgres@bfd-yiz-1p23 /opt/postrgesql]$ psql
  2. psql (9.6.3)
  3. Type "help" for help.
  4. postgres=# select client_addr,sync_state from pg_stat_replication;
  5. client_addr | sync_state
  6. -------------+------------
  7. 172.18.1.24 | async
  8. (1 row)
  9. postgres=# create database wyl;

从:在主上创建了一个wyl数据库,在从上我们发现也有一个对应的wyl数据库对应。

  1. psql (9.6.3)
  2. Type "help" for help.
  3. postgres=# \l
  4. List of databases
  5. Name | Owner | Encoding | Collate | Ctype | Access privileges
  6. -----------+----------+----------+-------------+-------------+-----------------------
  7. postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
  8. template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
  9. | | | | | postgres=CTc/postgres
  10. template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
  11. | | | | | postgres=CTc/postgres
  12. wyl | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
  13. (4 rows)
  14. postgres=#

发表评论

表情:
评论列表 (有 0 条评论,483人围观)

还没有评论,来说两句吧...

相关阅读