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-003
image.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.1
rsync是可选的(避免脚本多次运行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
共同学习,写下你的评论
评论加载中...
作者其他优质文章