亿级用户的分布式数据存储解决方案 1
MySQL Cluster(MySQL集群)是一个高性能、可扩展、集群化数据库产品,其研发设计的初衷就是要满足许多行业里的最严酷应用要求。这些应用中经常要求数据库运行的可靠性要达到99.999%。
自从2004年开始MySQL Cluster发布以来,其新特性的变化就不断的被更新增强。这增加了MySQL Cluster在新的应用领域、市场、行业中的需求量。MySQL Cluster目前已经不仅仅应用于传统的传统的电信业务中,如HLR(Home Locator Registry)或 SLR( Subscriber Locator Registry),它还被广泛的应用在VOIP、网络计费、会议管理、电子商务网站、搜索引擎,甚至是传统的后台应用中。
特点:
主要参考23
MySQL结构,由3类节点(计算机或进程)组成,分别是:
各个节点中安装路径必须相同,配置环境一直!!!
如果机器上安装了mysql-server,先卸载掉
首先删除mysql-server:
sudo apt-get remove mysql-*
然后清理残留的数据
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P
它会跳出一个对话框,你选择yes就好了
服务器上搭建时,同一个区域中的服务器(配置使用内网搭建,速度快)
修改 vi /etc/hosts 的文件,使用内网的ip
172.16.184.33 slave1
172.16.0.243 slave2
172.16.232.76 master
hostnamectl set-hostname master
hostnamectl set-hostname slave1
hostnamectl set-hostname slave2
设置主机之间的相互免密登录(设置公钥)
下载安装包,下载网址4
mkdir -p /usr/local/mysql (创建mysql目录)
cd /usr/local/mysql
tar -zxvf mysql-cluster-gpl-7.6.12-linux-glibc2.12-x86_64.tar
mv mysql-cluster-8.0.25-linux-glibc2.12-x86_64 mysql-cluster (解压到目录下进行重命名)
mkdir -p /var/log/mysql-cluster
mkdir -p /etc/mysql-cluster
vi /etc/mysql-cluster/config.ini
[ndbd default]
NoOfReplicas=2 #数据写入数量。2表示两份,2个数据节点
DataMemory=80M #配置数据存储可使用的内存
IndexMemory=18M #索引给100M
[ndb_mgmd]
nodeid=1
datadir=/var/log/mysql-cluster #管理结点的日志
HostName=172.16.232.76 #管理结点的IP地址。本机IP
###### data node options: #存储结点
[ndbd]
HostName=172.16.0.243
DataDir=/data/mysql #mysql数据存储路径
nodeid=2
[ndbd]
HostName=172.16.184.33
DataDir=/data/mysql #mysql数据存储路径
nodeid=3
# SQL node options: #关于SQL结点
[mysqld]
HostName=172.16.184.34
nodeid=4
[mysqld]
HostName=172.16.64.223
nodeid=5
/usr/local/mysql/mysql-cluster/bin/ndb_mgmd -f /etc/mysql-cluster/config.ini
/usr/local/mysql/mysql-cluster/bin/ndb_mgm
ndb_mgm> show
#或者使用
./ndb_mgm -e show
发现管理节点已经启动,当数据节点以及SQL节点未启动时显示的是not connected
将下面配置同步到其余的配置数据节点中
mkdir -p /usr/local/mysql (创建mysql目录)
cd /usr/local/mysql
tar -zxvf mysql-cluster-gpl-7.6.12-linux-glibc2.12-x86_64.tar
mv mysql-cluster-8.0.25-linux-glibc2.12-x86_64 mysql-cluster (解压到目录下进行重命名)
useradd -M -s /sbin/nologin mysql
mkdir -p /etc/mysql
mkdir -p /data/mysql
chown -R mysql:mysql /data/mysql/
vi /etc/mysql/my.cnf
[mysqld]
datadir=/data/mysql #mysql数据存储路径
ndbcluster #启动ndb引擎
ndb-connectstring=172.16.232.76 #管理节点IP地址
[mysql_cluster]
ndb-connectstring=172.16.232.76 #管理节点IP地址
#只有当第一次的时候才有加 --intital 否则数据会丢
/usr/local/mysql/mysql-cluster/bin/ndbd --initial
将下面配置同步到其余的安装配置SQL节点中
mkdir -p /usr/local/mysql (创建mysql目录)
cd /usr/local/mysql
tar -zxvf mysql-cluster-gpl-7.6.12-linux-glibc2.12-x86_64.tar
mv mysql-cluster-8.0.25-linux-glibc2.12-x86_64 mysql-cluster (解压到目录下进行重命名)
mkdir -p /etc/mysql
mkdir -p /data/mysql
chown -R mysql:mysql /data/mysql/
vi /etc/mysql/my.cnf
[mysqld]
user=mysql
ndbcluster #启动ndb引擎
ndb-connectstring=172.16.232.76 #管理节点IP地址
[mysql_cluster]
ndb-connectstring=172.16.232.76 #管理节点IP地址
cp /usr/local/mysql/mysql-cluster/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
update-rc.d mysqld defaults
vi /etc/init.d/mysqld
basedir=/usr/local/mysql/mysql-cluster
bindir=/usr/local/mysql/mysql-cluster/bin
if test -z "$datadir"
then
datadir=/data/mysql
fi
sbindir=/usr/local/mysql/mysql-cluster/bin
libexecdir=/usr/local/mysql/mysql-cluster/bin
进入到 /usr/local/mysql/mysql-cluster/bin
#执行完命令 记得保存一下随机产生的密码
cd /usr/local/mysql/mysql-cluster/bin
./mysqld --initialize --user=mysql --basedir=/usr/local/mysql/mysql-cluster --datadir=/data/mysql/
Slave3(保存随机产生的密码)
Slave4(保存随机产生的密码)
systemctl daemon-reload
systemctl start mysqld
Slave3,发现已经启动了mysql的3306端口,出现红色的警告,可以使用systemctl daemon-reload
尝试解决下,下面的截图是没有加systemctl daemon-reload
的,但是还是可以正常启动
Slave4,发现已经启动了mysql的3306端口
进入到
cd /usr/local/mysql/mysql-cluster/bin
./ndb_mgm
进入下面界面使用show
可==查看到5个节点全部启动,说明搭建完成!!!==
cd /usr/local/mysql/mysql-cluster/bin
./mysql -uroot -p
操作数据库
在使用命令之前需要先修改数据库的密码后进行操作,否则将会出现下面的错误
使用下面命令修改密码为123456789
alter user user() identified by "123456789";
创建数据库
在slave3中创建 mytest
数据库
登录slave4中的数据库同时也修改密码,然后查看数据库时发现mytest
数据库同步创建
创建数据表并添加数据
添加 engine=ndbcluster 或者是 engine=ndb(mysql cluster集群只能同步ndb引擎的表)
create table sys_myfirst(id varchar(36) primary key, name varchar(100), memo varchar(255)) ENGINE=innodb DEFAULT CHARSET=utf8 engine=ndbcluster;
Query OK, 0 rows affected, 1 warning (0.42 sec)
slave3中创建数据表,并添加两条数据
slave4中可查看到slave3中创建的表与数据
==关闭顺序与单点故障参考== 5
关闭顺序:SQL节点->数据节点->管理节点(在MySQL Cluster环境中,NDB节点和管理节点的关闭都可以在管理节点的管理程序中完成,也可以分节点关闭,但是SQL节点却没办法。所以,在关闭整个MySQL Cluster环境或者关闭某个SQL节点的时候,首先必须到SQL节点主机上来关闭SQL节点程序。关闭方法和MySQL Server的关闭一样。)
SQL节点关闭
systemctl stop mysqld
root@slave3:/usr/local/mysql/mysql-cluster/bin# lsof -i:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 1319 mysql 40u IPv6 24436 0t0 TCP *:mysql (LISTEN)
root@slave3:/usr/local/mysql/mysql-cluster/bin# systemctl stop mysqld
Warning: The unit file, source configuration file or drop-ins of mysqld.service changed on disk. Run 'systemctl daemon-reload' to reload units.
root@slave3:/usr/local/mysql/mysql-cluster/bin# lsof -i:3306
root@slave3:/usr/local/mysql/mysql-cluster/bin# systemctl start mysqld
Warning: The unit file, source configuration file or drop-ins of mysqld.service changed on disk. Run 'systemctl daemon-reload' to reload units.
###或者在/etc/init.d中使用
root@slave4:/etc/init.d# ./mysqld stop
数据节点(NDB)关闭
cd /usr/local/mysql/mysql-cluster/bin
./ndbd stop
2018-01-16 18:30:51 [ndbd] INFO -- Angel connected to '192.168.0.30:1186'
2018-01-16 18:30:51 [ndbd] INFO -- Angel allocated nodeid: 2
#或者使用pkill -9 ndbd
#启动使用(不需要加--initial)
./ndbd
管理节点关闭(关闭管理节点后会一起关闭数据节点)
ndb_mgm> shutdown
Node 2: Cluster shutdown initiated
Node 3: Cluster shutdown initiated
3 NDB Cluster node(s) have shutdown.
Disconnecting to allow management server to shutdown.
Node 3: Node shutdown completed.
ndb_mgm>
#或者使用
/usr/local/mysql/mysql-cluster/bin# ./ndb_mgm -e shutdown
改表法
use mysql;
select host, user from user;
update user set host = '%' where user = 'root';
select host, user from user;
#修改完以后重启mysql
授权法
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY '123456789' WITH GRANT OPTION;
FLUSH PRIVILEGES #使修改生效,就可以了
springboot jpa连接mysql数据库集群(NDBCLUSTER)引擎设置6
主要参考:Spring Boot MyBatis 数据库集群访问实现 7
代码路径8:语雀
https://www.pianshen.com/article/51641527056/ ↩︎
https://www.jianshu.com/p/37525ae8dee4 ↩︎
https://www.cnblogs.com/zzdbullet/p/11475641.html ↩︎
https://dev.mysql.com/downloads/cluster/ ↩︎
https://blog.csdn.net/mashuai720/article/details/79126360 ↩︎
https://blog.csdn.net/xyzdwf/article/details/102482393 ↩︎
https://github.com/smltq/spring-boot-demo/tree/master/mybatis-multi-datasource ↩︎
https://www.yuque.com/yuankaiqiang/file/19961453 ↩︎