postgres 异步standby 创建

postgres 异步standby 创建

 

说明

 

1、如果要求及时性不是很高(前后几秒钟的差距),那么建议使用postgres的备份数据库可以是异步流复制STANDBY

2、主节点指的是生产库,standby指的是备份库

    3、如无说明,#代表root用户,$代表osdba用户

 

问题

 

1、该测试是在postgres9.3系列完成,已知在postgres9.0系列才开始流复制概念

2、该测试没有测试表空间为自己创建时(默认只有的表空间)的迁移情况,所以迁移时要注意

 

环境

 

  操作系统:CentOS release 6.5 (Final)

  数据库:postgres (9.3.13)

  

异步standby创建

 

 

1、以主节点的相关信息为模板,新建和主节点类似的服务器

 

略过

 

2、检查主节点的编译环境

 

$ pg_config --configure

'--prefix=/usr/local/pgsql' '--with-perl' '--with-python'

 

3、在standby节点模仿主节点进行编译工作,进行三板斧操作

 

# ./configure --prefix=/usr/local/pgsql --with-perl --with-python

# make

# make install

 

4、模仿主节点创建用户名密码,以及.bash_profile环境

   

略过

 

5、在主节点创建用户拥有权限replication

 

   $ psql -d postgres

   

   =# create role replica login REPLICATION ENCRYPTED PASSWORD 'replica

 

6、修改主节点的pg_hba.conf

  

 $ cd $PGDATA

   $ vim pg_hba.conf

   

host    replication    replica          192.168.1.0/24          md5

 

   

7、修改主节点的postgresql.conf

  

 $ cd $PGDATA

   $ vim postgresql.conf

 

    listen_addresses = '*'

    max_wal_senders = 32

    wal_keep_segments = 256

wal_level = hot_standby

hot_standby = on

 

8standby节点执行基础备份

    

    $ pg_basebackup -F p -D $PGDATA -R -x -h 192.168.1.36 -p 5432 -U replica

    $ ls -ls $PGDATA

    

9、检查并修改standby节点的recovery.conf

    

$ vim $PGDATA/recovery.conf

  

standby_mode = 'on'

primary_conninfo = 'user=replica password=replica host=192.168.1.36 port=5432 sslmode=disable sslcompression=1'

 

如果符合上文中standby执行基础备份的脚本密码,就不需要修改

 

10、启动standby节点并检查进程

 

$ pg_ctl start

$ psql

$ ps -ef|grep postgres

 

 

11、测试

 

1、主节点和standby是否同步

 

在主节点上创建一张表,并插入数据,测试standby是否存在表和数据

[osdba@pg36 data]$ psql

psql (9.3.13)

Type "help" for help.

 

osdba=# create table t_1(id int,info text);

CREATE TABLE

osdba=# insert into t_1 select generate_series(1,1000),'good';

INSERT 0 1000

 

[osdba@pg37 data]$ psql

psql (9.3.13)

Type "help" for help.

 

osdba=# \dt

       List of relations

 Schema | Name | Type  | Owner

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

 public | t_1  | table | osdba

(1 row)

 

osdba=# select count(1) from t_1;

 count

-------

  1000

(1 row)

 

2、standby挂掉后,是否影响主节点使用

 

当备机挂掉时,并不影响主机的正常的使用,等备机重新启动时,自动将数据同步

 

[osdba@pg37 data]$ pg_ctl stop

waiting for server to shut down.... done

server stopped

 

[osdba@pg36 data]$ psql

psql (9.3.13)

Type "help" for help.

 

osdba=# insert into t_1 select generate_series(1,1000),'good';

INSERT 0 1000

osdba=# insert into t_1 select generate_series(1,1000),'good';

INSERT 0 1000

 

[osdba@pg37 data]$ pg_ctl start

server starting

[osdba@pg37 data]$ psql

psql (9.3.13)

Type "help" for help.

 

osdba=# select count(1) from t_1;

 count

-------

  3000

(1 row)

 

3、主节点挂掉后,是否影响standby节点使用

 

当主机挂掉时,备机是否可以读取数据,但不允许插入更改数据

 

[osdba@pg37 data]$ psql

psql (9.3.13)

Type "help" for help.

 

osdba=# select count(1) from t_1;

 count

-------

  3000

(1 row)

 

osdba=# insert into t_1 values(1,'1');

ERROR:  cannot execute INSERT in a read-only transaction

 

 

上一篇:RDS SQL Server - 专题分享 - 巧用执行计划缓存之Single-used plans


下一篇:kettle 抽取 sqlite文件