zoukankan      html  css  js  c++  java
  • 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,但它不会被复制。]

     

  • 相关阅读:
    循环神经网络
    相似度计算(余弦距离/欧式距离)
    最常见Linux操作
    注意力机制总结
    随机打乱数组算法、蓄水池算法
    6.1 数据结构---树(遍历)
    Node.js调用C/C++
    linux中nmcli命令详解
    stylus入门使用方法
    webpack CommonsChunkPlugin详细教程
  • 原文地址:https://www.cnblogs.com/songyuejie/p/4752124.html
Copyright © 2011-2022 走看看