MysqlCluster集群搭建及使用

亿级用户的分布式数据存储解决方案 1

文章目录

      • 1、简介
      • 2、搭建Mysql Cluster(基于阿里云内网部署,相同实例地区)
        • 2.1 安装配置管理节点(GMG)
        • 2.2 安装配置数据节点(NDB)
        • 2.3 安装配置SQL节点(NDB)
        • 2.4 集群状态
      • 3、操作Mysql Cluster
      • 4、MySQL Cluster的关闭顺序与单点故障测试
      • 5、Mysql Cluster 远程连接
      • 6、测试单点故障(高可用)
      • 7、SpringBoot中使用
      • 参考网址

1、简介

​ MySQL Cluster(MySQL集群)是一个高性能、可扩展、集群化数据库产品,其研发设计的初衷就是要满足许多行业里的最严酷应用要求。这些应用中经常要求数据库运行的可靠性要达到99.999%。
  自从2004年开始MySQL Cluster发布以来,其新特性的变化就不断的被更新增强。这增加了MySQL Cluster在新的应用领域、市场、行业中的需求量。MySQL Cluster目前已经不仅仅应用于传统的传统的电信业务中,如HLR(Home Locator Registry)或 SLR( Subscriber Locator Registry),它还被广泛的应用在VOIP、网络计费、会议管理、电子商务网站、搜索引擎,甚至是传统的后台应用中。

特点:

  • 高可用性:主服务器故障后可自动切换到后备服务器
  • 可伸缩性:可方便通过脚本增加DB服务器
  • 负载均衡:支持手动把某公司的数据请求切换到另外的服务器,可配置哪些公司的数据服务访问哪个服务器
MysqlCluster集群搭建及使用_第1张图片

2、搭建Mysql Cluster(基于阿里云内网部署,相同实例地区)

主要参考23

MySQL结构,由3类节点(计算机或进程)组成,分别是:

  • 管理节点:用于给整个集群其他节点提供配置、管理、仲裁等功能。
  • 数据节点:MySQL Cluster的核心,存储数据、日志,提供数据的各种管理服务。
  • SQL节点(API):用于访问MySQL Cluster数据,提供对外应用服务。

各个节点中安装路径必须相同,配置环境一直!!!

  1. 如果机器上安装了mysql-server,先卸载掉

    首先删除mysql-server:

    sudo apt-get remove mysql-*
    

    然后清理残留的数据

    dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P
    

    它会跳出一个对话框,你选择yes就好了

  2. 服务器上搭建时,同一个区域中的服务器(配置使用内网搭建,速度快)

修改 vi /etc/hosts 的文件,使用内网的ip

172.16.184.33	slave1
172.16.0.243	slave2
172.16.232.76	master
  1. 在相应的主机中修改名称(或者是修改hosts的文件的名称,为了便于后期使用,建议修改名称
hostnamectl set-hostname master
hostnamectl set-hostname slave1
hostnamectl set-hostname slave2
  1. 设置主机之间的相互免密登录(设置公钥)

  2. 下载安装包,下载网址4

MysqlCluster集群搭建及使用_第2张图片
  1. 将压缩包移动到/usr/local/mysql下,解压完成后,修改路径,每个节点都位于相同的路径下

    image-20210701192501534

  2. 集群默认端口为1186

2.1 安装配置管理节点(GMG)

  • 上传并解压文件
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
MysqlCluster集群搭建及使用_第3张图片

发现管理节点已经启动,当数据节点以及SQL节点未启动时显示的是not connected

2.2 安装配置数据节点(NDB)

将下面配置同步到其余的配置数据节点中

  • 上传并解压文件
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 (解压到目录下进行重命名)
  • 创建mysql用户并运行
useradd -M -s /sbin/nologin mysql
  • 创建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
  • 查看状态
    MysqlCluster集群搭建及使用_第4张图片

WX20210701-185909@2xWX20210701-185917@2x

2.3 安装配置SQL节点(NDB)

将下面配置同步到其余的安装配置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 (解压到目录下进行重命名)
  • 创建mysql目录并授权
mkdir -p /etc/mysql
mkdir -p /data/mysql
chown -R mysql:mysql /data/mysql/
  • 创建SQL节点配置文件
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地址
  • 配置mysql服务
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
  • 编辑mysqld服务
vi /etc/init.d/mysqld
MysqlCluster集群搭建及使用_第5张图片
替换为自己的安装目录
  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
  • 初始化mysql数据库

进入到 /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(保存随机产生的密码

WX20210701-190549@2x

Slave4(保存随机产生的密码

WX20210701-190639@2x

  • 启动mysql服务
systemctl daemon-reload
systemctl start mysqld

Slave3,发现已经启动了mysql的3306端口,出现红色的警告,可以使用systemctl daemon-reload尝试解决下,下面的截图是没有加systemctl daemon-reload的,但是还是可以正常启动

MysqlCluster集群搭建及使用_第6张图片

Slave4,发现已经启动了mysql的3306端口

MysqlCluster集群搭建及使用_第7张图片

2.4 集群状态

进入到

cd /usr/local/mysql/mysql-cluster/bin
./ndb_mgm

进入下面界面使用show可==查看到5个节点全部启动,说明搭建完成!!!==

MysqlCluster集群搭建及使用_第8张图片

3、操作Mysql Cluster

  • 在SQL节点(slave3,slave4)中使用操作数据库,输入前面保存的随机密码进入数据库中
cd /usr/local/mysql/mysql-cluster/bin
./mysql -uroot -p
  • 操作数据库

    在使用命令之前需要先修改数据库的密码后进行操作,否则将会出现下面的错误

    WX20210701-191514@2x

    使用下面命令修改密码为123456789

    alter user user() identified by "123456789";
    
MysqlCluster集群搭建及使用_第9张图片
  • 创建数据库

    在slave3中创建 mytest 数据库

    MysqlCluster集群搭建及使用_第10张图片

    登录slave4中的数据库同时也修改密码,然后查看数据库时发现mytest数据库同步创建

    MysqlCluster集群搭建及使用_第11张图片

  • 创建数据表并添加数据

    添加 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中创建数据表,并添加两条数据

    MysqlCluster集群搭建及使用_第12张图片

    slave4中可查看到slave3中创建的表与数据

    MysqlCluster集群搭建及使用_第13张图片

4、MySQL Cluster的关闭顺序与单点故障测试

==关闭顺序与单点故障参考== 5

关闭顺序:SQL节点->数据节点->管理节点(在MySQL Cluster环境中,NDB节点和管理节点的关闭都可以在管理节点的管理程序中完成,也可以分节点关闭,但是SQL节点却没办法。所以,在关闭整个MySQL Cluster环境或者关闭某个SQL节点的时候,首先必须到SQL节点主机上来关闭SQL节点程序。关闭方法和MySQL Server的关闭一样。)

  1. 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
    
  2. 数据节点(NDB)关闭

    image-20210702092053968

    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
    
  3. 管理节点关闭(关闭管理节点后会一起关闭数据节点

    image-20210702093643332

    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
    

5、Mysql Cluster 远程连接

  1. 改表法

    use mysql;
    select host, user from user;
    update user set host = '%' where user = 'root';
    select host, user from user;
    #修改完以后重启mysql
    
    MysqlCluster集群搭建及使用_第14张图片
  2. 授权法

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY '123456789' WITH GRANT OPTION;
    FLUSH PRIVILEGES  #使修改生效,就可以了
    

6、测试单点故障(高可用)

  • 当停止掉两台数据节点中的一台节点时,使用SQL节点进行操作,可以正常操作
  • 当停止掉两台SQL节点中的一台节点时,使用另一台SQL节点进行操作,也可以正常操作
  • 当分别停止掉两台数据节点和两台SQL节点中的一台节点时,只留一台SQL节点与一台数据节点,同样可以正常服务

7、SpringBoot中使用

springboot jpa连接mysql数据库集群(NDBCLUSTER)引擎设置6

主要参考:Spring Boot MyBatis 数据库集群访问实现 7

MysqlCluster集群搭建及使用_第15张图片

代码路径8:语雀

参考网址


  1. https://www.pianshen.com/article/51641527056/ ↩︎

  2. https://www.jianshu.com/p/37525ae8dee4 ↩︎

  3. https://www.cnblogs.com/zzdbullet/p/11475641.html ↩︎

  4. https://dev.mysql.com/downloads/cluster/ ↩︎

  5. https://blog.csdn.net/mashuai720/article/details/79126360 ↩︎

  6. https://blog.csdn.net/xyzdwf/article/details/102482393 ↩︎

  7. https://github.com/smltq/spring-boot-demo/tree/master/mybatis-multi-datasource ↩︎

  8. https://www.yuque.com/yuankaiqiang/file/19961453 ↩︎

你可能感兴趣的:(数据库,mysql,数据库,分布式,MysqlCluster)