Postgresql流复制安装

  • 版本

Centos6.9+postgresql9.6

  • 单机安装
  1. 下载yum源(不同版本请到官网找对应的yum源https://www.postgresql.org/download/linux/redhat/)

yum install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-6.9-x86_64/pgdg-centos96-9.6-3.noarch.rpm

  1. 安装PostgreSQL客户端

yum install postgresql96

  1. 安装PostgreSQL服务端

yum install postgresql96-server

  1. 安装PostgreSQL拓展包(可选)

yum install postgresql96-devel.x86_64

  1. 安装PostgreSQL的附加模块(可选)

$ yum install postgresql96-contrib.x86_64

#安装目录默认在/usr/pgsql9.6/

  1. 初始化数据库并开启服务(centos版本不同,所用的命令也不同,请参照官网文档)

service postgresql-9.6 initdb

chkconfig postgresql-9.6 on

service postgresql-9.6 start

#数据及配置文件在/var/lib/pgsql/9.6/data/

  1. 安装完成后,操作系统会自动创建一个postgres用户用来管理数据库,为其初始化密码

passwd postgres

123456

  1. 使用postgres用户登录数据库,查看数据库

[[email protected] bin]# su postgres

bash-4.1$ psql

postgres=# \l

                                  List of databases

   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges  

-----------+----------+----------+-------------+-------------+-----------------------

 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |

 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +

           |          |          |             |             | postgres=CTc/postgres

 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +

           |          |          |             |             | postgres=CTc/postgres

(3 rows)

  1. 创建一个数据库,查看

postgres=# CREATE DATABASE mytestdb OWNER postgres;

postgres=# \l

  1. 查看当前使用的数据库

postgres=# select current_database();

 current_database

------------------

 postgres

  1. 切换所连接的数据库

postgres=# \c mytestdb;

You are now connected to database "mytestdb" as user "postgres".

mytestdb=# select current_database();

 current_database

------------------

 mytestdb

(1 row)

  1. 创建表

mytestdb=# create table my_tb(name varchar(6),birth DATE);

CREATE TABLE

mytestdb=# \d

         List of relations

 Schema | Name  | Type  |  Owner  

--------+-------+-------+----------

 public | my_tb | table | postgres

(1 row)

  1. 插入数据,查询数据

mytestdb=# insert into my_tb(name,birth) Values('lisi','1996-11-11');

INSERT 0 1

mytestdb=# select * from my_tb;

 name |   birth   

------+------------

 lisi | 1996-11-11

(1 row)

 

  • 主备流复制-主节点
  1. 主备ip

主:192.168.111.129(上面已经安装了postgresql)

从:192.168.111.130(安装postgresql,)

  1. 在主库中创建复制用户

mytestdb=# CREATE USER repuser REPLICATION LOGIN CONNECTION LIMIT 2 ENCRYPTED PASSWORD '123456';

CREATE ROLE

mytestdb=# \du

                                   List of roles

 Role name |                         Attributes                         | Member of

-----------+------------------------------------------------------------+-----------

 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

 repuser   | Replication                                               +| {}

           | 2 connections                                              |

  1. 在主节点的配置

配置/var/lib/pgsql/9.6/data/pg_hba.conf,添加以下配置项

host   replication     repuser          192.168.111.129/32         md5

#md5表示从库basebackup操作时需要repuser的输入密码,trust不用密码

  1. 设置主库/var/lib/pgsql/9.6/data/postgresql.conf添加内容如下

#监听

listen_addresses = '*'

#主从设置为热备模式,流复制必选参数

wal_level = hot_standby

#流复制允许的连接进程,一般同standby数量一致

max_wal_senders = 2

#流复制在没有基于文件的连续归档时,主服务器可能在备机收到WAL日志前回收这些旧的WAL,此时备机需要重新从一个新的基础备份初始化;可设置wal_keep_segments为一个足够高的值来确保旧的WAL段不会被太早重用;1个WAL日志为16MB,所以在设置wal_keep_segments时,在满足空间的前提下可以尽量设置大一些

wal_keep_segments = 64

#默认参数,非主从配置相关参数,表示到数据库的连接数,一般从库做主要的读服务时,设置值需要高于主库

max_connections = 100

  1. 重启主服务

service postgresql-9.6 restart

  • 主备流复制-从节点(先停止服务)
  1. 需要确认备库是否有与主库相同的数据目录,如果有移除

              [[email protected] /]# cd /var/lib/pgsql/9.6/

              [[email protected] 9.6]# ls

              backups  data  pgstartup.log

              [[email protected] 9.6]# mv data data_bk

              [[email protected] 9.6]# mkdir data

              [[email protected] 9.6]# ls

              backups  data  data_bk  pgstartup.log

              [[email protected] 9.6]# chown -R postgres data

                 [[email protected] 9.6]# chmod 700 data

  1. 基础备份

       [[email protected] ~]# su postgres

          bash-4.1$ pg_basebackup -h 192.168.111.129 -p 5432 -U repuser -F p -P -D /var/lib/pgsql/9.6/data/

       #-h,主库主机,-p,主库服务端口;

       #-U,复制用户;

       #-F,p是默认输出格式,输出数据目录和表空间相同的布局,t表示tar格式输出;

       #-P,同--progress,显示进度;

       #-D,输出到指定目录;

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

  1. 从库配置文件postgresql.conf

       #在基础备份时,初始化文件是从主库复制来的,所以配置文件一致,可将wal_level,max_wal_senders与wal_keep_segments等参数注释,以下是新增或修改的参数

       [[email protected]_standby ~]# vim /var/lib/pgsql/9.6/data/postgresql.conf

       #在备份的同时允许查询

       hot_standby = on

       #可选,流复制最大延迟

       max_standby_streaming_delay = 30s

       #可选,从向主报告状态的最大间隔时间

       wal_receiver_status_interval = 10s

      

       #可选,查询冲突时向主反馈

       hot_standby_feedback = on

       #默认参数,非主从配置相关参数,表示到数据库的连接数,一般从库做主要的读服务时,设置值需要高于主库

           max_connections = 1000

  1. 恢复文件recovery.conf并配置

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

chown postgres:postgres /var/lib/pgsql/9.6/data/recovery.conf

       vim /var/lib/pgsql/9.6/data/recovery.conf

       #指明从库身份

       standby_mode = on

       #连接到主库信息

       primary_conninfo = 'host=192.168.111.129 port=5432 user=repuser password=123456'  

       #同步到最新数据

       recovery_target_timeline = 'latest'    

       #指定触发文件,文件存在时,将触发从库提升为主库,前提是必须设置”standby_mode = on”;如果不设置此参数,也可采用”pg_ctl promote“触发从库切换成主库

          #trigger_file = ‘/var/lib/pgsql/9.6/data/trigger_activestandby’

  1. 启动从库

[[email protected] ~]# service postgresql-9.6 start

  • 测试
  1. 测试查看主从进程

Postgresql流复制安装

  1. 数据同步测试

Postgresql流复制安装

Postgresql流复制安装

  1. 从节点插入数据

Postgresql流复制安装

从节点只能读

  1. 分别查看主从状态./pg_controldata /var/lib/pgsql/9.6/data/

Postgresql流复制安装

Postgresql流复制安装

  1. 干掉主su - postgres -c "/usr/pgsql-9.6/bin/pg_ctl stop -m fast"

Postgresql流复制安装

  1. **从su - postgres -c "/usr/pgsql-9.6/bin/pg_ctl promote"

Postgresql流复制安装

Postgresql流复制安装

 

参考:https://www.cnblogs.com/netonline/archive/2017/10/13/7660767.html