PostgreSQL Replication之第十章 配置Slony(6)
10.6 执行故障切换
一旦您学会了如何复制表并将它们添加到集合中,是时候学习故障转移了。基本上,我们可以在两个两种类型的故障转移之间做出区分:
• 计划内故障转移
• 计划外故障转移和崩溃
在本节,我们将学习这两个场景。
10.6.1计划内的故障转移
计划内的故障转移更多的是一种奢侈的场景。在许多情况下,您不会很幸运,您必须依靠自动故障转移或者面对意外中断。
基本上,一个计划内的故障转移可以看作是移动一组表到其它节点。一旦其它节点主管那些表,您就可以相应地处理事情。
在我们的例子中,我们希望将这些表从节点1移动到节点2.除此之外,我们玩放弃第一个节点。代码在这里:
slonik<<_EOF_
cluster name = first_cluster;
node 1 admin conninfo = 'dbname=$MASTERDB host=$HOST1 user=$DBUSER';
node 2 admin conninfo = 'dbname=$SLAVEDB host=$HOST2 user=$DBUSER';
lock set (id = 1, origin = 1);
move set (id = 1, old origin = 1, new origin = 2);
wait for event (origin = 1, confirmed = 2, wait on=1);
drop node (id = 1, event node = 2);
_EOF_
在我们标准的介绍之后,我们就可以调用 move set 了。这里的线索是:我们必须创建一个锁使这工作。原因是,当故障转移执行时,我们必须确保我们自己不对系统做出更改。您千万不要忘了这个锁,否则,您可能会发现您自己正处于一个真正糟糕的情况。正如我们以前所有的例子,节点和集合使用它们的数字表示。
一旦我们把这个集合移动到新的位置,我们必须等待事情完成;最后,我们可以放弃那个节点(如果这是期望的话)。
如果该脚本百分之百地正确,它可以被干净地执行:
hs@hs-VirtualBox:~/slony$ ./slony_move_set.sh
debug: waiting for 1,5000016417 on 2
一旦我们没有转移到第二个节点,我们可以马上删除数据。Slony已经删除了触发器来阻止这个操作:
db2=# DELETE FROM t_second;
DELETE 1
相同的情况在第一个节点的表上发生了。处了表本身仍旧在原地,没有更多的触发器了。
db1=# \d t_second
Table "public.t_second"
Column | Type | Modifiers
--------+---------+-----------
id | integer | not null
name | text |
Indexes:
"t_second_pkey" PRIMARY KEY, btree (id)
现在,您可以将节点离线,并将它用于其它用途。
[当使用少的停机时间升级以数据库到一个新的PostgreSQL时,使用计划内的故障转移也是您应该使用的期望的策略。只是复制整个数据库到一个到一个运行新版本的实例,并做一个控制的故障转移。这种升级的实际停机时间将是最小的,因此,在有大量数据的情况下做到这一点是用可能的。]
10.6.2 计划外的故障转移
在计划外的故障转移的情况下,您就不会那么幸运了。一个计划外的故障转移可能是某种严重的中断,一种硬件故障或者某种网站故障。不管它是什么,没有必要害怕—您仍然可以容易地使集群回到一个合理的状态。
要做到这一点,Slony提供了故障转移命令:
• failover (id = 1, backup node = 2);
• drop node (id = 1, event node = 2);
这就是所有您需要在一个剩余的节点上执行的,从一个节点到另一个节点的故障转移,并从集群中删除那个节点。这是一个安全并且可靠的过程。
10.7 总结
Slony是一个广泛在逻辑层次上进行复制PostgreSQL数据库的工具。与事务日志传送相比,它可用于各种不同版本的PostgreSQL的复制,并且无需复制整个实例。
在下一章,我们将重点关注Skytools,一个可行的Slony的替代方案。我将包括安装,通用队列和复制。
PostgreSQL Replication之第十章 配置Slony(6)的更多相关文章
- PostgreSQL Replication之第十章 配置Slony(1)
在PostgreSQL领域中,Slony是最广泛的复制解决方案之一.它不仅是最老的复制方案实现的一个,但也是有最多的外部工具支持的一个,例如PgAdmin3等. 在本章中,我们将深入探究Slony并学 ...
- PostgreSQL Replication之第十章 配置Slony(5)
10.5 给复制添加表和管理的问题 一旦我们增加了此表到系统中,我们可以将它添加到复制设置.这样做有点复杂.首先,我们必须创建我们自己的新表集合并把这个和我们已经有的表合并.因此,过一段时间,我们将有 ...
- PostgreSQL Replication之第十章 配置Slony(4)
10.4 部署DDLs 对于生产性的应用程序来说,仅仅复制一个表明显是不够的.此外,通过没有办法保证数据从来不会发生改变.在某些时候,部署变化的数据结构(所谓的DDLs)是必要的. 现在的问题是,Sl ...
- PostgreSQL Replication之第十章 配置Slony(2)
10.2 理解 Slony如何工作 在我们开始复制我们的第一个数据库之前,我们想深入Slony的架构.理解这是如何工作的是非常重要的,否则,将不可能以一种有用的和合理的方法使用这个软件.与事务日志流不 ...
- PostgreSQL Replication之第十章 配置Slony(3)
10.3 复制您的第一个数据库 这个小小的介绍之后,我们可以继续前进并复制我们的第一个数据库.要做到这一点,我们可以在一个数据库实例上创建两个数据库.我们想简单地在这两个数据库之间进行复制. [ 您在 ...
- [转]PostgreSQL Replication之扩展与BDR
原文:https://www.cnblogs.com/xmzzp/p/6284300.html postgres 实现master, slave ,且master是多主. -------------- ...
- PostgreSQL Replication之第九章 与pgpool一起工作(7)
9.7 处理故障转移和高可用 可以使用pgpool来解决的一些明显的问题是高可用性和故障转移.一般来讲,有使用pgpool或者不使用pgpool可以用来处理这些问题的各种方法. 9.7.1 使用Pos ...
- 安装Postgresql之后,创建用户 配置rails
登录 sudo su - postgres psql 1 创建Postgresql新用户,devpg是用户名,密码也是devpg, 不是超级管理员,拥有创建数据库权限,登录权限,继承拥有角色权限 cr ...
- PostgreSQL Replication之第四章 设置异步复制(4)
4.4 基于流和基于文件的恢复 生活并不总只是黑色或白色:有时也会有一些灰色色调.对于某些情况下,流复制可能恰到好处.在另一些情况下,基于文件复制和PITR是您所需要的.但是也有许多情况下,您既需要流 ...
随机推荐
- Decoder with 3 Inputs and 2 3 = 8 Outputs
COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION
- <?php set_time_limit(10);
<?php include('w_fun.php'); set_time_limit(10); Fatal error: Maximum execution time of 10 seconds ...
- jdk Tomcat配置
安装Tomcat需要先安装JDKJDK安装JDK安装会有两次,两次不能再同一目录 你可以新建两个文件夹 JDK JRE 第一次安装在JDK 第二次在JRE在我的电脑右键属性 高级系统设置 环境变量 系 ...
- 【转】C#高性能大容量SOCKET并发(二):SocketAsyncEventArgs封装
http://blog.csdn.net/sqldebug_fan/article/details/17557341 1.SocketAsyncEventArgs介绍 SocketAsyncEvent ...
- spark之combineByKey
combineByKey def combineByKey[C](createCombiner: (V) => C, mergeValue: (C, V) => C, mergeCombi ...
- 将所有程序设置XML集中到一个单独XML配置文件的方法:使用appSettings元素的configSource元素
在.NET程序中,程序的配置文件默认都会放在程序根目录下的web.config(网站程序)或App.config(控制台等程序),在该配置文件中可以定义若干程序配置信息. 在此以网站程序为例,首先将下 ...
- 在 mac os 上搭建 git server
前言:之前学习了如何使用 git 后,一直想搭建一个本机搭建一个 git server 的,一开始不知道走了弯路用了 gitosis,折腾了我好几天都没配置好.昨晚查资料发现 gitosis 早就过时 ...
- 在大数据中,关于native包的编译步骤
一.问题的由来: 二.解决问题的方法(所有的操作在root下完成): 1.前期需要的环境,下面的已经在伪分布式中配置好,不再重复 配置好jdk 配置好hadoop 2.上传还需要包 apache-ma ...
- qt cef嵌入web
原文http://blog.sina.com.cn/s/blog_9e59cf590102vnfc.html 最近项目需要,研究了下libcef库. Cef(Chromium Embedded Fra ...
- 设计模式:状态模式(State)
定 义:当一个对象内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况, 把状态的判断逻辑转移到表示不同状态的一系列子 ...