ostgres-xl是个好东西?为什么呢?
postgres-xl基于postgresql数据库, postgres可以吊打很多数据库.
它可以搞oltp, 抗衡mysql, mysql没有分析函数功能
它可以搞oltp, 抗衡oracle, oracle生态弱, 没法实时
它对json支持好, 抗衡mongodb, mongodb用得人越来越少了。。。
它还恐怖地支持各种语言扩展, java, javascript, r, python, haskell。。。
并且开源免费,简单强大的没朋友。。。
postgres-xl是postgresql MPP集群版, 继续吊打大数据数据库...
它比greenpulm版本新: 它跟greenpulm本是一家人,都是MPP架构的postgresql集群
但是原生改造, 版本基本上与postgresql一致, greenpulm的版本升不动啊。。。它比oracle RAC/Teradata便宜,免费使用
它比hadoop省资源,没有GC,基于C语言资源利用率高,并且生态圈丰富,可视化方便
它出道早,版本稳定性强。
既然这么优秀,那么我们简单介绍一下。。。
postgres-xl分为以下组件:
a. gtm 负责全局事务
b. coordinator 处理分发执行
c. datanode 负责底层处理
datanode跟coordinator都 连接到gtm,
客户端连接到coordinator运行sql,
coordinator使用gtm进行一些事务功能分发给datanode执行
大致如此,了解得不深入,后续会深入学习,再做补充
一切就绪,现在我们开始正题,一键搭建postgres-xl集群。
项目源码:https://github.com/clojurians-org/my-env
部署脚本: run.sh.d/postgres-xl-example/{createvm.sh, package.sh, deploy.sh, start.sh}
创建虚拟机-createvm.sh
打包依赖-package.sh(打包依赖后即可离线拷贝部署)
部署集群-deploy.sh
启动集群-start.sh
测试集群
过程很简单,依次运行createvm.sh, package.sh, deploy.sh, start.sh即可
下面详细解解释一下发生了什么。
第0步, 创建虚拟机
[larluo@larluo-nixos:~/my-env]$ cat run.sh.d/postgres-xl-example/createvm.sh
set -e
my=$(cd -P -- "$(dirname -- "${BASH_SOURCE-$0}")" > /dev/null && pwd -P) && cd $my/../..echo -e "\n==== bash nix.sh create-vm nixos-postgres-xl-001" && bash nix.sh create-vm nixos-postgres-xl-001echo -e "\n==== bash nix.sh create-vm nixos-postgres-xl-002" && bash nix.sh create-vm nixos-postgres-xl-002echo -e "\n==== bash nix.sh create-vm nixos-postgres-xl-003" && bash nix.sh create-vm nixos-postgres-xl-003image.png
第1步,打包依赖
[larluo@larluo-nixos:~/my-env]$ cat run.sh.d/postgres-xl-example/package.shset -e
my=$(cd -P -- "$(dirname -- "${BASH_SOURCE-$0}")" > /dev/null && pwd -P) && cd $my/../..echo -e "\n==== bash nix.sh build nix.postgres-xl-10.0" && bash nix.sh build nix.postgres-xl-10.0echo -e "\n==== bash nix.sh export tgz.nix-2.0.4" && bash nix.sh export tgz.nix-2.0.4echo -e "\n==== bash nix.sh export nix.rsync-3.1.3" && bash nix.sh export nix.rsync-3.1.3echo -e "\n==== bash nix.sh export nix.gettext-0.19.8.1" && bash nix.sh export nix.gettext-0.19.8.1rsync是可选的(避免脚本多次运行scp多次),
这里的gettext依赖是为了启动脚本中使用envsubst命令替换环境变量
这里由于nix官方还没有支持postgres-xl,并且postgres-xl对系统底层库有依赖,我们不想使用root权限安装污染系统,所以自己编写nix构建脚本自动打包依赖
[larluo@larluo-nixos:~/my-env]$ cat nix.conf/postgres-xl-10.0/default.nix
{ fetchgit, stdenv, readline, zlib, perl, bison, flex, ... }:
stdenv.mkDerivation rec {
name = "postgres-xl-${version}" ;
version = "10.0" ;
rev = "0e7174157b7762959089ab0dd508237679a301c8" ;
buildInputs = [ readline zlib perl bison flex ];
src = fetchgit {
url= "git://git.postgresql.org/git/postgres-xl.git" ;
rev = rev ;
sha256 = "0nv8s4wyswfikb6pbmj9mq6qr8j7vc1d9nhkr6jmnymfkx4rwjxk" ;
} ;
}
作者:larluo
链接:https://www.jianshu.com/p/9d9642dce575
共同学习,写下你的评论
评论加载中...
作者其他优质文章

