介绍
本网文章是本人第一折腾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
输入集群的名称,承载进群的地址,用英文逗号分隔,选择用途,我这里就是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下面了,具体看图吧。配好后点下一步
编辑服务器信息
这里就到了配置服务器的地方了,就是我们每台机器都配置多少节点的问题。开始的时候默认会被创建很多。但是由于我每个机器都只有1G内存,所以,这里我就每种节点均只保留了两个,用来搭建测试用,在调整了下节点的分布,保证每台机器没有相同中类的节点。节点名字选中后可以修改。完成后点击下一步。
配置节点信息
这里就进入了节点的具体配置信息了,点击每个节点可以修改响应的信息,好了之后就进入下一步。我这里是没有任何修改的。点击下一步。
发布及启动
到了这一步就没有下一步了,点击Deploy and start cluster,向导就会自动部署,启动集群。这里的问题是API node都会启动失败。我看了下,没有脚本和配置文件。看了官网的评估文档,猜测这里应该是提供NDB API的服务,暂时不影响我的使用,就先这样了。
配置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 就可以了