加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

安装和部署mysql-cluster教程

发布时间:2023-08-19 14:54:48 所属栏目:MySql教程 来源:
导读:本文主要给大家介绍安装和配置mysql-cluster教程,其所涉及的东西,从理论知识来获悉,有很多书籍、文献可供大家参考,从现实意义角度出发,亿速云累计多年的实践经验可分享给大家。

新版本支持只把索引和用到的
本文主要给大家介绍安装和配置mysql-cluster教程,其所涉及的东西,从理论知识来获悉,有很多书籍、文献可供大家参考,从现实意义角度出发,亿速云累计多年的实践经验可分享给大家。
 
新版本支持只把索引和用到的数据加载到内存,而不是老版本的整个数据库都得加到内存中
 
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编码
 
安装和配置mysql-cluster教程
 
[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 ALTER USER statement before executing this statement.
 
mysql> alter user 'root'@'localhost' identified by '123456';
 
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 charset=gbk;
 
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)
 
-----------------------------------------------------------------------------------------------------------------------------
 
在192.168.240.128/192.168.240.129 进行查询
 
mysql>select * from tp.name;
 
+----+---------+
 
| id | name   |
 
+----+----------+
 
|  1 | 张三   |
 
|  2 | 李四   |
 
+----+---------+
 
-----------------------------------------------------------------------------------------------------------------------------
 
模拟192.168.240.128/192.168.240.129故障之一失效,再查询
 
mysql>select * from tp.name;
 
+----+---------+
 
| id | name   |
 
+----+----------+
 
|  1 | 张三   |
 
|  2 | 李四   |
 
+----+---------+
 
mysql>insert into name(name) values ('长江'),('黄河');
 
Query OK, 0 rows affected (0.72 sec)
 
mysql> select * from tp.name group by id;
 
+----+--------+
 
| id | name   |
 
+----+--------+
 
|  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)
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章