码迷,mamicode.com
首页 > 数据库 > 详细

PostgreSQL同步复制故障测试

时间:2015-09-06 16:28:56      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:

一、 备用同步复制节点down了

postgres=# select * from pg_stat_replication ;
  pid  | usesysid | usename  | application_name | client_addr | client_hostname | client_port |         backend_start         | backend_xmin |   state   | sent_location | write_location | fl
ush_location | replay_location | sync_priority | sync_state 
-------+----------+----------+------------------+-------------+-----------------+-------------+-------------------------------+--------------+-----------+---------------+----------------+---
-------------+-----------------+---------------+------------
 12262 |       10 | postgres | node3            | 172.17.5.47 |                 |       48691 | 2015-09-06 14:44:52.674976+08 |       400592 | streaming | 1/740002E8    | 1/740002E8     | 1/
740002E8     | 1/740002E8      |             2 | potential
 12263 |       10 | postgres | node2            | 172.17.5.46 |                 |       35271 | 2015-09-06 14:44:52.677004+08 |       400592 | streaming | 1/740002E8    | 1/740002E8     | 1/
740002E8     | 1/740002E8      |             1 | sync
(2 rows)

postgres=# create table test1 ( id bigint);
CREATE TABLE
postgres=# \d test1
    Table "public.test1"
 Column |  Type  | Modifiers 
--------+--------+-----------
 id     | bigint |

在mastrer上查看是正常工作的,现在把172.17.5.47节点停机

pg_ctl -D /data/pg940_data/ -mf stop

在master上验证

postgres=# select * from pg_stat_replication ;
  pid  | usesysid | usename  | application_name | client_addr | client_hostname | client_port |         backend_start         | backend_xmin |   state   | sent_location | write_location | fl
ush_location | replay_location | sync_priority | sync_state 
-------+----------+----------+------------------+-------------+-----------------+-------------+-------------------------------+--------------+-----------+---------------+----------------+---
-------------+-----------------+---------------+------------
 12263 |       10 | postgres | node2            | 172.17.5.46 |                 |       35271 | 2015-09-06 14:44:52.677004+08 |       400593 | streaming | 1/74001678    | 1/74001678     | 1/
74001678     | 1/74001678      |             1 | sync
(1 row)

postgres=# create table test2 ( id bigint); 
CREATE TABLE
postgres=# \d test2
    Table "public.test2"
 Column |  Type  | Modifiers 
--------+--------+-----------
 id     | bigint |

master节点和同步复制slave节点可以正常工作

二、 同步复制slave节点down了

postgres=# select * from pg_stat_replication ;
  pid  | usesysid | usename  | application_name | client_addr | client_hostname | client_port |         backend_start         | backend_xmin |   state   | sent_location | write_location | fl
ush_location | replay_location | sync_priority | sync_state 
-------+----------+----------+------------------+-------------+-----------------+-------------+-------------------------------+--------------+-----------+---------------+----------------+---
-------------+-----------------+---------------+------------
 12377 |       10 | postgres | node3            | 172.17.5.47 |                 |       55722 | 2015-09-06 15:10:02.882202+08 |       400594 | streaming | 1/740029F0    | 1/740029F0     | 1/
740029F0     | 1/740029F0      |             2 | potential
 12263 |       10 | postgres | node2            | 172.17.5.46 |                 |       35271 | 2015-09-06 14:44:52.677004+08 |       400594 | streaming | 1/740029F0    | 1/740029F0     | 1/
740029F0     | 1/740029F0      |             1 | sync
(2 rows)

postgres=# create table test3 ( id bigint );
CREATE TABLE
postgres=# \d test3
    Table "public.test3"
 Column |  Type  | Modifiers 
--------+--------+-----------
 id     | bigint |

在mastrer上查看是正常工作的,现在把172.17.5.46节点停机

pg_ctl -D /data/pg940_data/ -mf stop

在master上验证

postgres=# select * from pg_stat_replication ;
  pid  | usesysid | usename  | application_name | client_addr | client_hostname | client_port |         backend_start         | backend_xmin |   state   | sent_location | write_location | fl
ush_location | replay_location | sync_priority | sync_state 
-------+----------+----------+------------------+-------------+-----------------+-------------+-------------------------------+--------------+-----------+---------------+----------------+---
-------------+-----------------+---------------+------------
 12377 |       10 | postgres | node3            | 172.17.5.47 |                 |       55722 | 2015-09-06 15:10:02.882202+08 |       400595 | streaming | 1/74004C10    | 1/74004C10     | 1/
74004C10     | 1/74004C10      |             2 | sync
(1 row)
postgres=# create table test4 ( id bigint );  
CREATE TABLE
postgres=# \d test4
    Table "public.test4"
 Column |  Type  | Modifiers 
--------+--------+-----------
 id     | bigint |

可以看出同步复制节点切换到了node3,并且是可以正常工作的

三、 slave节点都down掉了

postgres=# select * from pg_stat_replication ;
  pid  | usesysid | usename  | application_name | client_addr | client_hostname | client_port |         backend_start         | backend_xmin |   state   | sent_location | write_location | fl
ush_location | replay_location | sync_priority | sync_state 
-------+----------+----------+------------------+-------------+-----------------+-------------+-------------------------------+--------------+-----------+---------------+----------------+---
-------------+-----------------+---------------+------------
 12377 |       10 | postgres | node3            | 172.17.5.47 |                 |       55722 | 2015-09-06 15:10:02.882202+08 |       400596 | streaming | 1/74005F38    | 1/74005F38     | 1/
74005F38     | 1/74005F38      |             2 | sync
(1 row)

postgres=# create table test5 ( id bigint );
CREATE TABLE
postgres=# \d test5
    Table "public.test5"
 Column |  Type  | Modifiers 
--------+--------+-----------
 id     | bigint |

在mastrer上查看是正常工作的,现在把172.17.5.47节点也停机

pg_ctl -D /data/pg940_data/ -mf stop

在master上验证

postgres=# select * from pg_stat_replication ;
 pid | usesysid | usename | application_name | client_addr | client_hostname | client_port | backend_start | backend_xmin | state | sent_location | write_location | flush_location | replay_l
ocation | sync_priority | sync_state 
-----+----------+---------+------------------+-------------+-----------------+-------------+---------------+--------------+-------+---------------+----------------+----------------+---------
--------+---------------+------------
(0 rows)

postgres=# create table test6 ( id bigint );

master上不能更新了,会一直等待,直到synchronous_standby_names中的一个节点连接上master节点,但是可以ctrl+c取消,那样会进行本地提交

^CCancel request sent
WARNING:  canceling wait for synchronous replication due to user request
DETAIL:  The transaction has already committed locally, but might not have been replicated to the standby.
CREATE TABLE
postgres=# \d test6 
    Table "public.test6"
 Column |  Type  | Modifiers 
--------+--------+-----------
 id     | bigint |

四、 结论

在同步复制中:

  1. 同步的slave节点down掉会将后面的节点切换为同步节点;

  2. 非同步slave节点down掉不会进行切换;

  3. 如果slave节点没有全部down掉,不会影响master的使用,如果都down掉的话,master则不能进行提交。

PostgreSQL同步复制故障测试

标签:

原文地址:http://my.oschina.net/u/2426299/blog/501738

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!