从源码构建

如何从本机构建、开发及测试Vitess

如果您遇到问题或有疑问,我们建议您在我们的Slack 频道上发帖,点击右上角的Slack图标加入。这是一个非常活跃的社区论坛,也是与其他用户互动的好地方。当然,你也可以加入微信群组vitess中国寻求帮助,这里的人们也很热心,时刻准备好回答您的任何问题。

源码编译

以下部分介绍了在Linux和macOS上手动构建Vitess的过程。如果您是Vitess的新手,建议先从本地部署 指南开始。

安装依赖

我们目前正在Ubuntu 14.04(Trusty)和Debian 8(Jessie)上定期测试Vitess。 macOS 10.11(El Capitan)及以上版本也可以使用。安装说明如下所示.

Ubuntu and Debian

Vitess依赖如下软件和库:

  1. Install Go 1.15+.

  2. Install MySQL:

  1. # Apt based
  2. sudo apt-get install mysql-server
  3. # Yum based
  4. sudo yum install mysql-server

Vitess支持MySQL 5.6+和MariaDB 10.0+。我们建议使用MySQL 5.7。

  1. 卸载或者禁用 AppArmor。某些版本的MySQL带有Vitess工具尚未识别的默认AppArmor配置。当Vitess通过mysqlctl工具初始化MySQL实例时,这会导致各种权限失败。这仅在测试环境中存在问题。如果在生产中需要AppArmor,则可以在不通过mysqlctl的情况下适当地配置MySQL实例。

    1. sudo service apparmor stop
    2. sudo service apparmor teardown # safe to ignore if this errors
    3. sudo update-rc.d -f apparmor remove

    重新启动以确保完全禁用AppArmor。

  2. 安装 etcd v3.0+. 请记住在您的路径中包含etcd命令。

    我们将使用ectd作为拓扑服务。 Vitess还包括对ZooKeeperConsul的内置支持。

  3. 安装构建和运行Vitess所需的以下工具:

    • make
    • automake
    • libtool
    • python-dev
    • python-virtualenv
    • python-mysqldb
    • libssl-dev
    • g++
    • git
    • pkg-config
    • bison
    • curl
    • unzip

    可以使用以下apt-get命令安装它们

    1. $ sudo apt-get install make automake libtool python-dev python-virtualenv python-mysqldb libssl-dev g++ git pkg-config bison curl unzip

Mac OS

  1. 安装 Homebrew。如果您的/usr/local目录不为空且尚未使用Homebrew,则需要运行以下命令:

    1. sudo chown -R $(whoami):admin /usr/local
  2. 您可以通过安装Xcode(推荐)或 pkg-config来满足Vitess的依赖关系。如果没有安装Xcode,那么采用如下命令安装pkg-config

    1. brew install pkg-config
  3. 安装 etcd v3.0+. 将etcd 命令放置在您的环境变量路径中。

    我们将使用ectd作为拓扑服务。Vitess 同时还包括对 ZooKeeperConsul 的内置支持。

  4. 运行如下命令:

    1. brew install go ant automake libtool python git bison curl wget mysql57
    2. pip install --upgrade pip setuptools
    3. pip install virtualenv
    4. pip install MySQL-python
    5. pip install tox
  5. Vitess引导程序脚本对go运行时环境进行了一些检查,因此建议在您在 ~/.profile, ~/.bashrc, ~/.zshrc, 或者~/.bash_profile文件中包含如下命令:

    1. export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"
    2. export PATH=/usr/local/go/bin:$PATH
    3. export GOROOT=/usr/local/go
  6. 要使Vitess主机名能够正常解析,需要在/etc/hosts文件中添加一个新的映射关系,其中包含计算机的当前LAN IP地址(最好是IPv4)和当前主机名,您可以通过在终端键入’hostname’获得主机名。 将如下命令放到 强制使用 Go DNS 解析器 ~/.profile 或者 ~/.bashrc 或者 ~/.zshrc文件中也是一个好主意:

  1. export GODEBUG=netdns=go

编译 Vitess

  1. cd到你想cloen vitess源码的目录,clone之。完成后进入到 src/vitess.io/vitess 目录中。

    1. cd $WORKSPACE
    2. git clone https://github.com/vitessio/vitess.git \
    3. src/vitess.io/vitess
    4. cd src/vitess.io/vitess
  2. 设置 MYSQL_FLAVOR:

  1. # It is recommended to use MySQL56 even for MySQL 5.7 and 8.0. For MariaDB you can use MariaDB:
  2. export MYSQL_FLAVOR=MySQL56
  1. 如果你的MYSQL数据库安装在 /usr/bin之外的位置, 请将VT_MYSQL_ROOT v变量设置为Mysql安装的根目录:

    1. # 通过tar包安装的设置参考
    2. export VT_MYSQL_ROOT=/usr/local/mysql
    3. # 通过Homebrew安装的设置参考
    4. export VT_MYSQL_ROOT=/usr/local/opt/mysql@5.7

    请注意上述命令设置生效的前提 mysql 可执行文件在 /usr/local/opt/mysql@5.7/bin/mysql这里。

  2. 运行 mysqld --version 确保你使用的是 MySQL 5.7版本。

  3. 使用以下命令构建Vitess。请注意,bootstrap.sh脚本需要下载一些依赖项。如果您的计算机需要代理才能访问Internet,则需要设置常用的环境变量 (e.g. http_proxy, https_proxy, no_proxy).

    运行 boostrap.sh 脚本:

    1. BUILD_TESTS=0 ./bootstrap.sh
    2. ### example output:
    3. # skipping zookeeper build
    4. # go install golang.org/x/tools/cmd/cover ...
    5. # Found MariaDB installation in ...
    6. # creating git pre-commit hooks
    7. #
    8. # source dev.env in your shell before building
    1. # Remaining commands to build Vitess
    2. source ./dev.env
    3. make build

编译遇到问题怎么办

如果您遇到问题或有疑问,我们建议您在我们的Slack 频道上发帖,点击右上角的Slack图标加入。这是一个非常活跃的社区论坛,也是与其他用户互动的好地方。当然,你也可以加入微信群组vitess中国寻求帮助,这里的人们也很热心,时刻准备好回答您的任何问题。

Python 报错

端到端测试套件目前需要Python 2.7。我们正在努力消除这种依赖关系,你也可以在Docker中运行测试。MySQL 5.7容器包含如下依赖项

  1. make docker_test flavor=mysql57
Node 已存在, port 报错

测试过程失败可能会导致一堆不相关的进程。如果使用默认设置,则可以使用以下命令识别并终止这些进程:

  1. pgrep -f -l '(vtdataroot|VTDATAROOT)' # 展示 Vitess 相关进程
  2. pkill -f '(vtdataroot|VTDATAROOT)' # 干掉 Vitess 相关进程
太多建立到MySQL的连接, 其他超时报错

此错误可能意味着您的磁盘太慢。如果你用不起SSD,可以尝试针对ramdisk进行测试.

tablet连接拒绝, MySQL socket 找不到等问题

这些错误可能表示当尝试分配更多RAM时,计算机耗尽RAM并且服务器崩溃。一些较重的测试需要高达8GB的RAM。

硬盘资源耗尽

一些较大的测试在磁盘上使用高达4GB的临时空间。

文件打开过多

ome Linux发行版附带的默认文件描述符限制对于数据库服务器而言太低。此问题可能会显示为数据库因“太多打开文件”消息而崩溃。检查系统范围的file-max设置以及用户特定的ulimit值。我们建议将它们设置在100K以上是安全的。确切的过程可能因您的Linux发行版而异。

启动单分片集群

你可以使用本地测试脚本101_initial_cluster.sh 快速启动一个单分片Vitess集群,命令如下:

  1. cd examples/local
  2. ./101_initial_cluster.sh

验证集群工作是否正常

如果集群工作正常,您应该看到以下状态:

  1. $ pgrep -fl vtdataroot
  2. 5451 zksrv.sh
  3. 5452 zksrv.sh
  4. 5453 zksrv.sh
  5. 5463 java
  6. 5464 java
  7. 5465 java
  8. 5627 vtctld
  9. 5762 mysqld_safe
  10. 5767 mysqld_safe
  11. 5799 mysqld_safe
  12. 10162 mysqld
  13. 10164 mysqld
  14. 10190 mysqld
  15. 10281 vttablet
  16. 10282 vttablet
  17. 10283 vttablet
  18. 10447 vtgate

您现在应该可以使用以下命令连接到群集:

  1. $ mysql -h 127.0.0.1 -P 15306
  2. Welcome to the MySQL monitor. Commands end with ; or \g.
  3. mysql> show tables;
  4. +-----------------------+
  5. | Tables_in_vt_commerce |
  6. +-----------------------+
  7. | corder |
  8. | customer |
  9. | product |
  10. +-----------------------+
  11. 3 rows in set (0.01 sec)

您还可以使用以下URL浏览到vtctld控制台:

  1. http://localhost:15000

下一步的工作

恭喜!您现在已启动并运行本地vitess群集。您可以按照以下步骤完成其他练习 Run Vitess Locally

笔者在Mac上也尝试安装了一次Vitess,大家也可以参考下,附上链接如下 : Vitess build on Mac