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. try...except 错误记录添加logging

  2. SVN使用安装

    SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本. Subversion是什么? ...

  3. CREATE INDEX SELECT COUNT(*)

    CREATE INDEX windex_countrycode ON sales_rank (countrycode); CREATE INDEX windex_grab_amz_date ON sa ...

  4. 出现upstream sent too big header while reading response header from upstream错误

    一个POS系统,出现upstream sent too big header while reading response header from upstream错误. 1.反向代理端,可以放到se ...

  5. 哈哈,好像swift 以后有可能用来开发安卓喔

    好像swift  以后有可能用来开发安卓喔,哈哈

  6. Qt操作Oracle

    很久以前写过<Qt数据库操作>的一篇文章,在操作数据库的时候,温习了一下!感觉很好!但在操作Oracle数据库时又遇到了一些问题.在使用QSqlRelationalTableModel操纵 ...

  7. WPF绑定方式

    绑定到其它元素 <Grid>     <StackPanel>         <TextBox x:Name="textbox1" />    ...

  8. CSS弹性盒布局

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

  9. ASP.NET MVC4中用 BundleCollection使用问题手记

    ASP.NET MVC4中对JS和CSS的引用又做了一次变化,在MVC3中我们这样引用资源文件: <link href="@Url.Content("~/Content/Si ...

  10. 经常在eclipse中导入web项目时,出现转不了项目类型的问题,导入后就是一个java项目。

    1.在eclipse的项目上点右键,刷新项目.2.在项目上点右键,进入属性(properties)3.在左侧列表项目中点击选择“Project Facets”,在右侧选择“Dynamic Web Mo ...