• MySQL Cluster


    参考:http://www.cnblogs.com/linkstar/p/6510713.html

    如果没有特殊声明,则所有命令都在node1上执行

    192.168.1.201    node1  1核/448M  管理节点
    192.168.1.202    node2  1核/448M  数据节点和mysql节点在同一台机器上
    192.168.1.203    node3  1核/448M     数据节点和mysql节点在同一台机器上

    #架构图及说明

    前期准备
    #配置主机名和IP对应关系(所有节点上操作该步)
    [root@node1 ~]# vim /etc/hosts
    192.168.1.201  node1
    192.168.1.202  node2
    192.168.1.203  node3


    #在node1上生成秘钥并分发到各节点
    [root@node1 ~]# ssh-keygen -t rsa
    [root@node1 ~]# cat .ssh/id_rsa.pub >>.ssh/authorized_keys


    [root@node1 ~]# ssh-copy-id root@node2
    [root@node1 ~]# ssh-copy-id root@node3


    #做跳板机
    [root@node1 ~]# alias a='for a in {1..3};do'
    [root@node1 ~]# alias b='for b in {2..3};do'
    #测试跳板机
    [root@node1 ~]# a ssh node$a 'hostname';done
    #注:如果出现解析的出来的IP和主机名不对应的问题,就看下.ssh/known_hosts中的对应关系,将错误的删除即可

    #关闭各节点防火墙
    [root@node1 ~]# a ssh node$a 'systemctl stop firewalld';done
    [root@node1 ~]# a ssh node$a 'systemctl disable firewalld';done
    [root@node1 ~]# a ssh node$a 'iptables -F';done


    #安装配置管理节点

    下载地址1      

    [root@node1 ~]# wget https://cdn.mysql.com//archives/mysql-cluster-gpl-7.5/mysql-cluster-gpl-7.5.11-linux-glibc2.12-x86_64.tar.gz
    注:这里的包地址是wget时跟随的新地址,原地址为https://dev.mysql.com/*****


    [root@node1 ~]# tar -zxvf mysql-cluster-gpl-7.5.11-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
    [root@node1 ~]# cp /usr/local/mysql-cluster-gpl-7.5.11-linux-glibc2.12-x86_64/bin/ndb_mgm* /usr/local/bin/
    [root@node1 ~]# mkdir /var/lib/mysql-cluster
    [root@node1 ~]# mkdir /usr/local/mysql
    [root@node1 ~]# vim /var/lib/mysql-cluster/config.ini
    [ndbd default]
    NoOfReplicas=2
    DataMemory=512M
    IndexMemory=18M
    [ndb_mgmd]
    HostName=192.168.1.201
    DataDir=/var/lib/mysql-cluster
    [ndbd]
    HostName=192.168.1.202
    DataDir=/var/lib/mysql-cluster
    [ndbd]
    HostName=192.168.1.203
    DataDir=/var/lib/mysql-cluster
    [mysqld]
    [mysqld]


    #使用配置文件初始化管理节点
    [root@node1 ~]# ndb_mgmd -f /var/lib/mysql-cluster/config.ini

    #使用ndb_mgm进行管理
    [root@node1 ~]# ndb_mgm
    ndb_mgm> show (使用show命令查看管理情况,当数据节点配置完毕之后再用这个命令查看和管理)


    #安装配置数据节点 和 mysql节点
    #以下的所有操作需要在所有的集群节点都要进行相同的操作
    [root@node1 ~]# scp mysql-cluster-gpl-7.5.11-linux-glibc2.12-x86_64.tar.gz root@node2:~
    [root@node1 ~]# scp mysql-cluster-gpl-7.5.11-linux-glibc2.12-x86_64.tar.gz root@node3:~
    [root@node1 ~]# b ssh node$b 'groupadd mysql';done
    [root@node1 ~]# b ssh node$b 'useradd -g mysql -s /bin/false mysql';done
    [root@node1 ~]# b ssh node$b 'mkdir /var/lib/mysql-cluster';done
    [root@node1 ~]# b ssh node$b 'chown root:mysql /var/lib/mysql-cluster';done

    [root@node1 ~]# b ssh node$b 'tar zxvf ~/mysql-cluster-gpl-7.5.11-linux-glibc2.12-x86_64.tar.gz -C /usr/local/';done
    [root@node1 ~]# b ssh node$b 'cp -R /usr/local/mysql-cluster-gpl-7.5.11-linux-glibc2.12-x86_64/ /usr/local/mysql';done

    [root@node1 ~]# b ssh node$b 'echo '[mysqld]'>>/etc/my.cnf';done
    [root@node1 ~]# b ssh node$b 'echo 'ndbcluster'>>/etc/my.cnf';done
    [root@node1 ~]# b ssh node$b 'echo 'ndb-connectstring=192.168.1.201'>>/etc/my.cnf';done
    [root@node1 ~]# b ssh node$b 'echo ' '>>/etc/my.cnf';done
    [root@node1 ~]# b ssh node$b 'echo '[mysql_cluster]'>>/etc/my.cnf';done
    [root@node1 ~]# b ssh node$b 'echo 'ndb-connectstring=192.168.1.201'>>/etc/my.cnf';done
    注:以上IP为管理节点的IP

    [root@node1 ~]# b ssh node$b '/usr/local/mysql/bin/mysqld --initialize';done   密码样式1: e,djt*Jre9vC    密码样式2: ew3;bg#B0Il6
    [root@node1 ~]# b ssh node$b 'mv /etc/my.cnf{,.bak}';done

    [root@node1 ~]# b ssh node$b 'chown -R root /usr/local/mysql';done
    [root@node1 ~]# b ssh node$b 'chown -R mysql /usr/local/mysql/data';done
    [root@node1 ~]# b ssh node$b 'chgrp -R mysql /usr/local/mysql';done
    [root@node1 ~]# b ssh node$b 'cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/';done
    [root@node1 ~]# b ssh node$b 'chmod +x /etc/rc.d/init.d/mysql.server';done
    [root@node1 ~]# b ssh node$b 'chkconfig --add mysql.server';done


    #启动ndbd
    [root@node1 ~]# b ssh node$b '/usr/local/mysql/bin/ndbd --initial';done

     

    #启动MySQL
    [root@node1 ~]# b ssh node$b '/etc/init.d/mysql.server start';done
    Starting MySQL... SUCCESS!
    Starting MySQL.. SUCCESS!


    #登录MySQL(除管理节点以外的所有节点上执行)
    [root@node2 ~]# /usr/local/mysql/bin/mysql -uroot -p
    Enter password:

    mysql> set password=password('123456');
    注:不执行该步会提示You must reset your password using ALTER USER statement before executing this statement.这样的提示
    mysql> alter user 'root'@'localhost' password expire never;
    mysql> flush privileges;


    #修改MySQL登录密码及授权
    mysql> use mysql;
    mysql> update user set host='%' where user='root';
    mysql> update user set host='localhost' where user='root';
    mysql> alter user 'root'@'localhost' identified by '123456';
    mysql> update user set host='%' where user='root';

    测试:
    修改mysql密码统一,修改mysql的访问权限,使外部ip能远程访问mysql
    然后在一台上面创建数据库,看另一台是否被同步,然后创建表,然后新增删除等等
    唯一需要注意的是,创建表的时候必须选择表的引擎为NDBCLUSTER,否则表不会进行同步

     

    如果把表引擎创建成MyISAM,再次查看数据同步情况

    SQL单点故障测试

     NDB(数据节点)的单点故障

    在这个测试环境中,数据节点是两个,那么他们对数据的存储是互相镜像还是一份数据分成几块存储呢?(类似磁盘阵列RAID1还是RAID0)
    这个答案关键在于配置文件中 [NDBD DEFAULT] 组中的NoOfReplicas参数,
    如果这个参数等于1,表示只有一份数据,但是分成N块分别存储在N个数据节点上,
    如果该值等于2,则表示数据被分成N/2,每块数据都有两个备份,这样即使有任意一个节点发生故障,只要它的备份节点正常,数据就可以正常查询。

     

    测试方法和过程:

    先将两个数据节点之一停止,访问zhangsan表,看能否正常访问;

    然后将NoOfReplicas配置改为2,这时数据节点实际上已经互为镜像,保存了两份。
    这时再停止任意一个数据节点,将不能再次访问表zhangsan,反之

     会报:

     Error data: Illegal configuration change. Initial start needs to be performed  when changing no of replicas (1 != 2)   的错误。

    看来NoOfReplicas参数无法临时更改所以一开始就需要设置好,不要到后面才想到更改,那时就悲剧了。
    如果重新ndbd --initial,将会丢失所有数据,记住这个坑.....

    SQL节点关闭
    /etc/init.d/mysqld stop
    数据节点(NDB)关闭
    ndbd stop
    管理节点关闭
    ndb_mgm> shutdown

    总结:
    学习中踩了不少坑:
    比如参数NoOfReplicas无法临时更改,
    管理节点配置文件中如果不多预留一个[MySQLD],
    在停止NDB节点时会报错,
    配置文件中的[NDBD]段落中的datadir指定的目录在数据节点的服务器上面要存在。
    selinux,iptables等相关问题。
    后续的文章中将会介绍mysql cluster的日常维护,包括数据备份,数据恢复,日志管理等。
    MySQL Cluster的核心在于NDB Cluster存储引擎,不仅对数据进行了水平切分,还对数据进行了跨节点冗余。
    既解决了数据库的扩展问题,同时也在很大程度上提高了数据库整体可用性。

      

  • 相关阅读:
    nmap扫描工具
    cobbler全自动批量安装部署linux
    使用ngxtop实时监控nginx
    Nginx 错误汇总
    定制sudo的密码保持时间以及如何不需要密码
    解决eclipse中出现Resource is out of sync with the file system问题
    log4j:ERROR Category option " 1 " not a decimal integer.错误解决
    properties文件中中文不能显示或者中文乱码
    Log4j使用总结
    eclipse, Log4j配置(真心的详细~)
  • 原文地址:https://www.cnblogs.com/smlile-you-me/p/10821184.html
Copyright © 2020-2023  润新知