搭建mysql cluster
虚拟机搭建Mysql Cluster
参考文档:http://www.cnblogs.com/jackluo/archive/2013/01/19/2868152.html
http://www.cnblogs.com/StanBlogs/archive/2011/06/14/2080986.html
需要三台服务器。一个管理节点服务器。另外两个均充当数据节点和sql节点。
这里选用ubuntu64位操作系统。mysql cluster 对应也必须是64位的。去官方站点下载mysql-cluster-gpl-7.4.4-linux-glibc2.5-x86_64。
(注:当在虚拟机操作时,vmware下,可以只先操作一个sql节点,然后虚拟机有克隆功能,直接整一份,这样另一个sql节点就基本搞定了,只需要更改下ip即可。在虚拟机实验下,最好整快照或克隆。
我这里,管理节点ip是192.168.1.232
另两个机器,既充当数据节点也是sql节点。ip是192.168.1.210 ; 192.168.1.219
)
安装ubuntu操作系统后,更改ip,dns配置。
切换用户 sudo passwd root,然后创建个root用户密码。
su root后,输入root密码。
以下操作利用root用户进行。
对每个机器的ip配置:
vim /etc/network/interfaces
改内容如下:
auto eth0
iface eth0 inet static #这里没用dhcp动态,取静态ip
address 192.168.1.219 #ip地址
gateway 192.168.1.1 #网关地址
netmask 255.255.255.0 #子网掩码
dns-nameservers 192.168.1.1 #dns解析
重启网络设置:
sudo /etc/init.d/networking restart
一. 对数据节点和sql节点的操作
1. 创建组,用户
groupadd mysql
useradd -g mysql mysql
2. 下载mysql cluster64。传这个文件到某个目录下。这里直接上传到/usr/local(如果利用文件上传服务器,则需要赋给权限如chmod 766 /usr/local)
解压: tar -xvf mysql.tar.gz
改名: mv mysql-cluster-gpl-7.4.4-linux-glibc2.5-x86_64 mysql
3. 修改mysql目录权限
cd mysql
chown -R root .
chown -R mysql data
chgrp -R mysql .
4. 安装mysql初始库
在mysql目录下:
scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql
5. 把mysql设置为开机自启
可以把mysql服务开机自启。不整也行。
6.这里设置mysql配置文件,这里缺省了mysql配置的性能方面参数。
vim /etc/my.cnf
[client]
socket=/usr/local/mysql/sock/mysql.sock
[mysqld]
ndbcluster
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/sock/mysql.sock
ndb-connectstring=192.168.1.232 #这个是管理节点的ip
old_passwords=1
default-storage-engine=ndbcluster #可以省略建表的引擎语句(只有引擎是ndb的才可以起到集群的作用)
[mysql_cluster]
ndb-connectstring=192.168.1.232 #这里配置的是管理节点服务器地址
7. 此时不必启动mysql服务。
以上的操作,需要在多台数据节点和sql节点机器上进行(要是虚拟机,就克隆就好了,然后改下ip)。
二. 对管理节点的操作
管理节点不需要安装mysql服务。只需要mysql-cluster解压后的两个文件,分别是
sql节点服务器上:/usr/local/mysql/bin/ndb_mgmd 和 /usr/local/mysql/bin/ndb_mgm
ndb_mgmd 是管理节点的服务
ndb_mgm 是管理节点的客户端查看用
1. 把sql节点上的这两个文件拷贝到管理节点的/usr/local/bin目录下。(我使用filezilla传过去的)
2. 在管理节点上,确保这两个文件可执行。
cd /usr/local/bin
chmod +x ndb_mgm*
3. 在/usr/local下创建mysql文件夹,确保数据节点打开服务时,可以生成log文件
mkdir /usr/local/mysql
4. 创建一个管理节点的配置文件
mkdir /var/lib/mysql-cluster
cd /var/lib/mysql-cluster
vim config.ini
[NDBD DEFAULT]
NoOfReplicas=2
MaxNoOfTables = 1024 #所有ndbcluster引擎的表数量最大数
MaxNoOfAttributes = 7000 #所有ndbcluster引擎的表的所有字段数量最大数
MaxNoOfOrderedIndexes = 10000
[TCP DEFAULT]
portnumber=22202
[NDB_MGMD]
hostname=192.168.1.232 #管理节点
datadir=/var/lib/mysql-cluster/
[NDBD]
hostname=192.168.1.210 #数据节点
datadir=/usr/local/mysql/data/
[NDBD]
hostname=192.168.1.219 #数据节点
datadir=/usr/local/mysql/data/
[MYSQLD]
# 这里配置sql节点,最好留空。
[MYSQLD]
三、启动mysql cluster
注意启动顺序:首先是管理节点,然后是数据节点,最后是SQL节点,这里数据节点和sql节点是同一个机器。
1. ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial
第一次启动时,再加--initial参数,或者在更改config.ini节点时加
(启动时可能会报个WARNING,如WARNING -- at line 7: [TCP] portnumber is deprecated,这个不用管就是端口号不建议使用了,warning的级别不如error。可以正常工作的。)
此时使用ndb_mgm来监听客户端
2. 数据节点
/usr/local/mysql/bin/ndbd
首次启动,则需要添加--initial参数,以便进行NDB节点的初始化工作。在以后的启动过程中,则是不能添加该参数的,否则ndbd程序会清除在之前建立的所有用于恢复的数据文件和日志文件。(如果报错:日志文件不能生成,则手动创建这个目录)
此时,在管理节点上,ndb_mgm,使用show命令时,可以看到数据节点连接上了(多台数据节点都需要这样操作)
3. sql节点
/usr/local/mysql/bin/mysqld_safe --user=mysql &
如果报错说某套接字连不上mysql,那么尝试下再次创建系统数据库,方法如下:
在mysql目录下
scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql
再次启动
/usr/local/mysql/bin/mysqld_safe --user=mysql &
查看管理节点。此时sql节点也应该连接上了。
四、测试
1、常规测试:
在一个节点比如A节点,上面:
为了让表在cluster中正常复制,创建一个表必须使用ndbcluster引擎(engine=ndb Or engine=ndbcluster)方法如下:
mysql>use test
mysql>create table teacher(t_id int) engine=ndb;(这里引擎须要是ndb,而不是innodb或其他)
如果是一个已经存在的表,用alter table修改表的引擎。
mysql>alter table teacher engine=ndb;
插入一条数据:
mysql>insert into teacher values(133);
然后在B节点上查看:
mysql>select * from teacher;
A、B两个节点数据保持一致,那就测试成功了哈哈,遇到什么问题网上查一下资料什么的!
模拟NDB节点Crash:
这个测试,基本参照文档:
http://www.cnblogs.com/StanBlogs/archive/2011/06/14/2080986.html
=================================================================================
备注给需要的童鞋:
1 查看某机器下,该系统支持的存储引擎
show engines;
2 查看表使用的存储引擎
show table status from db_name where name='table_name';
3. 更改表引擎
alter table student engine=ndb;
=================================================================================
如果你想连接你的mysql的时候发生这个错误:
ERROR 1130: Host '192.168.1.3' is not allowed to connect to this MySQL server
解决方法:
1. 授权法。
如果你想允许用户myuser从ip为192.168.1.3的主机连接到mysql服务器,并使用mypassword作为密码
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
=================================================================================
当需要关闭数据节点或sql节点下的某服务,如关闭ndbd服务或mysql服务
可以这样
ps aux | grep mysql
ps aux | grep ndbd
然后找到进程号,
利用 kill -9 pid(进程号)
搭建mysql cluster的更多相关文章
- Windows系统搭建Mysql Cluster集群
简单介绍一下MySQL集群涉及的三种节点: 管理节点(也可以称管理服务器)是整个集群环境的核心,类似于集群中起调度作用的枢纽,由它来负责管理其它节点(数据节点和SQL节点)的开启.关闭或重启某 ...
- MySQL集群---②Windows平台搭建MySQL CLUSTER集群
原文:http://blog.csdn.net/mazhaojuan/article/details/42211857 本文将通过两台电脑来简单介绍一下Windows平台如何搭建MySQL集群. My ...
- MySQL Cluster搭建与测试
MySQL Cluster是一个基于NDB Cluster存储引擎的完整的分布式数据库系统.不仅仅具有高可用性,而且可以自动切分数据,冗余数据等高级功能.和Oracle Real Cluster Ap ...
- MySQL Cluster 集群
本文转载 http://www.cnblogs.com/gomysql/p/3664783.html MySQL Cluster是一个基于NDB Cluster存储引擎的完整的分布式数据库系统.不仅仅 ...
- 第 16 章 MySQL Cluster
前言: MySQL Cluster 是一个基于 NDB Cluster 存储引擎的完整的分布式数据库系统.不仅仅具有高可用性,而且可以自动切分数据,冗余数据等高级功能.和 Oracle Real Cl ...
- MySql(十六):MySql架构设计——MySQL Cluster
前言: MySQL Cluster 是一个基于 NDB Cluster 存储引擎的完整的分布式数据库系统.不仅仅具有高可用性,而且可以自动切分数据,冗余数据等高级功能.和 Oracle Real Cl ...
- MySQL性能调优与架构设计——第 16 章 MySQL Cluster
第 16 章 MySQL Cluster 前言: MySQL Cluster 是一个基于 NDB Cluster 存储引擎的完整的分布式数据库系统.不仅仅具有高可用性,而且可以自动切分数据,冗余数据等 ...
- 超详细,多图文使用galera cluster搭建mysql集群并介绍wsrep相关参数
超详细,多图文使用galera cluster搭建mysql集群并介绍wsrep相关参数 介绍galera cluster原理的文章已经有一大堆了,百度几篇看一看就能有相关了解,这里就不赘述了.本文主 ...
- centos7 mysql cluster集群搭建基于docker
1.准备 mn:集群管理服务器用于管理集群的其他节点.我们可以从管理节点创建和配置集群上的新节点.重新启动.删除或备份节点. db2/db3:这是节点间同步和数据复制的过程发生的层. db4/db5: ...
随机推荐
- 小结:ES7——async和await初识
一.async async其实是ES7才有有的关键字,async的意思是异步,顾名思义是有关异步的操作 async用于声明一个函数是异步的. 通常情况下async.await都是跟随promise一起 ...
- 【读书笔记】iOS-iOS的持续集成
一,Jenkins http://jenkins-ci.org 二,iOS单元测试的持续集成 在Xcode进入OCUnit作为单元测试框架前,把单元测试分为两种:Logic Test和Applicat ...
- VUE CLI 3.0 安装及创建项目
一.安装 VUE CLI 3.0 官网: https://cli.vuejs.org/ 详细资料可以自己先把官网过一遍. 1. 安装(默认你的电脑上已安装node及npm) npm install ...
- Android学习笔记----Java字符串MD5加密
代码如下: /** * MD5单向加密,32位,用于加密密码,因为明文密码在信道中传输不安全,明文保存在本地也不安全 * * @param str * @return */ public static ...
- PyCharm实现高效远程调试代码
PyCharm实现高效远程调试代码 (薛刚强) 为方便Python代码学习和项目开发,目前选择专业的 IDE 开发工具 ,如 PyCham.针对个人使用的技巧做个笔记,分享给大家,有描述 ...
- vue axios 与 FormData 结合 提交文件 上传文件
---再利用Vue.axios.FormData做上传文件时,遇到一个问题,后台虽然接收到请求,但是将文件类型识别成了字符串,所以,web端一直报500,结果是自己大意了. 1.因为使用了new F ...
- Python-初识模块
#系统自带的模块 import sys print(sys.path)#打印环境变量 print(sys.argv)#打印绝对路径 import os #cmd_res = os.system(&qu ...
- 【PHP调试篇】PHP高性能日志组件SeasLog
简述 什么是SeasLog SeasLog是一个C语言编写的PHP扩展,提供一组规范标准的功能函数,在PHP项目中方便.规范.高效地写日志,以及快速地读取和查询日志. 为什么使用SeasLog 无论在 ...
- 使用linq语句进行联表查询
假设你有一个父表(例如:汽车),其关联一个子表,例如轮子(一对多).现在你想对于所有的父表汽车,遍历所有汽车,然后打印出来所有轮子的信息.默认的做法将是: SELECT CarId FROM Cars ...
- python第十八天
学习内容: json 模块,pickle模块,shelve模块,xml模块 json 模块 序列化: import json,pickle info={ 'name':'a', 'age':34, ...