MySQL優化之——集群搭建步驟具體解釋
轉載請註明出處:http://blog.csdn.net/l1028386804/article/details/46833179
1 概述
MySQL Cluster 是MySQL 適合於分布式計算環境的高有用、可拓展、高性能、高冗余版本號。其研發設計的初衷就是要滿足很多行業裏的最嚴酷應用要求。這些應用中常常要求數據庫執行的可靠性要達到99.999%。
MySQL Cluster同意在無共享的系統中部署“內存中”數據庫集群,通過無共享體系結構。系統可以使用便宜的硬件,並且對軟硬件無特殊要求。此外。因為每一個組件有自己的內存和磁盤,不存在單點故障。
實際上,MySQL集群是把一個叫做NDB的內存集群存儲引擎集成與標準的MySQLserver集成。它包括一組計算機。每一個都跑一個或者多個進程,這可能包括一個MySQLserver,一個數據節點,一個管理server和一個專有的一個數據訪問程序。
MySQL Cluster可以使用多種故障切換和負載平衡選項配置NDB存儲引擎,但在Cluster 級別上的存儲引擎上做這個最簡單。
下面為MySQL集群結構關系圖,
MySQL從結構看。由3類節點(計算機或進程)組成,各自是:
管理節點:用於給整個集群其它節點提供配置、管理、仲裁等功能。理論上通過一臺server提供服務就能夠了。
數據節點:MySQL Cluster的核心。存儲數據、日誌,提供數據的各種管理服務。
2個以上 時就能實現集群的高可用保證。DB節點添加時。集群的處理速度會變慢。
SQL節點(API):用於訪問MySQL Cluster數據。提供對外應用服務。添加 API 節點會提高整個集群的並發訪問速度和總體的吞吐量,該節點 能夠部署在Web應用server上。也能夠部署在專用的server上,也開以和DB部署在 同一臺server上。
2 NDB引擎
MySQL Cluster 使用了一個專用的基於內存的存儲引擎——NDB引擎,這樣做的優點是速度快, 沒有磁盤I/O的瓶頸,可是因為是基於內存的。所以數據庫的規模受系統總內存的限制, 假設執行NDB的MySQLserver一定要內存夠大,比方4G, 8G, 甚至16G。NDB引擎是分布式的,它能夠配置在多臺server上來實現數據的可靠性和擴展性。理論上 通過配置2臺NDB的存儲節點就能實現整個數據庫集群的冗余性和解決單點故障問題。
2.1 缺陷
-
基於內存,數據庫的規模受集群總內存的限制大小
基於內存,斷電後數據可能會有數據丟失,這點還須要通過測試驗證。
多個節點通過網絡實現通訊和數據同步、查詢等操作。因此總體性受網絡速度影響。
因此速度也比較慢
2.2 長處
-
多個節點之間能夠分布在不同的地理位置,因此也是一個實現分布式數據庫的方案。
擴展性非常好。添加節點就可以實現數據庫集群的擴展。
冗余性非常好,多個節點上都有完整的數據庫數據,因此不論什麽一個節點宕機都不會造成服務中斷。
實現高可用性的成本比較低。不象傳統的高可用方案一樣須要共享的存儲設備和專用的軟件才幹實現。NDB 僅僅要有足夠的內存就能實現。
-
二、集群搭建
將搭建一個最簡化的MySQL Cluster系統,配置方法中的全部命令都是以root賬戶執行。
這個MySQL Cluster包括一個管理結點、兩個數據結點、兩個SQL結點,這五個結點會分別安裝在五個虛擬機上,虛擬機的名稱和IP例如以下所看到的:
管理結點 |
mysql-mgm |
192.168.124.141 |
數據結點 1 |
mysql-ndbd-1 |
192.168.124.142 |
數據結點 2 |
mysql-ndbd-2 |
192.168.124.143 |
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:
http://cdn.mysql.com/Downloads/MySQL-Cluster-7.3/mysql-cluster-gpl-7.3.4-linux-glibc2.5-x86_64.tar.gz
下載得到的壓縮包拷貝至虛擬機的/root/Downloads文件夾。然後在shell中執行下面命令:
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、3306port),在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配置文件
在shell中執行下面命令:
mkdir /var/lib/mysql-cluster cd /var/lib/mysql-cluster gedit config.ini |
配置文件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] [mysqld] [mysqld] NodeId=5 hostname=192.168.124.145 |
2. 安裝管理結點
安裝管理節點,不須要mysqld二進制文件,僅僅須要MySQL Cluster服務端程序(ndb_mgmd)和監聽client程序(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組和用戶
在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來監聽client,例如以下:
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優化之——集群搭建步驟具體解釋