12.7 处理故障转移和删除节点

在本节中,我们将看看故障切换如何处理。我们还将看看如何使用安全可靠的方法添加节点到Postgres-XC设置以及如何从Postgres-XC设置删除节点。

12.7.1 处理节点故障转移

如果您在Postgres-XC中执行一个查询,它可能会诶分派到集群内许多不同的节点。例如,在高度分区表执行一个顺序扫描将涉及到许多不同的节点。现在的问题是:如果一个或者一些数据节点停机会发生什么?

答案很简单:Postgres-XC将无法利用发生故障的节点执行请求。这会导致一个读取和写入的问题。尝试从故障节点获取的查询将返回一个表示连接不可用的错误。

因为您作为一个用户,这意味着如果您正在运行Postgres—XC,您一定要为您的系统拿出一个合适的故障转移以及高可用性(HA)策略。我们建议创建所有节点的副本以确保,在primary数据节点出现故障时,控制器总是可以到达一个可替代的节点。Linux HA 是一个使各节点故障安全和实现快速故障转移的不错的选择。

目前,仅仅靠Postgres-XC来创建一个HA策略是不可能的。

12.7.2 更换节点

在一段时间以后,您可能要删除一个节点。要做到这一点,您只需从您的psql脚本简单地调用DROP NODE

test=# \h DROP NODE

Command: DROP NODE

Description: drop a cluster node

Syntax:

DROP NODE nodename

如果您要执行这样的操作,您要确保您是一个超级用户。普通用户 是不允许从集群中删除节点的。

当您删除一个节点时,确保对您来说它没有对您有用的数据。删除一个节点仅仅是Postgres-XC内部元数据的变化,所以,那个操作会很快,数据也会被从您的数据视图中删除。

一个问题是:您怎么能真正找出数据的位置?Postgres-XC 有一组系统表,它允许您检索有关节点的信息,数据分布等等。下面的例子显示了如何创建一个表以及我们如何才能弄明白它在哪里:

test=# CREATE TABLE t_location (id int4)

DISTRIBUTE BY REPLICATION;

CREATE TABLE

test=# SELECT node_name, pcrelid, relname

FROM pgxc_class AS a, pgxc_node AS b,

pg_class AS c

WHERE a.pcrelid = c.oid

AND b.oid = ANY (a.nodeoids);

node_name | pcrelid | relname

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

node2 | 16406 | t_location

node3 | 16406 | t_location

node4 | 16406 | t_location

(3 rows)

在我们的例子中,该表已经被复制到所有节点了。

当删除节点时,有一件麻烦的事情您要记住:如果您删除一个名称,使用相同的名称和连接参数重新创建它,它将会是不一样的东西。当创建一个新的节点,它会得到一个新的对象ID。在PostgreSQL中,一个名称和一个对象ID是不相关的。这意味着,如果您意外删除了一个节点,并使用相同的名称重新创建它,您将仍然面临问题。当然,您总是可以神奇地通过手动调整系统表来解决它,但是,这不是您应该做的。

因此,我们强烈建议,当从生产系统删除节点时,必须谨慎。

12.7.3 运行 GTM standby

在出现故障的情况下,数据节点不是唯一能够导致停机的因素。全局事务管理也应该故障安全,以确保在发生灾难的情况下,没有任何事情会出错。如果事务管理器丢失,就不能使用您的Postgres-XC集群了。

要确保GTM不会出现单点故障,您可以使用一个GTM standby。配置一个GTM standby 并不难做到。所有您需要做的是在一个备用节点上创建一个GTM配置文件并在gtm.conf设置一些参数。

startup = STANDBY

active_host = 'somehost.somedomain.com'

active_port = '6666'

synchronous_backup = off

首先,我们要设置启动参数为STANDBY。这会告诉GTM作为以slave解决。然后,我们要告诉 standby在哪里可以找到主要的生产GTM。我们可以通过添加一个主机名和端口来实现。

最后,我们可以决定GTM应该同步复制或者异步复制。

要启动standby,我们再次可以使用gtm_ctl。这一次,我们使用 –Z  gtm_standby 来标记节点为standby。

12.8 总结

在本章中,我们讲解了Postgres-XC,一个能够水平分区和查询分布的分布式版本的PostgreSQL。该Postgres-XC项目的目标是提供一个能够透明地向外写入扩展的数据库解决方案。它提供了一个一致性的数据视图,并提供了各种选项来在集群内部分发数据。

知道Postgres-XC不仅仅是一个简单地附加到PostgreSQL,而是一个完全兼容的代码分支是很重要的。

下一章将包括PL/Proxy,一个分片PostgreSQL数据库系统的工具。我们将学习如何分发数据到各个节点和碎片数据到处理大规模的设置。

PostgreSQL Replication之第十二章 与Postgres-XC一起工作(7)的更多相关文章

  1. PostgreSQL Replication之第十二章 与Postgres-XC一起工作(4)

    12.4 性能优化 Postgres-XC不是一个奇特的PostgreSQL版本,而是一个真正的分布式系统.这意味这,您不能只存储数据,希望事情超出服务器之外的快速,高效.如果您想优化速度,思考数据是 ...

  2. PostgreSQL Replication之第十二章 与Postgres-XC一起工作(3)

    12.3 配置一个简单的集群 在本章中,我们要建立一个由三个数据节点组成的集群.一个协调节点,以及管理集群的全局事务管理节点.对于每个组件,我们必须创建一个目录: hs@vm:~/data$ ls - ...

  3. PostgreSQL Replication之第十二章 与Postgres-XC一起工作(1)

    在本章中,我们希望将我们的注意力集中在写可扩展,多主,同步,对称和PostgreSQL的称为Postgres-XC(PostgreSQL eXtensible Cluster)的透明复制方案.该项目的 ...

  4. PostgreSQL Replication之第十二章 与Postgres-XC一起工作(5)

    12.5 创建表和发送查询 介绍了Postgres-XC以及其底层的思想之后,是时候创建我们的第一个表,看看集群将如何表现.下面的例子演示了一个简单的表.将使用id列的哈希键来分布它: test=# ...

  5. PostgreSQL Replication之第十二章 与Postgres-XC一起工作(2)

    12.2安装 Postgres-XC 可以从 http://postgres-xc.sourceforge.net/下载Postgres-XC.对于本书,我们使用1.0.3版本的Postgres-XC ...

  6. PostgreSQL Replication之第十二章 与Postgres-XC一起工作(6)

    12.6 添加节点 Postgres-XC允许您在那个过程中的任何一个时间点添加新的服务器到计划中.所有您需要做的是按照我们之前演示的设置一个节点,并在 控制器上调用CREATE NODE.然后,该系 ...

  7. PostgreSQL Replication之第十四章 扩展与BDR

    在这一章中,将向您介绍一个全新的技术,成为BDR.双向复制(BDR),在PostgreSQL的世界里,它绝对是一颗冉冉升起的新星.在不久的将来,许多新的东西将会被看到,并且人们可以期待一个蓬勃发展的项 ...

  8. PostgreSQL Replication之第十五章 与Walbouncer 一起工作

    与Walbouncer 一起工作 在本书的最后一章,将引导您通向2014年发布的一个工具,称为walbouncer.本书中的大多数技巧说明了如何复制整个数据库实例,如何分片,等等.在最后一章,是关于w ...

  9. PRML读书会第十二章 Continuous Latent Variables(PCA,Principal Component Analysis,PPCA,核PCA,Autoencoder,非线性流形)

    主讲人 戴玮 (新浪微博: @戴玮_CASIA) Wilbur_中博(1954123) 20:00:49 我今天讲PRML的第十二章,连续隐变量.既然有连续隐变量,一定也有离散隐变量,那么离散隐变量是 ...

随机推荐

  1. Decomposing and Redistributing the Statement Method

    Refactoring: Improving the Design of Existing Code Decomposing and Redistributing the Statement Meth ...

  2. for循环经典案例

    1.棋盘放粮食棋盘有32个格子,第一个格子放1个芝麻,第二个放2个,第三个放4个,第四个放8个...每个芝麻的重量为0.00001kg,如果要放满整个棋盘,需要多少重量的芝麻. <!DOCTYP ...

  3. Qt获取屏幕分辨率

    http://my.oschina.net/u/1255773/blog/159557 原 Qt获取屏幕分辨率 发表于1年前(2013-09-06 11:00)   阅读(546) | 评论(0) 3 ...

  4. string strSQL = "Select * From Employees;Select * from Customers";执行两次查询

    SqlCommand对象的字符串SQL命令可以做多个,以查询为例,用到SqlDataReader的一些方法,如ExecuteReader(),Read()(一条命令内的移动至下一记录),NextRes ...

  5. 蓝牙的AVDTP协议笔记

    1.概述    AVDTP(AUDIO/VIDEO DISTRIBUTION TRANSPORT PROTOCOL)是用来描述音频/视频在蓝牙设备间的传输的协议,是A2DP协议的基础协议,其在协议栈中 ...

  6. nginx博客系统(内含nginx图片缩略图处理代码,不错)

    一直以来都在Qzone.CSDN等上面写博客,偶尔有些想法就在Paas平台上搭建服务,新浪和曾经的google上都用过其appengine.可是在别人的平台上写东西,总归有些不方便,有受制于人的感觉. ...

  7. 编写category时的便利宏(用于解决category方法从静态库中加载需要特别设置的问题)

    代码摘录自YYKit:https://github.com/ibireme/YYKit /** Add this macro before each category implementation, ...

  8. delphi android 录像(调用Java的功能)

    delphi xe系列自带的控件都无法保存录像,经网友帮忙,昨天终于实现了录像功能(但有个问题是录像时无画面显示),程序主要使用了JMediaRecorder,MediaRecorder的使用方法可参 ...

  9. C++省略参数(va_list va_start va_arg va_end)的简单应用

    原文参考自:http://www.cnblogs.com/hanyonglu/archive/2011/05/07/2039916.html #include <iostream> #in ...

  10. Windows搭建Cocos2d-JS环境

    目录 安装Python Cocos2d-JS框架 开发工具(WebStorm / Cocos Code IDE) 用Webstorm查看官方实例 使用Cocos Code IDE创建工程 1.安装Py ...