Slony到底是什么?关于VMware Desktone中的Slony和数据库

发布时间:   来源:CSDN  

【场景】

最近接手运维VMware的DAAS环境,其中在租户管理组件中Service Center Appliance plateform中有以前选项: 那上图中的Slony到底是什么呢,Fabric和Element又是什么;

【解释】


(相关资料图)

1、根据相关资料表明,DAAS采用了PostgrelSql数据库,而Slony是是Psql中重要的一个组件; 2、Fabric和Element正如上图所示,其是Psql的2个数据库实例名称,又简称为fdb和edb数据库。

下面先来看下Psql中Slony:

Slony是PostgreSQL领域中最广泛的复制解决方案之一。它不仅是最古老的复制实现之一,它也是一个拥有最广泛的外部工具支持的工具,Slony使用逻辑复制;Slony-I一般要求表有主键,或者唯一键;Slony的工作不是基于PostgreSQL事务日志的,而是基于触发器的;基于逻辑复制高可用性。

在wiki博客中,提到Slony-I is a “master to multiple slaves” replication system supporting cascading (e.g. - a node can feed another node which feeds another node…) and failover,支持 Single origin (master), up to 20 subscribers。即Slony是一个主从集群/复制解决方案,对比DAAS环境中租户TA设备的高可用性+数据一致性要求,就可很好理解Slony在dt-platform中的作用。

下图是slonh-I在TA设备主机上的配置文件: 查看进程:ps -ef | grep slony 【Slony架构图】:

如上图所示,postgresql Slony主从式集群复制的优点在于数据的变更都集中在一台服务器上,其他的从机的数据基本不能变更,完全接受主机的数据变更的异步通知,结合DAAS业务场景,租户TA成对部署,且所有操作均在TA1设备上操作,TA1设备默认就是集群中的主,通过平台自动创建采用169,。254的内部地址进行集群通信,Slony1通过数据库数据的变更通知,及时更新子结点的数据,即TA2的数据,有经验表明Slony1在局域网的复制速度相当的快,数据量不是特别大的情况几乎可以实时同步。 利用slony开源软件可以对postgresql数据进行集中管理,大大提高数据库服务器的服务能力,解决单postgresql在处理海量查询语句出现瓶颈的问题,提高了postgresql在分散分布情况下的数据服务和处理能力。

Slony安装部署

1)软件下载安装 附:postgreSQL下载:https://www.postgresql.org/download/ wget https://www.slony.info/downloads/2.2/source/slony1-2.2.8.tar.bz2 或:git clone http://git.postgresql.org/git/slony1-engine.git 或:git clone ‘git://git.postgresql.org/git/slony1-engine.git’ 加参数–recursive ,可对代码项目进行递归下载 tar -jxvf slony1-2.2.8.tar.bz2 cd slony1-2.2.8 ./configure --prefix=/usr/local/pgsql --with-pgconfigdir=/usr/local/pgsql/bin --with-perltools 或./configure --with-pgsourcetree=make make install 部署过程可参看:https://www.jb51.net/article/141510.htm

SP中TA的数据库说明

Provides information about database instances that are replicated. This provider runs on all Fabricdatabase servers. In the platform, appliances have one or more database instances running, asfollows: 1) Service provider appliances – Fabric Database (FDB) only 2)Tenant appliances - Fabric Database (FDB), Element Database (EDB), and App Volumes Database (AVDB) 3) Desktop manager appliances - Element Database (EDB) and App Volumes Database (AVDB); SP提供有关要复制的数据库实例的信息。SP在所有Fabric上运行数据库服务器。在平台中,设备运行一个或多个数据库实例,如下所示如下: 1)服务提供商设备–仅适用于结构数据库(FDB) 2)租户设备-结构数据库(FDB),元素数据库(EDB)和应用程序卷数据库(AVDB) 3)桌面管理器设备-元素数据库(EDB)和应用程序卷数据库(AVDB)

平台同步复制参数SyncStatus说明:同步进程状态仅适用于从属实例。该属性对于主实例不具有任何意义。对于从属实例,SyncStatus值将是自上次同步以来的毫秒数。例如,SyncStatus = 1200表示最后一次成功同步是在1.2秒之前。警告SyncStatus是否大于40秒大。如果SyncStatus的使用时间超过2分钟,就需管理人员格外注意,因此,运维过程中需要多关注该参数状态。

运维: replication daemon (slony) 作为复制的守护进行运行在TA数据库集群中,可查看该进程状态:

$ps -ef | grep db.confroot 1062 1 0 Sep17 ? 00:00:00 /usr/local/pgsql/bin/slon -f /usr/local/desktone/release/static/conf/slon_edb.confroot 1121 1 0 Sep17 ? 00:00:00 /usr/local/pgsql/bin/slon -f /usr/local/desktone/release/static/conf/slon_fdb.confroot 1443 1062 0 Sep17 ? 00:07:39 /usr/local/pgsql/bin/slon -f /usr/local/desktone/release/static/conf/slon_edb.confroot 1446 1121 0 Sep17 ? 00:06:01 /usr/local/pgsql/bin/slon -f /usr/local/desktone/release/static/conf/slon_fdb.conf

另外,slony还依赖以下2个服务,如果复制服务异常,可对其进行重启: $ nohup /usr/local/pgsql/bin/slon -f /usr/local/desktone/release/static/conf/slon_fdb.conf >/dev/null 2>&1 & $ nohup /usr/local/pgsql/bin/slon -f /usr/local/desktone/release/static/conf/slon_edb.conf >/dev/null 2>&1 &

postgreSql Slony-1 同步复制部署案例

下面是Slony-I 的安装配置简明指南,实现主副数据库的同步:

1)实验:主、副数据库服务器配置

Master:hostname: M_DB inet addr:10.0.0.11 OS: Linux 2.6.9-42.ELsmp CPU:Intel® Xeon® CPU L5320 @ 1.86GHz MemTotal: 254772 kB PgSQL: postgresql-8.3.0

Slave:hostname:S_DB inet addr:10.0.0.12 OS: Linux 2.6.9-42.ELsmp CPU:Intel® Xeon® CPU L5320 @ 1.86GHz MemTotal: 514440 kB PgSQL: postgresql-8.3.0

注意:在M_DB和S_DB上安装postgresql-8.3.0, 确保超级用户是postgres,数据库名是URT。检查M_DB和S_DB上的超级用户postgres是否可以访问对方的机器,分别在M_DB和S_DB上执行以下命令,M_DB和S_DB上的URT数据库里创建相同的表accounts。

sudo -u postgres /home/y/pgsql/bin/createlang plpgsql URT

2)安装Slony-I #分别在M_DB和S_DB上安装Slony-I tar xfj slony1-1.2.13.tar.bz2 cd slony1-1.2.13 ./configure –with-pgconfigdir=/home/y/pgsql/bin gmake all sudo gmake install

Slony Config,创建urt_replica_init.sh文件:

#!/bin/shSLONIK=/home/y/pgsql/bin/slonik#slonik可执行文件位置CLUSTER=URT#你的集群的名称SET_ID=1#你的复制集的名称MASTER=1#主服务器IDHOST1=M_DB#源库IP或主机名DBNAME1=URT#需要复制的源数据库SLONY_USER=postgres#源库数据库超级用户名SLAVE=2#从服务器IDHOST2=S_DB#目的库IP或主机名DBNAME2=URT#需要复制的目的数据库PGBENCH_USER=postgres#目的库用户名$SLONIK <<_EOF_#这句是定义集群名cluster name = $CLUSTER;#这两句是定义复制节点node $MASTER admin conninfo = "dbname=$DBNAME1 host=$HOST1 user=$SLONY_USER ";node $SLAVE admin conninfo = "dbname=$DBNAME2 host=$HOST2 user=$PGBENCH_USER ";#初始化集群和主节点,id从1开始,如果只有一个集群,那么肯定是1#comment里可以写一些自己的注释,随意init cluster ( id = $MASTER, comment = "Primary Node" );#下面是从节点store node ( id = $SLAVE, comment = "Slave Node" );#配置主从两个节点的连接信息,就是告诉Slave服务器如何来访问Master服务器#下面是主节点的连接参数store path ( server = $MASTER, client = $SLAVE,conninfo = "dbname=$DBNAME1 host=$HOST1 user=$SLONY_USER ");#下面是从节点的连接参数store path ( server = $SLAVE, client = $MASTER,conninfo = "dbname=$DBNAME2 host=$HOST2 user=$PGBENCH_USER ");#设置复制中角色,主节点是原始提供者,从节点是接受者store listen ( origin = $MASTER, provider = 1, receiver = 2 );store listen ( origin = $SLAVE, provider = 2, receiver = 1 );#创建一个复制集,id也是从1开始create set ( id = $SET_ID, origin = $MASTER, comment = "All pgbench tables" );#向自己的复制集种添加表,每个需要复制的表添加一条set命令,id从1开始,逐次递加,步进为1;#fully qualified name是表的全称:模式名.表名#这里的复制集id需要和前面创建的复制集id一致set add table ( set id = $SET_ID, origin = $MASTER,id = 1, fully qualified name = "public.accounts",comment = "Table accounts" );

4)启动同步复制:

./urt_replica_init.sh //在M_DB或者S_DB上执行

5)启动slony 创建Master.slon文件: ######################## cluster_name=“URT” conn_info=“dbname=URT host=M_DB user=postgres” ########################

创建Slave.slon文件: ######################## cluster_name=“URT” conn_info=“dbname=URT host=S_DB user=postgres” ########################

#在M_DB上执行 /home/y/pgsql/bin/slon -f master.slon >> master.log &

#在S_DB上执行 /home/y/pgsql/bin/slon -f slave.slon >> slave.log & 6)配置slony发布服务器 创建urt_replica_subscribe.sh文件:

#!/bin/shSLONIK=/home/y/pgsql/bin/slonik#slonik可执行文件位置CLUSTER=URT#你的集群的名称SET_ID=1#你的复制集的名称MASTER=1#主服务器IDHOST1=M_DB#源库IP或主机名DBNAME1=URT#需要复制的源数据库SLONY_USER=postgres#源库数据库超级用户名SLAVE=2#从服务器IDHOST2=S_DB#目的库IP或主机名DBNAME2=URT#需要复制的目的数据库PGBENCH_USER=postgres#目的库用户名$SLONIK <<_EOF_#这句是定义集群名cluster name = $CLUSTER;#这两句是定义复制节点node $MASTER admin conninfo = "dbname=$DBNAME1 host=$HOST1 user=$SLONY_USER";node $SLAVE admin conninfo = "dbname=$DBNAME2 host=$HOST2 user=$PGBENCH_USER ";#提交复制集subscribe set ( id = $SET_ID, provider = $MASTER, receiver = $SLAVE, forward = no);

#在M_DB或者S_DB上执行:./urt_replica_subscribe.sh 7)验证: 修改M_DB上URT数据里的accounts表,S_DB上的accounts表也会随之改变。

相关文章Related

返回栏目>>