• PhxSQL具有服务高可用、数据强一致、高性能、运维简单、和MySQL完全兼容的特点。
  • 服务高可用:PhxSQL集群内只要多数派节点存活就能正常提供服务;出于性能的考虑,集群会选举出一个Master节点负责写入操作;当Master失效,会自动重新选举新的Master。
  • 数据强一致:PhxSQL采用多节点冗余部署,在多个节点之间采用paxos协议同步流水,保证了集群内各节点数据的强一致。
  • 高性能:PhxSQL比MySQL SemiSync的写性能更好,得益于Paxos协议比SemiSync协议更加高效;
  • 运维简单:PhxSQL集群内机器出现短时间故障,能自动恢复数据,无需复杂的运维操作;PhxSQL更提供一键更换(新增/删除)集群内的机器,简化运维的工作。
  • MySQL完全兼容:PhxSQL是基于Percona的研发,完全兼容MySQL的操作命令。 可通过MySQL提供的mysqlclient/perconaserverclient直接操作PhxSQL。

项目中包含PhxSQL源代码,源代码编译时所需要的一些第三方库,及可直接在Linux环境下运行的二进制包。其中代码使用到了微信团队自研的另外三个开源项目(phxpaxos,phxrpc,colib)。若需编译源代码,需额外下载,也可以在clone时通过--recurse-submodule获得代码。

phxpaxos项目地址: http://github.com/Tencent/phxpaxos

phxrpc项目地址: http://github.com/Tencent/phxrpc

colib项目地址: http://github.com/Tencent/libco

安装环境(不做强制要求):

  OS: centos 7 1503

  server: 3台

  phxsql版本:0.8.0

  gcc: 4.8.5

1.依赖安装,先安装epel-release,再把下面的依赖一次性安装

  • automake
  • libtool
  • ncurses
  • readline
  • zlib
  • libstdc++*  (重要包,本人在此困住两小时)

一键编译

  1. 通过git clone或者直接下载release源码包。(本文主要写的)
  2. 直接运行PhxSQL源码根目录build.sh,即可一键完成编译(需要保证网络通畅)。

如一键编译出现问题,请参考以下的手工编译流程。

获取源码

git clone --recursive https://github.com/tencent-wechat/phxsql.git [PhxSQL放置目录]

使用--recursive参数可以同时获得所依赖的第三方库glog,leveldb,protobuf源码,也同时获得所依赖的我们自己研发的库phxpaxos,phxrpc,colib。也可自行下载这些源码,然后自行拷贝或者通过软链的形式放置到third_party目录。

自动安装所有依赖的第三方库

  1. 进入third_party目录。
  2. ./autoinstall.sh
  3. 如果安装成功会看到all done.字眼, 则可以直接跳到编译PhxSQL步骤。

如脚本执行失败,则检查编译失败在哪一个第三方库,尝试解决,如仍然无法安装成功,则按以下步骤自行安装第三方库。

编译leveldb

我们的编译流程是基于leveldb 1.19版本,如果你自行下载了其他版本,可能有编译上的不同。

  1. 进入third_party/leveldb目录。
  2. make,编译完成后会在out-static目录生成libleveldb.a文件。
  3. mkdir lib建立一个lib目录,然后cd lib;ln -s ../out-static/libleveldb.a libleveldb.a建立一个软链,PhxSQL通过lib这个目录来寻址静态库。

编译protobuf

  1. 进入third_party/protobuf目录。
  2. ./autogen.sh (这一步需要去googlecode拉取gmock源码,但已被墙,如没有vpn的筒子可自行下载gmock代码,或直接cp -r ../phxpaxos/third_party/gmock gmock,如果提示缺少autoreconfAC_PROG_LIBTOOL则需先安装automakelibtool)
  3. ./configure CXXFLAGS=-fPIC --prefix=[当前目录绝对路径], 这一步CXXFLAGS--prefix都必须设置对。
  4. make && make install
  5. 编译完成后检查是否在当前目录成功生成bin,include,lib三个子目录。

编译protobuf也可以直接参考官方文档 protobuf编译方法

编译glog

  1. 进入third_party/glog目录。
  2. ./configure CXXFLAGS=-fPIC --prefix=[当前目录绝对路径], 这一步CXXFLAGS--prefix都必须设置对。
  3. make && make install
  4. 编译完成检查是否在当前目录成功生成lib子目录,并检查在lib目录是否成功生成静态库libglog.a.

编译colib

  1. 进入third_party/colib目录。
  2. make
  3. 编译完成检查是否在当前目录成功生成lib子目录,并检查在lib目录是否成功生成静态库libcolib.a.

编译phxpaxos

  1. 进入third_party/phxpaxos/third_party目录。
  2. 可以看到phxpaxos也依赖了glog,leveldb,protobuf这三个库,但由于我们刚才已经编译好了,所以这里无需再进行编译。
  3. rm -rf glog leveldb protobuf把这几个目录删掉。
  4. ln -s ../../glog glog 直接软链到刚才编译好的glog目录。
  5. ln -s ../../leveldb leveldb
  6. ln -s ../../protobuf protobuf
  7. cd ..回到phxpaxos根目录。
  8. ./autoinstall.sh
  9. make && make install.
  10. 编译完成后检查是否在当前目录成功生成lib子目录,并检查在lib目录是否成功生成静态库libphxpaxos.a.
  11. cd plugin; make && make install编译paxos plugin.
  12. 编译成功检查上层lib目录下是否成功生成静态库libphxpaxos_plugin.a.

关于独立phxpaxos的编译,可参考PhxPaxos中文详细编译手册

编译phxrpc

  1. 进入third_party/phxrpc/third_party目录。
  2. 可以看到phxrpc也依赖了protobuf这个库,但由于我们刚才已经编译好了,所以这里无需再进行编译。
  3. rm -rf protobuf把这个目录删掉。
  4. ln -s ../../protobuf protobuf
  5. cd ..回到phxrpc根目录。
  6. make
  7. 编译完成后检查是否生成lib子目录,并检查lib目录下是否生成静态库libphxrpc.a.

关于独立phxrpc的编译,可参考PhxRPC中文详细编译手册

编译PhxSQL

  1. 下载percona源码percona-server-5.6.31-77.0.tar.gz,请注意只能使用percona-server-5.6_5.6.31-77.0版本。
  2. 解压源码到PhxSQL根目录,并更名为percona.
  3. 进入PhxSQL根目录。
  4. ./autoinstall.sh (如果提示Curses library not foundCannot find system readline libraries则需先安装这两个库再执行命令。
  5. make && make install (该步骤编译时间较长,请耐心等待)

心得总结:其实最重要的就是把前面的依赖包装好.后面的就是时间长点.总的来说安装过程还挺顺利.

phxsql安装小记的更多相关文章

  1. Python cx_Oracle 安装小记

    因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,Python cx_Oracle 安装小记 SQLAlchemy 是 Pytho ...

  2. Kong网关介绍与安装小记

    本文主要为kong安装小记,系统环境为centos 6.7                                本文转载请注明出处 —— xiaoEight 介绍 Kong 是在客户端和(微 ...

  3. 【转】Ubuntu 18.04安装小记

    我的电脑是神舟z7 kp7s1,显卡1060,尝试了Ubuntu的16.04,安装完进入界面总是卡死了,后面换18.04依然无解,和版本无关,而是因为英伟达的显卡问题. 参考了如下这篇文章:Ubunt ...

  4. YCM 安装小记

    layout: post title: YCM 安装小记 半夜,女朋友在那边抱怨购物车的物品秒无货,我这边刚好成功安装了vim上最难装的插件--YouCompleteMe,内心非常激动,于是本着取之于 ...

  5. JanusGraph 图数据库安装小记 ——以 JanusGraph 0.3.0 为例

    由于近期项目中有使用图数据的需求,经过对比,我们选择尝试使用 JanusGraph.本篇小记记录了我们安装 JanusGraph 以及需要一起集成的 Cassandra + Elasticsearch ...

  6. Elasticsearch5.1.1+ik分词器+HEAD插件安装小记

    一.安装elasticsearch 1.首先需要安装好java,并配置好环境变量,详细教程请看 http://tecadmin.net/install-java-8-on-centos-rhel-an ...

  7. Opentaps安装小记

    这周了解了个MES项目需求,于是乎找了些开源项目了解下,有php+mysql写的weberp,配置起来相当方便,下一版webERP_v4.13,往F:\Apache\htdocs\一放,启动F:\Ap ...

  8. Archlinux 上 Nginx + PHP + Mariadb + DiscuzX2.5 安装小记

    因为不好找下载集成服务器工具,而且他们自己又打包了一份 php 之类的程序,本身系统就已经有 php 还有数据库什么的了再搞一份受不了,最后选择了手动配置…… 这是一个在 Archlinux 上手动从 ...

  9. debian8(jessie)安装小记

    其实上周五就想写这篇博客了,一直忙着没时间,虽然也不知道自己这一个星期到底在忙什么.这次我是彻底告别windows了,安装的过程略为艰辛,因为之前习惯了deepin和ubuntu的傻瓜式安装,而deb ...

随机推荐

  1. angularjs自动加载和手动加载

    (一)自动加载 ng-app是angular的一个指令,代表一个angular应用(也叫模块).使用ng-app或ng-app=""来标记一个DOM结点,让框架会自动加载.也就是说 ...

  2. dwz中弹出的窗口页面如何获取前页面(点击按钮的页面)的元素???

    在页面A.jsp中点击一个按钮,使用$.pdialog.open()方法弹出b.jsp页面(对话框窗口),我要在b.jsp中选中值然后关闭窗口(b.jsp)返回值给A.jsp~ =========== ...

  3. Array.apply 方法的使用

    Array.apply(null, {length: 5}) length为特殊字段,意思是生成一个长度为5的数组,由于没赋值,所以都是undefined; 如果要赋值,可以这样 console.lo ...

  4. 一个 关于 case when的SQL

    [例]从stud_grade表中查询所有同学考试成绩情况,凡成绩为空者输出“未考”.小于60分输出“不及格”.60分至70分输出“及格”.70分至90分输出“良好”.大于或等于90分时输出“优秀”. ...

  5. 函数指针&指针函数

    https://blog.csdn.net/luoyayun361/article/details/80428882

  6. Solr6.6.0 用 SimplePostTool索引文件的启示

    本文主要是介绍通过SimplePostTool工具索引文件的结果进行确认,针对不同的文件,索引的结果不同. 1.创建core 首先启动solr,建立名称为data的core,SimplePostToo ...

  7. [转载]深入理解java多态性

    FROM:http://blog.csdn.net/thinkGhoster/article/details/2307001 昨天看到一个关于多态性的帖子,参考了回帖者的理解,加入了一些自己的看法,整 ...

  8. Ajax的原理和应用

    这篇文章中,我将从10个方面来对AJAX技术进行系统的讲解. 1.ajax技术的背景 不可否认,ajax技术的流行得益于google的大力推广,正是由于google earth.google sugg ...

  9. 淘宝分布式配置管理服务Diamond

    转载:http://blog.csdn.net/kevinlynx/article/details/40017109 在一个分布式环境中,同类型的服务往往会部署很多实例.这些实例使用了一些配置,为了更 ...

  10. Fedora20上Xen的安装与部署

    XEN 是一种直接执行在硬件上一层软件,它能够让电脑硬件上同一时候跑多个用户的操作系统.其体系结构例如以下: XEN Hypervisor :介于操作系统和硬件之间的一个软件描写叙述层.它负责在各个虚 ...