Giter Club home page Giter Club logo

phxsql's Introduction

简体中文README

PhxSQL is a high-availability and strong-consistency MySQL cluster built on Paxos and Percona.

Authors: Junchao Chen, Haochuan Cui, Duokai Huang, Ming Chen and Sifan Liu

Contact us: [email protected]

Build Status

#PhxSQL features:

  • high availability by automatic failovers: the cluster works well when more than half of cluster nodes work and are interconnected.
  • guarantee of data consistency among cluster nodes: replacing loss-less semi-sync between MySQL master and MySQL slaves with Paxos, PhxSQL ensures zero-loss binlogs between master and slaves and supports linearizable consistency, which is as strong as that of Zookeeper.
  • complete compliance with MySQL and MySQL client: PhxSQL supports up to serializable isolation level of transaction.
  • easy deployment and easy maintenance: PhxSQL, powered by in-house implementation of Paxos, has only 4 components including MySQL and doesn't depend on zookeeper or etcd for anything. PhxSql supports automated cluster membership hot reconfiguration.

This project includes

  • Source codes
  • Third party submodules
  • Pre-compiled binaries for Ubuntu 64bit system.

Projects on which this project depends are also published by Tencent( phxpaxos, phxrpc, libco ). You can download or clone them with --recurse-submodule.

phxpaxos: http://github.com/Tencent/phxpaxos

phxrpc: http://github.com/Tencent/phxrpc

libco: http://github.com/Tencent/libco

Compilation of PhxSQL

If you prefer pre-compiled binaries, just skip this part.

Structure of PhxSQL Directories

  • PhxSQL
    • phxsqlproxy
    • phxbinlogsvr
    • percona
    • phx_percona
      • plugin
      • phxsync_phxrpc
      • semisync
    • third_party
      • glog
      • leveldb
      • protobuf
      • phxpaxos
      • colib
      • phxrpc
    • tools
    • phxrpc_package_config

Introduction of Directories.

Name Introduction
phxsqlproxy surrogate between MySQL client and PhxSql
phxbinlogsvr server for global binlog synchronization and storage, as well as management of mastership and membership
percona Source code of percona5.6.31-77.0
phx_percona/plugin/phxsync_phxrpc A plugin running in MySql that intercepts MySQL binlogs and forwards them to phxbinlogsvr
phx_percona/plugin/semisync A semisync compatible with our modified plugin APIs of MySQL
third_party/glog GLOG library
third_party/leveldb LevelDB library
third_party/protobuf Google Protobuf 3.0+ library
third_party/phxpaxos PhxPaxos library
third_party/colib Libco library
third_party/phxrpc Phxrpc library

Preparation

Installation of third party libs

PhxSQL needs 6 third party libs(glog, leveldb, protobuf, phxpaxos, colib, phxrpc). Please install them in phxsql/third_party directory or just link to third_party.

NOTE: Please make sure -fPIC is added while executing configure in GLOG and Protobuf as well as specifying --prefix=/the/current/absolute/path.

For example: ./configure CXXFLAGS=-fPIC --prefix=/home/root/phxsql/third_party/glog.

Then download percona-server-5.6.31-77.0.tar.gz

Move percona-server-5.6\_5.6.31-77.0 to PhxSQL directory, rename or link as 'percona' (NOTE: Only percona-server-5.6_5.6.31-77.0 is available)

Preparation of installation enviroment
  1. Execute ./autoinstall.sh && make && make install
  2. Execute 'make package' to generate a tar.gz package so you can transfer to your target hosts.

(NOTE: We put the binaries in install_package/sbin, configuration files in install_package/tools/etc_template, install scripts in install_package/tools. The 'make package' command will pack 'install_package' into 'phxsql-$version.tar.gz'. Please specify -prefix=/the/path/you/want/to/install while executing ./autoinstall.sh)

Deployment of PhxSQL

Host requirements.

PhxSQL needs to run on more than 2 hosts. We suggest N >= 3 and N is an odd number, where N means the number of hosts.

Initialization of PhxSQL

  1. Transfer phxsql.tar.gz to all of the hosts you want to install. Then do as the following steps:

    1. Execute tar -xvf phxsq.tar.gz .

    2. Enter phxsql/tools, Execute python install.py --help to get the help of installation.

      (For example:python2.7 install.py -i"your_inner_ip" -p 54321 -g 6000 -y 11111 -P 17000 -a 8001 -f/tmp/data/)

  2. After executing 'install.py' on all the hosts, Execute './phxbinlogsvr_tools_phxrpc -f InitBinlogSvrMaster -h"ip1,ip2,ip3" -p 17000' in any one hosts. 17000 should be replaced with the port on which phxbinlogsvr is listening.

  3. The cluster is active while a message shows master initialization is finished.

  4. You can execute some SQLs to check the status of cluster through mysql -uroot -h"your_inner_ip" -P$phxsqlproxy_port

Simple tests.

  1. Enter phxsql/tools/
  2. Execute test_phxsql.sh phxsqlproxy_port ip1 ip2 ip3

Description of Configuration Files

PhxSQL have 3 configuration files in total.

1. my.cnf: The configuration of MySQL. Please modify it accroding to your own needs.

NOTE:Modify tools/etc_temlate/my.cnf before installation, Modify etc/my.cnf after installation

2. phxbinlogsvr.conf
Section name Key name comment
AgentOption AgentPort Port for the connection of binlogsvr and MySQL
EventDataDir   Directory where to store the binlogsvr data
MaxFileSize  File size per data of phxbinlogsvr, the unit is B
MasterLease Lease length of master, the unit is second
CheckPointTime The data before CheckPointTime will be deleted by phxbinlogsvr, but it will not be deleted if some other PhxSQL nodes have not learned yet, the unit is minute
MaxDeleteCheckPointFileNum  The maximum number of files deleted each time by phxbinlogsvr
FollowIP Enabled if it is a follower node and will learn binlog from this FollowIP, this node will not vote
PaxosOption PaxosLogPath Directory where to store paxos data
PaxosPort Port for paxos to connect each other
PacketMode The maximum size of paxos log for PhxPaxos,1 means 100M, but the network timeout will be 1 minute, 0 means 50M and network timeout is 2s(changed in dynamic).
UDPMaxSize Our default network use udp and tcp combination, a message we use udp or tcp to send decide by a threshold. Message size under UDPMaxSize we use udp to send.
Server IP IP for phxbinlogsvr to listen
Port Port for phxbinlogsvr to listen
LogFilePath Directory to store log
LogLevel Log level of phxbinlogsvr
3. phxsqlproxy.conf
Section name Key name comment
Server IP IP for phxsqlproxy to listen
Port Port for phxsqlproxy to listen
LogFilePath Directory to store log
LogLevel Log level of phxbinlogsvr
MasterEnableReadPort Enable readonly-port in master node. If set to 0, master will forwarding readonly-port requests to one of slaves.
TryBestIfBinlogsvrDead After the local phxbinlogsvr is dead, phxsqlproxy will try to get master information from phxbinlogsvr on other machine, if this option set to 1.

PhxSQL Usasge

phxsqlproxy is the surrogate of PhxSQL, all requests will be sent to phxsqlproxy and then be forwarded to MySQL.

phxsqlproxy provides 2 different types of port for user.

Master Port( also called Read-Write Port )

It is the port configured in phxsqlproxy.conf. Every requests sent to this port will be forwarded to the master node to excute.

Slave Port( also called Read-Only Port )

It is (MasterPort + 1). You can also specify it by setting SlavePort = xxxxx in phxsqlproxy.conf.
Every requests will be executed on the local MySQL. A master node will make a redirection to another slave nodes if MasterEnableReadPort = 0 (this will save the CPU/IO resource for write requests)

SQL Command Execution

  1. Using mysql -u$user -h$phxsqlproxyip -P$phxsqlproxyport -p$pwd to connect to phxsqlproxy
  2. Execute SQL command.

$phxsqlproxyip can be any one IP of hosts in a clusters and $phxsqlproxyport can be MasterPort or SlavePort.

PhxSQL Management

PhxSQL provides a tool phxbinlogsvr_tools_phxrpc to help the mangerment of PhxSQL.

PhxSQL cluster needs 1 MySQL admin accounts and 1 synchronization account. The default admin account is (root, "" ), the default synchronization account is ( replica, replica123 ), They can be modified( and only be modifyed ) via phxbinlogsvr_tools_phxrpc. DON'T DO THIS MANUALLY.

Following is some commands you may used frequently.

phxbinlogsvr_tools -f GetMasterInfoFromGlobal -h <host> -p <port>

**Function:**Get the current master info from quorum nodes( IP and timeout ).

Arguments:

  • Host: Any one IP of clusters nodes
  • Port: Port which phxbinlogsvr is listening. like 17000

phxbinlogsvr_tools -f SetMySqlAdminInfo -h <host> -p <port> -u <admin username> -d <admin pwd> -U <new admin username> -D <new admin pwd>

Function: Set the user and password of admin account.

Arguments:

  • Host: Any one IP of clusters nodes
  • Port: Port which phxbinlogsvr is listening. like 17000
  • Admin username: Current account user( default is root )
  • Admin pwd: Current account password( default is "" )
  • New admin username: New user
  • New admin pwd: New password

phxbinlogsvr_tools -f SetMySqlReplicaInfo -h <host> -p <port> -u <admin username> -d <admin pwd> -U <new replica username> -D <new replica pwd>

Function: Set the user and password of synchronization account.

Arguments:

  • Host: Any one IP of clusters nodes
  • Port: Port which phxbinlogsvr is listening. like 17000
  • Admin username: Current account user( default is root )
  • Admin pwd: Current account password( default is "" )
  • New replica username: New user
  • New replica pwd: New password

phxbinlogsvr_tools_phxrpc -f GetMemberList -h <host> -p <port>

Function: Membership of this cluster, all IPs and Ports included.

Arguments:

  • Host: Any one IP of clusters nodes
  • Port: Port which phxbinlogsvr is listening. like 17000

Phxbinlogsvr Membership Managerment

Member Deletion

Execute phxbinlogsvr_tools_phxrpc -f RemoveMember -h<host> -p<port> -m <ip_of_nodeA> to delete node A. Once it is succesfully executed, A will not learn binlog after a small period.

Member Involvement

  1. Execute phxbinlogsvr_tools -f AddMember -h<host> -p<port> -m <ip_of_nodeA> to add node A into the membership.
  2. Install PhxSQL on A.
  3. A will begin to learn data after installation is finished.
  4. Copy a snapshot of MySQL from any other nodes to A.
  5. Kill phxbinlogsvr and access MySQL through the local port( or socket ). then execute set global super_read_only = 0; set global read_only = 0;
  6. Dump the snapshot into MySQL.
  7. A will begin to work after a while.

Phxbinlogsvr fault Handling.

You can choose to reinstall PhxSQL if PhxSQL meets an unrecovery failure.

Phxbinlogsvr will pull the checkpoint in another node to reboot during reinstallation. It will self-kill after pulling is over(to make sure the consistency). You can reboot phxbinlogsvr after a message like "All sm load state ok, start to exit" appears.

phxbinlogsvr will stop working if a data problem arise in MySQL. We suggest you to check the status of MySQL.
You can observe logs with red "err" to check the abnormaly.

Performance Testing

Hosts Infomation

CPU : Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz * 24

Memory : 32G

Disk : SSD Raid10

Ping Costs

Master -> Slave : 3 ~ 4ms

Client -> Master : 4ms

Tools and Arguments

sysbench --oltp-tables-count=10 --oltp-table-size=1000000 --num-threads=500 --max-requests=100000 --report-interval=1 --max-time=200

Results

Client Threads Clusters Test sets
insert.lua (100% write) select.lua (0% write) OLTP.lua (20% write)
QPS Response time(MS) QPS Response time(MS) QPS Response time(MS)
200 PhxSQL 5076 39.34/56.93 46334 4.21/5.12 25657 140.16/186.39
200 MySQL semi-sync 4055 49.27/66.64 47528 4.10/5.00 20391 176.39/226.76
500 PhxSQL 8260 60.41/83.14 105928 4.58/5.81 46543 192.93/242.85
500 MySQL semi-sync 7072 70.60/91.72 121535 4.17/5.08 33229 270.38/345.84

NOTE:The 2 Response times means average and 95% percentile

phxsql's People

Contributors

cjcchen avatar liusifan avatar lynncui00 avatar mariohuang avatar mingchengbh avatar taohexxx avatar tencent-wechat avatar wodesuck avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

phxsql's Issues

Master crash多长时间完成Master选举

成功部署包含5个主机的集群,遇到如下问题:
1、Master crash之后,集群中所有写操作都连接不了,多长时间完成选举?
2、并发数大会导致集群连接不了
error 2013: Lost connection to MySQL server at 'reading initial communication packet', system error: 0
3、执行完大量写操作之后,再次进行写操作会Lose connect
ERROR 2013 (HY000): Lost connection to MySQL server during query

phxsql 对MySQL配置是否有特殊要求?

  • 比如存储引擎;
  • 内置自增能不能用;
  • binlog格式有没特殊要求,原binlog是否要打开?
  • 内置的mysql/slave机制是否配置?
  • 能否不经phx-porxy直接在任意的mysql节点上进行写操作?

....

扩容问题

如果考虑到后期系统规模越来越大,如何增加集群处理能力,昨天我问了个问题,就是增加节点和集群能力的系统是不是正相关,得到的回答貌似不是 ,那集群的处理能力是如何增加的(除了常规的分库分表,读写分离等)

编译时最后一步make && make install时出现问题

/opt/phxsql/percona/include/mysql.h:71:27: fatal error: mysql_version.h: No such file or directory
#include "mysql_version.h"
^
compilation terminated.
make[3]: *** [mysql_command.o] Error 1
make[3]: Leaving directory `/opt/phxsql/phxbinlogsvr/core/mysql'

FATAL ERROR: Error closing mysqld pipe: Broken pipe

我在编译打包过程中没有遇到问题, 但是在部署的时候, install.py脚本报了如下错误, 请问是什么原因导致的?

Namespace(agent_port=6000, base_dir='/home/phxsql/', data_dir='/home/phxsql/data/', inner_ip='10.86.41.1', ip_list='10.86.41.1', module_name='test', mysql_port=11111, paxos_port=8001, phxbinlogsvr_port=17000, phxsqlproxy_port=54321, process_name='all')
kill all binaries success....
mkdir: cannot create directory /home/phxsql//etc': File exists generate all configs success.... mkdir: cannot create directory/home/phxsql/data//log': File exists
/home/phxsql/data//phxbinlogsvr
mkdir: cannot create directory /home/phxsql/data//log': File exists /home/phxsql/data//percona.workspace chown: invalid user:user:mysql'
cd /home/phxsql//percona.src; ./scripts/mysql_install_db --defaults-file=/home/phxsql//etc/my.cnf --user=mysql
Installing MySQL system tables...2016-09-21 10:42:25 0 [Warning] 'THREAD_CONCURRENCY' is deprecated and will be removed in a future release.
2016-09-21 10:42:25 0 [Note] ./bin/mysqld (mysqld 5.6.31-77.0-log) starting as process 18422 ...
FATAL ERROR: Error closing mysqld pipe: Broken pipe
install mysql failed, ret 256
install failed, exit......

感觉 coctx_make()的这段代码写越界了,求证

rt,该代码来自third_party/colib/coctx.cpp,调试栈对齐的时候遇到的,总感觉有段代码写越界了,作者能否帮忙解释一下?向ctx->param 开始的地址写了32个字节,但其实它指向的地址没那么多空间:

int coctx_make( coctx_t *ctx,coctx_pfn_t pfn,const void *s,const void *s1 )
{
char *stack = ctx->ss_sp;
*stack = 0;

    char *sp = stack + ctx->ss_size - 1;
    sp = (char*)( ( (unsigned long)sp & -16LL ) - 8);

    int len = sizeof(coctx_param_t) + 64;
    memset( sp - len,0,len );

    ctx->routine = pfn;
    ctx->s1 = s;
    ctx->s2 = s1;

    ctx->param = (coctx_param_t*)sp;
    ctx->param->f = pfn;
    ctx->param->f_link = 0; 
    ctx->param->s1 = s; // 越界?
    ctx->param->s2 = s1; // 越界?

    ctx->regs[ RBX ] = stack + ctx->ss_size - 1;
    ctx->regs[ RSP ] = (char*)(ctx->param) + 8;
    ctx->regs[ RIP ] = (char*)pfn;

    ctx->regs[ RDI ] = (char*)s;
    ctx->regs[ RSI ] = (char*)s1;

    return 0;

}

错误 ERROR 2013 (HY000): Lost connection to MySQL server at .. 的原因分析

经过测试,这个著名的错误(很多人都遇到的):
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
应该是phxsqlproxy中的一个bug导致的。导致该错误的直接调用栈:
IORoutine::ConnectDest()
MasterIORoutine::GetDestEndpoint()
MasterCache::GetMaster()
MasterCache::IsMasterValid()

日志里的错误记录:
W1010 19:15:54.939769 5784 phx_glog.cpp:78] get master [172.16.1.57] expiretime [1476098154] current [1476098154939]
W1010 19:15:54.940032 5784 phx_glog.cpp:78] GetDestEndpoint:599 requniqid 2199472141737567413 getmaster failed, ret -65
W1010 19:15:54.940155 5784 phx_glog.cpp:78] requniqid 2199472141737567413 get mysql ip port failed

可以看到,此时 master 的 expiretime 比当前时间早了N毫秒但小于1秒(实际上是在master正好要过期的时候)。IsMasterValid() 此时返回 false。导致ConnectDest()认为此时不能找到mysql的ip和port。然后连接就断开了。

跟同事讨论了一下,应该是master信息没有及时被update。代码方面还不是很熟,得进一步细看看,希望作者可以帮忙研究下:)

部署时出错, python2.7 install.py -i "ip1,ip2,ip3" -p 54321 -g 6000 -y 11111 -P 17000 -a 8001 -f /tmp/data/

环境:centos7
编译过程:
git clone --recursive https://github.com/tencent-wechat/phxsql.git
进入third_party目录。
./autoinstall.sh =>成功
解压percona至phxsql根目录
./autoinstall.sh
make && make install =>成功

部署:
make /tmp/data
python2.7 install.py -i "ip1,ip2,ip3" -p 54321 -g 6000 -y 11111 -P 17000 -a 8001 -f /tmp/data/
报错:
Namespace(agent_port=6000, base_dir='/data/phxsql/phxsql/install_package/', data_dir='/tmp/data/', inner_ip='ip1', ip_list='ip1,ip2,ip3', module_name='test', mysql_port=11111, paxos_port=8001, phxbinlogsvr_port=17000, phxsqlproxy_port=54321, process_name='all')
kill all binaries success....
mkdir: cannot create directory '/data/phxsql/phxsql/install_package/etc': File exists
generate all configs success....
/tmp/data/phxbinlogsvr
mkdir: cannot create directory '/tmp/data/log': File exists
/tmp/data/percona.workspace
chown: invalid user: 'user:mysql'
cd /data/phxsql/phxsql/install_package/percona.src; ./scripts/mysql_install_db --defaults-file=/data/phxsql/phxsql/install_package/etc/my.cnf --user=mysql
Installing MySQL system tables...2016-09-23 14:16:54 0 [Warning] 'THREAD_CONCURRENCY' is deprecated and will be removed in a future release.
2016-09-23 14:16:54 0 [Note] ./bin/mysqld (mysqld 5.6.31-77.0-log) starting as process 2116 ...
FATAL ERROR: Error closing mysqld pipe: Broken pipe
install mysql failed, ret 256
install failed, exit......

提问:集群中其他机器的配置信息在哪里

如题,在配置文件中只有本机的信息,想知道其他机器的信息存储在何处,是否可以手动配置。

因为我测试的环境机器的IP是动态分配的,因此IP经常会变化,变化之后发现原先的安装就不能再用了(但重新安装会丢失所有的数据)。所以想请教一下如何在不重新安装的情况下更换集群中其他机器的IP地址?或者是否可以增加一些管理功能,以便更换机器的IP?

另外从前面的讨论中我也了解到有些信息,比如Server的ID是依赖于IP的,请问IP变化后这些信息是否会相应地进行更新?谢谢。

可以用跨机房的3台服务器来部署phxsql吗?

3个机房的服务器内网IP互相不通。只有外网IP可以连接。
部署执行python install.py 的时候 -i参数指定了外网IP,etc/phxbinlogsvr.conf 里面的IP也确实是外网IP,
但是发现binlogsrv依然是listen内网IP,导致其他机房的服务器无法连接。请问这个有办法解决吗?

系统产生大量“Too many open files”

在那个PHXBINLOGSVR在两个从被杀之后,主执行DML,然后MYSQLD重启,在BEFORE RECOVERY阶段循环调用GET LAST GTID,导致大量的CLOSE WAIT TCP SOCKET文件的出现,直到TOO MANY FILES被断言退出的情况,基本可以确定不是有意这样设计的。
情景描述:系统产生大量“Too many open files”
原因分析:在服务器与客户端通信过程中,因服务器发生了socket未关导致的closed_wait发生,致使监听port打开的句柄数到了1024个,且均处于close_wait的状态,最终造成配置的port被占满出现“Too many open files”,无法再进行通信。
close_wait状态出现的原因是被动关闭方未关闭socket造成,如附件图所示:

解决办法:有两种措施可行
一、解决:
原因是因为调用ServerSocket类的accept()方法和Socket输入流的read()方法时会引起线程阻塞,所以应该用setSoTimeout()方法设置超时(缺省的设置是0,即超时永远不会发生);超时的判断是累计式的,一次设置后,每次调用引起的阻塞时间都从该值中扣除,直至另一次超时设置或有超时异常抛出。
比如,某种服务需要三次调用read(),超时设置为1分钟,那么如果某次服务三次read()调用的总时间超过1分钟就会有异常抛出,如果要在同一个Socket上反复进行这种服务,就要在每次服务之前设置一次超时。

动关闭方未关闭socket造成大量closed_wait的TCP端口文件,最终因为进程打开太多文件“Too many open files”,被RPC框架的断言干掉

端口会快速地增长[root@bssmysql025~]# lsof|grep 5845|grep TCP|grep CLOSE_WAIT>cyg.tcpsocket.log1[root@bssmysql025~]# lsof|grep 5845|grep TCP|grep CLOSE_WAIT>cyg.tcpsocket.log2不到2分钟的时间,已经从630个增长到5664个

关于binlog的全局顺序

现在测试中遇到一个问题,环境是3台PhxSQL的集群,在一些测试用例密集运行时,模拟3台机器轮流出现单点故障(主要是kill phxsqlproxy或者phxbinlogsvr,下一台PhxSQL的角色被kill前会恢复前一台的所有服务),结果在大概两轮过后,发现一台PhxSQL服务重动后流水不能自动追上,错误消息是:binlog的写入不能符合某个外键约束。

重新安装问题机器,机器开始追流水,但追了没多久就又开始出现同样的问题。测试用例中大概是插入一些数据,更改、查询后删除之。

我想问的是,每台机器上的binlog是有顺序的,但全局是否有序?

an error No such file or directory: '/usr/phxsql//etc/my.cnf' happened , when executing install.py

when executing this install command line:

python install.py -i loalhost -p 54321 -g 6000 -y 11111 -P 17000 -a 8001 -f/tmp/data/

Namespace(agent_port=6000, base_dir='/usr/phxsql/', data_dir='/tmp/data/', inner_ip='192.168.56.102', ip_list='192.168.56.102', module_name='test', mysql_port=11111, paxos_port=8001, phxbinlogsvr_port=17000, phxsqlproxy_port=54321, process_name='all')
kill all binaries success....
Traceback (most recent call last):
File "install.py", line 89, in
generate_config_ret = cg.generate_config()
File "/usr/phxsql/tools/config_generator.py", line 17, in generate_config
ret = self.generate_mysql_config()
File "/usr/phxsql/tools/config_generator.py", line 49, in generate_mysql_config
cp.write( open( '%s/etc/my.cnf'%self.m_args.base_dir, 'w' ) )
IOError: [Errno 2] No such file or directory: '/usr/phxsql//etc/my.cnf'

双备binlogsrv挂掉时好像会产生不一致

测试环境:
一主双备

双备binlogsrv杀掉,然后在主insert,这时这个操作会阻塞,然后在双备恢复时,仍会阻塞直至主的mysql重启。这时这条记录在两台备机上存在,但主没有。

这个能稳定重现,用iptables模拟备到主网络不通,如果没重新选主的话也会出现(10-20s内网络恢复,太早恢复也不行,会成功),
不太清楚实现的一些原理,mysql为啥要重启。 检查binlog流水三台机都是有这条记录的,但select主节点却没有

PHXSQL 的一些参数问题

innodb_support_xa = 0 在默认配置中是关闭的,但是关闭了这个参数,就无法2pc保证binlog和redo一致性,请问我们为了保证高可用性,是否应该打开这个参数?或者说在你们的架构中是有其他的方式来保证binlog和redo的一致性?

mysql_version.h: No such file or directory

/local/phxsql/phxcomm/configparser/inih-master/cpp -I/usr/local/phxsql/phxcomm/log/phxlog -I/usr/local/phxsql/phxcomm/utils -I/usr/local/phxsql/third_party/leveldb/include -I/usr/local/phxsql/third_party/protobuf/include -fpermissive -shared -Wall -Werror -c -o mysql_command.o mysql_command.cpp
In file included from mysql_command.h:14:0,
from mysql_command.cpp:11:
/usr/local/phxsql/percona/include/mysql.h:71:27: fatal error: mysql_version.h: No such file or directory

compilation terminated.

最后一步编译报错,用的中文详细编译手册中指定的percona-server-5.6.31-77.0.tar.gz,烦请帮忙看一下!

编译出错

系统:centos 6.5 x86_64, gcc升级到4.8.5, 在make phxsql时出现以下错误:
g++ phxrpc_phxbinlog_service.o phxrpc_phxbinlog_dispatcher.o phxbinlog_server_config.o phxbinlog_service_impl.o phxbinlog_server.o phxbinlog_main.o -o phxbinlogsvr_phxrpc -L/usr/local/src/phxsql-master/third_party/phxpaxos/lib -L/usr/local/src/phxsql-master/.lib -L/usr/local/src/phxsql-master/third_party/protobuf/lib -L/usr/local/src/phxsql-master/third_party/leveldb/lib/ -L/usr/local/src/phxsql-master/third_party/glog/lib -L -L -L/usr/local/src/phxsql-master/percona/libmysql -L/usr/local/src/phxsql-master/third_party/colib/lib -static-libgcc -static-libstdc++ -lphxbinlogsvrclient_phxrpc -lphxbinlogsvrlogic -lphxbinlogsvrclient_base -lclientproto -lagent -leventagent -lagentrepl -lagentmonitor -leventhandler -lagentstatus -lmasteragent -lpaxosagentbase -lmasterhandler -lnet -lagentmonitorcomm -lmysqlcommand -lagentstorage -lphxbinlogstat -lgtidhandler -lphxbinlogproto -lphxbinlogconfig -lphxconfig -lconfigparser -lphxutils -lphxlog -lphxglog /usr/local/src/phxsql-master/third_party/phxpaxos/lib/libphxpaxos_plugin.a /usr/local/src/phxsql-master/third_party/phxpaxos/lib/libphxpaxos.a /usr/local/src/phxsql-master/third_party/leveldb/lib//libleveldb.a /usr/local/src/phxsql-master/third_party/protobuf/lib/libprotobuf.a /usr/local/src/phxsql-master/percona/libmysql/libperconaserverclient.a -ldl -lrt -lz /usr/local/src/phxsql-master/third_party/glog/lib/libglog.a -lpthread /usr/local/src/phxsql-master/third_party/phxrpc/lib/libphxrpc.a
/usr/local/src/phxsql-master/third_party/leveldb/lib//libleveldb.a(table_builder.o): In function leveldb::TableBuilder::WriteBlock(leveldb::BlockBuilder*, leveldb::BlockHandle*)': table_builder.cc:(.text+0x698): undefined reference tosnappy::MaxCompressedLength(unsigned long)'
table_builder.cc:(.text+0x6d2): undefined reference to snappy::RawCompress(char const*, unsigned long, char*, unsigned long*)' /usr/local/src/phxsql-master/third_party/leveldb/lib//libleveldb.a(format.o): In functionleveldb::ReadBlock(leveldb::RandomAccessFile_, leveldb::ReadOptions const&, leveldb::BlockHandle const&, leveldb::BlockContents_)':
format.cc:(.text+0x5de): undefined reference to snappy::GetUncompressedLength(char const*, unsigned long, unsigned long*)' format.cc:(.text+0x64e): undefined reference tosnappy::RawUncompress(char const_, unsigned long, char_)'
/usr/local/src/phxsql-master/third_party/glog/lib/libglog.a(libglog_la-utilities.o): In function google::GetStackTrace(void**, int, int)': utilities.cc:(.text+0x73e): undefined reference to_Ux86_64_getcontext'
utilities.cc:(.text+0x757): undefined reference to _ULx86_64_init_local' utilities.cc:(.text+0x7af): undefined reference to_ULx86_64_get_reg'
utilities.cc:(.text+0x7f4): undefined reference to _ULx86_64_step' collect2: 错误:ld 返回 1 make[4]: *** [phxbinlogsvr_phxrpc] 错误 1 make[4]: Leaving directory/usr/local/src/phxsql-master/phxbinlogsvr/framework/phxrpc/svr'
make[3]: *** [sub_dir] 错误 1
make[3]: Leaving directory /usr/local/src/phxsql-master/phxbinlogsvr/framework/phxrpc' make[2]: *** [sub_dir] 错误 1 make[2]: Leaving directory/usr/local/src/phxsql-master/phxbinlogsvr/framework'
make[1]: *** [sub_dir] 错误 1
make[1]: Leaving directory `/usr/local/src/phxsql-master/phxbinlogsvr'
make: *** [sub_dir] 错误 1

Language

Dit project ziet er heel cool en belovend uit.
Jammer genoeg begrijp ik er niets van, net zoals de meeste mensen niets zullen begrijpen van wat ik hier schrijf, omdat de voertaal niet in het Engels is.

Moest dit in het Engels zijn, zou dit de gemeenschap meer dienst doen, en zouden er ook meer potentiële gebruikers kunnen mee helpen.

read/write or readonly

question1:phxsqlproxy 会监听readonly和read/write端口,如果我连接一个slave的phxsqlproxy 的read/write端口来读时,说是请求会被透传到master,这时是和写一样都是操作master的mysql来读还是会在集群中所有的主从mysql中选一个来读。
question2:在实际应用中使用读时,readonly和read/write的选择上有什么建议

phxsql运行相关问题

我们一共是三台服务器

  1. 在运行一段时间后,集群出现#HY000The MySQL server is running with the --read-only (super) option so it cannot execute this statement。三台服务器的54321写端口均无法写
  2. 如果在运行中phxbinlogsvr出现中断掉线等错误,有什么方法能够监控并给我们告警信息
  3. 能否在运行的过程中切换成指定的某台服务器为maseter,而不是集群本身自己选举,或者指定某个服务器申请下一个租约

Master节点断网后有些Slave的状态不正确

如题,该问题可以较为稳定的重现。

配置:ubuntu 14.04,virtual box 4台虚拟机。

启动4台机器并测试集群可以正常服务后,将master网络切断。观察到如下行为:
1、数秒钟后master自动切换。
2、依次测试新master和另外两台slave的读写端口和读端口(进行简单的插入和查询操作)。发现总有某个slave机器状态或者功能异常,目前遇到过以下几种情况:
a. 无法连接slave的读写口(只读端口连接查询正常):ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
b. 可以连接slave的读写口:但读端口显示super_read_only为OFF,而读写端口此变量值为ON

当错误类型为a时重新启动phxsqlproxy后恢复正常。b暂时未能重现。

二进制包初始化失败

直接使用二进制包,进行如下修改:
1、根据生成配置文件,出现“//”路径,对/phxsql/tools/目录下所有python脚本,修改base_dir,去掉%s后面“/”;
2、根据官方提供部署说明博客,修改“chown mysql:mysql”;
环境:ubuntu16.04
即可成功启动服务,查看端口正常,初始化集群失败,如下log:
terminal

get master  expire time 0
get master  expire time 0
get master  expire time 0
init svr fail, ret -1

phxsqlproxy.b65705e3f276.invalid-user.log.ERROR.20160919-015446.2106

Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
E0919 01:54:46.137564  2109 phx_glog.cpp:82]  ReadAgentConfig read agent config 
E0919 01:54:46.138438  2109 phx_glog.cpp:82]  ReadAgentConfig load db path /home/datacenter/phxbinlogsvr/event_data engine ip 172.17.0.2 port 6000 package name phxbinlogsvr 

phxbinlogsvr.b65705e3f276.invalid-user.log.ERROR.20160919-021137.3712

E0919 02:17:05.969772  3716 phx_glog.cpp:82]  Showy(0): PN8phxpaxos7CleanerE::run sleep a while, max deleted instanceid 0 checkpoint instanceid (no checkpoint) now instanceid 0 
E0919 02:17:06.000067  3721 phx_glog.cpp:82]  Process master is not inited, waiting init, doing nothing 
E0919 02:17:06.969871  3716 phx_glog.cpp:82]  Showy(0): PN8phxpaxos7CleanerE::run sleep a while, max deleted instanceid 0 checkpoint instanceid (no checkpoint) now instanceid 0 
E0919 02:17:07.000144  3721 phx_glog.cpp:82]  Process master is not inited, waiting init, doing nothing 
E0919 02:17:07.969990  3716 phx_glog.cpp:82]  Showy(0): PN8phxpaxos7CleanerE::run sleep a while, max deleted instanceid 0 checkpoint instanceid (no checkpoint) now instanceid 0 
E0919 02:17:08.000037  3721 phx_glog.cpp:82]  Process master is not inited, waiting init, doing nothing 
E0919 02:17:08.970146  3716 phx_glog.cpp:82]  Showy(0): PN8phxpaxos7CleanerE::run sleep a while, max deleted instanceid 0 checkpoint instanceid (no checkpoint) now instanceid 0 
E0919 02:17:09.000561  3721 phx_glog.cpp:82]  Process master is not inited, waiting init, doing nothing 
E0919 02:17:09.013869  3713 phx_glog.cpp:82]  DoQuery mysql_query show global variables like 'gtid_executed'; done 0,  
E0919 02:17:09.013932  3713 phx_glog.cpp:82]  MakeCheckPoint now time 1474251429 last check time 1474251405,  interval time 216000 
E0919 02:17:09.013947  3713 phx_glog.cpp:82]  MakeCheckPoint check point check done 
E0919 02:17:09.049278  3713 phx_glog.cpp:82]  CheckRunningStatus current mysql instanceid 0, binlog svr instanceid 0 
E0919 02:17:09.970252  3716 phx_glog.cpp:82]  Showy(0): PN8phxpaxos7CleanerE::run sleep a while, max deleted instanceid 0 checkpoint instanceid (no checkpoint) now instanceid 0 
E0919 02:17:10.000097  3721 phx_glog.cpp:82]  Process master is not inited, waiting init, doing nothing 
E0919 02:17:10.970340  3716 phx_glog.cpp:82]  Showy(0): PN8phxpaxos7CleanerE::run sleep a while, max deleted instanceid 0 checkpoint instanceid (no checkpoint) now instanceid 0 
E0919 02:17:11.000038  3721 phx_glog.cpp:82]  Process master is not inited, waiting init, doing nothing 
E0919 02:17:11.970423  3716 phx_glog.cpp:82]  Showy(0): PN8phxpaxos7CleanerE::run sleep a while, max deleted instanceid 0 checkpoint instanceid (no checkpoint) now instanceid 0 
E0919 02:17:12.000018  3721 phx_glog.cpp:82]  Process master is not inited, waiting init, doing nothing 
E0919 02:17:12.970479  3716 phx_glog.cpp:82]  Showy(0): PN8phxpaxos7CleanerE::run sleep a while, max deleted instanceid 0 checkpoint instanceid (no checkpoint) now instanceid 0 
E0919 02:17:13.000020  3721 phx_glog.cpp:82]  Process master is not inited, waiting init, doing nothing 
E0919 02:17:13.970566  3716 phx_glog.cpp:82]  Showy(0): PN8phxpaxos7CleanerE::run sleep a while, max deleted instanceid 0 checkpoint instanceid (no checkpoint) now instanceid 0 
E0919 02:17:14.000077  3721 phx_glog.cpp:82]  Process master is not inited, waiting init, doing nothing 
E0919 02:17:14.049854  3713 phx_glog.cpp:82]  DoQuery mysql_query show global variables like 'gtid_executed'; done 0,  
E0919 02:17:14.049911  3713 phx_glog.cpp:82]  MakeCheckPoint now time 1474251434 last check time 1474251405,  interval time 216000 
E0919 02:17:14.049924  3713 phx_glog.cpp:82]  MakeCheckPoint check point check done 
E0919 02:17:14.049933  3713 phx_glog.cpp:82]  CheckRunningStatus current mysql instanceid 0, binlog svr instanceid 0 
E0919 02:17:14.970636  3716 phx_glog.cpp:82]  Showy(0): PN8phxpaxos7CleanerE::run sleep a while, max deleted instanceid 0 checkpoint instanceid (no checkpoint) now instanceid 0 
E0919 02:17:15.000066  3721 phx_glog.cpp:82]  Process master is not inited, waiting init, doing nothing 
E0919 02:17:15.970726  3716 phx_glog.cpp:82]  Showy(0): PN8phxpaxos7CleanerE::run sleep a while, max deleted instanceid 0 checkpoint instanceid (no checkpoint) now instanceid 0 
E0919 02:17:16.000049  3721 phx_glog.cpp:82]  Process master is not inited, waiting init, doing nothing 

./phxbinlogsvr_tools_phxrpc -f InitBinlogSvrMaster -h"192.168.9.131,192.168.9.132,192.168.9.133" -p 17000 返回get master expire time 0,后漫长等待

你好,
环境:centos 6.6
过程描述:各组件正常编绎,初始化完成
错误现象:
./phxbinlogsvr_tools_phxrpc -f InitBinlogSvrMaster -h"192.168.9.131,192.168.9.132,192.168.9.133" -p 17000

get master expire time 0
get master expire time 0
get master expire time 0
漫长等待后
init svr fail, ret -1
经多套环境下测试都是这个提示,请指导。

初始化失败

xxx@test-db:/home/happy/workspace/phxsql/sbin$ mysql -uroot -h"192.168.xxx.xxx" -P54321
ERROR 1045 (28000): Access denied for user 'root'@'192.168.xxx.xxx' (using password: NO)

初始化时报错。请问这种错误会是什么原因导致的?

phxbinlogsvr_tools设置管理员密码问题

通过phxbinlogsvr_tools设置mysql非root管理员及密码,使用命令如下:
phxbinlogsvr_tools -f SetMySqlAdminInfo -h <host> -p <port> -u <admin username> -d <admin pwd> -U <new admin username> -D <new admin pwd>
1、通过phxsql集群中主机登陆mysql,非root用户,密码正常,登陆成功
2、通过phxsql集群外主机登陆mysql,非root用户,提示密码不正确,经测试密码为空
3、想通过phxsql集群外主机登陆mysql,使用root登陆,发现没有权限,通过查看mysql权限表,没有给root分配其他主机访问的权限?

rancher网络中phxsql初始化失败

环境:docker bridge模式,rancher
1、在基础镜像为centos6.7的docker环境下,手动编译
2、使用docker run,单机进行集群部署,成功初始化,多主机使用rancher环境提供10.42网段ip,初始化失败
可能原因分析:
1、phxrpc不支持rancher网络???
如下log:
terminal

get master  expire time 0
get master  expire time 0
get master  expire time 0
init svr fail, ret -1

phxbinlogsvr.b65705e3f276.invalid-user.log.ERROR.20160921-021137.3712

E0919 02:17:05.969772  3716 phx_glog.cpp:82]  Showy(0): PN8phxpaxos7CleanerE::run sleep a while, max deleted instanceid 0 checkpoint instanceid (no checkpoint) now instanceid 0 
E0919 02:17:06.000067  3721 phx_glog.cpp:82]  Process master is not inited, waiting init, doing nothing 
E0919 02:17:06.969871  3716 phx_glog.cpp:82]  Showy(0): PN8phxpaxos7CleanerE::run sleep a while, max deleted instanceid 0 checkpoint instanceid (no checkpoint) now instanceid 0 
E0919 02:17:07.000144  3721 phx_glog.cpp:82]  Process master is not inited, waiting init, doing nothing 
E0919 02:17:07.969990  3716 phx_glog.cpp:82]  Showy(0): PN8phxpaxos7CleanerE::run sleep a while, max deleted instanceid 0 checkpoint instanceid (no checkpoint) now instanceid 0 
E0919 02:17:08.000037  3721 phx_glog.cpp:82]  Process master is not inited, waiting init, doing nothing 
E0919 02:17:08.970146  3716 phx_glog.cpp:82]  Showy(0): PN8phxpaxos7CleanerE::run sleep a while, max deleted instanceid 0 checkpoint instanceid (no checkpoint) now instanceid 0 
E0919 02:17:09.000561  3721 phx_glog.cpp:82]  Process master is not inited, waiting init, doing nothing 
E0919 02:17:09.013869  3713 phx_glog.cpp:82]  DoQuery mysql_query show global variables like 'gtid_executed'; done 0,  
E0919 02:17:09.013932  3713 phx_glog.cpp:82]  MakeCheckPoint now time 1474251429 last check time 1474251405,  interval time 216000 
E0919 02:17:09.013947  3713 phx_glog.cpp:82]  MakeCheckPoint check point check done 
E0919 02:17:09.049278  3713 phx_glog.cpp:82]  CheckRunningStatus current mysql instanceid 0, binlog svr instanceid 0 
E0919 02:17:09.970252  3716 phx_glog.cpp:82]  Showy(0): PN8phxpaxos7CleanerE::run sleep a while, max deleted instanceid 0 checkpoint instanceid (no checkpoint) now instanceid 0 
E0919 02:17:10.000097  3721 phx_glog.cpp:82]  Process master is not inited, waiting init, doing nothing 
E0919 02:17:10.970340  3716 phx_glog.cpp:82]  Showy(0): PN8phxpaxos7CleanerE::run sleep a while, max deleted instanceid 0 checkpoint instanceid (no checkpoint) now instanceid 0 
E0919 02:17:11.000038  3721 phx_glog.cpp:82]  Process master is not inited, waiting init, doing nothing 
E0919 02:17:11.970423  3716 phx_glog.cpp:82]  Showy(0): PN8phxpaxos7CleanerE::run sleep a while, max deleted instanceid 0 checkpoint instanceid (no checkpoint) now instanceid 0 
E0919 02:17:12.000018  3721 phx_glog.cpp:82]  Process master is not inited, waiting init, doing nothing 
E0919 02:17:12.970479  3716 phx_glog.cpp:82]  Showy(0): PN8phxpaxos7CleanerE::run sleep a while, max deleted instanceid 0 checkpoint instanceid (no checkpoint) now instanceid 0 
E0919 02:17:13.000020  3721 phx_glog.cpp:82]  Process master is not inited, waiting init, doing nothing 
E0919 02:17:13.970566  3716 phx_glog.cpp:82]  Showy(0): PN8phxpaxos7CleanerE::run sleep a while, max deleted instanceid 0 checkpoint instanceid (no checkpoint) now instanceid 0 
E0919 02:17:14.000077  3721 phx_glog.cpp:82]  Process master is not inited, waiting init, doing nothing 
E0919 02:17:14.049854  3713 phx_glog.cpp:82]  DoQuery mysql_query show global variables like 'gtid_executed'; done 0,  
E0919 02:17:14.049911  3713 phx_glog.cpp:82]  MakeCheckPoint now time 1474251434 last check time 1474251405,  interval time 216000 
E0919 02:17:14.049924  3713 phx_glog.cpp:82]  MakeCheckPoint check point check done 
E0919 02:17:14.049933  3713 phx_glog.cpp:82]  CheckRunningStatus current mysql instanceid 0, binlog svr instanceid 0 
E0919 02:17:14.970636  3716 phx_glog.cpp:82]  Showy(0): PN8phxpaxos7CleanerE::run sleep a while, max deleted instanceid 0 checkpoint instanceid (no checkpoint) now instanceid 0 
E0919 02:17:15.000066  3721 phx_glog.cpp:82]  Process master is not inited, waiting init, doing nothing 
E0919 02:17:15.970726  3716 phx_glog.cpp:82]  Showy(0): PN8phxpaxos7CleanerE::run sleep a while, max deleted instanceid 0 checkpoint instanceid (no checkpoint) now instanceid 0 
E0919 02:17:16.000049  3721 phx_glog.cpp:82]  Process master is not inited, waiting init, doing nothing 

PhxSQL 是否能够避免MySQL 的分库分表工作?

从 PhxSQL 的介绍上看, PhxSQL 是 multi-master, 一主多从的架构.那么 来自前端的应用查询可以被路由到多个 master 进行查询操作, 那么是否意味着 PhxSQL 可以避免MySQL 的分库分表工作, 自动进行分库分表了呢?

phxsqlproxy的worker thread的调用栈在第一次启动时未按照16字节对齐

环境情况:OpenSUSE 11.3,编译的机器不支持SSE42但运行的机器支持。glibc版本2.11.3

现象:安装集群后phxsqlproxy进程因SIGSEGV退出。

Issue重现步骤:
1、在一台支持SSE42指令集的机器上全新安装phxsql。可以看到phxsqlproxy进程因SIGSEGV退出。
2、kill掉所有进程,先启动phxsqlproxy,可以看到该进程没有问题。但启动phxbinlogsvr后,phxsqlproxy直接退出,直接调用栈如下:
#0 0x00007f260520ff6e in __strstr_sse42 () from /lib64/libc.so.6
#1 0x000000000056e685 in phxrpc::HttpProto::strsep(char*, char const) ()
#2 0x000000000056f19e in phxrpc::HttpProto::RecvRespStartLine(phxrpc::BaseTcpStream&, phxrpc::HttpResponse*) ()
#3 0x000000000056d455 in phxrpc::HttpClient::Post(phxrpc::BaseTcpStream&, phxrpc::HttpRequest const&, phxrpc::HttpResponse_, phxrpc::HttpClient::PostStat_) ()
#4 0x000000000056ce06 in phxrpc::HttpCaller::Call(google::protobuf::MessageLite const&, google::protobuf::MessageLite*) ()
#5 0x000000000041891c in PhxbinlogStub::GetMemberList (this=0x7f25e449edc8, req=..., resp=0x7f25e449ee78) at phxrpc_phxbinlog_stub.cpp:143
#6 0x00000000004161f8 in PhxBinlogStub_PhxRPC::RpcCallWithIP<int (PhxbinlogStub::)(google::protobuf::Empty const&, google::protobuf::BytesValue), google::protobuf::Empty, google::protobuf::BytesValue> (this=0x7f25ac01edc0, func=

@0x7f25e449eec8: (int (PhxbinlogStub::*)(PhxbinlogStub * const, const google::protobuf::Empty &, google::protobuf::BytesValue *)) 0x41887a <PhxbinlogStub::GetMemberList(google::protobuf::Empty const&, google::protobuf::BytesValue*)>, ip=..., port=17000, req=..., resp=0x7f25e449ee78)
at phxbinlog_stub_phxrpc.cpp:111

#7 0x0000000000415486 in PhxBinlogStub_PhxRPC::RpcCall<int (PhxbinlogStub::)(google::protobuf::Empty const&, google::protobuf::BytesValue), google::protobuf::Empty, google::protobuf::BytesValue> (this=0x7f25ac01edc0, func=

@0x7f25e449eec8: (int (PhxbinlogStub::*)(PhxbinlogStub * const, const google::protobuf::Empty &, google::protobuf::BytesValue *)) 0x41887a <PhxbinlogStub::GetMemberList(google::protobuf::Empty const&, google::protobuf::BytesValue*)>, req=..., resp=0x7f25e449ee78)
at phxbinlog_stub_phxrpc.cpp:121

#8 0x00000000004147e5 in PhxBinlogStub_PhxRPC::GetMemberList (this=0x7f25ac01edc0, resp_buffer=0x7f25e449ef78)

at phxbinlog_stub_phxrpc.cpp:254

#9 0x0000000000419b77 in phxbinlogsvr::PhxBinlogClient::GetMemberList (this=0x7f25ac01ee20, ip_list=0x7f25e449efe8, port=0x7f25e449efc4)

at phxbinlog_client.cpp:266

#10 0x0000000000410263 in phxsqlproxy::MembershipCache::UpdateGroupStatus (this=, group_status=...) at membership_cache.cpp:43
#11 0x0000000000410663 in phxsqlproxy::GroupStatusCache<std::vector<std::string, std::allocatorstd::string > >::run (this=0x7f25d80016d0)

at group_status_cache.h:39

#12 0x0000000000410948 in phxsqlproxy::RoutineRun (p=0x7f25d80016d0) at phxcoroutine.cpp:35
#13 0x00000000004326c3 in CoRoutineFunc (co=0x7f25e447d010) at co_routine.cpp:384
#14 0x0000000000000000 in ?? ()

经过分析,产生该错误的原因是:__strstr_sse42() 要求调用前rsp指针应该安装16字节对齐,而在phxsqlproxy执行GroupStatusCache时,调用栈的第一帧的rsp是按照8字节对齐的。

该问题可以通过在__strstr_sse42 ()设置断点观察到。

TPCC-MYSQL测试失败

Hi,首先感谢分享phxsql。我用tpcc进行测试,出现一些问题,官方是否可以给出答复?

[0] sc:0 lt:0 rt:109837 fl:56 [1] sc:0 lt:0 rt:114389 fl:56 [2] sc:0 lt:0 rt:13016 fl:6 [3] sc:6 lt:0 rt:0 fl:0 [4] sc:0 lt:0 rt:11858 fl:5 in 100 sec.

<Raw Results2(sum ver.)>
[0] sc:0 lt:0 rt:109872 fl:56
[1] sc:0 lt:0 rt:114434 fl:56
[2] sc:0 lt:0 rt:13016 fl:6
[3] sc:6 lt:0 rt:0 fl:0
[4] sc:0 lt:0 rt:11859 fl:5

(all must be [OK])
[transaction percentage]
Payment: 0.00% (>=43.0%) [NG] *
Order-Status: 0.00% (>= 4.0%) [NG] *
Delivery: 100.00% (>= 4.0%) [OK]
Stock-Level: 0.00% (>= 4.0%) [NG] *
[response time (at least 90% passed)]
New-Order: -nan% [NG] *
Payment: -nan% [NG] *
Order-Status: -nan% [NG] *
Delivery: 100.00% [OK]
Stock-Level: -nan% [NG] *

0.000 TpmC :~/tpcc-mysql# ./tpcc_start -h 192.168.1.71 -P 54325 -utpcc -ptpcc -dtpcc -w10 -c10 -r10 -l100

PS: SYSBENCH, MYCATTOOL等工具直接写入都是成功的。

PhxSQL管理

  • 修改密码
root@test-db:~/phxsql/sbin# ./phxbinlogsvr_tools_phxrpc -f SetMySqlAdminInfo -h IPB -p 17000 -u root -d '' -U happy -D happy
get master IPB expire time 1473154666
SetMySqlAdminInfo fail ret -202

请问,返回 -202 是什么意思?

  • 重启 phxbinlogsvr

phxbinlogsvr故障处理提到

在重装过程中,phxbinlogsvr可能会拉取集群内其他机器checkpoint来启动,待checkpoint拉取结束后,phxbinlogsvr会自杀(为了确保数据安全),日志中会出现"All sm load state ok, start to exit process",此时须重新启动phxbinlogsvr,启动后会正常运行。

请问,怎样重新启动 phxbinlogsvr?是否是执行 tools/restart.py ?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.