zoukankan      html  css  js  c++  java
  • MySQL-Cluster

    博主本人热爱学习,读者阅读过程中如果发现有错误的地方或是有更好的实现方式,请与本人联系(qq:1805608587),或是在评论区留言,谢谢!


    文章说明:本文是作者原创,请尊重个人劳动成果,转载需注明出处

    MySQL-cluster 架构,节点,节点作用

    • 原理:

    SQL节点: 给上层应用层提供sql访问。

    管理节点(MGM):  管理整个集群。 启动,关闭集群。 通过ndb_mgmd命令启动集群

    存储/数据节点: 保存cluster中的数据。  数据节点,可以提供副本。实现数据冗余。

    NDB引擎:是一种 “内存中”的存储引擎 , 它具有可用性高和数据一致性好的特点。

    • NDB引擎

    MySQL Cluster 使用了一个专用的基于内存的存储引擎——NDB引擎,这样做的好处是速度快, 没有磁盘I/O的瓶颈,但是由于是基于内存的,所以数据库的规模受系统总内存的限制, 如果运行NDB的MySQL服务器一定要内存够大,比如4G, 8G, 甚至16G。NDB引擎是分布式的,它可以配置在多台服务器上来实现数据的可靠性和扩展性,理论上 通过配置2台NDB的存储节点就能实现整个数据库集群的冗余性和解决单点故障问题。

    • 小结:共三层节点

    1.管理节点(MGM,对内管理存储节点)

    2.存储节点(NDB存储引擎,对接管理节点和SQL节点,用于存储数据)

    3.SQL节点(对外接口API)

    • 优缺点

    优点

    1.高吞吐量和低延迟,使用NDB存储引擎(基于内存),存储数据速度快,没有IO瓶颈

    2.灵活的分布式体系架构,解决单点故障

    3.可扩展性强,可以在线扩容(例如:添加一台存储节点)

    缺点

    1.消耗内存大,集群内存大小将决定数据库集群规模

    2.断电数据将会丢失

    3.每个节点是通过网络实现通信,所以访问速度受网络带宽影响

    MySQL-Cluster的下载地址https://dev.mysql.com/downloads/cluster/

    实验环境:

    主机

    节点

    作用

    HOSTNAME

    软件

    192.168.247.60

    MGM

    对内管理存储节点

     

    management-server

    community-server

    cluster-client

    192.168.247.61

    NDB01

    数据(存储)节点

     

    community-server

    data-node

    192.168.247.62

    NDB02

    数据(存储)节点

     

    community-server

    data-node

    192.168.247.63

    SQL01

    对外接口

     

    community-server

    MySQL-client

    192.168.247.64

    SQL02

    对外接口

     

    community-server

    MySQL-client


    1.1. 设置时间

    一、
    环境准备
    MySQL-Cluster集群搭建
     

    timedatectl set-timezone Asia/Shanghai
    date

    1.1. 设置SELinux

    sed  -i 's/enforcing/disabled/g' /etc/selinux/config 
    setenforce 0
    getenforce

    1.1. 清空系统mysql

    yum -y remove mysql
    检查清空情况:
    rpm -qa | grep mysql
    继续删除系统文件:
    rm -rf  /var/lib/mysql/*
    rm -rf  /etc/my.cnf
    rm -rf  /etc/init.d/mysqld
    vim  /etc/profile  删除与mysql相关内容

    1.1. 安装依赖

    yum install -y perl perl-Class-MethodMaker perl-DBI libaio numactl

    1.1. 设置防火墙

    systemctl disable firewalld.service 
    systemctl stop firewalld.service 
    iptables -F

    二、安装MySQL-Cluster

    (命令窗口下操作)--对所有主机

    cd /opt
    mkdir mysql-cluster
    yum install -y lrzsz-0.12.20-36.el7.x86_64   --rz命令上传文件,或是使用xftp(推荐使用xftp)
    chmod  755 /opt/mysql-cluster/*
    scp /opt/mysql-cluster/* root@192.168.247.61:/opt/mysql-cluster --scp传输到所有服务器
    rpm -ivh mysql-cluster-community-server-7.6.13-1.el7.x86_64.rpm --nodeps  --force

    三、安装data-node(仅仅数据节点需要)

    rpm -ivh mysql-cluster-community-data-node-7.6.13-1.el7.x86_64.rpm --nodeps  --force

    四、设置集群

    4.1. 管理节点:

    温习提示:先在这台管理节点上面安装cluster-client,主要是方便修管理这个节点

    rpm -ivh mysql-cluster-community-client-7.6.13-1.el7.x86_64.rpm --nodeps --force

    设置配置文件

    [root@mgm ~]# cat /usr/mysql-cluster/config.ini 
    [ndbd default]
    NoOfReplicas=2                                #数据写入数量。2表示两份
    DataMemory=200M                               #配置数据存储可使用的内存
    IndexMemory=100M                              #索引给100M
    [ndb_mgmd]
    nodeid=1
    datadir=/var/lib/mysql                       #管理结点的日志
    HostName=192.168.247.60                      #管理结点的IP地址。本机IP
    ###### data node options:                         #存储结点
    [ndbd]
    HostName=192.168.247.61
    DataDir=/var/lib/mysql                            #mysql数据存储路径
    nodeid=2
    [ndbd]
    HostName=192.168.247.62
    DataDir=/var/lib/mysql                            #mysql数据存储路径
    nodeid=3
    # SQL node options:                               #关于SQL结点
    [mysqld]
    HostName=192.168.247.63
    nodeid=4
    [mysqld]
    HostName=192.168.247.64
    nodeid=5
    [root@mgm ~]# 

    4.2. 数据节点

    (两台机器一样)

    温习提示:先在这两台SQL节点上面安装mysql-client,主要是方便修改密码和验证其它功能

    rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm --nodeps  --force 

    设置配置文件

    [root@ndb01 ~]# cat /etc/my.cnf
    [mysqld]
    datadir=/var/lib/mysql                        #mysql数据存储路径
    ndbcluster                                    #启动ndb引擎
    ndb-connectstring=192.168.247.60              # 管理节点IP地址
    [mysqld_safe] 
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    [mysql_cluster]
    ndb-connectstring=192.168.247.60              #管理节点IP地址
    
    [root@ndb01 ~]# 

    4.3. SQL节点

    (两台机器一样)

    [root@sql01 ~]# cat /etc/my.cnf
    [mysqld]
    ndbcluster                               #启动ndb引擎
    ndb-connectstring=192.168.247.60         # 管理节点IP地址
    [mysqld_safe]
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    [mysql_cluster] 
    ndb-connectstring=192.168.247.60         #管理节点IP地址
    [root@sql01 ~]# 

    五、启动集群

    5.1. 启动与关闭

    启动顺序:

    管理节点->数据节点->SQL节点

    关闭顺序:

    管理节点->数据节点->SQL节点

    实质:关闭管理结点服务,关闭管理结点服务后,nbdb数据结点服务会自动关闭->手动把sql结点服务关了

    5.2. 启动

    5.2.1. 启动管理节点(mgm):

    [root@mgm ~]# ndb_mgmd --ndb_nodeid=1 --initial -f /usr/mysql-cluster/config.ini
    MySQL Cluster Management Server mysql-5.7.29 ndb-7.6.13
    2020-02-27 15:19:39 [MgmtSrvr] WARNING  -- at line 4: [DB] IndexMemory is deprecated, will use Number bytes on each ndbd(DB) node allocated for storing indexes instead
    --IndexMemory是不推荐的,它将在为存储索引而分配的每个ndbd(DB)节点上使用数字字节
    [root@mgm ~]# netstat -ntulp |grep 1186
    tcp        0      0 0.0.0.0:1186            0.0.0.0:*               LISTEN      21237/ndb_mgmd      
    [root@mgm ~]# 

    5.2.2. 启动数据节点(ndb

    [root@ndb01 mysql]# ndbd --initial
    2020-02-27 15:24:02 [ndbd] INFO     -- Angel connected to '192.168.247.60:1186'
    2020-02-27 15:24:02 [ndbd] INFO     -- Angel allocated nodeid: 2
    [root@ndb01 mysql]#
    [root@ndb02 mysql]# ndbd --initial
    2020-02-27 15:24:18 [ndbd] INFO     -- Angel connected to '192.168.247.60:1186'
    2020-02-27 15:24:18 [ndbd] INFO     -- Angel allocated nodeid: 3
    [root@ndb02 mysql]# 

    5.2.3. 启动SQL节点(SQL:

    systemctl start mysqld.service 

    破解密码

    先关闭密码策略(validate-password=off)再设置mysql密码:
    [root@sql02 ~]# grep password /var/log/messages  --注意,不是常规的mysql日志
    mysql> alter user root@localhost identified by '123456';
    mysql> flush privileges;
    
    授权访问:
    mysql> grant all privileges on *.* to 'root'@'192.168.247.%' identified by '123456';        
    mysql> flush privileges;

    5.2.4 关闭

    关闭管理节点

    [root@mgm ~]# ndb_mgm
    -- NDB Cluster -- Management Client --
    ndb_mgm> shutdown
    Connected to Management Server at: localhost:1186
    1 NDB Cluster node(s) have shutdown.
    Disconnecting to allow management server to shutdown.
    ndb_mgm> 
    关闭管理结点服务后,nbdb数据结点服务会自动关闭->手动把sql结点服务关了

    六、模拟测试

    6.1. 查看集群状态

    [root@mgm mysql-cluster]# ndb_mgm
    -- NDB Cluster -- Management Client --
    ndb_mgm> show
    Connected to Management Server at: localhost:1186
    Cluster Configuration
    ---------------------
    [ndbd(NDB)]     2 node(s)
    id=2    @192.168.247.61  (mysql-5.7.29 ndb-7.6.13, Nodegroup: 0, *)
    id=3    @192.168.247.62  (mysql-5.7.29 ndb-7.6.13, Nodegroup: 0)
    
    [ndb_mgmd(MGM)] 1 node(s)
    id=1    @192.168.247.60  (mysql-5.7.29 ndb-7.6.13)
    
    [mysqld(API)]   2 node(s)
    id=4    @192.168.247.63  (mysql-5.7.29 ndb-7.6.13)
    id=5    @192.168.247.64  (mysql-5.7.29 ndb-7.6.13)
    
    ndb_mgm> 

    6.2. 创建测试数据

    mysql -uroot -p123456 -h192.168.247.64
    mysql> create database tanskdb;
    mysql> use tanskdb;mysql> create table ndb_test( id int(10), city varchar(20) )engine=ndb default character set=utf8;
    mysql> insert into ndb_test values(1,'洛杉矶');  

    验证:

    关闭SQL02(192.168.247.64[root@sql02 ~]# systemctl stop mysqld.service 
    登录SQL01查看
    mysql> select * from ndb_test;
    +------+-----------+
    | id   | city      |
    +------+-----------+
    |    1 | 洛杉矶    |
    +------+-----------+
    1 row in set (0.00 sec)
    发现有数据
    
    顺便插入一条数据:
    mysql> insert into ndb_test values (2,'克利夫兰');
    Query OK, 1 row affected (0.01 sec)

    再次开启SQL02,登录查看:

    由此可见,任何一台机器宕机都不会影响生产,两台SQL节点可以同时对外服务

    集群至此搭建完成


    转载需注明出处

    水果大佬
  • 相关阅读:
    MVC应用程序与单选列表
    jQuery UI的datepicker()与变更格式
    MVC应用程序,动态创建单选列表(RadioButtonList)
    MVC应用程序中,怎样控制与复制相同的功能
    为PartialView传递一个参数
    Nginx高并发性能优化
    Nginx上传和超时时间限制 (php上传限制)
    Nginx反向代理Tomcat访问时浏览器加载失败,出现 ERR_CONTENT_LENGTH_MISMATCH 问题
    Nginx域名访问的白名单配置
    日常运维中的一键安装或启停脚本
  • 原文地址:https://www.cnblogs.com/tanshouke/p/12375796.html
Copyright © 2011-2022 走看看