PhxSQL是一个兼容MySQL、服务高可用、数据强一致的关系型数据库集群。PhxSQL以单Master多Slave方式部署,在集群内超过一半机器存活的情况下,可自身实现自动Master切换,且保证数据一致性。
Github地址:https://github.com/tencent-wechat/phxsql/blob/master/README.zh_cn.md
总览
- 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-wechat/phxpaxos
phxrpc项目地址: http://github.com/tencent-wechat/phxrpc
colib项目地址: http://github.com/tencent-wechat/libco
1. PhxSQL常用命令
目前在BI广州机房druid测试环境中的monitor00(100.0.0.1)、monitor01(100.0.0.2)和monitor02(100.0.0.3)上安装了PhxSQL。因为集群的高一致性,没有特地说明的地方,任选三台中的一台ip即可。
- 安装路径basedir = /apps/phxsql;
- 数据路径datadir = /apps/phxsqldata;
- 编译后的安装包为 /apps/phxsql-0.8.0.tar.gz
(1). 安装及初始化phxsql
如果出现connect machine IP fail,则该IP下的二进制没有在运行;
如果出现其他异常,而不出现add ip IPXXX to master done,则可认为初始化过程中出现异常,可选择重新安装;
如果出现 machine xxx has been set, 则集群已经被初始化,但IP2,IP3没有加入到集群中。此时可通过成员管理中的添加成员把IP2,IP3加入到集群,或者重新安装。
(2). 查看命令及相关参数,进入 phxsql/tools
如python2.7 install.py --help
optional arguments: -i IP_LIST, --ip_list IP_LIST IPs of group hosts, split by ',' -p PHXSQLPROXY_PORT, --phxsqlproxy_port PHXSQLPROXY_PORT phxsqlproxy for mysql client to connect -g AGENT_PORT, --agent_port AGENT_PORT agent for mysql to learn binlog -y MYSQL_PORT, --mysql_port MYSQL_PORT mysql port for phxsqlproxy to connect -P PHXBINLOGSVR_PORT, --phxbinlogsvr_port PHXBINLOGSVR_PORT phxbinlogsvr port -a PAXOS_PORT, --paxos_port PAXOS_PORT port for paxos protocol to communicate -s SKIP_DATA, --skip_data SKIP_DATA do not delete datas in data_dir -f DATA_DIR, --data_dir DATA_DIR where phxbinlogsvr and paxos log been stored
(3). 在保留当前数据库的前提下,重新安装
(4). 查看集群状态,进如 phxsql/sbin
(5). PhxSQL运营管理工具phxbinlogsvr_tools_phxrpc,可以用来初始化PhxSQL、获取成员列表等。
(6). 通过Phxsqlproxy登录PhxSQL的命令行客户端
(7). 增加PhxSQL新用户,即增加管理员
2. PhxSQL编译
(1). 安装依赖库
(2). 中文详细编译手册,按官方文档一步一步编译
(3). 生成安装文件
1). 在PhxSQL目录下执行sh autoinstall.sh && make && make install
2). 若想打包二进制运行包(集群运行时所需要的所有文件和配置)make package
3). install完成后,二进制会生成到PhxSQL目录下的sbin目录,运行所需要的相关文件和配置会安装到PhxSQL目录下的install_package目录。打包二进制运行包会把install_package进行tar格式的打包,并生成phxsql.tar.gz。若想更改install的安装目录,可在sh autoinstall.sh 后加入-prefix=路径
(4). 将安装文件分发到需要安装PhxSQL的机器上,如monitor00、monitor01、monitor02,可用salt分发。
3. PhxSQL部署
PhxSQL需要在2台或以上的机器集群上运行(建议集群内机器数目n>=3 且 n为奇数)。
(1). my.cnf
MySQL的配置,请根据你的业务需求进行修改(安装前请修改tools/etc_template/my.cnf
,安装后请修改etc/my.cnf
)。
安装前将my.cnf中的 user=mysql 改为 user=druid,以免报错“chown: invalid user: `user:mysql’”。
(2). 中文部署手册,按官方步骤一步一步部署
如果安装失败,请查看所需端口是否被占用。
4. PhxSQL成员管理
PhxSQL成员管理官方文档
5. 迁移数据
(1). 从现有MySQL数据库迁移
从现有MySQL数据库迁移—官方文档
虽然集群之前使用的MySQL(5.6.32)与PhxSQL使用的percona(5.6.31-77.0)都是MySQL5.6,迁移过程中使用如下命令会报错,很可能是兼容性问题。
(2). 导出再导入
将pro环境中的MySQL替换为PhxSQL
1). 导出数据
2). 将druid.sql打包为druid-db-20161222.tar.gz,该文件很大,如果不打包会salt上传失败
3). 分发打包后的sql文件到monitor00
4). 导入PhxSQL数据库
6). 修改druid配置文件中_common/common.runtime.properties
7). 重启druid所有服务
附录
微信开源PhxSQL:高可用、强一致的MySQL集群
谈谈PhxSQL的设计和实现哲学(上)
谈谈PhxSQL的设计和实现哲学(下)
官方wiki