POSTGRESQL slonyI 1.1.5 数据同步最新的使用-阿里云开发者社区

开发者社区> 数据库> 正文
登录阅读全文

POSTGRESQL slonyI 1.1.5 数据同步最新的使用

简介: postgresql 数据同步1. 总体需求1.1. 当前情况随着软件系统复杂度的提高,分布式部署成为软件部署流行的方式。对于系统的结构,程序和数据是支撑系统的两大要素。程序的分布式部署已经有很多很好的方案,在这里我说一下数据的分布式部署。
postgresql 数据同步
1. 总体需求
1.1. 当前情况
随着软件系统复杂度的提高,分布式部署成为软件部署流行的方式。对于系统的结构,
程序和数据是支撑系统的两大要素。程序的分布式部署已经有很多很好的方案,在这里
我说一下数据的分布式部署。数据的分布式部署其实就是数据库的分布式部署。

1.2. 系统环境
在这里,我以下面的环境详细讲部署的过程。
主数据库服务器 (master)
OS SuSe linux 9.0 for X86
ip 10.73.132.201
mask 255.255.254.0


从数据库服务器 (slave)
OS SuSe linux 9.0 for X86
ip 10.73.133.222
mask 255.255.254.0
需要保证两台机器互连互通.

请到指定目的地下载指定的软件包:
db postgresql 8.1.2.tar.gz(http://www.postgresql.org/download/)
slony1 slony1-1.1.5.tar(http://www.postgresql.org/download/)
以上的网址是一个入口地址,请选择合适的正确的源程序包。

使用 root 用户在两台主备机器上分别建立工作目录:
/home/hzh/share
并拷贝 postgresql 8.1.2.tar.gz 和 slony1-1.1.5.tar 到工组目录下。
以下如果没有明确的指定用户,一般都是 root 用户。

1.3. 系统安装
1.3.1 主数据库服务器
1.3.1.1 安装数据库
解压,命令 tar -xvzf postgresql 8.1.2.tar.gz
进入对应的 postgresql-8.1.2 目录 ,命令 :cd postgresql-8.1.2
检查,命令 ./configure
检查可能失败,一般是缺少相应的包,请自己安装。
gmake,命令: gmake
注意,是 gmake
安装,命令 gmake install

以下对于没有 postgres 用户的操作系统适用
建立 postgres 组,命令: groupadd -g 26 postgres
建立 postgres 用户,命令 useradd -c "postgressql admin user" -d /usr/loca/pgsql -g 26 -G root -u 26 -s /bn/bash

配置环境变量,修改 /etc/profile 文件
vi /etc/profile ,修改 INFODIR=/usr/local/info:/usr/share/info:/usr/info:。。。
为类似如下设置 INFODIR=/usr/local/info:/usr/share/info:/usr/info:。。。/usr/local/pgsql/man
使用 postgres/root 用户修改, /usr/local/pgsql/.bashrc 文件,为 postgres 用户增加环境参数如下:
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

使用 root 用户,建立数据库集群目录,命令如下(如由不明,请参考 linux online help 和 postgresql online help)
mkdir /test
mkdir /test/spescso/
mkdir /test/spescso/data
chown postgres /test/spescso/data/
chmod 700 /test/spescso/data/

使用 postgres 创建 数据库集群
/usr/local/pgsql/bin/initdb -E UTF-8 /test/spescso/data/


使用 root 用户,配置 数据库集群参数
su -c "/usr/local/pgsql/bin/createuser -a -d ssuser" -l postgres
su -c "/usr/local/pgsql/bin/createlang plpgsql template1" -l postgresql

使用 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 10.73.132.0/24 trust
host all all 10.73.133.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.1.5.tar
注意,使用 -j 参数,该网站压缩包有点不一致。
进入对应的 slony1-1.1.5 目录 ,命令 :cd slony1-1.1.5
检查,命令 ./configure
检查可能失败,一般是缺少相应的包,请自己安装。可能还要带 --with 参数指定
postgresql 8.1.2 的安装目录,默认是 /usr/local/pgsql/postgresql-8.1.2
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 格式,特别是存在中文字符时)


在主数据库机器上依次建立 testslave1,testslave2.
在从数据库机器上 5431 端口建立 testslave3

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=10.73.132.201
HOSTSLAVE1=10.73.132.201
HOSTSLAVE2=10.73.132.201
HOSTSLAVE3=10.73.133.222

# 参与同步的数据库用户名
DBSERVER_USER=ssuser
DBSLAVE1_USER=ssuser
DBSLAVE2_USER=ssuser
DBSLAVE3_USER=ssuser

# 同步发布配置,以下是命令 slonik 的参数
$basebin/slonik
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=10.73.132.201
HOSTSLAVE1=10.73.132.201
HOSTSLAVE2=10.73.132.201
HOSTSLAVE3=10.73.133.222

DBSERVER_USER=ssuser
DBSLAVE1_USER=ssuser
DBSLAVE2_USER=ssuser
DBSLAVE3_USER=ssuser

$basebin/slonik
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=10.73.132.201 user=ssuser port=5432" &

在主机上开启slon 后台进程,启动第一个从数据库复制,命令
/usr/local/pgsql/bin/slon slony_test1 "dbname=testslave1 host=10.73.132.201 user=ssuser port=5432" &

在主机上开启slon 后台进程,启动第二个从数据库复制,命令
/usr/local/pgsql/bin/slon slony_test1 "dbname=testslave2 host=10.73.132.201 user=ssuser port=5432" &

在从机上开启slon 后台进程,启动第三个从数据库复制,命令
/usr/local/pgsql/bin/slon slony_test1 "dbname=testslave3 host=10.73.133.222 user=ssuser port=5431" &

在主机上执行提交命令 ./commitdata

至此,配置全部技术。你可以修改主数据库对应表的数据,看数据是否同步到其他的三个从数据库上。
感谢你阅读,预祝你好运!
 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章