POSTGRESQL同步——SLONY-I配置
来自:http://bbs.chinaunix.net/thread-955564-1-1.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 only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
host all all 192.168.0.0/24 trust
# IPv6 local connections:
host all all ::1/128 trust
如果不能理解上面的意思,请仔细阅读 postgresql 数据库安全认证文档。
使用 postgres 用户后台启动 postmaser 数据库主进程
/usr/local/pgsql/bin/postmaster -i -D /test/spescso/data/ -p 5432 &
1.3.1.2 安装 slony1 数据同步工具(主从都需要安装)
解压,命令 tar -xvjf slony1-1.2.6.tar
注意,使用 -j 参数,该网站压缩包有点不一致。
进入对应的 slony1-1.2.6 目录 ,命令 :cd slony1-1.2.6
./configure --with-pgsourcetree=<postgresql 源代码目录>
gmake,命令: gmake
注意,是 gmake
安装,命令 gmake install
1.3.2 从数据库服务器
和主数据库服务器的安装方式一致。
1.3.3 建立数据库和数据表
以下以在 主数据库服务器上建立主数据库和数据表 test 为例见解,其他数据库和数据表请参考建立.
su -c "/usr/local/pgsql/bin/createdb -U ssuser -E UTF-8 test -p 5432" -l postgres
su -c "/usr/local/pgsql/bin/psql -f /home/hzh/share/sql.txt -p 5432 -dtest -Ussuser" -l postgres
(注意,sql.txt 是创建数据表的命令,请自行编写。sql.txt 文件最好是 UTF-8 格式,特别是存在中文字符时)
例:sql.txt
CREATE TABLE tb_depart(
Id int primary key,
Name char(
);
在主数据库机器上依次建立 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
POSTGRESQL同步——SLONY-I配置的更多相关文章
- PostgreSQL 一主多从(多副本,强同步)简明手册 - 配置、压测、监控、切换、防脑裂、修复、0丢失 - 珍藏级
参考来源: https://github.com/digoal/blog/blob/master/201803/20180326_01.md#postgresql-一主多从多副本强同步简明手册---配 ...
- PostgreSQL同步复制搭建
摘要: PostgreSQL同步复制搭建 一.初始化master节点 1. 安装PostgreSQL 2. 初始化db initdb -D /data/pg940_data 二.配置master节点 ...
- centos下postgresql的安装与配置[转]
本文摘自:http://blog.chinaunix.net/uid-24846094-id-78490.html 一.安装(以root身份进行) 1.检出最新的postgresql的yum配置从ht ...
- 使用 ZooKeeper 同步集群配置
用 ZooKeeper 同步集群配置,当需要修改所有节点配置时,将配置更新到 ZooKeeper 的一个节点,引起这个节点数据发生变化, 其他所有需要同步配置的节点上的本地 Watcher 会立即发现 ...
- PostgreSQL同步方案
Windows下Postgre SQL数据库通过Slony-I实现数据库双机同步备份 - 数据库其他综合 - 红黑联盟 postgresql同步流复制的Hot Standby - CSDN博客 使 ...
- PostgreSQL recovery.conf恢复配置
PostgreSQL recovery.conf恢复配置 这一章描述recovery.conf 文件中可用的设置.它们只应用于恢复期.对于你希望执行的任意后续恢复, 它们必须被重置.一旦恢复已经开始, ...
- rsync数据同步工具的配置
rsync数据同步工具的配置 1. rsync介绍 1.1.什么是rsync rsync是一款开源的快速的,多功能的,可实现全量及增量的本地或远程数据同步备份的优秀工具.Rsync软件适用于 unix ...
- Linux:DNS主、从、缓存服务器配置、DNS同步加密TSIG配置、DNS分离解析配置
DNS主服务器配置(正向解析.反向解析) 正向解析:根据主机名查找对应的IP地址.当用户访问一个域名时(不考虑hosts文件等因素),正常情况会向指定的DNS主机发送递归查询请求反向解析:根据IP地址 ...
- 使用Settings sync同步VS Code配置
使用Settings sync同步VS Code配置 因为要在多台电脑上使用VSCode,想要简单地管理VSCode地配置,不用每次手动去一一配置,保持多个开发环境的同步,于是使用Settings s ...
随机推荐
- hdu 1411(四面体的体积)
校庆神秘建筑 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- 优先队列priority_queue
优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素.但是它有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按照先进先出的原则进行,而是将当前队列中最大的元素出队.这点类似于给队列 ...
- 转 IntelliJ IDEA 快捷键
https://www.cnblogs.com/clwydjgs/p/9390488.html 一.视图查看 Ctrl+F12 查看file,method结构图.类继承机构图 (不知道方法结构,Ctr ...
- [LOJ6436]神仙的游戏
感觉border的性质还是挺神奇的 一个border的性质是$S$有长度为$len$的border当且仅当对$\forall i\equiv j\left(\bmod(n-len)\right)$有$ ...
- 【kruscal】【最小生成树】【搜索】bzoj1016 [JSOI2008]最小生成树计数
不用Matrix-tree定理什么的,一边kruscal一边 对权值相同的边 暴搜即可.将所有方案乘起来. #include<cstdio> #include<algorithm&g ...
- 【权值分块】bzoj3224 Tyvj 1728 普通平衡树
权值分块和权值线段树的思想一致,离散化之后可以代替平衡树的部分功能. 部分操作的时间复杂度: 插入 删除 全局排名 全局K大 前驱 后继 全局最值 按值域删除元素 O(1) O(1) O(sqrt(n ...
- 【Treap模板详细注释】BZOJ3224-普通平衡树
模板题:D错因见注释 #include<iostream> #include<cstdio> #include<cstring> #include<algor ...
- 8.5(java学习笔记)8.5 字节码操作(javassist)
一.javassist javassist让我们操作字节码更加简单,它是一个类库,允许我们修改字节码.它允许java程序动态的创建.修改类. javassist提供了两个层次的API,基于源码级别的和 ...
- iOS开发——MJExtension复杂数组用法
最近在看MJExtension的Demo,发现了一个plist文件直接转数组模型的方法.以前研究过但是浅尝辄止没有解决,这几天有时间,好好看了看,找到了解决办法,与大家分享. 如果大家的项目中有这种嵌 ...
- Xcode8 不能显示blame,show blame for line 灰色不可点解决办法
1.原因 创建工程时没勾选create git repository 2.解决办法 ➜ ~ cd /Users/zhanglinfeng/Documents/EastMoney/EMLive / ...