首页 数据库 mysql教程 Ubuntu 12.04 LTS 构建高可用分布式 MySQL 集群_MySQL

Ubuntu 12.04 LTS 构建高可用分布式 MySQL 集群_MySQL

Jun 01, 2016 pm 01:28 PM
英语

UbuntuMysql集群

bitsCN.com

本文的英文版本链接是 http://www.mrxuri.com/index.php/2013/11/20/install-mysql-cluster-on-ubuntu-12-04-lts.html

Install MySQL Cluster on Ubuntu 12.04 LTS

MySQL Cluster 是 MySQL 适合于分布式计算环境的高实用、高冗余版本。它采用了 NDB Cluster 存储引擎,允许在1个 Cluster 中运行多个MySQL服务器。通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求。此外,由于每个组件有自己的内存和磁盘,不存在单点故障。

开发者官方网站 www.oracle.com

在这篇文章中,我会叙述如何 在 Ubuntu 12.04 LTS 构建高可用 MySQL 集群。

1. SQL Cluster 虚拟主机

要创建一个功能齐全的集群,至少需要3 台主机才可以完成。其中一个主机作为管理节点,另外两个做数据节点。如果数据节点脱机,群集仍然可以工作,但是一旦管理节点出现问题,将导致集群无法正常工作,所以在可能的情况下,建立两个管理节点。在我的例子中,我将使用二个管理节点的集群。

这个例子中一共使用了 5 台主机,系统架构如下图所示

Install MySQL Cluster on Ubuntu 12.04 LTS

 

Install MySQL Cluster on Ubuntu 12.04 LTS

虚拟机群平台     VMware ESXi 4.1虚拟机操作系统    Ubuntu 12.04.3 LTS (Precise Pangolin) 64-bit
登录后复制

所有虚拟机都在同一 192.168.67.0/24 网络地址段当中,请根据你的网络情况来具体配置 IP 地址,在开始之前请确保所有主机网络连接设置正常。

2. 安装管理节点

首先,我们需要安装的 MySQL 集群的管理节点。我们将开始与 MySQL-MGM-1,配置完成后按照相同的步骤配置第二个管理节点,如果只设定一个管理节点,那么继续下一步的配置。

在开始配置前,请访问 http://www.mysql.com/downloads/cluster/#downloads 确认当前安装文档的版本信息. 这里我所使用的 MySQL Cluster 版本是 7.3.3.

首先,我们把 MySQL Cluster 安装包下载到管理主机上。进入到 /usr/src 文件夹并创建 mysql-mgm 目录。

mkdir /usr/src/mysql-mgmcd /usr/src/mysql-mgm
登录后复制

完成这一步后,在 MySQL 的官方网站下载最新的安装源代码,并解压软件包

wget http://cdn.mysql.com/Downloads/MySQL-Cluster-7.3/mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64.tar.gztar xvfz mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64.tar.gz
登录后复制

进入解压缩后的文件夹,然后移动二进制文件

cd mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64cp bin/ndb_mgm /usr/bincp bin/ndb_mgmd /usr/bin
登录后复制

更改目录的权限,并可以选择删除下载的源文件

chmod 755 /usr/bin/ndb_mg*cd /usr/srcrm -rf /usr/src/mysql-mgm
登录后复制

接下来,我们创建管理节点配置文件,在 /var/lib/mysql-cluster/ 文件夹中,名字叫做 config.ini ,这个文件夹事先不存在,创建它

mkdir /var/lib/mysql-cluster
登录后复制
登录后复制

在 config.ini 文件创建完成后,使用你喜欢的文本编辑器编辑此文件,内容类似于这样

[NDBD DEFAULT] NoOfReplicas=2DataMemory=80MIndexMemory=18M[MYSQLD DEFAULT] [NDB_MGMD DEFAULT]DataDir=/var/lib/mysql-cluster[TCP DEFAULT] # Section for the cluster management node[NDB_MGMD]NodeId=1# IP address of the first management node (this system)HostName=192.168.67.10 [NDB_MGMD]NodeId=2#IP address of the second management nodeHostName=192.168.67.11 # Section for the storage nodes[NDBD]# IP address of the first storage nodeHostName=192.168.67.12DataDir= /var/lib/mysql-cluster[NDBD]# IP address of the second storage nodeHostName=192.168.67.13DataDir=/var/lib/mysql-cluster# one [MYSQLD] per storage node[MYSQLD][MYSQLD]
登录后复制

所有主机都定义在这个里,即使我们只安装第一个。请注意,管理主机节点需要设定 NodeId,而 NDBD 节点不需要设定.
完成这步操作后,可以用下面的命令启动管理节点

ndb_mgmd -f /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster/
登录后复制

完成这步操作后, 你可以通过下面的命令向 init.d 中添加一个条目,以自动启动程序

echo "ndb_mgmd -f /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster/" > /etc/init.d/ndb_mgmdchmod 755 /etc/init.d/ndb_mgmd
登录后复制

如果一切顺利,第二个管理节点上遵循相同的步骤,并使用相同的配置。请不要改变的节点配置文件中的 ID

你可以使用 ndb_mgm 命令来验证管理节点的运行,(只需要在终端中输入 ndb_mgm ) ,并通过键入 show,启动配置实用程序。此时 NDBD 节点和 MySQL 节点处于断开状态,需要将所有节点配置完成才可以输出正确的状态。

3. 数据节点
创建数据节点与创建管理节点的过程是类似的。让我们开始创建一个 mysql 组,将用户 mysql 添加到 mysql 组中

groupadd mysqluseradd -g mysql mysql
登录后复制

进入 /usr/local ,并下载和配置管理节点时使用的相同的压缩文档,并解压

cd /usr/local/wget http://cdn.mysql.com/Downloads/MySQL-Cluster-7.3/mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64.tar.gztar xvfz mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64.tar.gz
登录后复制

创建一个名为 mysql 指向解压的文件夹(这以后将用于DB集群,所以不要删除它!)的的软连接。创建完成后,你可以安装数据库

ln -s mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64 mysqlcd mysqlapt-get install libaio1 libaio-devscripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data
登录后复制

修改文件权限

chown -R root:mysql .chown -R mysql data
登录后复制

与管理节点上一样,我们希望的 DataBase 引擎自动启动,因此,我们需要创建 init.d 命令

cp support-files/mysql.server /etc/init.d/chmod 755 /etc/init.d/mysql.server
登录后复制

最后,复制 bin 文件夹到 /usr/bin 的位置,并创建一个符号链接,以保持能够正确的引用

cd /usr/local/mysql/binmv * /usr/bincd ../rm -fr /usr/local/mysql/binln -s /usr/bin /usr/local/mysql/bin
登录后复制

MySQL 配置文件目前不存在,所以我们需要自己创建它。该文件位于 /etc/ 中,并命名为 my.cnf 文件。使用你喜欢的文本编辑器,并添加以下几行

[mysqld]ndbcluster# IP address of the cluster management nodendb-connectstring=192.168.67.10,192.168.67.11[mysql_cluster]# IP address of the cluster management nodendb-connectstring=192.168.67.10,192.168.67.11
登录后复制

请注意,这两个管理节点的地址,使用逗号分隔。如果你只有一个管理节点,只需在列表中删除第二个。一旦 my.cnf 文件已保存,我们需要创建 MySQL 的数据文件夹

mkdir /var/lib/mysql-cluster
登录后复制
登录后复制

完成这些后,我们需要初始化集群并启动该服务。只有当你开始第一次的节点,或当在管理节点上的 /var/lib/mysql-cluster/config.ini 文件被更改时,需要做初始化

cd /var/lib/mysql-clusterndbd –-initial/etc/init.d/mysql.server start
登录后复制

接下来,通过运行相应的脚本安装 MySQL

/usr/local/mysql/bin/mysql_secure_installation
登录后复制

最后,我们需要 NDB 自动启动

echo "ndbd" > /etc/init.d/ndbdchmod 755 /etc/init.d/ndbd
登录后复制

好了,我们已经完成了第一个数据节点的配置,按照相同的方法和步骤去完成第二个数据节点的配置

4.验证与测试

如果一切正常,在管理节点终端中执行命令  ndb_mgm ,然后键入 show. 这个时候应该看到的数据库节点已填充的提示

root@MYSQL-MGM1:~# ndb_mgmndb_mgm> showCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=3    @192.168.67.12  (mysql-5.6.14 ndb-7.3.3, Nodegroup: 0, *)id=4    @192.168.67.13  (mysql-5.6.14 ndb-7.3.3, Nodegroup: 0) [ndb_mgmd(MGM)] 2 node(s)id=1    @192.168.67.10  (mysql-5.6.14 ndb-7.3.3)id=2    @192.168.67.11  (mysql-5.6.14 ndb-7.3.3) [mysqld(API)]   2 node(s)id=5    @192.168.67.12  (mysql-5.6.14 ndb-7.3.3)id=6    @192.168.67.13  (mysql-5.6.14 ndb-7.3.3)
登录后复制

如果你能够看到类似的输出,去尝试一些基本的SQL命令。登录到SQL数据库,并创建一个新的数据库,表,以验证数据同步。请注意,在创建数据库时,需使用 NDBCLUSTER 存储引擎。如果使用 InnoDB ,数据将不会在集群节点之间被复制。在使用 NDBCLUSTER 引擎时,会有一些问题,请参阅 MySQL 官方网站

http://dev.mysql.com/doc/refman/5.5/en/mysql-cluster-limitations-unsupported.html
http://dev.mysql.com/doc/refman/5.5/en/mysql-cluster-limitations-syntax.html

mysql -u root -pmysql> CREATE DATABASE mysqlclustertest;mysql> USE mysqlclustertest;mysql> CREATE TABLE testtable (i INT) ENGINE=NDBCLUSTER;mysql> INSERT INTO testtable () VALUES (1);
登录后复制
mysql> SELECT * FROM testtable;+------+| i    |+------+|    1 |+------+
登录后复制
1 row in set (0.01 sec)
登录后复制

连接到第二个数据库节点,我们看看,得到了相同的输出

mysql -u root -pmysql> USE mysqlclustertest;mysql> SELECT * FROM testtable;+------+| i    |+------+|    1 |+------+1 row in set (0.01 sec)
登录后复制

应该看到相同的输出。现在,如果你插入一个新条目表,它会被复制回的第一个节点

5. 负载均衡

在这篇文章的最后部分是为 MySQL 集群安装负载均衡服务器,负载均衡可以使用 mysql-proxy,很容易安装,当然你也可以使用其他服务

root@mysql-proxy:~# apt-get install mysql-proxyroot@mysql-proxy:~# mkdir /etc/mysql-proxyroot@mysql-proxy:~# cd /etc/mysql-proxyroot@mysql-proxy:/etc/mysql-proxy# nano mysql-proxy.conf
登录后复制

在 mysql-proxy.conf 文件中加入下面几行

[mysql-proxy]daemon = trueproxy-address = 192.168.67.14:3306proxy-skip-profiling = truekeepalive = trueevent-threads = 50pid-file = /var/run/mysql-proxy.pidlog-file = /var/log/mysql-proxy.loglog-level = debugproxy-backend-addresses = 192.168.67.12:3306,192.168.67.13:3306proxy-lua-script=/usr/lib/mysql-proxy/lua/proxy/balance.lua
登录后复制

对于自动启动的附加选项创建以下文件 /etc/default/mysql-proxy

ENABLED="true"OPTIONS="--defaults-file=/etc/mysql-proxy.conf --plugins=proxy"
登录后复制

然后,你可以通过调用以下命令启动 mysql-proxy

/etc/init.d/mysql-proxy start/stop/status
登录后复制

完成后,你应该能够连接到 MySQL 服务器使用代理地址。记得这个工作,你需要创建一个新的用户具有特定的子网连接到它。还需要在 my.cnf 文件为 MySQL 服务器添加捆绑地址

SQL用户不用复制,所以相同的用户有单独被添加到所有的数据库节点。在数据节点登录到 SQL shell,执行以下命令

CREATE USER 'newuser'@'192.168.67.%' IDENTIFIED BY 'password';FLUSH PRIVILEGES;SELECT * FROM mysql.user;
登录后复制

更改 newuser,IP和密码,根据你的配置需求。 %作为通配符,从而对整个子网的IP地址的行为,它允许远程连接到这个数据库节点。请记得在这个集群中的节点中添加相同的用户具有相同配置的其他所有数据库


撰写本文参考了这篇文章 MySQL NDB Cluster setup on Ubuntu 12.04 LTS, 做了一些改动。

如果有哪里有误,欢迎指正,这篇文章的英文版本在我的个人网站 www.mrxuri.com 上,链接是 http://www.mrxuri.com/index.php/2013/11/20/install-mysql-cluster-on-ubuntu-12-04-lts.html 欢迎大家访问。

bitsCN.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

win10电脑开机出现英文怎么解决 win10电脑开机出现英文怎么解决 Jul 11, 2023 pm 04:57 PM

  很多小伙伴在使用电脑时,总会遇到一些各种各样的问题,例如电脑开机后发现整个电脑都变成英文了,很多小伙伴不知道怎么设置回中文,下面小编就教大家win10电脑开机出现英文怎么解决。  1.脑开机后,点击左下角的“开始—设置”。如图所示:  2.进入Windows设置界面后,点击“时间和语言”。如图所示:  3.进入时间和语言界面后,点击“区域和语言”。如图所示:  4.进入区域和语言界面后,点击“管理语言设置”。如图所示:  5.进入管理界面后,点击“复制设置”。如图所示:  6.进入欢迎屏幕设

谷歌浏览器如何把中文改成英文模式? 谷歌浏览器如何把中文改成英文模式? Mar 13, 2024 pm 07:31 PM

  谷歌浏览器如何把中文改成英文?一些小伙伴想要将谷歌浏览器设置为英文,这样就能够在使用过程中不断的提高自己的英文了。那么设置为英文该如何操作呢?谷歌浏览器默认是中文的,下面小编给大家带来谷歌浏览器设置语言为英文的方法,一起来看看吧。  设置步骤  1、打开【谷歌浏览器】,如下图所示。  2、点击谷歌浏览器右上角界面【三点】菜单,如下图所示。  3、进入到菜单页面后,找到【设置】,如下图所示。  4、进入到设置页面后,点击【语言】选项,如下图所示。  5、在语言界面选择【添加语言】,如下图所示。

如何隐藏Win11系统下的英文键盘 如何隐藏Win11系统下的英文键盘 Jan 03, 2024 pm 09:45 PM

一些朋友不需要使用英文键盘,只需要使用中文键盘,这时候就会觉得英文键盘非常麻烦,想要隐藏它,不过我们无法隐藏它,但是可以直接删除英文输入法,下面就跟着小编一起来看一下吧。win11怎么隐藏英文键盘1、英文键盘是无法隐藏的,但是我们可以直接在输入法中将它删除。2、首先通过开始菜单进入“设置”3、然后在其中选择“Time&Language”4、接着进入其中的“语言&区域”,然后点击下方的“Addakeyboard”,就可以添加键盘快捷键了。5、接着点击我们想要的输入法,再点击左下角箭头将它移到

如何将Windows 10自带的输入法固定为英文 如何将Windows 10自带的输入法固定为英文 Jan 15, 2024 pm 01:48 PM

在电脑上办公的小伙伴很多都会使用英文输入法进行工作,这时候就需要锁定英文输入,那么该怎么锁定呢?下面就给你们带来了详细方法一起看看吧。win10自带的输入法怎么锁定英文:1、点击桌面右下角的输入法标识,然后点击“语言首选项”。2、之后再首选语言下面点击“添加首选的语言”。3、在对话框中输入英语,点击后安装语言。4、安装完成后点击“设置为默认语言”即可。

解决Win10电脑图标英文显示问题的方法 解决Win10电脑图标英文显示问题的方法 Dec 23, 2023 pm 09:59 PM

很多用户们在使用电脑的发现自己电脑屏幕上所有的图标都变成英文了,甚至菜单都变成英文了,我们只需要去修改一下系统默认语言就可以了,不行的话再改一下地区。win10显示我的电脑图标变成英文怎么办解决方法:1、从开始菜单打开设置,然后选择。2、然后在中,选择,点击下方的。3、如果以上操作未解决的话,我们可以从控制面板中更改。

windows10家庭版语言怎么设为英文 windows10家庭版语言怎么设为英文 Feb 14, 2024 pm 07:36 PM

在Windows操作系统中,我们可轻松启用各类语言以便于系统显示,从而进一步加强用户体验以及交流效率。打开系统设置界面,接着选择“输入法和键盘”选项,随后在此界面下点击添加选定的语言windows10家庭版语言怎么设为英文1、点击开始进入设置2、点击进入时间和语言3、选择“区域和语言”,然后点击“添加语言”4、选择English(unitedstates)

PHP 编程中月份转换为英文的实现方案分享 PHP 编程中月份转换为英文的实现方案分享 Mar 22, 2024 am 08:24 AM

月份在PHP编程中经常需要转换为英文,这在一些项目中尤其常见,比如生成月度报表、展示日历等。下面分享一种实现方案,通过具体的代码示例演示如何将月份转换为英文。在PHP中,可以通过将月份的数字和对应的英文名称建立一个映射关系来实现月份转换。首先,可以定义一个包含所有月份英文名称的数组,然后根据月份数字在数组中查找对应的英文名称。//定义包含月份英文名称的数组

PHP编程技巧:处理英文写入的问题 PHP编程技巧:处理英文写入的问题 Mar 06, 2024 pm 06:06 PM

PHP编程技巧:处理英文写入的问题PHP是一种功能强大的服务器端脚本语言,广泛应用于Web开发领域。在PHP编程过程中,经常会遇到处理英文写入的问题,特别是在处理文件IO操作或者数据库操作时。本文将探讨如何在PHP中处理英文写入的问题,并提供具体的代码示例。一、Unicode编码问题在处理英文写入的问题时,首先要了解Unicode编码。Unicode是一种字

See all articles