12.3 配置一个简单的集群

在本章中,我们要建立一个由三个数据节点组成的集群。一个协调节点,以及管理集群的全局事务管理节点。对于每个组件,我们必须创建一个目录:

hs@vm:~/data$ ls -l

total 24

drwx------ 2 hshs 4096 Jun 13 15:56 gtm

drwx------ 13 hshs 4096 Jun 13 15:54 node1

drwx------ 13 hshs 4096 Jun 13 15:55 node2

drwx------ 13 hshs 4096 Jun 13 15:55 node3

drwx------ 13 hshs 4096 Jun 13 15:55 node4

请记住,让生活简单,我们将在单个服务器上设置整个集群。在生产中,您将逻辑地为这些组件使用不同的节点,否则没办法使用Postgres-XC。

12.3.1 创建全局事务管理节点(GTM)

第一步,我们必须初始化操作GMT的目录。要做到这一点,我们可以简单地调用initgtm:

hs@vm:~/data/gtm$ initgtm -Z gtm -D /home/hs/data/gtm/

The files belonging to this GTM system will be owned by user "hs".

This user must also own the server process.

fixing permissions on existing directory /home/hs/data/gtm ... ok

creating configuration files ... ok

Success. You can now start the GTM server using:

gtm -D /home/hs/data/gtm

or

gtm_ctl -Z gtm -D /home/hs/data/gtm -l logfile start

不要从initgtm那里期望什么什么的魔法。它只是创建操作GTM所必要的基本配置。它并不在那里创建一个大型的数据库基础设施。

但是,它已经为我们提供了一条如何启动GTM的线索,这将在稍后的过程中完成。然后,我们必须初始化这四个我们要运行的数据库节点。要做到这一点,我们必须运行initdb,就像任何普通的PostgreSQL数据库实例一样。但是,在Postgres-XC的情况下,我们必须告诉initdb,那个节点会拥有什么名字。在我们的例子中,我们将在node1的目录中创建名称为node1的第一个节点。每个节点将需要一个专用的名称。这如下所示:

initdb -D /home/hs/data/node1/ --nodename=node1

我们可以为所有我们将要运行的四个数据库实例调用initdb。为了确保这些实例可以在一台测试服务器上共存,我们必须改变这些实例的端口。在我们的例子中,我们进简单地使用如下端口:5432,5433,5434,5435。

[要更改端口,只需要在每个实例的postgresql.conf中编辑端口设置。另外,请确保每个实例都有不同的socket_directory目录,否则您不能多次启动实例。]

既然所有的实例都已经被启动了,我们可以启动全局事务管理了。这个工作方式如下:

hs@vm:~/data$ gtm_ctl -D ./gtm/ -Z gtm start

server starting

要看看它是否工作,我们可以如下检查进程:

hs@vm:~/data$ ps ax | grep gtm

16976 pts/5 S 0:00 /usr/local/postgres-xc/bin/gtm -D ./gtm

然后,我们就可以一个接一个地启动所有节点。

在我们的例子中,我们将使用这四个节点中的一个作为协调节点。协调节点将使用5432端口。要启动它,我们可以调用pg_ctl 并告诉系统使用这个节点作为协调节点:

pg_ctl -D ./node1/ -Z coordinator start

其余节点将简单地作为数据节点。启动的时候,我们可以很容易地定义一个节点的角色。

pg_ctl -D ./node2/ -Z datanode start

pg_ctl -D ./node3/ -Z datanode start

pg_ctl -D ./node4/ -Z datanode start

一旦这些工作都完成了,我们可以检查并查看是否这些节点已经启动并运行。

我们简单地连接到一个数据节点在系统中列出这些数据库。

hs@vm:~/data$ psql -h localhost -l -p 5434

List of databases

Name | Owner | Encoding | Collate

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

postgres | hs | SQL_ASCII | C | C

template0 | hs | SQL_ASCII | C | C

template1 | hs | SQL_ASCII | C | C

(3 rows)

 

现在,我们几乎已经完成了。在我们可以开始之前,我们必须要熟悉这些节点之间的关系。否则,我们无法在集群内部运行查询或者命令。如果这些节点相互不能识别对方,一个错误就会出现:

hs@vm:~/data$ createdb test -h localhost -p 5432

ERROR: No Datanode defined in cluster

HINT: You need to define at least 1 Datanode with CREATE NODE.

STATEMENT: CREATE DATABASE test;

要讲述这些系统中节点的位置,我们连接到协调节点并运行如下指令:

postgres=# CREATE NODE node2 WITH (TYPE = datanode, HOST = localhost,

PORT = 5433);

CREATE NODE

postgres=# CREATE NODE node3 WITH (TYPE = datanode, HOST = localhost,

PORT = 5434);

CREATE NODE

postgres=# CREATE NODE node4 WITH (TYPE = datanode, HOST = localhost,

PORT = 5435);

CREATE NODE

一旦这些节点相互之间都彼此熟悉了,我们可以连接到协调节点并执行任何我们想要的。在我们的例子中,我们将简单地创建一个数据库:

hs@vm:~/data$ psql postgres -p 5432 -h localhost

psql (PGXC 1.0.3, based on PG 9.1.9)

Type "help" for help.

postgres=# CREATE DATABASE test;

CREATE DATABASE

要看是否已经成功复制,我们可以连接到一个数据节点,并检查是否数据库实际存在。在我们的例子 中,我们是幸运的。代码如下:

hs@vm:~/data$ psql -l -p 5433 -h localhost

List of databases

Name | Owner | Encoding | Collate

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

postgres | hs | SQL_ASCII | C | C

template0 | hs | SQL_ASCII | C | C

template1 | hs | SQL_ASCII | C | C

test | hs | SQL_ASCII | C | C

(4 rows)

请记住,您总是需要连接到一个协调节点,以确保复制正常地运行。只有在需要查看是否一切都正常运行时,才需要连接到一个数据节点。永远不要在数据节点上执行SQL,要使用协调节点执行SQL。

[您可以直接在一个数据节点上运行SQL,但它不会被复制。]

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

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

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

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

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

  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. Connection Management and Security

    High Performance My SQL  THIRD EDITION Each client connection gets its own thread within the server ...

  2. ava.lang.NullPointerException的一般解决方法

    抛出异常后,一般会输出异常信息,, 从上往下找 ,第一次出现与"自己的代码"有关的部分,就是异常抛出的最近点,异常就是在那里开始的 然后再顺藤摸瓜 找问题去吧

  3. library not found for -lPods 的解决办法

    在老项目工程中使用cocoapods,可能会报这个错误:library not found for -lPods . 导致这个错误可能有两个原因,这两个原因在编译过程中都是有蛛丝马迹可循的. 原因1: ...

  4. Naming Service 与 Zookeeper

      命名服务是指通过指定的名字来获取资源或者服务的地址,提供者的信息.利用Zookeeper很容易创建一个全局的路径,而这个路径就可以作为 一个名字,它可以指向集群中的集群,提供的服务的地址,远程对象 ...

  5. angularJS自定义属性作为条件中转

    <html> <head> <meta charset="utf-8"/> <title></title> </h ...

  6. Spring冲刺阶段二(1)

    我们首先是根据同学们的评价来找补自己的不足之处,其中同学们反应最多的是我们的界面不够好看,但是我觉得虽然不好看但算是比较简洁.其次是没有体现内网在其中发挥的作用,这点我们还没有实现. 根据这些不足之处 ...

  7. graphviz - Node Shapes

    Node Shapes There are three main types of shapes : polygon-based, record-based and user-defined. The ...

  8. [LeetCode]题解(python):053-Maximum Subarray

    题目来源 https://leetcode.com/problems/maximum-subarray/ Find the contiguous subarray within an array (c ...

  9. (leetcode)Missing Number

    Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missin ...

  10. jquery中奖实例代码

    <!doctype html> <html> <head> <meta http-equiv="Content-Type" content ...