zoukankan      html  css  js  c++  java
  • Windows下Postgre SQL数据库通过Slony-I 实现数据库双机同步备份

    一、 我们要实现的环境是windows xp、windows2003上安装Postgre SQL数据库,实现目的是两台数据库服务器进行数据库同步,即数据库同步更新、删除、插入等对数据库的操作。

    二、 使用的工具是数据库版本Postgre SQL 9.2,配置集群的工具是Stack Builder自己的可安装的Slony-I v2.1.3-1。

    三、 Slony-I实现数据库集群同步的原理简述:Slony-i是采用一主多从式集群方式,通过在主服务器和从服务器上建立同步节点,设置远程访问路径,启动监听进程(slon守护进程)进行监听,当主服务器进行了修改操作时,通过触发器触发,从进程进行异步修改来达到数据库同步。但是这种同步只能是从服务器备份主服务器,不能修改从服务器让主服务器同步。也即这种同步是单方向的。而且主、从服务器的postgres服务和slony-I服务都必须启动。

    四、 先在两台机子上安装 Postgre SQL和Slony-I,且都建立一个test的数据库。并在test库上建立需要同步的表,例如testtable,这些表必须要有主键(Slony-I只是实现某个数据库,某些设定好的表的同步更新,新建表不行)。需要多个表则建立多个。

    五、详细配置步骤如下:

    1.环境 

     

    Master 192.168.101.128

    Slave 192.168.101.32

    操作系统

    Windows XP SP3

    Windows Server 2003 SP1

    Postgre SQL

    9.2.4

    9.2.4

    Slony-I

    2.1.3

    2.1.3

    2.实现要求

    单向同步主服务器“192.168.101.128”到从服务器的“192.168.101.32”;

     

    Master 192.168.101.128

    Slave 192.168.101.32

    数据库名

    test

    test

    用户名

    postgres

    postgres

    密码

    123

    123

    3.配置步骤:

    第一步:

    注册服务:

    在主服务器上以及从服务器上,进入%PG%/bin目录,运行“slon -regservice”;建立SlonyI服务。


    第二步:

    建立联通性:

    在主服务器上以及从服务器上,编辑%PG%/data/pg_hba.conf,使网络中的两个数据库服务器能相互访问;

    都要加上主从服务器的ip,必须保留127.0.0.1

    # IPv4 local connections:
    
    host    all         all         127.0.0.1/32           md5
    
    host    all         all         192.168.101.128/32         md5
    
    host    all         all         192.168.101.32/32          md5
    
    


    第三步:

    建立主服务器脚本文件“master.script”;

    注:postgrecluster为群集名, test为需要复制的数据库名,testtable为复制表名(必须在两个库先建且要有主键),node 1 和 node 2 中的1,2为节点的别名,可以用别的。

    以下为文件详细内容:

    #----------------master.script-------------Start-----------------
    
    #定义集群名称
    
    cluster name=postgrecluster;
    
     
    
    # 定义复制节点
    
    #主节点
    
    node 1 admin conninfo = 'dbname=test host=192.168.101.128 user=postgres password=123';
    
    #从节点
    
    node 2 admin conninfo = 'dbname=test host=192.168.101.32 user=postgres password=123';
    
     
    
    # 初始化集群,id从1开始
    
    init cluster ( id = 1, comment = 'Master Node' );
    
     
    
    #设置参与同步的数据表,创建复制集,id也是从1开始,从复制集添加表
    
    create set ( id = 1, origin = 1, comment = 'All test Tables' );
    
    set add table ( set id = 1, origin = 1, id = 1, fully qualified name = 'public.testtable', comment = 'Table testtable' );
    
     
    
    #设置存储节点,存储主从两个节点的信息
    
    store node ( id = 2, comment = 'Slave Node', event node = 1);
    
     
    
    #设置存储路径
    
    #主节点
    
    store path ( server = 1, client = 2, conninfo = 'dbname= test host=192.168.101.128 user=postgres password=123');
    
    #从节点
    
    store path ( server = 2, client = 1, conninfo = 'dbname= test host=192.168.101.32 user=postgres password=123');
    
     
    
    #设置侦听事件和订阅方向,复制中角色,主节点是原始提供者,从节点是接收者
    
    store listen ( origin = 1, provider = 1, receiver = 2 );
    
    store listen ( origin = 2, provider = 2, receiver = 1 ); 
    
    #----------------master.script-------------End-----------------
    
    


    第四步:

    运行脚本文件

    在主服务器里进入%PG%/bin运行“slonik master.script” ;


    注:如果 master.script 不放在bin目录下,则需要加上路径!

    第五步:

    在主服务器上建立引擎配置文件“slony_master.conf”,其内容是集群名称以及指向从服务器的连接配置;

    注:postgrecluster为群集名, test为需要复制的数据库名。

    以下为文件详细内容:

    #----------------slony_master.conf-------------Start-----------------
    
    #集群名称
    
    cluster_name = postgrecluster
    
     
    
    #连接从服务器的信息
    
    conn_info = 'dbname=test host=192.168.101.32 user=postgres password=123'
    
    #----------------slony_master.conf-------------End-----------------
    
    


    第六步:

    为服务添加引擎:

    在主服务器里进入%PG%/bin运行“slon -addengine slony_master.conf”;


    第七步:

    建立从服务器脚本文件“slave.script”;

    注:postgrecluster为群集名, test为需要复制的数据库名。

    以下为文件详细内容:

    #------------------slave.script-------------Start-----------------
    
    #定义集群名称
    
    cluster name=postgrecluster;
    
    #定义复制节点
    
    #主节点
    
    node 1 admin conninfo = 'dbname=test host=192.168.101.128 user=postgres password=123';
    
    #从节点
    
    node 2 admin conninfo = 'dbname=test host=192.168.101.32 user=postgres password=123';
    
    #定义订阅
    
    SUBSCRIBE SET (ID = 1, PROVIDER = 1, RECEIVER = 2, FORWARD = YES);
    
    #------------------slave.script-------------End-------------------
    
    


    第八步:

    运行脚本文件:

    在从服务器里进入%PG%/bin运行“slonik slave.script” ;


    第九步:

    在从服务器上建立引擎配置文件“slony_slave.conf”其内容是集群名称以及指向主服务器的连接配置;

    注:postgrecluster为群集名 test为需要复制的数据库名

    以下为文件详细内容:

    #------------------slony_lave.conf-------------Start-----------------
    
    #集群名称
    
    cluster_name = postgrecluster
    
    
    #连接主服务器的信息
    
    conn_info ='dbname=test host=192.168.101.128 user=postgres password=123'
    
    
    #------------------slony_lave.conf-------------End-------------------
    
    


    第十步:

    为服务添加引擎:

    在从服务器里进入%PG%/bin运行“slon -addengine slony_slave.conf”;


    至此,所有配置已完成。进入主从服务器计算机管理,检查两台机器的postgresqlSlony-I服务是否已启动,若未启动,请手动点击启动。

    测试是否成功:在主服务器testtable插入一条数据,到从服务器查看是否有数据。

  • 相关阅读:
    day01--计算机硬件基础笔记
    22 Jun 18 Django,ORM
    21 Jun 18 Django,ORM
    20 Jun 18 复习, mysql
    20 Jun 18 Django,ORM
    19 Jun 18 复习, 正则表达式
    19 Jun 18 Django
    15 Jun 18 复习, shutil模块
    15 Jun 18 Django
    14 Jun 18 复习, form表单
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3228577.html
Copyright © 2011-2022 走看看