Mysql Cluster 集群搭建和开机自启

一、前言

MySQL的集群方案有很多,比如自带的MySQL Replication,官方的MySQL Fabirc、MySQL Cluster,还有三方的MMM、MHA等等,每个方案都是各自的优缺点,选型无非是要考虑高可用性、可伸缩性、负载均衡等等。

二、介绍

 MySQL Cluster 是MySQL 官方集群部署方案,它的历史较久。支持通过自动分片支持读写扩展,通过实时备份冗余数据,是可用性最高的方案,声称可做到99.999%的可用性。


MySQL NDB Cluster架构按照节点类型分为三部分:

管理节点(Management node)

管理节点通过对配置文件conifg.ini的维护来对其他节点进行管理。该文件可以用来配置有多少副本需要维护、在数据节点上为数据和索引分配多少内存、数据节点的位置、数据节点上保存数据的磁盘的位置,SQL节点的位置信息等,管理节点只能有一个。
SQL节点(SQL node)

SQL节点可以理解为应用程序和数据节点的一个桥梁,应用程序不能直接访问数据节点,只能先访问SQL节点,然后SQL节点再去访问数据节点来返回数据,Cluster中可以有多个SQL节点,通过每个SQL节点查询到的数据都是一致的,一般来说,SQL节点越多,分配到每个SQL节点的负载就越小,系统的整体性能就越好;

数据节点(Data node)

数据节点用来存放数据,可有多个数据节点。

 

三、 Mysql Cluster搭建

1、环境准备

172.8.10.105 siger-data1.test.com    管理节点

172.8.10.106 siger-data2.test.com    mysql节点,ndb节点

172.8.10.107 siger-data2.test.com    mysql节点,ndb节点

 

2、解压

cd /opt/

tar -zxvf mysql-cluster-8.0.20-linux-glibc2.12-x86_64.tar.gz

mv /opt/mysql-cluster-8.0.20-linux-glibc2.12-x86_64 /usr/local/mysql/

 

3、分发

scp -r /usr/local/mysql/ root@172.8.10.106:/usr/local/

scp -r /usr/local/mysql/ root@172.8.10.107:/usr/local/

 

4安装管理节点(105节点)

# 将需要的文件取出

cd  /usr/local/mysql/

cp bin/ndb_mgm* /usr/local/bin

cd /usr/local/bin

chmod +x ndb_mgm*

 

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

mkdir /var/lib/mysql-cluster

 vim /var/lib/mysql-cluster/config.ini

[ndbd default]
#设置冗余的分数
NoOfReplicas=2
#指定存放数据的内存段大小
DataMemory=1024M
#制定索引的内存段大小
IndexMemory=512M
#将进程锁定在内存中,以避免与磁盘的交换
LockPagesInMainMemory=1
#该参数为作为整体的簇设置了最大表对象数目。该参数的默认值为128。最小值为8,最大值为20320,每个表对象每节点约需20KB的空间。
MaxNoOfTables=4096
#设置哈希索引在系统中同意时间被使用的总数,该参数的默认值为128。
MaxNoOfOrderedIndexes=2048
#设置最大的唯一索引的总数,默认值为64,最大值为4294967294。
MaxNoOfUniqueHashIndexes=2048
#定义了可在簇中定义的属性数目
MaxNoOfAttributes=20480
#该参数用于设置簇中触发程序对象的最大数目。该参数的默认值为768.
MaxNoOfTriggers=10240

[ndb_mgmd]
NodeId=1
HostName=172.8.10.105
DataDir=/var/lib/mysql-cluster

[ndbd]
NodeId=2
HostName=172.8.10.106
DataDir=/var/lib/mysql-cluster

[ndbd]
NodeId=3
HostName=172.8.10.107
DataDir=/var/lib/mysql-cluster

[mysqld]
NodeId=4
HostName=172.8.10.106

[mysqld]
NodeId=5
HostName=172.8.10.107

#必须有空的mysqld节点,不然数据节点断开后启动有报错
[mysqld]
nodeid=6
 
[mysqld]
nodeid=7

 

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

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

注:报以上错,是因为没找到libcrypto.so.1.1,将mysql的报复制到/usr/lib64/目录

cp /usr/local/mysql/lib/private/libssl.so.1.1 /usr/lib64/

cp /usr/local/mysql/lib/private/libcrypto.so.1.1 /usr/lib64/

 

# 重新执行初始化命令

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

 

#查看管理情况

任意目录执行 ndb_mgm

ndb_mgm>show

 

5、安装数据节点和mysql节点

以下的所有操作需要在所有的集群节点都要进行相同的操作

 

#新增用户组mysql和用户msyql

groupadd mysql

useradd -g mysql -s /bin/false mysql

 

#新建文件夹并赋予权限

mkdir /var/lib/mysql-cluster

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

 

#初始化mysql

tar xvf mysql-cluster-8.0.20-linux-glibc2.12-x86_64.tar.gz

ln -s /usr/local/mysql-cluster-8.0.20-linux-glibc2.12-x86_64 /usr/local/mysql

cd /usr/local/mysql/bin/

./mysqld --initialize

 

172.8.10.106:

 

172.8.10.107:

会提示一个随机生成的数据库密码,此时需要记住这个密码,之后登录数据库需要使用这个密码!!!

 

#修改权限

cd /usr/local/mysql/

chown -R root .

chown -R mysql data

chgrp -R mysql .

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

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

chkconfig --add mysql.server

 

#配置数据节点

vim /etc/my.cnf

[client]

port = 3306

socket =/tmp/mysql.sock

 

[mysqld]

basedir=/usr/local/mysql/

datadir=/usr/local/mysql/data

user=root

port=3306

socket=/tmp/mysql.sock

server-id = 1      # 另一个改成2

ndbcluster

ndb-connectstring=172.8.10.105  # 管理节点IP

tmp_table_size = 10240M
max_heap_table_size = 10240M

 

[mysql_cluster]

ndb-connectstring=172.8.10.105   #管理节点IP

 

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

#启动mysql

service mysql start

#查看状态

service mysql status

#登录mysql

cd /usr/local/mysql/bin/

./mysql -u root -p

注意:用随机生成的密码

 

#设置新密码

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

CREATE USER 'root'@'%'IDENTIFIED BY 'xx';

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

flush privileges;

 

#启动ndbd

./ndbd –initial

172.8.10.106:

172.8.10.107:

 

#查看集群状态(管理节点)

ndb_mgm

show

 

6、关闭集群

关闭管理节点:

ndb_mgm -e shutdown

 

关闭SQL节点:

/etc/init.d/mysql.server stop

注:关闭时只需要关闭管理节点,后面的数据节点会同时被关闭,mysql需要额外关闭

 

7、启动集群

启动管理节点:

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

 

启动数据节点:

/usr/local/mysql/bin/ndbd

 

启动SQL节点:

/etc/init.d/mysql.server start

 

查看集群状态

ndb_mgm

show

 

8、测试集群

#接入客户端

cd /usr/local/mysql/bin/

./mysql -u root -p

 

#创建统一账号(任意sql节点)

CREATE USER 'siger'@'%'IDENTIFIED BY 'xx';

GRANT ALL PRIVILEGES ON *.* TO 'siger'@'%';

CREATE USER 'siger'@'localhost'IDENTIFIED BY 'xx';

GRANT ALL PRIVILEGES ON *.* TO 'siger'@'localhost ';

ALTER USER 'siger'@'%' IDENTIFIED BY 'xx' PASSWORD EXPIRE NEVER;

ALTER USER 'siger'@'%' IDENTIFIED WITH mysql_native_password BY 'xx';

FLUSH PRIVILEGES;

 

#登陆107的sql节点

#siger用户登录

./mysql -u siger -p

 

创建测试数据和和表

create database test;

use test;

CREATE TABLE student (age INT) ENGINE=NDBCLUSTER;

 

#登陆108的sql节点查看

 

9、开机自启

#设置自启(管理节点)

vim /usr/local/mysql/ndb_mgm.sh

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

 

#设置权限

chmod +x /usr/local/mysql/ndb_mgm.sh  

 

#设置自启

vim /etc/rc.local

nohup sh /usr/local/mysql/ndb_mgm.sh &

 

#设置检验脚本(数据节点和sql节点)

数据节点的启动需要等待管理节点启动后,才能进行。所以使用了监控脚本来控制数据节点的启动,管理节点监听1186端口,使用nc检测1186端口的状态,来判断管理节点是否已经启动成功

vim /usr/local/mysql/ndbd_mysql_check.sh

#!/bin/bash
# chkconfig: 2345 10 90 
# description: myservice ....

while :
do
	#检测管理节点是否已经启动
	nc -w 10 -z 172.8.10.105 1186 > /dev/null 2>&1
	ndb_mgmd=`echo $?`

	#管理节点启动
	if [ $ndb_mgmd -eq 0 ];then
			
		/usr/local/mysql/bin/ndbd
		/etc/init.d/mysql.server start
		break
	else
			
	#管理节点未启动或挂掉的时候,关闭数据节点和sql节点
	/etc/init.d/mysql.server stop
	fi
	sleep 5
	
done

#设置权限

chmod +x ndbd_mysql_check.sh

 

#设置自启

vim /etc/rc.local

nohup sh /usr/local/mysql/ndbd_mysql_check.sh &

 

©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页