设为首页 收藏本站
查看: 517|回复: 0

[经验分享] mysql-cluster 安装配置

[复制链接]

尚未签到

发表于 2018-9-29 13:48:20 | 显示全部楼层 |阅读模式
  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编码
  [NDBD DEFAULT]
  NoOfReplicas=2                      #每个数据节点的镜像数量
  DataMemory=500M                 #每个数据节点中给数据分配的内存
  IndexMemory=300M                 #每个数据节点中给索引分配的内存
  [NDB_MGMD]                     #配置管理节点,[]后面不能有空格,也不能有注释
  hostname=192.168.240.130
  datadir=/soft/mysql/data           #管理节点数据(日志)目录
  [NDBD]                       #数据节点配置,[]后面不能有空格,也不能有注释
  hostname=192.168.240.129
  datadir=/soft/mysql/data
  [NDBD]
  hostname=192.168.240.127
  datadir=/soft/mysql/data
  [MYSQLD]                     #SQL节点目录,[]后面不能有空格,也不能有注释
  hostname=192.168.240.129
  [MYSQLD]
  hostname=192.168.240.128
  -------------------------------------------------------------------------------------------------------------------
  [root@amoebe mysql]# ./bin/ndb_mgmd -f config.ini      #启动服务
  MySQL Cluster Management Server mysql-5.7.18 ndb-7.5.6   #启动成功
  [root@amoebe mysql]# ./bin/ndb_mgm                #进入管理程序,可以看到配置文件生效了,但因为没配置节点上的mysql,所以这里显示未连接
  -- NDB Cluster -- Management Client --
  ndb_mgm> show
  Connected to Management Server at: localhost:1186
  Cluster Configuration
  ---------------------
  [ndbd(NDB)]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)
  [ndb_mgmd(MGM)]1 node(s)
  id=1@192.168.240.130  (mysql-5.7.18 ndb-7.5.6)
  [mysqld(API)]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
  [root@localhost]# useradd -s /sbin/nologin mysql
  [root@localhost]# mkdir /soft/mysql
  [root@localhost]# tar xf mysql-cluster-gpl-7.5.6-linux-glibc2.5-x86_64.tar.gz
  [root@localhost]# mkdir /soft/mysql/data
  [root@localhost]# chown -R mysql:mysql /soft/mysql
  [root@localhost]# cd /soft/mysql
  [root@localhost mysql]# yum install -y libaio*
  vim support-files/mysql.server    #修改服务文件
  basedir=/soft/mysql
  datadir=/soft/mysql/data
  [root@yaho mysql]# bin/mysqld  --initialize --user=mysql --basedir=/soft/mysql --datadir=/soft/mysql/data
  ./bin/mysqld --initialize --user=mysql --datadir=/soft/mysql/data      --注意自动生成的临时密码
  [Note] A temporary password is generated for root@localhost: pByj>rz95OhV
  ----------------------------------------------------------------------------------------------------------------------------------
  先更改密码:
  [root@yaho mysql]# 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)
  [root@mysql]# vim /etc/my.cnf
  [mysqld]
  datadir=/soft/mysql/data
  user=mysql
  ndbcluster
  lc_messages-dir=/soft/mysql/share/
  ndb-connectstring=192.168.240.130
  [mysql_cluster]
  ndb-connectstring=192.168.240.130
  [root@mysql]# bin/ndbd --initial      #第一次使用要初始化数据,下次不能加--initial,否则会清空数据库
  [root@mysql]# ln -s /soft/mysql/bin /sbin/mysql
  [root@mysql]# ln -s /soft/mysql/support-files/mysql.server  /sbin/mysqld
  ----------------------------------------------------------------------------------------------------------------------------
  回到130控制台:
  ndb_mgm> show
  Cluster Configuration
  ---------------------
  [ndbd(NDB)]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已连接
  [ndb_mgmd(MGM)]1 node(s)
  id=1@192.168.61.130  (mysql-5.7.18 ndb-7.5.6)
  [mysqld(API)]2 node(s)
  [mysqld(API)]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.[ERROR] 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 库中进行测试):
  [Innodb 用例]
  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)
  [NDB 用例]
  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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-603883-1-1.html 上篇帖子: mysql 自定义 stuff 下篇帖子: MySQL平台安装及应用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表