slon软件下载地址:
slony1-1.2.6

http://slony.info/downloads/1.2/source/

postgresql下载地址:

http://www.postgresql.org/download/
http://www.postgresql.org/ftp/source/v8.1.23/

一、postgresql安装

方法1.rpm包安装postfresql:
所需软件包:
postgresql92-9.2.10-1PGDG.rhel5.i386.rpm
postgresql92-server-9.2.10-1PGDG.rhel5.i386.rpm
postgresql92-contrib-9.2.10-1PGDG.rhel5.i386.rpm
postgresql92-devel-9.2.10-1PGDG.rhel5.i386.rpm
postgresql92-libs-9.2.10-1PGDG.rhel5.i386.rpm
uuid-1.5.1-3.el5.i386.rpm

硬件IP:192.168.30.121(主)
    192.168.20.122(从)

主、从服务器安装方法相同:

1,linux创建postgres用户及用户组
groupadd postgres
useradd -g postgres postgres

2.安装包安装顺序:
rpm -ivh postgresql92-libs-9.2.10-1PGDG.rhel5.i386.rpm
rpm -ivh postgresql92-9.2.10-1PGDG.rhel5.i386.rpm
rpm -ivh uuid-1.5.1-3.el5.i386.rpm #安装contrib所依赖包
rpm -ivh postgresql92-devel-9.2.10-1PGDG.rhel5.i386.rpm #主从同步所依赖包
rpm -ivh postgresql92-server-9.2.10-1PGDG.rhel5.i386.rpm
rpm -ivh postgresql92-contrib-9.2.10-1PGDG.rhel5.i386.rpm

3.初始化PostgreSQL 数据库:
service postgresql-9.2 initdb

4.启动
service postgresql-9.2 start

5.把PostgreSQL 服务加入到启动列表
chkconfig postgresql-9.2 on
chkconfig --list|grep postgres

方法2.源码安装:

1,linux创建postgres用户及用户组
groupadd postgres
useradd -g postgres postgres

2,解压压缩包

[root@postgres]# tar -xzvf /var/local/pgsql/postgresql-9.2.10.tar.gz

进入解压目录: cd /var/local/pgsql/postgresql-9.2.10
3,编译安装:

创建安装目录和数据目录

mkdir /usr/local/pgsql 
mkdir /home/postgres/data

[root@postgres postgresql-9.2.10]# ./configure --prefix=/usr/local/pgsql -localstatedir=/home/postgres/data

处理报错信息:
checking for readline... no
configure: error: readline library not found
If you have readline already installed, see config.log for details on the
failure. It is possible the compiler isn't looking in the proper directory.
Use --without-readline to disable readline support.

解决:

缺少readline-devel依赖包

安装 readline-devel包

我这里选择的是yum安装,大家可以去网上下载一个适合自己的版本去安装
yum install readline-devel-5.1-3.el5

安装完毕后重新编译即可

重新编译:

[root@postgres postgresql-9.2.10]# ./configure --prefix=/usr/local/pgsql -localstatedir=/home/postgres/data

没有error即编译正常可以安装

[root@postgres postgresql-9.2.10]# make
All of PostgreSQL successfully made. Ready to install.

[root@postgres postgresql-9.2.10]# make install
PostgreSQL installation complete.

4.安装完毕修改数据目录权限
chown -R postgres:postgres /usr/local/pgsql/
chown -R postgres:postgres /home/postgres/data/

修改postgres用户的.bash_profile文件:

[postgres@postgres ~]$ vi .bash_profile
添加:

PGLIB=/usr/local/pgsql/lib
PGDATA=/home/postgres/data
PATH=$PATH:/usr/local/pgsql/bin
MANPATH=$MANPATH:/usr/local/pgsql/man
export PGLIB PGDATA PATH MANPATH

[postgres@postgres ~]$ source .bash_profile

5.初始postgresql并启动postgresql

初始化:
[postgres@postgres ~]$ /usr/local/pgsql/bin/initdb /home/postgres/data
Success. You can now start the database server using:

/usr/local/pgsql/bin/postmaster -D /home/postgres/data
or
/usr/local/pgsql/bin/pg_ctl -D /home/postgres/data -l logfile start

启动:

[postgres@postgres ~]$ /usr/local/pgsql/bin/pg_ctl -D /home/postgres/data start

============================================================================================

从库安装方式和主库postgresql安装一样

============================================================================================

二,编译安装slony-i

1、解压软件包:

[root@postgres local]# tar -xjvf /var/local/slony1-1.2.6.tar.bz2

2、编译安装软件包

[root@postgres ~]# cd /var/local/slony1-1.2.6
[root@postgres slony1-1.2.6]# ./configure --with-pgsourcetree=/usr/local/pgsql/bin

[root@postgres slony1-1.2.6]# make
All of Slony-I is successfully made. Ready to install

[root@postgres slony1-1.2.6]# make install
All of Slony-I is successfully installed

============================================================================================

在主库从库均要安装slony,安装方式同上

====================================================================================

三,主从配置

1.postgresql添加复制用户

su - postgres 用户下

[postgres@mysql ~]$ psql
psql (9.2.10)
Type "help" for help.

postgres=#create role repl password '123456' login superuser replication;

主从都执行此语句

2.postgresql配置文件

postgresql.conf

主从都改:

vi /home/postgres/data/postgresql.conf

添加: listen_addresses = '*'

主库pg_hba.conf

vi /home/postgres/data/pg_hba.conf
添加:
host all repl 192.168.30.122/32 md5

从库pg_hba.conf

vi /home/postgres/data/pg_hba.conf 
添加:
host all repl 192.168.30.121/32 md5

修改配置后重启主从服务器都重启postgresql服务:

[postgres@localhost ~]$/usr/local/pgsql/bin/pg_ctl -D /home/postgres/data restart

3.建立测试数据库和测试表

主从库均需要创建数据库和表,slony不能同步DDL语句。

以下以在主数据库服务器上建立主数据库和数据表 test 为例见解,其他数据库和数据表请参考建立.

/usr/local/pgsql/bin/createdb test

cat sql.txt |psql -Urepl test  -W123456  
sql.txt 文件最好是 UTF-8 格式,特别是存在中文字符时) 例:sql.txt
CREATE TABLE tb_depart(Id int primary key,Name char(8));
在从数据库服务器上建立与主数据库服务器上相同的数据库test

创建后查看:
[postgres@postgres ~]$ psql -Urepl test

test=# \d
List of relations
Schema | Name | Type | Owner
--------+-----------+-------+--------
public | tb_depart | table | repl
(1 row)

test=# \d tb_depart;
Table "public.tb_depart"
Column | Type | Modifiers
--------+--------------+-----------
id | integer | not null
name | character(8) |
Indexes:
"tb_depart_pkey" PRIMARY KEY, btree (id)

test=#\q

在从数据库服务器上建立与主数据库服务器上相同的数据库test,同样的表

4.slony-i配置主从同步

只需要在从库配置只需即可:
在/home/postgres/目录下创建脚本文件:

slony_0.sh文件内容如下:

#!/bin/sh
/usr/local/pgsql/bin/slonik << _END_
#
# Define cluster namespace and node connection information #
#集群名称
cluster name = testdb;
# 定义复制节点
node 1 admin conninfo = 'dbname=test host=192.168.30.121 port=5432 user=repl';
node 2 admin conninfo = 'dbname=test host=localhost port=5432 user=repl';
DROP SET (id=1, origin=1);
uninstall node (id=1);
uninstall node (id=2);
echo 'Drop testdb set';
_END_

slony_1.sh文件内容如下:

#!/bin/sh
/usr/local/pgsql/bin/slonik << _END_
cluster name = testdb;
# 定义复制节点
node 1 admin conninfo = 'dbname=test host=192.168.30.121 port=5432 user=repl';
node 2 admin conninfo = 'dbname=test host=localhost port=5432 user=repl';
echo 'Cluster defined, nodes identified';
# 初始化集群,id从1开始
init cluster (id=1, comment='Master Node');
# 设置存储节点
store node (id=2, comment='Slave Node');
echo 'Nodes defined';
# 设置存储路径
store path (server=1, client=2, conninfo='dbname=test host=192.168.30.121 port=5432 user=repl');
store path (server=2, client=1, conninfo='dbname=test host=localhost port=5432 user=repl');
#设置侦听事件和订阅方向,复制中角色,主节点是原始提供者,从节点是接受者
store listen (origin=1, provider = 1, receiver =2);
store listen (origin=2, provider = 2, receiver =1);
_END_

slony_2.sh文件内容如下:

#!/bin/sh
/usr/local/pgsql/bin/slonik << _END_ #
# Define cluster namespace and node connection information #
cluster name = testdb;
node 1 admin conninfo = 'dbname=test host=192.168.30.121 port=5432 user=repl';
node 2 admin conninfo = 'dbname=test host=localhost port=5432 user=repl';
# 设置参与同步的数据表
#先创建一个复制集,id也是从1开始
#向自己的复制集种添加表,每个需要复制的表一条set命令
#id从1开始,逐次递加,步进为1;
#fully qualified name是表的全称:模式名.表名
#这里的复制集id需要和前面创建的复制集id一致
#假如某个表没有主键,但是有唯一键字,那么可以用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);

create set (id=1, origin=1, comment='testdb 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' );
set add table ( set id=1, origin=1,id=4, fully qualified name='public.tb_test',comment='Table tb_test' );
echo 'set 1 of testdb tables created';
_END_

slony_3.sh文件内容如下:

#/bin/sh
/usr/local/pgsql/bin/slon testdb "dbname=test host=192.168.30.121 port=5432 user=repl" > ~/slon_gb_1.out 2>&1 &
/usr/local/pgsql/bin/slon testdb "dbname=test host=localhost port=5432 user=repl" > ~/slon_gb_2.out 2>&1 &

/usr/local/pgsql/bin/slonik << _END_
# Define cluster namespace and node connection information #
cluster name = testdb; #提供连接参数
node 1 admin conninfo = 'dbname=test host=192.168.30.121 port=5432 user=repl';
node 2 admin conninfo = 'dbname=test host=localhost port=5432 user=repl';

# 提交订阅复制集
subscribe set (id=1, provider=1, receiver=2, forward=no);
echo 'set 1 of gb tables subscribed by node 2';
_END_

[postgres@mysql2 cluster_shells]$ chmod u+x slony_*.sh

slony_main.sh文件内容如下:

#!/bin/sh
case $1 in
start)
cd /home/postgres/
sh slony_3.sh
;;
stop)
killall -KILL slon
;;
rebuild)
cd /home/postgres
killall -KILL slon
sh slony_0.sh >> /dev/null 2>&1
sh slony_1.sh
sh slony_2.sh
sh slony_3.sh
;;
*)
echo "Please input start or stop or rebuild!!"
;;
esac

[postgres@mysql2 cluster_shells]$ chmod u+x slony_main.sh

测试同步:

在从库端执行:

按照下面执行顺序

./slony_0.sh

./slony_1.sh
<stdin>:5: Cluster defined, nodes identified
<stdin>:10: Nodes defined

./slony_2.sh
<stdin>:8: set 1 of testdb tables created

./slony_3.sh
<stdin>:7: set 1 of gb tables subscribed by node 2

修改数据前:
主库端:
[postgres@postgres ~]$ psql test

test=# \d
List of relations
Schema | Name | Type | Owner
--------+-----------+-------+--------
public | tb_depart | table | repl
(1 row)

test=# \d tb_depart
Table "public.tb_depart"
Column | Type | Modifiers
--------+--------------+-----------
id | integer | not null
name | character(8) |
Indexes:
"tb_depart_pkey" PRIMARY KEY, btree (id)
Triggers:
_testdb_logtrigger_1 AFTER INSERT OR DELETE OR UPDATE ON tb_depart FOR EACH ROW EXECUTE PROCEDURE _testdb.logtrigger('_testdb', '1', 'kv')

已创建触发器,用于同步。

暂时无数据;
test=# select * from tb_depart;
id | name
----+------
(0 rows)

备库端:
[postgres@mysql2 ~]$ psql test
Welcome to psql 8.1.23, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

test=# \d
List of relations
Schema | Name | Type | Owner
--------+-----------+-------+--------
public | tb_depart | table | repl
(1 row)

test=# \d tb_depart
Table "public.tb_depart"
Column | Type | Modifiers
--------+--------------+-----------
id | integer | not null
name | character(8) |
Indexes:
"tb_depart_pkey" PRIMARY KEY, btree (id)
Triggers:
_testdb_denyaccess_1 BEFORE INSERT OR DELETE OR UPDATE ON tb_depart FOR EACH ROW EXECUTE PROCEDURE _testdb.denyaccess('_testdb')
slony创建了触发器---双向同步;

暂时无数据
test=# select * from tb_depart;
id | name
----+------
(0 rows)

test=#

主库端添加数据:

test=# insert into tb_depart values(1,'aaa');
INSERT 0 1

test=# select * from tb_depart;
id | name
----+----------
1 | aaa
(1 row)

test=#

备库端查看:
test=# select * from tb_depart;
id | name
----+----------
1 | aaa
(1 row)

同步成功。

postgresql+slony-i安装配置主从的更多相关文章

  1. PostgreSQL CentOS 7 安装配置

    https://www.postgresql.org/download/ 选择相应的版本 安装完成后,稍微配置下,否则无法远程访问: cd /var/lib/pgsql/11/data vi post ...

  2. [原创]mysql 5.6安装配置,主从分离,读写分离简单教程

    文章中参考使用了多个博客的资料,汇总而成!其流程准确性被人亦本人实践! https://blog.csdn.net/qq_35206261/article/details/81321201 https ...

  3. redis:安装配置主从

    1.安装依赖包 yum install gcc gcc-c++ -y 2.下载安装包,解压 cd /usr/local/src/wget http://download.redis.io/releas ...

  4. DNS安装配置主从

    准备环境  关闭防火墙 挂载一下 更改配置文件 安装dns服务 更改配置文件  先复制保存一份

  5. Linux下apache+phppgadmin+postgresql安装配置

    Linux下apache+phppgadmin+postgresql安装配置 操作系统:CentOS 安装包:httpd(首选yum), php(包括php以及php-pgsql,php-mbstri ...

  6. postgresql安装配置

    一,什么是postgresql PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES 版本 4.2 为基础的对象关系型数据库管理系统(ORDBMS),简称pgsql,它支持大部分 ...

  7. DNS服务器:主要介绍DNS的服务原理以及安装及其主从配置

    DNS服务器:主要介绍DNS的服务原理以及安装及其主从配置 一.DNS简介 1.DNS    DNS是域名系统(Domain Name System)的简称,它是一个将域名和IP相互映射的分布式数据库 ...

  8. Centos 7.3 安装配置 PostgreSQL 9.x

    一.安装 PostgresSQL Centos 7 自带的 PostgresSQL 是 9.2 版的.因为,yum 已经做了国内源,速度飞快,所以直接就用 yum 安装了.依次执行以下命令即可,非常简 ...

  9. centos DNS服务搭建 DNS原理 使用bind搭建DNS服务器 配置DNS转发 配置主从 安装dig工具 DHCP dhclient 各种域名解析记录 mydns DNS动态更新 第三十节课

    centos  DNS服务搭建  DNS原理  使用bind搭建DNS服务器 配置DNS转发 配置主从  安装dig工具  DHCP  dhclient  各种域名解析记录  mydns DNS动态更 ...

随机推荐

  1. 8、SQL Server 表分区

    什么是表分区?表分区其实就是将一个大表分成若干个小表.表分区可以从物理上将一个大表分成几个小表,但是逻辑上还是一个表.所以当执行插入.更新等操作的时候,不需要我们去判断应该插入或更新到哪个表中.只需要 ...

  2. vs2008注册组件

    开始—运行 输入 regsvr32+路径

  3. mysql自动添加最后修改时间

    字段不为空 NOT NULL 类型 :timestamp 默认值 :CURRENT_TIMESTAMP

  4. VUE 入门笔记

    前端的MVVM概念今年来也算是如火如荼,了解完 MVVM的概念,也该找个去尝试下 首先我先试了下 国内小而美的 VUE 试着照着文档敲出入门文件,内容都在注释里 <!doctype html&g ...

  5. css之z-index

    要想z-index可以使用,就要配合定位元素使用即position 如果定位元素z-index没有发生嵌套: 1.后来居上的准则 2.哪个大,哪个上 例如 如果定位元素z-index发生嵌套: 1.祖 ...

  6. Node入门(转)

    原文链接:http://www.nodebeginner.org/index-zh-cn.html Node入门 作者: Manuel Kiessling翻译: goddyzhao & Gra ...

  7. javascript之数组操作

    1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限, ...

  8. Unity 几种优化建议

    转: http://user.qzone.qq.com/289422269/blog/1453815561?ptlang=2052 Unity 几种优化建议 最简单的优化建议: 1.PC平台的话保持场 ...

  9. IOS--UIAlertView造成屏幕闪烁

    在异步操作中,如果直接Show一个UIAlertView可能会造成屏幕闪烁(目前在iPhone5上发现),解决办法如下: UIAlertView *alert = [[UIAlertView allo ...

  10. 邮箱验证 各种邮箱的smtp

    常见邮箱的SMTP设置 QQ 邮箱举例:(地址test@qq.com)(账号test)(密码***)(SMTP服务smtp.qq.com)(端口25)(注意:请手动开通SMTP功能,通过网页登录qq邮 ...