http://blog.csdn.net/iori13/archive/2007/07/31/1719380.aspx
http://hi.baidu.com/top2top/blog/item/547ea8ece523d139279791b4.html
--------------------------------------------------------------------------
参考文档
http://bbs.chinaunix.net/viewthr ... page%3D1#pid6997819
http://topic.csdn.net/t/20050617/12/4089010.html
postgresql 数据同步
slony1是基于postgresql的异步通知机制做的复制技术, 其同步速度非常快。 采用这个复制技术来做备份,呵呵,除了配置稍微复杂点,非常好用!
1. 总体需求
1.1. 当前情况
随着软件系统复杂度的提高,分布式部署成为软件部署流行的方式。对于系统的结构,
程序和数据是支撑系统的两大要素。程序的分布式部署已经有很多很好的方案,在这里
我说一下数据的分布式部署。数据的分布式部署其实就是数据库的分布式部署。
1.2. 系统环境
在这里,我以下面的环境详细讲部署的过程。
主数据库服务器 (master)
RHEL3
ip 192.168.0.200
mask 255.255.255.0
从数据库服务器 (slave)
RHEL3
ip 192.168.30.201
mask 255.255.255.0
需要保证两台机器互连互通.
请到指定目的地下载指定的软件包:
db postgresql 8.2.4.tar.gz(http://www.postgresql.org/download/)
slony1 slony1-1.2.6.tar(http://www.postgresql.org/download/)
以上的网址是一个入口地址,请选择合适的正确的源程序包。
1.3. 系统安装
1.3.1 主数据库服务器
1.3.1.1 安装数据库
Groupadd postgres
Useradd postgres –g postgres –d /home/postgres
解压,命令 tar -xvzf postgresql 8.2.4.tar.gz
进入对应的 postgresql-8.2.4 目录 ,命令 :cd postgresql-8.2.4
./configure --prefix=/usr/local/pgsql –localstatedir=/home/postgres/data
gmake,命令: gmake
注意,是 gmake
安装,命令 gmake install
为 postgres 用户增加环境参数如下:
Vi /home/postgres/.bash_profile
PGLIB=/usr/local/pgsql/lib
PGDATA=/test/spescso/data
PATH=$PATH:/usr/local/pgsql/bin
MANPATH=$MANPATH:/usr/local/pgsql/man
export PGLIB PGDATA PATH MANPATH
chown postgres.postgres /usr/local/pgsql –R
Su – postgres
Mkdir data
使用 postgres 创建 数据库集群
/usr/local/pgsql/bin/initdb -E UTF-8 /home/postgres/data/
/usr/local/pgsql/bin/createuser -a -d ssuser
/usr/local/pgsql/bin/createlang plpgsql template1
使用 postgres 创建 log 目录
mkdir /test/spescso/data/log
修改 /test/spescso/data/postgresql.conf 文件
主要配置日志文件
log_destination = 'stderr'
redirect_stderr = true
log_directory = '/test/spescso/data/log/'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
修改 /test/spescso/data/pg_hba.conf,主要搞定双机相互认证问题,否则不能相互访问
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections smilieid="44" border="0" alt="" />);
在主数据库机器上依次建立 testslave1,testslave2.
在从数据库机器上 5431 端口建立 testslave3
保证testslave1/testslave2/testsalve3中建立和test中相同的表tb_depart/tb_manager/tb_user……..
1.4 配置同步
1.4.1. 主机配置
编写 configmaster sheul 脚本文件,设置其可执行属性 ,命令 chmod a+x+w+r configmaster,文件内容如下:
#!/bin/bash
basebin=/usr/local/pgsql/bin
#集群名称
CLUSTER=slony_test1
# 参与同步的数据库名称,master db 是test,其他三个是slave
DBSERVER=test
DBSLAVE1=testslave1
DBSLAVE2=testslave2
DBSLAVE3=testslave3
# 参与同步的机器地址
HOSTSERVER=192.168.0.200
HOSTSLAVE1=192.168.0.200
HOSTSLAVE2=192.168.0.200
HOSTSLAVE3=192.168.0.201
# 参与同步的数据库用户名
DBSERVER_USER=ssuser
DBSLAVE1_USER=ssuser
DBSLAVE2_USER=ssuser
DBSLAVE3_USER=ssuser
# 同步发布配置,以下是命令 slonik 的参数
$basebin/slonik<<_EOF_
cluster name=$CLUSTER;
# 定义复制节点
node 1 admin conninfo='dbname=$DBSERVER host=$HOSTSERVER user=$DBSERVER_USER port=5432';
node 2 admin conninfo='dbname=$DBSLAVE1 host=$HOSTSLAVE1 user=$DBSLAVE1_USER port=5432';
node 3 admin conninfo='dbname=$DBSLAVE2 host=$HOSTSLAVE2 user=$DBSLAVE2_USER port=5432';
node 4 admin conninfo='dbname=$DBSLAVE3 host=$HOSTSLAVE3 user=$DBSLAVE3_USER port=5431';
# 初始化集群,id从1开始
init cluster ( id=1, comment='Node 1' );
# 设置参与同步的数据表
#先创建一个复制集,id也是从1开始
#向自己的复制集种添加表,每个需要复制的表一条set命令
#id从1开始,逐次递加,步进为1;
#fully qualified name是表的全称:模式名.表名
#这里的复制集id需要和前面创建的复制集id一致
create set ( id=1, origin=1, comment='All test tables' );
set add table ( set id=1, origin=1,id=1, fully qualified name='public.tb_depart',comment='Table tb_depart' );
set add table ( set id=1, origin=1,id=2, fully qualified name='public.tb_user',comment='Table tb_user' );
set add table ( set id=1, origin=1,id=3, fully qualified name='public.tb_manager',comment='Table tb_manager' );
#假如某个表没有主键,但是有唯一键字,那么可以用key关键字
#指定其为复制键字,如下面的key参数
#set add table ( set id = 1, origin = 1,id = 4, fully qualified name = 'public.history',key = "column",comment = 'Table history' );
#对于没有唯一列的表,需要这样处理,这一句放在 create set 的前面
#table add key (node id = 1, fully qualified name = 'public.history');
# 这样设置结果集
#set add table (set id=1, origin=1, id=4, fully qualified name = 'public.history', comment='history table', key = serial);
# 设置存储节点
store node ( id=2, comment='Node 2' );
store node ( id=3, comment='Node 3' );
store node ( id=4, comment='Node 4' );
# 设置存储路径
store path ( server=1, client=2,conninfo='dbname=$DBSERVER host=$HOSTSERVER user=$DBSERVER_USER port=5432');
store path ( server=2, client=1,conninfo='dbname=$DBSLAVE1 host=$HOSTSLAVE1 user=$DBSLAVE1_USER port=5432');
store path ( server=1, client=3,conninfo='dbname=$DBSERVER host=$HOSTSERVER user=$DBSERVER_USER port=5432');
store path ( server=3, client=1,conninfo='dbname=$DBSLAVE2 host=$HOSTSLAVE2 user=$DBSLAVE2_USER port=5432');
store path ( server=1, client=4,conninfo='dbname=$DBSERVER host=$HOSTSERVER user=$DBSERVER_USER port=5432');
store path ( server=4, client=1,conninfo='dbname=$DBSLAVE3 host=$HOSTSLAVE3 user=$DBSLAVE3_USER port=5431');
#设置侦听事件和订阅方向,复制中角色,主节点是原始提供者,从节点是接受者
store listen ( origin=1, provider=1, receiver=2 );
store listen ( origin=2, provider=2, receiver=1 );
store listen ( origin=1, provider=1, receiver=3 );
store listen ( origin=3, provider=3, receiver=1 );
store listen ( origin=1, provider=1, receiveR=4 );
store listen ( origin=4, provider=4, receiver=1 );
_EOF_
1.4.2. 提交数据集合
编写 commitdata shell 脚本文件,赋予可执行权限,内容如下:
#!/bin/bash
basebin=/usr/local/pgsql/bin
CLUSTER=slony_test1
DBSERVER=test
DBSLAVE1=testslave1
DBSLAVE2=testslave2
DBSLAVE3=testslave3
HOSTSERVER=192.168.0.200
HOSTSLAVE1=192.168.0.200
HOSTSLAVE2=192.168.0.200
HOSTSLAVE3=192.168.0.201
DBSERVER_USER=ssuser
DBSLAVE1_USER=ssuser
DBSLAVE2_USER=ssuser
DBSLAVE3_USER=ssuser
$basebin/slonik<<_EOF_
cluster name=$CLUSTER;
#提供连接参数
node 1 admin conninfo='dbname=$DBSERVER host=$HOSTSERVER user=$DBSERVER_USER port=5432';
node 2 admin conninfo='dbname=$DBSLAVE1 host=$HOSTSLAVE1 user=$DBSLAVE1_USER port=5432';
node 3 admin conninfo='dbname=$DBSLAVE2 host=$HOSTSLAVE2 user=$DBSLAVE2_USER port=5432';
node 4 admin conninfo='dbname=$DBSLAVE3 host=$HOSTSLAVE3 user=$DBSLAVE3_USER port=5431';
# 提交订阅复制集
subscribe set ( id=1, provider=1, receiver=2, forward=no);
subscribe set ( id=1, provider=1, receiver=3, forward=no);
subscribe set ( id=1, provider=1, receiver=4, forward=no);
_EOF_
1.4.3. 配置同步过程
在主机上执行配置命令 ./configmaster
在主机上开启slon 后台进程,启动主数据库复制,命令
/usr/local/pgsql/bin/slon slony_test1 "dbname=test host=192.168.0.200 user=ssuser port=5432" &
在主机上开启slon 后台进程,启动第一个从数据库复制,命令
/usr/local/pgsql/bin/slon slony_test1 "dbname=testslave1 host=192.168.0.200 user=ssuser port=5432" &
在主机上开启slon 后台进程,启动第二个从数据库复制,命令
/usr/local/pgsql/bin/slon slony_test1 "dbname=testslave2 host=192.168.0.200 user=ssuser port=5432" &
在从机上开启slon 后台进程,启动第三个从数据库复制,命令
/usr/local/pgsql/bin/slon slony_test1 "dbname=testslave3 host=192.168.0.201 user=ssuser port=5431" &
在主机上执行提交命令 ./commitdata
-------------------------------------------------------------------------------
分享到:
相关推荐
**Slony源代码详解** Slony是一个开源的、分布式的数据库复制解决方案,主要设计用于PostgreSQL数据库系统。它提供了一种高效、灵活的方式来同步多台数据库服务器的数据,从而实现数据冗余、负载均衡和故障恢复等...
【标题】"slony cool-开源" 在IT领域,Slony是一种流行的分布式数据库复制解决方案,主要针对PostgreSQL数据库系统。开源软件是指其源代码可供公众查看、修改和分发的软件,鼓励社区协作和持续改进。"slony cool"是...
1. **速度优化**:pglogic被设计为比传统的逻辑复制工具如Slony、Bucardo或Londiste更快。它利用了PostgreSQL的内建逻辑解码功能,能更有效地处理大量数据变化,减少了延迟,提高了复制效率。 2. **跨版本升级**:...
执行"apt-get install postgresql-9.1 postgresql-client-9.1 postgresql-contrib-9.1"来安装PostgreSQL基础组件,然后运行"apt-get install postgresql-9.1-slony1-2 slony1-2-bin"安装Slony复制工具。安装过程中,...
本文将详细解析如何在Ubuntu 12.04 beta1上安装、配置PostgreSQL 9.1以及Slony-I复制解决方案。 首先,确保您已启用root用户,因为大部分配置步骤需要root权限。在命令行界面,通过运行"sudo passwd root"并按照...
2. 与PostgreSQl配合的开源软件很多,有很多分布式集群软件,如pgpool、pgcluster、slony、plploxy等等,很容易做读写分离、负载均衡、数据水平拆分等方案,而这在MySQL下则比较困难。 3. PostgreSQL源代码写的很...
- slony 主要专注于数据库的主从复制,提供异步复制机制。 - plproxy 则专注于查询的分片和平衡,适用于水平扩展的数据库架构。 关于 pgpool-II 的工作方式,它通过配置文件(如 pgpool.conf)来定义其行为。例如,...
与PostgreSQl配合的开源软件很多,有很多分布式集群软件,如pgpool、pgcluster、slony、plploxy等等,很容易做读写分离、负载均衡、数据水平拆分等方案,而这在MySQL下则比较困难。 3. PostgreSQL源代码写的很清晰...
实用与特色兼顾:书中不仅介绍了与PostgreSQL配套的实用性很强的主流开源软件(如PgBouncer、Slony-I、Bucardo、PL/Proxy、pgpool-II、Postgres-XC),还针对PostgreSQL的特色功能(如规则系统、正则表达式、序列...
Slony-I是一个支持表级粒度和多从服务器的示例,但在故障切换时可能存在数据丢失。 5. **基于语句的复制中间件**: 中间件拦截SQL查询,将其广播到所有服务器,实现读写分离。如Pgpool和Sequoia。这种方法可能导致...
- **基于触发器的主-备复制**:如Slony-I,主服务器的更改被异步地发送到备服务器,适合于批量更新和数据仓库场景。 - **基于语句的复制中间件**:拦截SQL查询,分发到多个服务器,实现读写负载均衡。 - **异步多...
Slony-I 是一种基于触发器的行级数据复制方案,由 PostgreSQL 开发者社区开发和支持。它具有以下特点: - **数据拉取**:备服务器主动从主服务器拉取数据。 - **在线升级**:支持在不停机的情况下进行系统升级。 - ...
SM Framework Postgresql扩展集 此SM Framework扩展集包含以下与postgresql相关的扩展: PostgreSQL PostgreSQL数据库系统。 阅读postgresql / README.md以获取更多详细信息。 pgpool 提供连接池,复制,负载平衡,...
- Slony:支持异步复制,适用于大型集群。 - pgpool-II:提供负载均衡和复制功能。 - Bucardo:支持多种复制策略。 - **内置复制** - 文件复制 - 服务器执行 archive_command 脚本来复制 WAL 文件到外部数据...
2. 基于触发器和逻辑复制:包括pglogical、bucardo、slony、londiste等工具,它们支持数据库间的数据复制,可实现复杂的多主复制或多主读写复制。 3. 内建的物理单主复制:从PostgreSQL 9.0版本开始,PostgreSQL...