Slony-I是PgSql的一个主从同步工具
下载源码并解压
下载源码: wget http://main.slony.info/downloads/2.2/source/slony1-2.2.5.tar.bz2
如果提示无法解析的主机地址 请尝试
wget -4 http://main.slony.info/downloads/2.2/source/slony1-2.2.5.tar.bz2
指定IPV4协议
解压源码:tar -xvf slony1-2.2.5.tar.bz2
编译安装
切换到目录: cd slony1-2.2.5
检查安装环境: ./configure --with-perltools
参数说明:
--with-perltools
perl脚本工具--with-pgconfigdir=/usr/local/pgsql/bin
一般情况下只要配置了环境变量 这个可以不加
编译并安装: make -j4 && make install
其中-j4代表CPU核心
配置数据库信息
- 需要进行同步的机器
- CentOs7.2 IP: 192.168.1.10
- CentOs7.2 IP: 192.168.1.11
- 在两台机器的数据库中创建一个名为slony的超级用户用于Slony-I使用
create user slony superuser password '123456';
- 在192.168.1.10上新建一个名为master的数据库 作为数据源
create database master;
alter database master owner to slony;
- 在192.168.1.10上新建一个名为slave的数据库 作为目标数据库
create database slave;
alter database slave owner to slony;
- 在两台机器的数据库中创建一个测试表synctable
create table synctable(id int primary key, content text);
- 两台数据库相互测试连接
- 1.11:
$ psql -h192.168.1.12 -Uslony -d slave
- 1.12:
$ psql -h192.168.1.11 -Uslony -d master
- 如果连接有问题
- 检查数据库监听地址是否为 * 或者目标地址
- 检查一下
$PGDATA/pg_hba.conf
文件- 添加权限
host all all 192.168.1.0/32 md5
(具体看文件)
- 添加权限
- 检查防火墙
- 如果是firewall 请尝试以下命令
firewall-cmd --zone=public --add-port=5432/tcp --permanent
和firewall-cmd --reload
- 如果是iptables 请尝试下列命令
iptables -A IN_public_allow -p tcp --dport 5432 -j ACCEPT
或者iptables -A INPUT -p tcp --dport 5432 -j ACCEPT
- 如果是firewall 请尝试以下命令
- 1.11:
配置Slony-I
这里我们使用altperl script脚本完成Slony数据同步的配置工作
- /usr/local/etc下有一个slon_tools.conf-simple的实例文件
cd /usr/local/etc
- 复制一份
su cp slon_tools.conf-simple slon_tools.conf
- 打开编辑器
vi slon_tools.conf
$CLUSTER_NAME = 'slony';
#配置集群名称- 配置主节点
1
2
3
4
5
6
7
8
9
10# Include add_node lines for each node in the cluster. Be sure to
# use host names that will resolve properly on all nodes
# (i.e. only use 'localhost' if all nodes are on the same host).
# Also, note that the user must be a superuser account.
add_node(node => 1,
host => '192.168.1.11',
dbname => 'master',
port => 5432,
user => 'slony',
password => '123456'); - 配置从节点
1
2
3
4
5
6add_node(node => 2,
host => '192.168.1.12',
dbname => 'slave',
port => 5432,
user => 'slony',
password => '123456'); - 配置需要同步的表和序列(这里是有主键的表) 写入synctable
1
2
3
4# This array contains a list of tables that already have primary keys.
"pkeyedtables" => [
'synctable'
], - 这里是没有主键但是有唯一键的表 这次没用到 暂时注释掉
1
2
3
4
5# For tables that have unique not null keys, but no primary key, enter their names and indexes here.
#"keyedtables" => {
# 'table3' => 'index_on_table3',
# 'table4' => 'index_on_table4',
#}, - 配置同步序列 这次也没用到 注释掉
1
2
3
4# Sequences that need to be replicated should be entered here.
#"sequences" => ['sequence1',
# 'sequence2'
# ], - 配置同步序列 这次也没用到 注释掉
1
2
3
4
5
6
7
8# "set2" => {
# "set_id" => 2,
# "table_id" => 6,
# "sequence_id" => 3,
# "pkeyedtables" => ["table6"],
# "keyedtables" => {},
# "sequences" => [],
# }, - 配置完的文件同时复制到 192.168.1.11
- 这里用scp如果询问yes/no输入yes 然后输入密码
1
2
3scp slon_tools.conf 192.168.1.11:`pwd`/.
Are you sure you want to continue connection (yes/no): yes
root@192.168.1.11's password:
- 这里用scp如果询问yes/no输入yes 然后输入密码
在 1.10 上初始化群集 执行
slonik_init_cluster | slonik
在 1.10 上启动守护进程
slon_start 1
后面的1是配置群集的 node在 1.11 上启动守护进程
slon_start 2
后面的2是配置群集的 node如果提示
Slon failed to start for cluster slony, node node1
并且日志显示CST FATAL Cannot open pid_file "/var/run/slony1/slony_node1.pid"
- 在两台机器中创建PID文件夹
mkdir /var/run/slony1
- 在两台机器中创建PID文件夹
在 1.10 上创建数据集
slonik_create_set 1 | slonik
1 代表同步群集编号在 1.11 上增加数据订阅者
slonik_subscribe_set 1 2 | slonik
1 代表同步群集编号 2代表节点配置中的 node
测试同步配置
- 在 1.10 的 master 数据库的 synctable 表中插入一条数据
insert into synctable values(1,'同步测试');
- 在 1.11 的 slave 数据库查询
select * from synctable;
1
2
3id | content
-------+----------
1 | 同步测试
- 可以看到数据已经同步成功了