介绍

本网文章是本人第一折腾mysql-cluster的记录。我准本了五台centos7的虚拟机,每台1G内存,一个核心。这也是应公司需要,折腾一下。读了很久的官网资料,英文都提升了。发现这次的mysql的集群解决方案还是蛮有诚意的,基本上算是一个真集群了吧,什么可用性、伸缩性、负载均衡、数据容灾基本都有方案,而对于使用来说,与单机的mysql的差别又不是很大。不过加入了对应的nosql的支持,有了新的驱动使用,这些都是想要尝试一下的。

下载

最初,我现在选择的是Linux-Generic 64位版,最开始选择的RedHat7的版本下载,下了一堆rpm包,而官网的安装说明,却是按照Linux-Generic 64位版说的,所以又重新下载了该版本,不要下载错了哈。

安装

启动安装程序

解压出来之后,就是安装的源码包,在bin下面有个ndb_setup.py可以直接运行进行安装。

bin/ndb_setup.py

但是,执行过后,提示的可访问的页面地址是:http://localhost:8081/welcome.html ,这个地址,经过我各种尝试,证实,只能本地访问。于是我输入了bin/ndb_setup.py -h 查看了下说明,发现,localhost是可以改的

bin/ndb_setup.py -N 0.0.0.0

访问地址变成了http://0.0.0.0:8081/welcome.html ,就可以从各个地址访问过来了。

进入安装向导

填写ssh信息

打开安装网页后,选择create new mysql cluster安装mysql-cluster 7.5.9
  输入集群的名称,承载进群的地址,用英文逗号分隔,选择用途,我这里就是simple testing,因为虚拟机配置太低了,write load说的是写能力的负载情况(low:100事务每秒,以下;medium:100~1000事务每秒;high,高于1000事务每秒),我这里只是搭建测试,选的low,去掉了key based SSH的勾,输入ssh的用户名密码。需要注意的是,mysql默认是不允许使用root用户的,所以我在所有机器上都新建了mysql用户。
  点next后,报错Host ‘192.168.137.97’: No module named paramiko,查了半天,貌似是python版本过低导致的,我看了我虚拟机上的是python2.7,目标版本貌似是3

安装python3

输入命令ll /usr/bin/python*,查看当前python版本,果然是2.7。从官网下载了源码包3.6.4的。

tar zxvf Python-3.6.4.tgz
cp -r Python-3.6.4 /usr/local/
cd /usr/local/Python-3.6.4/
yum install gcc
cd ..
mv Python-3.6.4 python3
cd python3
./configure -prefix=/usr/local/python3
make
make install
//重命名低版本python
mv /usr/bin/python /usr/bin/old_python 
//创建新python软连接
ln -s /usr/local/python3/bin/python3.6 /usr/bin/python 
zipimport.ZipImportError: can’t decompress data; zlib not available
yum install zlib zlib-devel -y
解决升级Python后yum,Firewall等不能用的问题
  • vim /usr/bin/yum 把首行的#!/usr/bin/python 指向老版本的python即可

  • /usr/libexec/urlgrabber-ext-down文件的第一行也得改过来,否则安装的时候可能报错

  • firewall也不能正常用了,需要修改/usr/bin/firewall-cmd和/usr/bin/firewall-offline-cmd还有/usr/sbin/firewalld

  • 可以使用grep -ai /usr/bin/python /usr/bin/*引用情况,逐一修改

结果

上面安装完了,然而并没有什么卵用,而且mysql的安装程序也无法启动了,改回来。
  看了mysql官网,确实是对在运行安装向导的机器上的python有要求的具体大概如下:

  • Python 2.6 or higher
  • Paramiko 1.7.7.1 or higher
  • Pycrypto version 2.6 or higher
      默认centos7是没有安装pip的,如下进行安装
yum -y install epel-release
yum -y install python-pip

然后就可以用pip进行安装了,因为这里我的Paramiko和Pycrypto都分别用yum和pip进行了安装,自己也搞不清楚哪个生效了,大概的命令记录如下:

  • yum install pycrypto //yum安装Pycrypto,centos7 yum源自带的刚好是2.6的
  • pip install pycrypto //pip安装Pycrypto,但是会报错,说找不到gcc,需要额外安装依赖包yum install -y gcc,python-devel
  • pip install paramiko //使用pip安装paramiko
  • yum install python-paramiko //yum安装paramiko

填写服务器信息

第二步是设置服务器信息,如果你python依赖安装没有问题,这里的显示应该和我图中的是差不多的。其中MySQL Cluster install directory是你安装文件的解压目录,记得修改正确,每个服务器都需要有,而且文件的owner需要是mysql的,以确保其有权限操作,后面的data directory我就直接丢到/home/mysql下面了,具体看图吧。配好后点下一步
安装mysql-cluster 7.5.9

编辑服务器信息

这里就到了配置服务器的地方了,就是我们每台机器都配置多少节点的问题。开始的时候默认会被创建很多。但是由于我每个机器都只有1G内存,所以,这里我就每种节点均只保留了两个,用来搭建测试用,在调整了下节点的分布,保证每台机器没有相同中类的节点。节点名字选中后可以修改。完成后点击下一步。
安装mysql-cluster 7.5.9

配置节点信息

这里就进入了节点的具体配置信息了,点击每个节点可以修改响应的信息,好了之后就进入下一步。我这里是没有任何修改的。点击下一步。
安装mysql-cluster 7.5.9

发布及启动

到了这一步就没有下一步了,点击Deploy and start cluster,向导就会自动部署,启动集群。这里的问题是API node都会启动失败。我看了下,没有脚本和配置文件。看了官网的评估文档,猜测这里应该是提供NDB API的服务,暂时不影响我的使用,就先这样了。
安装mysql-cluster 7.5.9

配置mysql

进入数据节点服务器,进入sql节点进程
/usr/local/mysql/bin/mysql --socket /home/mysql/MySQL_Cluster/57/mysql.socket

update mysql.user set authentication_string=password(‘123456’),Host=’%’ where user=‘root’;
flush privileges;

每个sql节点均需要独立得修改用户名密码

然后使用navcat就可以连接上sql节点了,然后新建一个数据库,发现两边sql节点看到的东西是同步的

注意事项

需要注意的是,建表的时候存储引擎要选择ndbcluster,否则会发现表示不同步的。
  java的连接需要改编成类似如下:

  • jdbc:mysql:loadbalance://192.168.1.238:3306,192.168.1.248:3306/palm_2_0_16?roundRobinLoadBalance=true

    sql节点需要安装如下包:libaio.so.1,如果没有安装可能会报错,这个可以通过yum install libaio.so.1安装。但是yum安装的是i686架构的也就是32为的,64位的需要单独安装。64位的下载命令如下:wget http://mirror.centos.org/centos/6/os/x86_64/Packages/libaio-0.3.107-10.el6.x86_64.rpm 虽然是centos6的,但是可以在7.4中用,下下来后rpm -ivh libaio-0.3.107-10.el6.x86_64.rpm 就可以了

相关文章: