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

[经验分享] Mysql Cluster集群配置详解

[复制链接]

尚未签到

发表于 2018-10-5 12:46:11 | 显示全部楼层 |阅读模式
一. 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 &
  # 查看集群状态
  # 管理节点上操作:
[root@node1 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关闭和启动
启动mysql集群。启动顺序为:管理节点→数据节点→SQL节点。管理节点操作:  
# 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 # 添加到开机启动



运维网声明 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-612675-1-1.html 上篇帖子: Centos 6.6 下 nginx +php mysql + phpMyadmin 安装部署 下篇帖子: Mysql Cluster通过HAProxy实现负载均衡
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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