首頁 資料庫 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
登入後複製

修改文件权限

hown -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;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脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

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

  谷歌瀏覽器如何把中文改成英文?有些小夥伴想要將Google瀏覽器設定為英文,這樣就能夠在使用過程中不斷的提升自己的英文了。那麼設定為英文該如何操作呢?谷歌瀏覽器預設是中文的,下面小編帶給大家谷歌瀏覽器設定語言為英文的方法,一起來看看吧。  設定步驟  1、開啟【Google瀏覽器】,如下圖所示。  2、點選Google瀏覽器右上角介面【三點】選單,如下圖所示。  3、進入選單頁面後,找到【設定】,如下圖所示。  4、進入設定頁後,點選【語言】選項,如下圖所示。  5、在語言介面選擇【新增語言】,如下圖所示。

win10電腦開機出現英文怎麼解決 win10電腦開機出現英文怎麼解決 Jul 11, 2023 pm 04:57 PM

很多小夥伴在使用電腦時,總是會遇到一些各種各樣的問題,例如電腦開機後發現整個電腦都變成英文了,很多小伙伴不知道怎麼設置回中文,下面小編就教大家win10電腦開機出現英文怎麼解決。  1.腦開機後,點選左下角的「開始—設定」。如圖所示:  2.進入Windows設定介面後,點選「時間和語言」。如圖所示:  3.進入時間和語言介面後,點選「區域和語言」。如圖所示:  4.進入區域和語言介面後,點選「管理語言設定」。如圖所示:  5.進入管理介面後,點選「複製設定」。如圖:  6.進入歡迎畫面設

如何隱藏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.安裝完成後點選「設定為預設語言」即可。

windows10家用版語言怎麼設為英文 windows10家用版語言怎麼設為英文 Feb 14, 2024 pm 07:36 PM

在Windows作業系統中,我們可輕鬆啟用各類語言以便於系統顯示,進而進一步加強使用者體驗以及溝通效率。開啟系統設定介面,接著選擇「輸入法和鍵盤」選項,接著在此介面下點選新增選取的語言windows10家庭版語言怎麼設為英文1、點選開始進入設定2、點選進入時間和語言3、選擇“區域和語言”,然後點擊“新增語言”4、選擇English(unitedstates)

解決Win10電腦圖示英文顯示問題的方法 解決Win10電腦圖示英文顯示問題的方法 Dec 23, 2023 pm 09:59 PM

許多使用者在使用電腦的發現自己電腦螢幕上所有的圖示都變成英文了,甚至選單都變成英文了,我們只需要去修改一下系統預設語言就可以了,不行的話再改一下地區。 win10顯示我的電腦圖示變成英文怎麼辦解決方法:1、從開始功能表開啟設置,然後選擇。 2、然後在中,選擇,點選下方的。 3.如果以上操作未解決的話,我們可以從控制面板中更改。

PHP程式設計技巧:處理英文寫入的問題 PHP程式設計技巧:處理英文寫入的問題 Mar 06, 2024 pm 06:06 PM

PHP程式設計技巧:處理英文寫入的問題PHP是一種功能強大的伺服器端腳本語言,廣泛應用於Web開發領域。在PHP程式設計過程中,常會遇到處理英文寫入的問題,特別是在處理檔案IO操作或資料庫操作時。本文將探討如何在PHP中處理英文寫入的問題,並提供具體的程式碼範例。一、Unicode編碼問題在處理英文寫入的問題時,首先要了解Unicode編碼。 Unicode是一種字

PHP 程式設計中月份轉換為英文的實現方案分享 PHP 程式設計中月份轉換為英文的實現方案分享 Mar 22, 2024 am 08:24 AM

月在PHP編程中經常需要轉換為英文,這在一些項目中尤其常見,例如產生月度報表、展示日曆等。以下分享一個實現方案,透過具體的程式碼範例示範如何將月份轉換為英文。在PHP中,可以透過將月份的數字和對應的英文名稱建立一個映射關係來實現月份轉換。首先,可以定義一個包含所有月份英文名稱的數組,然後根據月份數字在數組中尋找對應的英文名稱。 //定義包含月份英文名稱的陣列

See all articles