2-18-搭建mysql集群实现高可用

1  MySQL集群概述和安装环境
MySQL Cluster是MySQL适合于分布式计算环境的高实用、高冗余版本。Cluster的汉语是“集群”的意思。它采用了NDB Cluster 存储引擎,容许在1个 Cluster 中运行多个MySQL服务器。
MySQL Cluster 是一种技术,该技术容许在无共享的系统中部署“内存中”数据库的 Cluster 。经过无共享体系结构,系统可以使用廉价的硬件,并且对软硬件无特殊要求。此外,因为每一个组件有本身的内存和磁盘,不存在单点故障。

1.1  mysql 集群架构


  html

图45.1  mysql的一种常见集群
SQL节点: 给上层应用层提供sql访问。
管理节点(MGM): 管理整个集群。 启动,关闭集群。 经过ndb_mgmd命令启动集群
存储/数据节点:保存cluster中的数据。  数据节点,能够提供副本。实现数据冗余。
NDB引擎:是一种 “内存中”的存储引擎 , 它具备可用性高和数据一致性好的特色。
拓展:NDB引擎介绍:
NDB引擎
MySQL Cluster使用了一个专用的基于内存的存储引擎——NDB引擎,这样作的好处是速度快, 没有磁盘I/O的瓶颈,可是因为是基于内存的,因此数据库的规模受系统总内存的限制,若是运行NDB的MySQL服务器必定要内存够大,好比4G, 8G, 甚至16G。NDB引擎是分布式的,它能够配置在多台服务器上来实现数据的可靠性和扩展性,理论上经过配置2台NDB的存储节点就能 实现整个数据库集群的冗余性和解决单点故障问题。
缺陷
·       基于内存,数据库的规模受集群总内存的大小限制
·       基于内存,断电后数据可能会有数据丢失,这点还须要经过测试验证。
·       多个节点经过网络实现通信和数据同步、查询等操做,所以总体性受网络速度影响,所以速度也比较慢
2.2 优势
·       多个节点之间能够分布在不一样的地理位置,所以也是一个实现分布式数据库的方案。
·       扩展性很好,增长节点便可实现数据库集群的扩展。
·       冗余性很好,多个节点上都有完整的数据库数据,所以任何一个节点宕机都不会形成服务中断。

 

Mysql cluster的下载地址: https://dev.mysql.com/downloads/cluster/


 

在咱们作的实验中mysql cluster集群各机器角色以下分配:
mysql管理结点:xuegod63.cn   IP:192.168.1.63 (安装server、client)
mysql数据结点:xuegod64.cn   IP:192.168.1.64 (安装server、client)
mysql数据结点:xuegod65.cn   IP:192.168.1.65 (安装server、client)
msyqlSQL结点:xuegod66.cn   IP:192.168.1.66 (安装server、client)
msyqlSQL结点:xuegod67.cn   IP:192.168.1.67 (安装server、client)

 

将MySQL-Cluster-gpl-7.3.7-1.el6.x86_64.rpm-bundle.tar   上传到xuegod63,

 

实战:MySQL集群搭建
 
1.2  环境清理以及安装
这一部分虽然是初始过程可是比较复杂,请你们耐心配置。
xuegod63上执行下面内容:
首先咱们要清除旧版本,而后安装mysql cluster,最后是文件权限管理。
 
1.mysql旧版本清除
首先使用以下命令来清理以前操做系统自带的mysql安装:
  1. yum -y remove mysql
 
而后使用以下命令:
  1. rpm -qa | grep mysql
对于找到的2个剩余mysql包,请按照以下的命令格式予以删除:
  1. rpm -e --nodepsmysql-libs-5.1.71-1.el6.x86_64
最后删掉下列文件:
  1. rm -rf  /var/lib/mysql/*
  2. rm -rf  /etc/my.cnf  
  3. rm -rf  /etc/init.d/mysqld
  4. rm -rf  /etc/profile

 

2.mysql cluster版本安装准备
将MySQL-Cluster-gpl-7.3.4-1.el6.x86_64.rpm-bundle.tar放到某个目录下(譬如/package) 下面,而且执行以下命令解压:
  1. tar -xvfMySQL-Cluster-gpl-7.3.4-1.el6.x86_64.rpm-bundle.tar
获得以下文件清单:
MySQL-Cluster-client-gpl-7.3.4-1.el6.x86_64.rpm
MySQL-Cluster-devel-gpl-7.3.4-1.el6.x86_64.rpm
MySQL-Cluster-embedded-gpl-7.3.4-1.el6.x86_64.rpm
MySQL-Cluster-server-gpl-7.3.4-1.el6.x86_64.rpm
MySQL-Cluster-shared-compat-gpl-7.3.4-1.el6.x86_64.rpm
MySQL-Cluster-shared-gpl-7.3.4-1.el6.x86_64.rpm
MySQL-Cluster-test-gpl-7.3.4-1.el6.x86_64.rpm
3. 每一台主机都要安装mysql集群软件包(server\client)批量安装
  1. yum -y installMySQL-Cluster-server-gpl-7.4.11-1.el6.x86_64.rpm
  1. rpm -ivhMySQL-Cluster-client-gpl-7.4.11-1.el6.x86_64.rpm

 

4.建立文件夹
(分以下3个类来建立对应的文件夹)
管理节点建立:
  1. mkdir /var/lib/mysql-cluster  /var/run/mysqld/  进程pid文件目录

 

数据节点存放数据:
  1. mkdir /var/run/mysqld  
SQL节点:可不用  文件夹受权
  1. mkdir /var/run/mysqld 进程pid文件目录

 

管理节点受权
  1. chown mysql.mysql -R /var/lib/mysql-cluster  /var/run/mysqld/
数据节点受权
  1. chown mysql.mysql -R /var/lib/mysql /var/run/mysqld/   
SQL节点受权
  1. chown mysql.mysql -R /var/lib/mysql /var/run/mysqld/   

 

file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image002.gif注意:当安装完毕MySQL-Cluster-server-gpl包后,将出现以下提示信息,提醒咱们整个cluster安装后的初次超级帐户密码存在/root/.mysql_secret这个文件当中。
---------------------------------------------------------------------------------------------------------
A RANDOMPASSWORD HAS BEEN SET FOR THE MySQL root USER !
You will findthat password in '/root/.mysql_secret'.
You mustchange that password on your first connect,
no otherstatement but 'SET PASSWORD' will be accepted.
See the manualfor the semantics of the 'password expired' flag.
Also, theaccount for the anonymous user has been removed.
In addition,you can run:
  /usr/bin/mysql_secure_installation
which willalso give you the option of removing the test database.
This isstrongly recommended for production servers.
-----------------------------------------------------------------


xuegod64的大致步骤如同xuegod63,咱们首先要清除旧版本mysql。node

5.查看mysql root用户密码
  1. [root@xuegod64 ~]# cat/root/.mysql_secret
  2. # The random password setfor the root user at Wed Apr  1 21:10:532015 (local time): NSblG9hMkThTgFHY
会生成两个主要的命令文件:ndb_mgmd 和ndb_mgm
  1. [root@xuegod63 ~]# whichndb_mgm
  2. /usr/bin/ndb_mgm
  3. [root@xuegod63 ~]# rpm -qf/usr/bin/ndb_mgm
  4. MySQL-Cluster-server-gpl-7.3.7-1.el6.x86_64
  5. [root@xuegod63 ~]# whichndb_mgmd
  6. /usr/sbin/ndb_mgmd
  7. [root@xuegod63 ~]# rpm -qf/usr/sbin/ndb_mgmd
  8. MySQL-Cluster-server-gpl-7.3.7-1.el6.x86_64
还会生成用户:mysql
  1. [root@xuegod63 ~]# id mysql
  2. uid=495(mysql)gid=489(mysql) groups=489(mysql)

2  搭建mysql集群
通过复杂的初始配置,咱们终于要搭建集群了。咱们按配置,启动,测试的顺序来整理这一部分。
 
.2.1  各个机器上的配置
咱们先将需求配置到各台机器上
1.xuegod63建立管理结点上配置文件
 
  1. [root@xuegod63 ~]vim /var/lib/mysql-cluster/config.ini   #写入如下内容
  2. [ndbddefault]
  3. NoOfReplicas=2                                   #数据写入数量。2表示两份
  4. DataMemory=200M                               #配置数据存储可以使用的内存
  5. IndexMemory=100M                              #索引给100M
  6. [ndb_mgmd]
  7. id=1
  8. datadir=/var/lib/mysql-cluster                     #管理结点的日志
  9. HostName=192.168.1.63                           #管理结点的IP地址。本机IP
  10. ######data node options:                        #存储结点
  11. [ndbd]
  12. HostName=192.168.1.64
  13. DataDir=/var/lib/mysql                            #mysql数据存储路径
  14. id=2
  15. [ndbd]
  16. HostName=192.168.1.65
  17. DataDir=/var/lib/mysql                            #mysql数据存储路径
  18. id=3
  19. # SQLnode options:                              #关于SQL结点
  20. [mysqld]
  21. HostName=192.168.1.66
  22. id=4
  23. [mysqld]
  24. HostName=192.168.1.67
  25. id=5
在这个文件里,咱们分别给五个节点分配了ID,这有利于更好的管理和区分各个节点。固然,要是不指定,MySQL也会动态分配一个
2.xuegod63数据节点
  1. [root@xuegod64 /]# vim  /etc/my.cnf            #xuegod65配置同样
  2. [mysqld]
  3. datadir=/var/lib/mysql                                          #mysql数据存储路径
  4. ndbcluster                                                                  #启动ndb引擎
  5. ndb-connectstring=192.168.1.63                      # 管理节点IP地址
  6. [mysqld_safe]  
  7. log-error=/var/log/mysqld.log
  8. pid-file=/var/run/mysqld/mysqld.pid
  9. [mysql_cluster]
  10. ndb-connectstring=192.168.1.63                      #管理节点IP地址
 
3. SQL节点配置文档:
  1. [root@xuegod66~]#vim /etc/my.cnf    #xuegod67配置同样
  2. [mysqld]
  3. ndbcluster                                 #启动ndb引擎
  4. ndb-connectstring=192.168.1.63           # 管理节点IP地址
  5. [mysqld_safe]   
  6. log-error=/var/log/mysqld.log
  7. pid-file=/var/run/mysqld/mysqld.pid
  8. [mysql_cluster]  
  9. ndb-connectstring=192.168.1.63           #管理节点IP地址
  10. 说明:数据节点和SQL结点配置文件区别 ,就多一行
  11. 数据结点有:datadir=/var/lib/mysql                   #mysql数据存储路径。
SQL节点上没有。
2.2  MySQL Cluster启动
初次启动命令以及用户密码更改调整:(请严格按照次序启动)
先启动:管理结点服务->数据结点服务->sql结点服务
关闭:关闭管理结点服务,关闭管理结点服务后,nbdb数据结点服务会自动关闭->手动把sql结点服务关了。
执行初次启动前请先确认 将两台机器的防火墙关闭(service iptables stop 或者 设定 防火墙端口可通,两个端口即通信端口118六、数据端口3306 )
 
1.xuegod63上启动管理结点命令
  1. ndb_mgmd -f/var/lib/mysql-cluster/config.ini        # mysql cluster 后台运行进程
#尽可能不要把管理结点、 数据结点、存储结点 配置在同一台机子上,不然一个挂了,就全挂了。
查看端口号:
  1. [root@xuegod63 ~]#netstat  -antup | grep 1186
  2. tcp          0     0 0.0.0.0:1186        0.0.0.0:*                 LISTEN    7057/ndb_mgmd
  3. tcp          0     0 127.0.0.1:1186     127.0.0.1:60324      ESTABLISHED 7057/ndb_mgmd
  4. tcp          0     0127.0.0.1:60324   127.0.0.1:1186        ESTABLISHED 7057/ndb_mgmd
2.xuegod64和xuegod 65启动数据结点服务
  1. [root@xuegod64 ~]# ndbd--initial
  2. 2015-04-01 21:57:58 [ndbd]INFO     -- Angel connected to'192.168.1.63: 1186'
  3. 2015-04-01 21:57:58 [ndbd]INFO     -- Angel allocated nodeid: 2
  4. [root@xuegod65 ~]# ndbd --initial
  5. 2014-12-02 22:24:31 [ndbd]INFO     -- Angel connected to'192.168.1.63: 1186'
  6. 2014-12-02 22:24:31 [ndbd]INFO     -- Angel allocated nodeid: 3
 
3.xuegod66和xuegod67启动SQL结点服务
  1. [root@xuegod66 ~]#mysqld_safe--defaults-file=/etc/my.cnf &
  2. [root@xuegod67 ~]#mysqld_safe--defaults-file=/etc/my.cnf &
 
查看mysql集群状态:
  1. [root@xuegod63 ~]#ndb_mgm
  2. ndb_mgm> show
2.3  数据同步
由于默认密码比较坑人,咱们就须要在此以前改一下两台机器mysql的密码。
 
1.xuegod67 修改root密码:
  1. [root@xuegod67 /]# cat/root/.mysql_secret
  2. # The random password setfor the root user at Tue Dec  2 21:25:592014 (local time): rWG1av6XjzT4ghfd
  3. [root@xuegod67 /]# mysql-uroot -prWG1av6XjzT4ghfd
  4. mysql> show databases;
  5. ERROR 1820 (HY000): You mustSET PASSWORD before executing this statement
  6. mysql> setpassword=password('123456');
  7. Query OK, 0 rows affected(0.72 sec)
  8. mysql> exit;
  9. Bye
  10. [root@xuegod67 /]# mysql-uroot -p123456  #测试登录
  11. mysql>grant all privilegeson *.* to cluster@”%” identified by “123456” #受权
  12. mysql>flush privileges;
 
2.xuegod66 修改root密码:
  1. [root@xuegod67 ~]# cat/root/.mysql_secret
  2. # The random password setfor the root user at Tue Dec  2 21:31:112014 (local time): 2nOsamIw5wkBNhDm
  3. [root@xuegod66~]# mysql-uroot -p2nOsamIw5wkBNhDm
  4. mysql> setpassword=password('123456');
  5. Query OK, 0 rows affected(0.42 sec)
  6. mysql> exit;
  7. Bye
  8. [root@xuegod66 ~]# mysql-uroot -p123456
  9. mysql> show databases;
  10. mysql>grant allprivileges on *.* to cluster@”%” identified by “123456” #受权
  11. mysql>flush privileges;
 
3.模拟外部机器的一个客户端插入数据:
  1. mysql -ucluster -p123456 -h192.168.1.67
  2. mysql> create database db;
  3. mysql> use db;
  4. mysql> create tabletest(id int) engine=ndb;
  5. mysql> insert into testvalues(1000);
  6. mysql> select * from test;
登录另外一台sql节点查看
  1. mysql -ucluster -p123456 -h192.168.1.66
  2. mysql> use db;
  3. mysql> select * fromtest;
  4. 停掉一个sql节点测试
  5. [root@xuegod67 ~]#mysqladmin -uroot -p123456 shutdown
  6. ndb_mgm> show 查看状态
 
2.4  关闭服务
关闭mysql集群顺序: 关闭管理节点服务-》 关闭管理节点时,数据结点服务自动关闭 –》 须要手动关闭SQL结点服务
 
  1.   [root@xuegod63 /]      # ndb_mgm
  2. -- NDB Cluster -- ManagementClient --
  3. ndb_mgm> shutdown
  4. Node 2: Cluster shutdowninitiated
  5. Node 3: Cluster shutdowninitiated
  6. 3 NDB Cluster node(s) haveshutdown.
  7. Disconnecting to allowmanagement server to shutdown.
  8. Node 2: Node shutdowncompleted.
  9. ndb_mgm> exit
  10. ps -axu | grep  ndbd          #查看不到,说明数据节点已经被关
 
手动关闭SQL结点服务
  1. xuegod66和xuegod67上,手动关闭SQL结点服务
  2. [root@xuegod66 ~]#mysqladmin -uroot -p123456 shutdown
  3. [root@xuegod67 ~]#mysqladmin -uroot -p123456 shutdown
 
或者:方法二 kill掉
  1. [root@xuegod66 ~]# ps -axu |grep mysql
  2. [root@xuegod66 ~]# kill -97617
  3. [root@xuegod66 ~]# kill -97743
  4. [root@xuegod67~]# ps -axu |grep mysql  #xuegod67一样kill掉

2.5  总结
再次启动,msyql集群启动:
  1. [root@xuegod63 /]# ndb_mgmd-f /var/lib/mysql-cluster/config.ini
  2. [root@xuegod64 /]#ndbd
  3. [root@xuegod65 /]#ndbd
  4. [root@xuegod66 /]#mysqld_safe --defaults-file=/etc/my.cnf &
  5. [root@xuegod67 /]#mysqld_safe --defaults-file=/etc/my.cnf &
 
 
查看mysql 集群状态:
  1. [root@xuegod63 ~]# ndb_mgm
  2. -- NDB Cluster -- Management Client --
  3. ndb_mgm> show
  4. Connected to Management Server at: localhost:1186
  5. Cluster Configuration
  6. ---------------------
  7. [ndbd(NDB)]     2node(s)
  8. id=2  @192.168.1.64  (mysql-5.6.29 ndb-7.4.11, Nodegroup: 0, *)
  9. id=3  @192.168.1.65  (mysql-5.6.29 ndb-7.4.11, Nodegroup: 0)
  10. [ndb_mgmd(MGM)]   1node(s)
  11. id=1  @192.168.1.63  (mysql-5.6.29 ndb-7.4.11)
  12. [mysqld(API)]    2node(s)
  13. id=4  @192.168.1.66  (mysql-5.6.29 ndb-7.4.11)
  14. id=5  @192.168.1.67  (mysql-5.6.29 ndb-7.4.11)
  15. ndb_mgm>
相关文章
相关标签/搜索