7007 发表于 2018-9-29 13:48:20

mysql-cluster 安装配置

  mysql-cluster免编译包下载:https://dev.mysql.com/downloads/file/?id=469881
  新版本支持只把索引和用到的数据加载到内存,而不是老版本的整个数据库都得加到内存中
  wget https://cdn.mysql.com//Downloads/MySQL-Cluster-7.5/mysql-cluster-gpl-7.5.6-linux-glibc2.5-x86_64.tar.gz
  解压:
  # tar xvf mysql-cluster-gpl-7.5.6-linux-glibc2.5-x86_64.tar.gz
  # mv xvf mysql-cluster-gpl-7.5.6-linux-glibc2.5-x86_64 /soft/mysql
  给mysql-cluster目录授权
  #useradd -s mysql /sbin/nologin
  # mkdir /soft/mysql/data
  # chown -R mysql:mysql /soft/mysql/*
  # chmod +x /soft/mysql/bin/ndb_mem*
  # cd /soft/mysql/
  # ln -s /soft/mysql/bin/ndb_mgmd   /sbin/ndb_mgmd   #方便在shell直接调用ndb_mgmd命令
  # ln -s /soft/mysql/bin/ndb_mgm   /sbin/ndb_mgm      #方便在shell直接调用ndb_mgm命令
  建立config.ini文件
  # vim config.ini                     #内容如下,一定要注意格式。从windows复制过来的话记得用uft8编码
  
  NoOfReplicas=2                      #每个数据节点的镜像数量
  DataMemory=500M               #每个数据节点中给数据分配的内存
  IndexMemory=300M               #每个数据节点中给索引分配的内存
                       #配置管理节点,[]后面不能有空格,也不能有注释
  hostname=192.168.240.130
  datadir=/soft/mysql/data         #管理节点数据(日志)目录
                       #数据节点配置,[]后面不能有空格,也不能有注释
  hostname=192.168.240.129
  datadir=/soft/mysql/data
  
  hostname=192.168.240.127
  datadir=/soft/mysql/data
                       #SQL节点目录,[]后面不能有空格,也不能有注释
  hostname=192.168.240.129
  
  hostname=192.168.240.128
  -------------------------------------------------------------------------------------------------------------------
  # ./bin/ndb_mgmd -f config.ini      #启动服务
  MySQL Cluster Management Server mysql-5.7.18 ndb-7.5.6   #启动成功
  # ./bin/ndb_mgm                #进入管理程序,可以看到配置文件生效了,但因为没配置节点上的mysql,所以这里显示未连接
  -- NDB Cluster -- Management Client --
  ndb_mgm> show
  Connected to Management Server at: localhost:1186
  Cluster Configuration
  ---------------------
  2 node(s)
  id=2 (not connected, accepting connect from 192.168.240.129)
  id=3 (not connected, accepting connect from 192.168.240.127)
  1 node(s)
  id=1@192.168.240.130(mysql-5.7.18 ndb-7.5.6)
  2 node(s)
  id=4 (not connected, accepting connect from 192.168.240.129)
  id=5 (not connected, accepting connect from 192.168.240.128)
  -------------------------------------------------------------------------------------------------------------------------------
  配置节点: 192.168.240.128/192.168.240.129
  # useradd -s /sbin/nologin mysql
  # mkdir /soft/mysql
  # tar xf mysql-cluster-gpl-7.5.6-linux-glibc2.5-x86_64.tar.gz
  # mkdir /soft/mysql/data
  # chown -R mysql:mysql /soft/mysql
  # cd /soft/mysql
  # yum install -y libaio*
  vim support-files/mysql.server    #修改服务文件
  basedir=/soft/mysql
  datadir=/soft/mysql/data
  # bin/mysqld--initialize --user=mysql --basedir=/soft/mysql --datadir=/soft/mysql/data
  ./bin/mysqld --initialize --user=mysql --datadir=/soft/mysql/data      --注意自动生成的临时密码
   A temporary password is generated for root@localhost: pByj>rz95OhV
  ----------------------------------------------------------------------------------------------------------------------------------
  先更改密码:
  # bin/mysql -u root -p'pByj>rz95OhV'      --登录mysql,有特殊符号,要用''括起来,在这里踏坑了
  mysql> use mysql;                              --必须先更改密码才可以操作

  ERROR 1820 (HY000): You must reset your password using>
  mysql>>  Query OK, 0 rows affected (0.00 sec)
  # vim /etc/my.cnf
  
  datadir=/soft/mysql/data
  user=mysql
  ndbcluster
  lc_messages-dir=/soft/mysql/share/
  ndb-connectstring=192.168.240.130
  
  ndb-connectstring=192.168.240.130
  # bin/ndbd --initial      #第一次使用要初始化数据,下次不能加--initial,否则会清空数据库
  # ln -s /soft/mysql/bin /sbin/mysql
  # ln -s /soft/mysql/support-files/mysql.server/sbin/mysqld
  ----------------------------------------------------------------------------------------------------------------------------
  回到130控制台:
  ndb_mgm> show
  Cluster Configuration
  ---------------------
  2 node(s)
  id=2@192.168.61.128(mysql-5.7.18 ndb-7.5.6, starting, Nodegroup: 0)--节点ndbd已连接
  id=3@192.168.61.129(mysql-5.7.18 ndb-7.5.6, starting, Nodegroup: 0) --节点ndbd已连接
  1 node(s)
  id=1@192.168.61.130(mysql-5.7.18 ndb-7.5.6)
  2 node(s)
  2 node(s)
  id=4@192.168.61.128(mysql-5.7.18 ndb-7.5.6)                  #小心防火墙
  id=5@192.168.61.129(mysql-5.7.18 ndb-7.5.6)                  #小心防火墙
  -----------------------------------------------------------------------------------------------------------------------------
  测试:
  建库/建表
  在192.168.61.128上登录mysql:
  mysql>create databases abc
  Query OK, 0 rows affected (0.72 sec)
  mysql>create table name(id int(5) not null primary key auto_increment,name varchar(10) not null ) engine=ndb;
  Query OK, 0 rows affected (0.72 sec)
  mysql>insert into name(name) values ('张三'),('李四');
  -----------------------------------------------------------------------------------------------------------------------------
  在192.168.240.128/192.168.240.129 进行查询
  mysql>select * from tp.name;
  +----+---------+

  |>  +----+----------+
  |1 | 张三   |
  |2 | 李四   |
  +----+---------+
  -----------------------------------------------------------------------------------------------------------------------------
  模拟192.168.240.128/192.168.240.129故障之一失效,再查询
  mysql>select * from tp.name;
  +----+---------+

  |>  +----+----------+
  |1 | 张三   |
  |2 | 李四   |
  +----+---------+
  mysql>insert into name(name) values ('长江'),('黄河');
  Query OK, 0 rows affected (0.72 sec)

  mysql> select * from tp.name group by>  +----+--------+

  |>  +----+--------+
  |1 | 长江   |
  |2 | 黄河   |
  |3 | 张三   |
  |4 | 李四   |
  +----+--------+
  4 rows in set (0.01 sec)
  经过测试总结大致有几点:

[*]  当cluster挂了后,两个数据节点的mysql都不能访问数据库;
[*]  当cluster挂了时,两个mysql还是可以正常工作的,更新数据也会同步,但不能重启mysql服务;
  2.只要不是两个mysql服务同时挂了,数据还是安全的。
  3.当cluster挂掉,节点A挂掉,这时往节点B上更新数据;cluster和节点A恢复上线后会造成节点A和节点B的数据不一致。
  4.当两个mysql数据不一致时,先启动cluster,再启动数据更新的数据节点和SQL节点,确保已经成功连上cluster,最后再启动另一个节点,后一个节点会自动更新最新的数据。!!启动顺序很重要!!!
  5.只要cluster和ndbd还存活,mysql暂时的失效,数据也不会丢失。
  7.必须有一个ndbd存活,mysql才能正常工作。
  -----------------------------------------------------------------------------------------------------------------------------
  启动顺序:
  管理节点 ndb_megd -> 数据节点 ndbd -> SQL节点 指定ndbcluster 参数的专用mysqld
  ndb_mgmd -f config.ini -> ndbd -> mysqld start
  关闭顺序:
  SQL节点 指定ndbcluster 参数的专用mysqld ->管理节点 ndb_mem
  mysqld stop --> ndb_mgm -e shutdown --> 完成
  附配置过程中碰到的几个错误:
  1. mysqld --initialize-insecure自动生成无密码的root用户,mysqld --initialize自动生成带随机密码的root用户
  2.用mysql帐号设置的话需要在 /etc/security/limits.conf 中追加下面信息,不然会提示limite限制错误:
  mysql   hard   nofile   65535
  3. Can't find error-message file '/usr/local/mysql/share/zh-cn/errmsg.sys'. Check error-message file location and 'lc-messages-dir' configuration directive.
  在my.cnf里添加行:
  lc_messages-dir=/soft/mysql/share/
  4.启动mysql时,可能会提示:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)
  ln -s /soft/mysql/mysql.sock/tmp/mysql.sock             #要用绝对路径
  5.ndb_mgm> showNode 2: Forced node shutdown completed. Occured during startphase 4. Caused by error 2353: 'Insuffice. ndbd服务自动断开,可能是时差的问题:
  cluser端 kill掉 ndb_mgmd 再重新启动。数据节点再重新启动ndbd 和mysqld 即可。
  NDB引擎和Innodb 引擎的区别:摘自http://www.oschina.net/question/565065_79802
  N NDB 和 Innodb 的使用基本是一样的,ACID (原子性、一致性、隔离性、持久性)实现方式也基本相同,但是他们之间有一个很重要的区别:在同一个 transaction 中,如果某一部的执行出错,Innodb 会继续的往下执行,而 NDB 则会马上回滚到最初状态(类似于 SqlServer 中的 SET XACT_ABORT ON 的状态),如果不注意这一点的话,在一些极端情况下,系统将出现数据不一致的情况,所以还是需要大家多多注意哦!
  测试用例如下(在 test 库中进行测试):
  
  mysql> create table test_innodb (i int not null primary key) engine innodb;
  mysql> begin;
  mysql> insert into test_innodb values(1);
  mysql> insert into test_innodb values(1); # 主键重复出错
  mysql> commit;
  mysql> select * from test_innodb;
  +---+
  | i |
  +---+
  | 1 |
  +---+
  1 row in set (0.00 sec)
  
  mysql> create table test_ndb (i int not null primary key) engine ndbcluster;
  mysql> begin;
  mysql> insert into test_ndb values(1);
  mysql> insert into test_ndb values(1); # 主键重复出错
  mysql> commit;
  mysql> select * from test_ndb;
  Empty set (0.00 sec)

页: [1]
查看完整版本: mysql-cluster 安装配置