基于linux搭建mysql-cluster商用集群

意义

当你的业务到达一定的当量,肯定需要一定数量的数据库来负载均衡你的数据库请求。因为负载均衡的前提是,各个服务器的数据库是数据同步的。在业务量不大的时候,我们会使用主从复制的方法实现服务器数据同步,一主多从或者是双主等,但是虽然进行了读写分离,但是对于读的方法限制还是比较大,所以解决数据同步的问题就是数据库集群的意义。这里使用mysql官网提供的mysql-cluster实现集群。

原理

为了给初学搭建者一个简单明了的思路,我们去除复杂的功能,将数据节点和mysql节点放在同一台虚拟机上。管理节点可以实现负载均衡。数据节点可以实现数据相同备份。

1、管理节点,mc管理节点负责管理、配置、监控整个集群。

2、数据节点,使用内存存放数据,保存进数据节点的数据都会自动复制并存储到其他数据节点。

3、mysql节点,也叫数据库节点,和我们平时使用的mysql相同,作为数据库使用。被数据节点访问。

基于linux搭建mysql-cluster商用集群_第1张图片

准备工作

1.下载mysql cluster,推荐使用下面的镜像,下载速度比官网快一些

http://mirrors.sohu.com/mysql/MySQL-Cluster-7.5/

ps:我下载的版本是mysql-cluster-gpl-7.5.5-linux-glibc2.5-x86_64.tar.gz

注意看清是64位版本的,别下载错了

2.准备好三台虚拟机,并且保障三台机器能够互相ping通。(以下为我的虚拟机ip)

管理节点:192.168.33.40,数据节点1(mysql节点1):192.168.33.41,数据节点2(mysql节点2):192.168.33.42

安装配置管理节点(在第一台虚拟机上操作)

将安装包上传并解压到 /usr/local下

# tar -zxvf mysql-cluster-gpl-7.5.5-linux-glibc2.5-x86_64.tar.gz  -C /usr/local

将需要的文件取出

# cd mysql-cluster-gpl-7.5.4-linux-glibc2.5-x86_64

# cp bin/ndb_mgm* /usr/local/bin

# cd /usr/local/bin

# chmod +x ndb_mgm*

新建配置文件并且初始化管理节点

# mkdir /var/lib/mysql-cluster

# mkdir /usr/local/mysql

# vim /var/lib/mysql-cluster/config.ini  (以下可以直接复制)

[NDBD DEFAULT]
NoOfReplicas=2 #定义在Cluster环境中相同数据的份数,最大为4
DataMemory=200M #每个数据节点中给数据分配的内存
IndexMemory=20M #每个数据节点中给索引分配的内存
MaxNoOfAttributes=20480 #该参数用于设置簇中触发程序对象的最大数目。该参数的默认值为768,不修改建表时可能会报708错误
[NDB_MGMD]
NodeId=1
#设置管理节点服务器
HostName=192.168.33.40
DataDir=/usr/local/mysql/data
[NDBD]
NodeId=2
#设置存储节点服务器(NDB节点)
HostName=192.168.33.41
DataDir=/usr/local/mysql/data
[NDBD]
NodeId=3
#第二个NDB节点
HostName=192.168.33.42
DataDir=/usr/local/mysql/data
[MYSQLD]
NodeId=4
HostName=192.168.33.41
[MYSQLD]
NodeId=5

HostName=192.168.33.42

使用配置文件初始化管理节点

# /usr/local/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial

出现MySQL Cluster Management Server mysql-5.7.16 ndb-7.5.4

然后就能使用ndbd进去管理了(如果ndbd命令不行,就使用在/usr/local/bin目录下使用ndb_mgm命令)

# ndbd

ndb_mgm>show(使用show命令查看管理情况,当数据节点配置完毕之后,我们再用这个命令查看和管理)

到此为止管理节点配置完毕,接下去配置数据和sql节点

安装配置数据和mysql节点(在第二台和第三台虚拟机上运行)

tar -zxvf mysql-cluster-gpl-7.5.5-linux-glibc2.5-x86_64.tar.gz -C /usr/local         #首先解压到usr/local

cd /usr/local   

mv mysql-cluster-gpl-7.5.5-linux-glibc2.5-x86_64 mysql  (重命名)

mkdir data   创建data文件夹

新增用户组mysql和用户msyql

# groupadd mysql

# useradd -g mysql -s /bin/false mysql

新建文件夹并赋予权限

# mkdir /var/lib/mysql-cluster

# chown root:mysql /var/lib/mysql-cluster

# cd /usr/local/mysql

如果下方这个命令无法使用,那么就进入bin目录下使用./mysqld --initialize进行初始化,总之正常安装mysql如何初始化就如何进行安装就可以了,这里还可以设置安装数据库的data目录等参数这里就不多解释了,网上安装mysql5.7的教程很多。

# mysqld --initialize

如果初始化成功之后,系统会提示一个随机生成的数据库密码,此时需要记住这个密码,之后登录数据库需要使用这个密码!!!

修改权限

# chown -R root .

# chown -R mysql data

# chgrp -R mysql .

# cp support-files/mysql.server /etc/rc.d/init.d/

# cpsupport-files/mysql.server /etc/init.d/mysqld (可以使用service mysqld start了

# chmod +x /etc/rc.d/init.d/mysql.server

# chkconfig --add mysql.server

chown -R mysql.mysql .

vim  /etc/my.cnf(以下可直接复制)

[mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
user=mysql
port = 3306
socket=/tmp/mysql.sock




ndbcluster
max_connect_errors=100
ndb-connectstring=192.168.33.40
connect_timeout=300


[mysql_cluster]

ndb-connectstring=192.168.33.40


 启动ndbd# /etc/init.d/ndbd --initial如果上述不行使用绝对路径的这个/usr/local/mysql/bin/ndbd --initial

最后当所有的节点配置完成,回到管理节点,使用上述说过的show查看,如下的类似显示,证明已经连接完成

ndb_mgm> show 

测试

修改密码:

alter user 'root'@'localhost' identified by 'youpassword';  

./mysql -u root -p
use mysql
SELECT `Host`,`User` FROM user;
UPDATE user SET `Host` = '%' WHERE `User` = 'root' LIMIT 1;
FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY'test' WITH GRANT OPTION;   (用户名为:root,密码为:test)
SELECT `Host`,`User` FROM user;
创建数据库表
CREATE TABLE city( 
id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
NAME VARCHAR(20) NOT NULL DEFAULT '')
ENGINE = NDBCLUSTER DEFAULT CHARSET utf8mb4;
INSERT INTO city VALUES(1, 'city1'); 
INSERT INTO city VALUES(2, 'city2'); 

INSERT INTO city VALUES(3, 'city3');

创建完以后发现在第二台虚拟机上的数据,在第三台虚拟机上也有。已经实现了基本功能。







你可能感兴趣的:(mysql商用集群,linux安装mysql,大数据运维,mysql,mysql负载均衡)