Mysql Cluster集群配置详解

一. MySQL集群简介

MySQL群集技术在分布式系统中为MySQL数据提供了冗余特性,增强了安全性,使得单个MySQL服务器故障不会对系统产生巨大的负面效应,系统的稳定性得到保障。
MySQL群集需要有一组计算机,每台计算机的角色可能是不一样的。MySQL群集中有三种节点:管理节点、数据节点和SQL节点。群集中的某计算机可能是某一种节点,也可能是两种或三种节点的集合。这三种节点只是在逻辑上的划分,所以它们不一定和物理计算机是一一对应的关系。

管理节点(也可以称管理服务器)主要负责管理数据节点和SQL节点,还有群集配置文件和群集日志文件。它监控其他节点的工作状态,能够启动、关闭或重启某个节点。其他节点从管理节点检索配置数据,当数据节点有新事件时就把事件信息发送给管理节点并写入群集日志。
数据节点用于存储数据。
SQL节点跟一般的MySQL服务器是一样的,我们可以通过它进行SQL操作。

下图中画出了三种群集节点及应用程序间的关系:

二. 部署过程

从上面的简介可知,MySQL群集中有三种节点:管理节点、数据节点和SQL节点;所以,如果要实现高可用冗余集群,至少需要6台主机。

我们这里把数据节点和SQL节点放在同一台主机上,使用舞台主机,主机信息如下:

10.10.91.71 node1    # mgmd节点10.10.91.72 node2    # sql和data节点10.10.91.75 node3    # sql和data节点10.10.91.77 node4    # mgmd节点

1. 初始化系统

每个节点都操作

# systemctl disable firewalld 
# vi /etc/selinux/config
    SELINUX=disabled    
#  hostnamectl set-hostname xxx
# cd/usr/local/
# wget http://mirrors.sohu.com/mysql/MySQL-Cluster-7.5/mysql-cluster-gpl-7.5.5-linux-glibc2.5-x86_64.tar.gz  # 可根据时间情况下载,从其他镜像源或官方下载
# tar -zxf mysql-cluster-gpl-7.5.5-linux-glibc2.5-x86_64.tar.gz && mv mysql-cluster-gpl-7.5.5-linux-glibc2.5-x86_64.tar.gz /usr/local/mysql

# cp /usr/local/mysql/bin/ndb_mgm* /usr/local/bin/
# chmod +x /usr/local/bin/ndb_mgm*
# chmod +x /usr/local/mysql/bin/
# echo "export PATH=$PATH:/usr/local/mysql/bin/" >> /etc/profile

# reboot

2.  在node1和node4上配置管理节点

# mkdir /var/lib/mysql-cluster
# vi /var/lib/mysql-cluster/config.ini

node1

[ndbd default]
NoOfReplicas=2
DataMemory=512M
IndexMemory=18M

[ndb_mgmd]
NodeId=1
HostName=10.10.91.71
DataDir=/var/lib/mysql-cluster

[ndb_mgmd]
NodeId=6
HostName=10.10.91.77
DataDir=/var/lib/mysql-cluster

[ndbd]
NodeId=2
HostName=10.10.91.72
DataDir=/usr/local/mysql/data

[ndbd]
NodeId=3
HostName=10.10.91.75
DataDir=/usr/local/mysql/data

[mysqld]
NodeId=4
HostName=10.10.91.72
[mysqld]
NodeId=5
HostName=10.10.91.75

node4

[ndbd default]
NoOfReplicas=2
DataMemory=512M
IndexMemory=18M

[ndb_mgmd]
NodeId=6
HostName=10.10.91.77
DataDir=/var/lib/mysql-cluster

[ndb_mgmd]
NodeId=1
HostName=10.10.91.71
DataDir=/var/lib/mysql-cluster

[ndbd]
NodeId=2
HostName=10.10.91.72
DataDir=/usr/local/mysql/data

[ndbd]
NodeId=3
HostName=10.10.91.75
DataDir=/usr/local/mysql/data

[mysqld]
NodeId=4
HostName=10.10.91.72
[mysqld]
NodeId=5
HostName=10.10.91.75

3.  在node2/node3上配置数据节点和sql节点

# groupadd mysql && useradd -g mysql mysql
# vi /etc/my.cnf

node2

[client]
socket=/usr/local/mysql/mysql.sock

[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/mysql.sock
user=mysql
symbolic-links=0
ndbcluster
ndb-connectstring=10.10.91.71,10.10.91.77

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[mysql_cluster]
ndb-connectstring=10.10.91.71,10.10.91.77

node3

[client]
socket=/usr/local/mysql/mysql.sock

[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/mysql.sock
user=mysql
symbolic-links=0
ndbcluster
ndb-connectstring=10.10.91.71,10.10.91.77

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/usr/local/mysql/mysqld.pid

[mysql_cluster]
ndb-connectstring=10.10.91.71,10.10.91.77
# cd /usr/local/mysql
# bin/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
# chown -R mysql.mysql /usr/local/mysql
# cp mysql/support-files/mysql.server /etc/rc.d/init.d/
# chmod +x /etc/rc.d/init.d/mysql.server
# chkconfig --add mysql.server

4.  Mysql Cluster集群的启动

# 启动管理节点,首次启动需要+ --initial
# ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial 
 
# 启动数据节点,首次启动需要+ --initial
# /usr/local/mysql/bin/ndbd --initial
 
# 启动 SQL 节点
# /usr/local/mysql/bin/mysqld_safe --user=mysql &

# 查看集群状态

# 管理节点上操作:

[[email protected] local]# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)]	2 node(s)
id=2	@10.10.91.72  (mysql-5.7.17 ndb-7.5.5, Nodegroup: 0, *)    # dbdb节点
id=3	@10.10.91.75  (mysql-5.7.17 ndb-7.5.5, Nodegroup: 0)

[ndb_mgmd(MGM)]	2 node(s)
id=1	@10.10.91.71  (mysql-5.7.17 ndb-7.5.5)    # mgmd节点
id=6	@10.10.91.77  (mysql-5.7.17 ndb-7.5.5)

[mysqld(API)]	2 node(s)
id=4	@10.10.91.72  (mysql-5.7.17 ndb-7.5.5)    # mysqld节点
id=5	@10.10.91.75  (mysql-5.7.17 ndb-7.5.5)

5.  测试

# 先将 SQL 节点的数据库密码修改为相同的

# /usr/local/mysql/bin/mysql_secure_installation    # 该命令为MySQL初始化命令操作
或使用如下方法修改密码
mysql -u root -p;  
随机密码(具体请参见/root/.mysql_secret文件获取),进入后使用如下指令修改密码:
SET PASSWORD = PASSWORD('新密码');

# SQL 节点 1 上新建库,并插入数据

# mysql -uroot -p
mysql> create database aa;
mysql> use aa;
mysql> create table student(id int(10) primary key auto_increment,name varchar(30),age tinyint(2)) engine=ndb;
 # 数据库表的引擎必须为NDB,不然就同步失败了,可以用 show create table 表名; 来查看引擎
mysql> insert into student (id,name,age) value(321281,"mzh",18);
mysql> quit

# SQL 节点 2 查看是否同步

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| aa                 |
| mysql              |
| ndbinfo            |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.00 sec)

mysql> use aa;
mysql> show tables;

+--------------+
| Tables_in_aa |
+--------------+
| student      |
+--------------+
1 row in set (0.01 sec)
 
mysql> select * from student;
+--------+------+------+
| id     | name | age  |
+--------+------+------+
| 321281 | mzh  |   18 |
+--------+------+------+
1 row in set (4.27 sec)  
 
# 做到这里,已经看到可以同步了。然后我们再模拟SQL节点1宕机了,在SQL2上插入新的数据,再SQL1开机,查看数据是否会同步。
# 在SQL 1上操作:
# /etc/rc.d/init.d/mysql.server stop
# ps -ef| grep mysql
 
# 在 SQL 2 操作:
mysql> insert into student (id,name,age) value(12121,"hp",19);
mysql> select * from student;
+--------+------+------+
| id     | name | age  |
+--------+------+------+
|  12121 | hp   |   19 |
| 321281 | mzh  |   18 |
+--------+------+------+
2 rows in set (0.00 sec)
   
 
# 再在 SQL1 上查看是否同步
# /etc/rc.d/init.d/mysql.server start
mysql> select * from student;
+--------+------+------+
| id     | name | age  |
+--------+------+------+
|  12121 | hp   |   19 |
| 321281 | mzh  |   18 |
+--------+------+------+
2 rows in set (0.00 sec)

6.  Mysql  Cluster关闭和启动

管理节点操作:
# ndb_mgm -e shutdown    # 关闭
# ndb_mgmd -f /var/lib/mysql-cluster/config.ini  # 启动
# /usr/local/mysql-cluster/ndb_mgm -e exit    # 退出
# /usr/local/mysql-cluster/ndb_mgm -e show    # 查看和管理

数据节点:
# /usr/local/mysql/bin/ndbd # 启动,数据节点和管理节点没有启动脚本,可以自己手动编写或将加到系统的起动机脚本中

SQL 节点操作:
# /etc/rc.d/init.d/mysql.server stop/start/restart

# chkconfig mysql.server # 添加到开机启动

原文地址:http://blog.51cto.com/afterdawn/2125638

时间: 2024-08-01 09:28:10

Mysql Cluster集群配置详解的相关文章

Apache + Tomcat集群配置详解 (1)

一.软件准备 Apache 2.2 : http://httpd.apache.org/download.cgi,下载msi安装程序,选择no ssl版本 Tomcat 6.0 : http://tomcat.apache.org/download-60.cgi,下载Tomcat 6.0.18 zip文件 注意:由于Apache和Tomcat项目与集群相关的模块均处于持续发展和优化过程中,因此笔者不保证本文配置方法对所有Apache和Tomcat版本均适用. 二.软件安装 把Apache安装为运

Apache + Tomcat集群配置详解

Apache + Tomcat集群配置详解 一.软件准备 Apache 2.2 : http://httpd.apache.org/download.cgi,下载msi安装程序,选择no ssl版本 Tomcat 6.0 : http://tomcat.apache.org/download-60.cgi,下载Tomcat 6.0.18 zip文件 注意:由于Apache和Tomcat项目与集群相关的模块均处于持续发展和优化过程中,因此笔者不保证本文配置方法对所有Apache和Tomcat版本均

使用apache和nginx代理实现tomcat负载均衡及集群配置详解

实验环境: 1.nginx的代理功能 nginx proxy: eth0: 192.168.8.48 vmnet2 eth1: 192.168.10.10 tomcat server1: vmnet2 eth0: 192.168.10.20 tomcat server2: vmnet2 eth0: 192.168.10.30 # yum install -y nginx-1.8.1-1.el6.ngx.x86_64.rpm # vim /etc/nginx/conf.d/default.conf

Hadoop 2.6.0 HA高可用集群配置详解

1 Hadoop HA架构详解 1.1 HDFS HA背景 HDFS集群中NameNode 存在单点故障(SPOF).对于只有一个NameNode的集群,如果NameNode机器出现意外情况,将导致整个集群无法使用,直到NameNode 重新启动. 影响HDFS集群不可用主要包括以下两种情况:一是NameNode机器宕机,将导致集群不可用,重启NameNode之后才可使用:二是计划内的NameNode节点软件或硬件升级,导致集群在短时间内不可用. 为了解决上述问题,Hadoop给出了HDFS的高

elasticsearch简单的安装以及集群配置详解

首先要确保有java8的环境,安装方法如下(centos) 1 wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u161-b12/2f38c3b165be4555a1fa6e98c45e0808/jdk-8u161-linux-x64.rpm 2

codis-3.2.8集群部署详解

codis-3.2.8集群部署详解 一.概要 Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (不支持的命令列表https://github.com/CodisLabs/codis/blob/release3.1/doc/unsupported_cmds.md), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的

Application Request Route实现IIS Server Farms集群负载详解

Application Request Route实现IIS Server Farms集群负载详解 序言 随着公司业务的发展,后台业务就变的越来越多,然而服务器的故障又像月经一样,时不时的汹涌而至,让我们防不胜防.那么后台的高可用,以及服务器的处理能力就要做一个横向扩展的方案,以使后台业务持续的稳定可用,平复人心. 由于我们的后台业务,清一色都是.net应用程序,加上总监的一致推荐,我们的负载均衡其中一个方案就选用了微软与iis集成的反向代理Application Request Route.A

Storm集群安装详解

Storm集群安装详解 storm有两种操作模式: 本地模式和远程模式. 本地模式:你可以在你的本地机器上开发测试你的topology, 一切都在你的本地机器上模拟出来; 远端模式:你提交的topology会在一个集群的机器上执行. 本文以Twitter Storm官方Wiki为基础,详细描述如何快速搭建一个Storm集群,其中,项目实践中遇到的问题及经验总结,在相应章节以“注意事项”的形式给出. 1.   Strom集群组件 Storm集群中包含两类节点:主控节点(Master Node)和工

Hadoop集群WordCount详解

Hadoop集群WordCount详解 MapReduce理论介绍 MapReduce处理过程 MapReduce代码 1.MapReduce 理论介绍 1.1 MapReduce编程模型 MapReduce采用"分而治之"的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然后通过整合各个节点的中间结果,得到最终结果.简单地说,MapReduce就是"任务的分解与结果的汇总". 在Hadoop中,用于执行MapReduce任务的机器角色有两