部署 PhxSQL

编译、安装后你还可以进行以下操作:

  • 若想打包二进制运行包(集群运行时所需要的所有文件和配置)make package
  • install完成后,二进制会生成到PhxSQL目录下的sbin目录,运行所需要的相关文件和配置会安装到PhxSQL目录下的install_package目录。打包二进制运行包会把install_package进行tar格式的打包,并生成phxsql.tar.gz。若想更改install的安装目录,可在sh autoinstall.sh 后加入-prefix=路径

配置文件介绍

在部署之前先介绍一下 PhxSQL 的配置文件。
PhxSQL 提供三个配置文件,分别是:my.conf, phxbinlogsvr.conf, phxsqlproxy.conf。它们各自作用于 PhxSQL 的三个组件,如下:

配置文件 作用于
my.conf MySQL
phxbinlogsvr.conf phxbinlogsvr
phxsqlproxy.conf phxsqlproxy

phxbinlogsvr 负责 binlog 复制与 master 的管理,其配置文件的配置项如下:

Section name Key name Value comment
Server IP 本机IP Phxbinlogsvr 的监听 ip
Port 17000 Phxbinlogsvr 的监听端口
LogLevel 3 Phxbinlogsvr 的日志级别
LogFilePath /tmp/data/log Phxbinlogsvr 的日志目录
LogMaxSize 1600
AgentOption AgentPort 6000 Phxbinlogsvr 监听 MySQL 访问的端口,用于 MySQL 和 binlogsvr 之间的通信
EventDataDir /tmp/data/phxbinlogsvr/event_data Phxbinlogsvr 数据存放目录
MaxFileSize  10000000 Phxbinlogsvr 每个数据文件的大小,数据文件过大会导致启动过慢,数据文件过小会导致文件数过多,单位为 B
CheckStatusTime 5
MasterLease 20 Phxbinlogsvr 的 master 租约时间,单位为 s
CheckPointTime 3600 Phxbinlogsvr 会删除 CheckPointTime 时间前的数据,但如果被删数据中存在其他 MySQL 还没学到的,则不会删除该部分数据,单位为分钟
MaxDeleteCheckPointFileNum  250 Phxbinlogsvr 删数据时,每次删除的最大文件数
FollowIP 机器为 folloer 机器,只负责拉取 FollowIP 机器上的数据,不参与集群的投票
PaxosOption PaxosLogPath /tmp/data/phxbinlogsvr/paxoslog Phxbinlogsvr中paxos库的数据目录
PaxosPort 8001 Phxbinlogsvr 中 paxos 库的通信端口
PacketMode Phxbinlogsvr在 paxos 协议中是否增大包的大小限制, 1 为每个包的大小为 100m,但超时限制变为1分钟,0 为每个包的大小为 50m,超时限制 2s 起(动态变化)

phxsqlproxy 负责透传客户端的请求,其配置文件的配置项如下:

Section name Key name Value comment
Server MasterForkProcCnt 1 master fork 出的进程数
MasterWorkerThread 30 master worker 的线程数
MasterIORoutineCnt 100 master IO 路由数
SlaveForkProcCnt 1 slave fork 出的进程数
SlaveWorkerThread 30 slave worker 的线程数
SlaveIORoutineCnt 100 slave IO 路由数
MasterEnableReadPort 1 master 只读端口是否可用
IP 本机 IP phxsqlproxy 的监听 ip
Port 54321 phxsqlproxy 的监听(读写)端口
LogLevel 3 phxsqlproxy 的日志级别
LogFilePath /tmp/data/log phxsqlproxy 的日志目录
LogMaxSize 1600

部署

打包好之后便可以将它们拷贝到不同的主机部署了。本文主要记录在多台主机上部署 PhxSQL 与使用的过程。

安装

执行

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

安装 PhxSQL。
注意:install.py 提供多组命令组合,比如:它可以安装整个 PhxSQL(包含 MySQL, phxbinlogsvr,phxsqlproxy),也可以只安装其中一个组件。详细使用方法可以通过 --h 查看。

初始化

执行

1
root@Vm-template-100G:~/phxsql/sbin# ./phxbinlogsvr_tools_phxrpc -f InitBinlogSvrMaster -h"IPA,IPB" -p 17000

即可。得到的提示却是:

1
2
3
4
root@Vm-template-100G:~/phxsql/sbin# ./phxbinlogsvr_tools_phxrpc -f InitBinlogSvrMaster -h"IPA,IPB" -p 17000
get master expire time 0
get master expire time 0
init svr fail, ret -1

然后再次初始化,得到的结果是:

1
2
3
root@Vm-template-100G:~/phxsql/sbin# ./phxbinlogsvr_tools_phxrpc -f InitBinlogSvrMaster -h"IPA,IPB" -p 17000
get master IPA expire time 1473300565
machine IPA has been set master(IPA)

显然,集群中只有 IPA 这台机器。

1
2
3
root@Vm-template-100G:~/phxsql/sbin# ./phxbinlogsvr_tools_phxrpc -f GetMemberList -hIPA -p17000
get master IPA expire time 1473300691
ip IPA port 17000

执行GetMemberList得到的结果也印证了上一结论。

那么,可以使用AddMember命令来将 IPB 这台机器加入集群吗?

1
2
3
root@test-db:~/phxsql/sbin# ./phxbinlogsvr_tools_phxrpc -f AddMember -h IPA -p 17000 -m IPB
get master IPA expire time 1473300896
AddMember IPB done

接下来,尝试从只读端口连接 IPC 的数据库。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
root@test-db:~/phxsql/sbin# mysql -uroot -hIPB -P54322
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1317
Server version: 5.6.31-77.0-log Source distribution
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
root@(none) 10:21>

现在集群中有了 IPA 和 IPB 两台机器了。其中,IPA 作为 master。

常用命令

下面列出常用的一些命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
python install.py -i"IPC" -p 54321 -g 6000 -y 11111 -P 17000 -a 8001 -f/tmp/data/
./phxbinlogsvr_tools_phxrpc -f InitBinlogSvrMaster -h"IPA,IPB" -p 17000
./phxbinlogsvr_tools_phxrpc -f AddMember -hIPA -p17000 -mIPC
./phxbinlogsvr_tools_phxrpc -f GetMemberList -hIPA -p17000
show global variables like '%uuid%'
./test_phxsql.sh 54321 IPA IPB
mysql -uroot -h"IPB" -P54321
./phxbinlogsvr_tools_phxrpc -f SetMySqlAdminInfo -hIPC -p17000 -uroot -d '' -Uhappy -Dhappy

问题

  1. chown: invalid user: `user:mysql’

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    root@test-db:/home/happy/phxsql/tools# python install.py -i"IPB" -p 54321 -g 6000 -y 11111 -P 17000 -a 8001 -f/tmp/data/
    Namespace(agent_port=6000, base_dir='/home/happy/phxsql/', data_dir='/tmp/data/', inner_ip='IPB', ip_list='IPB', module_name='test', mysql_port=11111, paxos_port=8001, phxbinlogsvr_port=17000, phxsqlproxy_port=54321, process_name='all')
    kill all binaries success....
    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 /home/happy/phxsql//percona.src; ./scripts/mysql_install_db --defaults-file=/home/happy/phxsql//etc/my.cnf --user=mysql
    Installing MySQL system tables...2016-09-02 21:35:33 0 [Warning] 'THREAD_CONCURRENCY' is deprecated and will be removed in a future release.
    2016-09-02 21:35:33 0 [Note] ./bin/mysqld (mysqld 5.6.31-77.0-log) starting as process 8228 ...
    FATAL ERROR: Error closing mysqld pipe: Broken pipe
    install mysql failed, ret 256
    install failed, exit......

    尝试将配置文件中的user=mysql改为user=root,然后再执行install.py

  2. init svr fail, ret -1

    1
    2
    3
    4
    root@Vm-template-100G:~/phxsql/sbin# ./phxbinlogsvr_tools_phxrpc -f InitBinlogSvrMaster -h"IPA,IPB" -p 17000
    get master expire time 0
    get master expire time 0
    init svr fail, ret -1

    执行InitBinlogSvrMaster,偶尔会返回错误信息。

    更多内容请阅读官方文档。本文仅供参考,欢迎交流:)

参考

  1. PhxSQL部署和运行