首頁 資料庫 mysql教程 MySQL優化之-叢集搭建程式碼步驟詳解(圖)

MySQL優化之-叢集搭建程式碼步驟詳解(圖)

Mar 10, 2017 am 10:54 AM

1 概述


MySQL Cluster 是MySQL 適合於分散式運算環境的高實用、可拓展、高效能、高冗餘版本,其研發設計的初衷就是要滿足許多產業裡最嚴酷的應用要求,這些應用中經常要求資料庫運作的可靠性要達到99.999%。 MySQL Cluster允許在無共享的系統中部署「記憶體中」資料庫集群,透過無共享體系結構,系統能夠使用廉價的硬件,而且對軟硬體沒有特殊要求。此外,由於每個元件有自己的記憶體和磁碟,所以不存在單點故障。

實際上,MySQL叢集是把一個叫做NDB的記憶體叢集儲存引擎整合與標準的MySQL伺服器整合。它包含一組計算機,每個都跑一個或多個進程,這可能包括一個MySQL伺服器,一個資料節點,一個管理伺服器和一個專有的一個資料存取程式。

MySQL Cluster能夠使用多種故障切換和負載平衡選項來配置NDB儲存引擎,但在Cluster 層級上的儲存引擎上做這個最簡單。以下為MySQL叢集結構關係圖,


 

MySQL從結構來看,由3類節點(電腦或流程)組成,分別是:

管理節點:用於提供整個叢集其他節點設定、管理、仲裁等功能。理論上透過一台伺服器提供服務就可以了。

資料節點:MySQL Cluster的核心,儲存資料、日誌,提供資料的各種管理服務。 2個以上 時就能實現叢集的高可用保證,DB節點增加時,叢集的處理速度會變慢。

SQL節點(API):用於存取MySQL Cluster數據,提供對外應用服務。增加 API 節點會提高整個叢集的並發存取速度和整體的吞吐量,該節點 可以部署在Web應用伺服器上,也可以部署在專用的伺服器上,也開以和DB部署在 同一台伺服器上。

2 NDB引擎


MySQL Cluster 使用了一個專用的基於記憶體的儲存引擎-NDB引擎,這樣做的好處是速度快, 沒有磁碟I/O的瓶頸,但由於是基於記憶體的,所以資料庫的規模受系統總記憶體的限制, 如果運行NDB的MySQL伺服器一定要記憶體夠大,例如4G, 8G, 甚至16G。 NDB引擎是分散式的,它可以配置在多台伺服器上來實現資料的可靠性和擴展性,理論上透過配置2台NDB的儲存節點就能實現整個資料庫叢集的冗餘性和解決單點故障問題。


2.1 缺陷


  • 基於內存,資料庫的規模受群集總記憶體的大小限制

    基於內存,斷電後資料可能會有資料遺失,這點還需要通過測試驗證。

    多個節點透過網路實現通訊和資料同步、查詢等操作,因此整體性受網路速度影響,

    因此速度也比較慢

    ## 

    #2.2 優點


    • 多個節點之間可以分佈在不同的地理位置,因此也是實現分散式資料庫的方案。

      擴充功能很好,增加節點即可實現資料庫叢集的擴充。

      冗餘性很好,多個節點上都有完整的資料庫數據,因此任何一個節點宕機都不會造成服務中斷。

      實現高可用性的成本比較低,不像傳統的高可用方案一樣需要共享的存儲設備和專用的軟體才能實現,NDB 只要有足夠的內存就能實現。

二、叢集建立

將建立一個最簡化的MySQL Cluster系統,設定方法中的所有指令都是以root帳號執行。這個MySQL Cluster包含一個管理結點、兩個資料結點、兩個SQL結點,這五個結點會分別安裝在五個虛擬機器上,虛擬機器的名稱和IP如下圖:

192.168.124.143

#管理結點

mysql-mgm

#192.168.124.141

資料結點 1

##mysql-ndbd-1

192.168.124.142

##資料結點#2

#mysql-ndbd-2

#SQL結點

1

mysql-sql-1

######192.168.124.144##########

SQL結點##2

mysql-sql-2

192.168.124.145

  

#請在三台虛擬機器上分別設定此處的設定項目。

1. 安裝虛擬機器

虛擬機作業系統安裝CentOS 6.4的x86_64版本,使用NAT網絡,並且還要安裝vmware-tools,具體安裝方法此處不詳述。

2. 拷貝mysql cluster

下載以下版本的MySQL-Cluster:下載得到的壓縮封包拷貝至虛擬機器的/root/Downloads目錄,然後在shell中執行下列指令:
http://www.php.cn/

##

cd /root/Downloads
tar -xvzf mysql-cluster-gpl-7.3.4-linux-glibc2.5-x86_64.tar.gz
mv mysql-cluster-gpl-7.3.4-linux-glibc2.5-x86_64 /usr/local/mysql
登入後複製

3. 關閉安全性原則關閉iptables防火牆(或開啟防火牆的1186、3306埠),在Shell中執行下列指令:

chkconfig --level 35 iptables off
登入後複製
關閉SELinux,在Shell中執行以下命令:

gedit /etc/selinux/config
登入後複製
將config檔中的SELINUX項目改為disabled,修改後的config檔的內容如下:

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
登入後複製

最後重啟系統

二、組態管理結點(192.168.124.141)

1. 設定config.ini設定檔
mkdir /var/lib/mysql-cluster
cd /var/lib/mysql-cluster
gedit config.ini
登入後複製

在shell中執行以下指令:

設定檔config.ini內容如下:

[ndbd default]
NoOfReplicas=2
DataMemory=80M
IndexMemory=18M
[ndb_mgmd]
NodeId=1
hostname=192.168.124.141
datadir=/var/lib/mysql-cluster
[ndbd]
NodeId=2
hostname=192.168.124.142
datadir=/usr/local/mysql/data
[ndbd]NodeId=3hostname=192.168.124.143datadir=/usr/local/mysql/data
[mysqld]NodeId=4hostname=192.168.124.144
[mysqld]
NodeId=5
hostname=192.168.124.145
登入後複製

2. 安裝管理結點#安裝管理節點,不需要mysqld二進位文件,只需要MySQL Cluster服務端程式(ndb_mgmd )和監聽客戶端程式(ndb_mgm)。在shell中執行以下命令:

cp /usr/local/mysql/bin/ndb_mgm* /usr/local/bin
cd /usr/local/bin
chmod +x ndb_mgm*
登入後複製

#三、設定資料結點(192.168.124.142、192.168.124.143)

1. 新增mysql群組和使用者在shell中執行以下指令:

groupadd mysql
useradd -g mysql mysql
登入後複製
登入後複製

#2. 配置 my.cnf設定檔在shell中執行以下命令:

gedit /etc/my.cnf
登入後複製
登入後複製
#設定檔my.cnf的內容如下:

[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/sock/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql_cluster]
ndb-connectstring=192.168.124.141
登入後複製

#3. 建立系統資料庫在shell中執行以下指令:

cd /usr/local/mysql
mkdir sock
scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
登入後複製
登入後複製

#4. 設定資料目錄在shell中執行以下指令:

chown -R root .
chown -R mysql.mysql /usr/local/mysql/data
chown -R mysql.mysql /usr/local/mysql/sock
chgrp -R mysql .
登入後複製
登入後複製

5. 配置MySQL服務

##在shell中執行以下指令:

cp support-files/mysql.server /etc/rc.d/init.d/
chmod +x /etc/rc.d/init.d/mysql.server
chkconfig --add mysql.server
登入後複製
登入後複製

## SQL結點(
192.168.124.144

、192.168.124.145)1. 新增mysql群組和使用者

####1. 新增mysql群組和使用者##### #####在shell中執行以下指令:###############
groupadd mysql
useradd -g mysql mysql
登入後複製
登入後複製
##################2. 配置my .cnf設定檔#########在shell中執行以下命令:################
gedit /etc/my.cnf
登入後複製
登入後複製
################################################# #設定檔my.cnf的內容如下:###############
[client]
socket=/usr/local/mysql/sock/mysql.sock
[mysqld]
ndbcluster
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/sock/mysql.sock
ndb-connectstring=192.168.124.141
[mysql_cluster]
ndb-connectstring=192.168.124.141
登入後複製
##################3. 建立系統資料庫# ########在shell中執行以下指令:###############
cd /usr/local/mysql
mkdir sock
scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
登入後複製
登入後複製
############

4. 设置数据目录

在shell中运行以下命令:

chown -R root .
chown -R mysql.mysql /usr/local/mysql/data
chown -R mysql.mysql /usr/local/mysql/sock
chgrp -R mysql .
登入後複製
登入後複製

5. 配置MySQL服务

在shell中运行以下命令:

cp support-files/mysql.server /etc/rc.d/init.d/
chmod +x /etc/rc.d/init.d/mysql.server
chkconfig --add mysql.server
登入後複製
登入後複製

五、Cluster环境启动

注意启动顺序:首先是管理节点,然后是数据节点,最后是SQL节点。

1. 启动管理结点

在shell中运行以下命令:

ndb_mgmd -f /var/lib/mysql-cluster/config.ini
登入後複製

还可以使用ndb_mgm来监听客户端,如下:

ndb_mgm
登入後複製

2. 启动数据结点

首次启动,则需要添加--initial参数,以便进行NDB节点的初始化工作。在以后的启动过程中,则是不能添加该参数的,否则ndbd程序会清除在之前建立的所有用于恢复的数据文件和日志文件。

/usr/local/mysql/bin/ndbd --initial
登入後複製

如果不是首次启动,则执行下面的命令。

/usr/local/mysql/bin/ndbd
登入後複製

3. 启动SQL结点

若MySQL服务没有运行,则在shell中运行以下命令:

/usr/local/mysql/bin/mysqld_safe --user=mysql &
登入後複製

4. 启动测试

查看管理节点,启动成功:

六、集群测试

1. 测试一

现在我们在其中一个SQL结点上进行相关数据库的创建,然后到另外一个SQL结点上看看数据是否同步。

在SQL结点1(192.168.124.144)上执行:

shell> /usr/local/mysql/bin/mysql -u root -p
mysql>show databases;
mysql>create database aa;
mysql>use aa;
mysql>CREATE TABLE ctest2 (i INT) ENGINE=NDB; //这里必须指定数据库表的引擎为NDB,否则同步失败
mysql> INSERT INTO ctest2 () VALUES (1);
mysql> SELECT * FROM ctest2;
登入後複製

然后在SQL结点2上看数据是否同步过来了

经过测试,在非master上创建数据,可以同步到master上

查看表的引擎是不是NDB,>show create table 表名;

2. 测试二

关闭一个数据节点 ,在另外一个节点写输入,开启关闭的节点,看数据是否同步过来。

首先把数据结点1重启,然后在结点2上添加数据

在SQL结点2(192.168.124.145)上操作如下:

mysql> create database bb;
mysql> use bb;
mysql> CREATE TABLE ctest3 (i INT) ENGINE=NDB;
mysql> use aa;
mysql> INSERT INTO ctest2 () VALUES (3333);
mysql> SELECT * FROM ctest2;
登入後複製

等数据结点1启动完毕,启动数据结点1的服务

#/usr/local/mysql/bin/ndbd --initial#service mysqld start
登入後複製


然后登录进去查看数据

# /usr/local/mysql/bin/mysql -u root –p
登入後複製


可以看到数据已经同步过来了,说明数据可以双向同步了。

七、关闭集群

1. 关闭管理节点和数据节点,只需要在管理节点(ClusterMgm--134)里执行:

shell> /usr/local/mysql/bin/ndb_mgm -e shutdown
登入後複製

显示

Connected to Management Server at: localhost:1186
2 NDB Cluster node(s) have shutdown.
Disconnecting to allow management server to shutdown.
登入後複製

2. 然后关闭Sql节点(135,136),分别在2个节点里运行:

shell> /etc/init.d/mysql.server stop
Shutting down MySQL... SUCCESS!
登入後複製

注意:要再次启动集群,就按照第五部分的启动步骤即可,不过这次启动数据节点的时候就不要加”-initial”参数了。


以上是MySQL優化之-叢集搭建程式碼步驟詳解(圖)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡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

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 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)

熱門話題

Java教學
1665
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
laravel入門實例 laravel入門實例 Apr 18, 2025 pm 12:45 PM

Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。

MySQL和PhpMyAdmin:核心功能和功能 MySQL和PhpMyAdmin:核心功能和功能 Apr 22, 2025 am 12:12 AM

MySQL和phpMyAdmin是強大的數據庫管理工具。 1)MySQL用於創建數據庫和表、執行DML和SQL查詢。 2)phpMyAdmin提供直觀界面進行數據庫管理、表結構管理、數據操作和用戶權限管理。

MySQL與其他編程語言:一種比較 MySQL與其他編程語言:一種比較 Apr 19, 2025 am 12:22 AM

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

解決數據庫連接問題:使用minii/db庫的實際案例 解決數據庫連接問題:使用minii/db庫的實際案例 Apr 18, 2025 am 07:09 AM

在開發一個小型應用時,我遇到了一個棘手的問題:需要快速集成一個輕量級的數據庫操作庫。嘗試了多個庫後,我發現它們要么功能過多,要么兼容性不佳。最終,我找到了minii/db,這是一個基於Yii2的簡化版本,完美地解決了我的問題。

laravel框架安裝方法 laravel框架安裝方法 Apr 18, 2025 pm 12:54 PM

文章摘要:本文提供了詳細分步說明,指導讀者如何輕鬆安裝 Laravel 框架。 Laravel 是一個功能強大的 PHP 框架,它 упростил 和加快了 web 應用程序的開發過程。本教程涵蓋了從系統要求到配置數據庫和設置路由等各個方面的安裝過程。通過遵循這些步驟,讀者可以快速高效地為他們的 Laravel 項目打下堅實的基礎。

解決MySQL模式問題:TheliaMySQLModesChecker模塊的使用體驗 解決MySQL模式問題:TheliaMySQLModesChecker模塊的使用體驗 Apr 18, 2025 am 08:42 AM

在使用Thelia開發電商網站時,我遇到了一個棘手的問題:MySQL模式設置不當,導致某些功能無法正常運行。經過一番探索,我找到了一個名為TheliaMySQLModesChecker的模塊,它能夠自動修復Thelia所需的MySQL模式,徹底解決了我的困擾。

MySQL:結構化數據和關係數據庫 MySQL:結構化數據和關係數據庫 Apr 18, 2025 am 12:22 AM

MySQL通過表結構和SQL查詢高效管理結構化數據,並通過外鍵實現表間關係。 1.創建表時定義數據格式和類型。 2.使用外鍵建立表間關係。 3.通過索引和查詢優化提高性能。 4.定期備份和監控數據庫確保數據安全和性能優化。

MySQL:解釋的關鍵功能和功能 MySQL:解釋的關鍵功能和功能 Apr 18, 2025 am 12:17 AM

MySQL是一個開源的關係型數據庫管理系統,廣泛應用於Web開發。它的關鍵特性包括:1.支持多種存儲引擎,如InnoDB和MyISAM,適用於不同場景;2.提供主從復制功能,利於負載均衡和數據備份;3.通過查詢優化和索引使用提高查詢效率。

See all articles