PostgreSQL Replication之第十二章 与Postgres-XC一起工作(3)
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)的更多相关文章
- PostgreSQL Replication之第十二章 与Postgres-XC一起工作(7)
12.7 处理故障转移和删除节点 在本节中,我们将看看故障切换如何处理.我们还将看看如何使用安全可靠的方法添加节点到Postgres-XC设置以及如何从Postgres-XC设置删除节点. 12.7. ...
- PostgreSQL Replication之第十二章 与Postgres-XC一起工作(4)
12.4 性能优化 Postgres-XC不是一个奇特的PostgreSQL版本,而是一个真正的分布式系统.这意味这,您不能只存储数据,希望事情超出服务器之外的快速,高效.如果您想优化速度,思考数据是 ...
- PostgreSQL Replication之第十二章 与Postgres-XC一起工作(1)
在本章中,我们希望将我们的注意力集中在写可扩展,多主,同步,对称和PostgreSQL的称为Postgres-XC(PostgreSQL eXtensible Cluster)的透明复制方案.该项目的 ...
- PostgreSQL Replication之第十二章 与Postgres-XC一起工作(5)
12.5 创建表和发送查询 介绍了Postgres-XC以及其底层的思想之后,是时候创建我们的第一个表,看看集群将如何表现.下面的例子演示了一个简单的表.将使用id列的哈希键来分布它: test=# ...
- PostgreSQL Replication之第十二章 与Postgres-XC一起工作(2)
12.2安装 Postgres-XC 可以从 http://postgres-xc.sourceforge.net/下载Postgres-XC.对于本书,我们使用1.0.3版本的Postgres-XC ...
- PostgreSQL Replication之第十二章 与Postgres-XC一起工作(6)
12.6 添加节点 Postgres-XC允许您在那个过程中的任何一个时间点添加新的服务器到计划中.所有您需要做的是按照我们之前演示的设置一个节点,并在 控制器上调用CREATE NODE.然后,该系 ...
- PostgreSQL Replication之第十四章 扩展与BDR
在这一章中,将向您介绍一个全新的技术,成为BDR.双向复制(BDR),在PostgreSQL的世界里,它绝对是一颗冉冉升起的新星.在不久的将来,许多新的东西将会被看到,并且人们可以期待一个蓬勃发展的项 ...
- PostgreSQL Replication之第十五章 与Walbouncer 一起工作
与Walbouncer 一起工作 在本书的最后一章,将引导您通向2014年发布的一个工具,称为walbouncer.本书中的大多数技巧说明了如何复制整个数据库实例,如何分片,等等.在最后一章,是关于w ...
- PRML读书会第十二章 Continuous Latent Variables(PCA,Principal Component Analysis,PPCA,核PCA,Autoencoder,非线性流形)
主讲人 戴玮 (新浪微博: @戴玮_CASIA) Wilbur_中博(1954123) 20:00:49 我今天讲PRML的第十二章,连续隐变量.既然有连续隐变量,一定也有离散隐变量,那么离散隐变量是 ...
随机推荐
- 【转载】MySQL性能优化的最佳20+条经验
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据 ...
- GenderGuesser
http://www.hackerfactor.com/GenderGuesser.php#Analyze
- storm-kafka-0.8-plus 源码解析
https://github.com/wurstmeister/storm-kafka-0.8-plus http://blog.csdn.net/xeseo/article/details/1861 ...
- [Android] Intent详解
[转]http://www.cnblogs.com/engine1984/p/4146621.html [正文] Intent组件虽然不是四大组件,但却是连接四大组件的桥梁,学习好这个知识,也非常的重 ...
- php获得文件夹下所有文件的递归算法
function my_scandir($dir){ $files=array(); if(is_dir($dir)) { if($handle=opendir($dir)) { while(($fi ...
- SQL集合函数中利用case when then 技巧
我们都知道SQL中适用case when then来转化数据库中的信息 比如 select (case sex when 0 then '男' else '女' end) AS sex from ...
- Magento PHP Extension "curl" must be loaded解决方法
我记得我第一次在xampp装magento的时候,进入后台时提示PHP Extension "curl" must be loaded 在网页上查了下原因和解决方法,发现是mage ...
- JS之tagNaem和nodeName
nodeName是节点的属性,tagName是元素的属性.元素是节点的子集.不是任何节点都有tagName的,比如文本节点,仅有nodeName属性. 这个和css中的倾斜和斜体的关系是一样的.不是所 ...
- 【指标测试】影响IOPS的几个重要因素
1. 读写方式 顺序读写的IOPS要比随机读写的IOPS高.100%顺序读写来讲,顺序读要高于顺序写.100%随机读写来讲,随机读要高于随机写.小块读写的IOPS要比大块读写高.需要根据实际的应用程序 ...
- iOS Plist文件,增删改查
今天早上,9点开始弄Plist,然后一直写,一直写(中午取出40分钟吃饭时间),写到1点,写完了,交给头,头说,不是这个意思.我是每个用户创建了一个文件夹,在这个用户的文件夹里面,分别根据应用创建了文 ...