說明
集群
MySQL集群的設(shè)計(jì)實(shí)現(xiàn)了毫秒級響應(yīng)性能损搬,每秒支持?jǐn)?shù)百萬次操作郭宝。MySQL集群還支持內(nèi)存和磁盤數(shù)據(jù)存儲专肪,自動數(shù)據(jù)分區(qū)(分片),帶有負(fù)載均衡功能趁尼,使線性數(shù)據(jù)庫可以有效地擴(kuò)展
相關(guān)詞解釋
ndbd:數(shù)據(jù)庫存儲節(jié)點(diǎn)埃碱,內(nèi)存需要偏大
mysqld:mysql服務(wù)器負(fù)載均衡節(jié)點(diǎn)猖辫,程序直接訪問的服務(wù)器
ndbd_mgm ndbd_mgmd:管理節(jié)點(diǎn)酥泞,管理數(shù)據(jù)庫節(jié)點(diǎn)狀態(tài)等,管理服務(wù)器一旦停止啃憎,所有節(jié)點(diǎn)全部停止工作
負(fù)載均衡
實(shí)現(xiàn)集群訪問節(jié)點(diǎn)的均衡訪問壓力芝囤。
主從復(fù)制
對數(shù)據(jù)進(jìn)行遠(yuǎn)程復(fù)制到從服務(wù)器,實(shí)現(xiàn)容災(zāi)辛萍、負(fù)載均衡功能悯姊,并可自行配置能讀寫分離功能。
相互之間的關(guān)系
集群和主從復(fù)制:集群的復(fù)制是相互的贩毕,在MySQL集群中悯许,所有的數(shù)據(jù)總是保持同步。在任何數(shù)據(jù)節(jié)點(diǎn)上提交的事務(wù)都同步到所有其他的數(shù)據(jù)節(jié)點(diǎn)上了辉阶,如果有一個數(shù)據(jù)節(jié)點(diǎn)失敗了先壕,其他正常的數(shù)據(jù)節(jié)點(diǎn)照樣能保持?jǐn)?shù)據(jù)的一致性,但主從復(fù)制是單向的谆甜,從節(jié)點(diǎn)不接受(CUD)
集群和負(fù)載均衡:集群的從機(jī)是作為standby垃僚,不參與訪問(從屬主節(jié)點(diǎn)失效才參與),負(fù)載均衡是分擔(dān)客戶所有的訪問(4種負(fù)載算法)
負(fù)載均衡和主從復(fù)制:進(jìn)行主從復(fù)制的環(huán)境规辱,可以對讀寫進(jìn)行分離谆棺,形成自己的負(fù)載均衡。
Mysql集群安裝
1罕袋、刪除虛擬機(jī)131和132中之前安裝的mysql主主環(huán)境
停止mysql服務(wù)改淑,刪除mysql安裝目錄
刪除mysql配置文件
到根目錄查詢所有mysql相關(guān)文件
批量刪除這些文件
2碍岔、管理節(jié)點(diǎn)安裝(133)
首先在/usr/local/目錄下面解壓mysql集群包
其次安裝以下步驟進(jìn)行安裝
groupadd mysql
useradd mysql -g mysql
mv/usr/local/mysql-cluster-gpl-7.3.2-linux-glibc2.5-x86_64/usr/local/mysql
cd ?/usr/local
chown -R mysql:mysql mysql
cd mysql
./scripts/mysql_install_db --user=mysql
3、數(shù)據(jù)節(jié)點(diǎn)安裝(132和131)
數(shù)據(jù)節(jié)點(diǎn)的安裝和上面的管理節(jié)點(diǎn)安裝一樣溅固,只是多了以下幾步
#cp support-files/mysql.server /etc/init.d/mysqld
yum list|grep ncurses
yum -y install ncurses-devel
yum install ncurses-devel
4付秕、mysql管理節(jié)點(diǎn)(133)配置
1、現(xiàn)在開始為這臺管理節(jié)點(diǎn)服務(wù)器建立日志文件:# mkdir /var/lib/mysql-cluster# cd /var/lib/mysql-cluster
2侍郭、管理節(jié)點(diǎn)服務(wù)器建立配置文件:# vi config.ini
配置文件詳細(xì):http://laowafang.blog.51cto.com/251518/659121
在config.ini中添加如下內(nèi)容:
#定義默認(rèn)參數(shù)
[ndbd default]
#設(shè)置集群中每個表保存的副本數(shù)
NoOfReplicas=2
#并發(fā)(根據(jù)自己服務(wù)器配置硬件性能進(jìn)行配置)
MaxNoOfConcurrentOperations= 100
#設(shè)置用于保存數(shù)據(jù)的內(nèi)存大小(根據(jù)自己服務(wù)器配置硬件性能進(jìn)行配置)
DataMemory=120MB
#設(shè)置用于保存哈希索引的內(nèi)存大小(根據(jù)自己服務(wù)器配置硬件性能進(jìn)行配置)
IndexMemory=80MB
#數(shù)據(jù)節(jié)點(diǎn)目錄
datadir=/usr/local/mysql/data/
TimeBetweenWatchDogCheck=30000MaxNoOfOrderedIndexes=1024
#設(shè)定管理節(jié)點(diǎn)相關(guān)參數(shù)
[ndb_mgmd]
#指定管理節(jié)點(diǎn)的數(shù)據(jù)(日志)文件主目錄
datadir=/var/lib/mysql-cluster
LogDestination=FILE:filename=/var/log/mgmd.log
#指定ID號
id =13
#指定管理節(jié)點(diǎn)主機(jī)
hostname=192.168.109.133
#設(shè)定數(shù)據(jù)節(jié)點(diǎn)相關(guān)參數(shù)
[ndbd]
id =14
hostname=192.168.109.132
[ndbd]
id = 15
hostname=192.168.109.131
#表示允許有2臺MySQL服務(wù)器從任何IP訪問數(shù)據(jù)庫結(jié)點(diǎn)询吴,但為了能夠更快的更換集群中的服務(wù)器,推薦留空亮元,否則更換服務(wù)器后必須對這個配置進(jìn)行更改
[mysqld]
[mysqld]
啟動管理節(jié)點(diǎn):./ndb_mgmd -f /var/lib/mysql-cluster/config.ini--reload重新加載管理節(jié)點(diǎn)(當(dāng)config.ini文件修改了以后)
管理節(jié)點(diǎn)日志:/var/lib/mysql-cluster
如下圖所示猛计,可以看到管理節(jié)點(diǎn)133已經(jīng)成功啟動,在等待數(shù)據(jù)節(jié)點(diǎn)和數(shù)據(jù)庫實(shí)例131和132連接進(jìn)來爆捞。
5奉瘤、mysql數(shù)據(jù)節(jié)點(diǎn)(132和131)配置
?vi /etc/my.cnf
[mysqld]
default-storage-engine=NDBCLUSTER
datadir=/usr/local/mysql/data
basedir=/usr/local/mysql
port=3306
ndbcluster
ndb-connectstring=192.168.109.133
socket=/tmp/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-bin=mysql-bin
server-id=14
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql_cluster]
ndb-connectstring=192.168.109.133
機(jī)器上啟動MySQL存儲節(jié)點(diǎn)(131和132都要執(zhí)行):/usr/local/mysql/bin/ndbd
在機(jī)器上啟動數(shù)據(jù)庫負(fù)載均衡節(jié)點(diǎn)(131和132一起執(zhí)行):/etc/rc.d/init.d/mysqld start
數(shù)據(jù)節(jié)點(diǎn)啟動成功后,可以在管理節(jié)點(diǎn)上執(zhí)行查看是否啟動成功:
在131和132上修改登錄密碼后進(jìn)行登錄即可
授權(quán)登錄
客戶端連接
如下圖所示煮甥,可以看到客戶端已經(jīng)正確連接進(jìn)去了盗温。
Mysql集群環(huán)境創(chuàng)建數(shù)據(jù)庫和表,測試環(huán)境的正常
? ? 1成肘、數(shù)據(jù)庫創(chuàng)建
? ????直接在131上創(chuàng)建數(shù)據(jù)庫wangjing ? 卖局,那么132中會立即同步
????2、創(chuàng)建表
? ??在131上中創(chuàng)建了用戶表sys_user双霍,且寫入了數(shù)據(jù)砚偶,可以看到132中已經(jīng)立即同步了。
注意
注意:/etc/rc.d/init.d/mysqld start啟動成功后洒闸,沒有連接上管理節(jié)點(diǎn)染坯,且存儲節(jié)點(diǎn)時不時斷掉,是因?yàn)楣芾砉?jié)點(diǎn)中/var/lib/mysql-cluster/config.ini配置文件內(nèi)存和數(shù)據(jù)的配置太大了丘逸,超過了了本身機(jī)身的內(nèi)存)单鹿。
Mysql數(shù)據(jù)庫引擎
????????集群模式之前我們都是用戶INNODB引擎進(jìn)行操作的,集群環(huán)境下是用的NDBCLUSTER方式操作的深纲。
以下幾種為常見的數(shù)據(jù)庫引擎
????????MyISAM該引擎基于ISAM數(shù)據(jù)庫引擎仲锄,除了提供ISAM里所沒有的索引和字段管理等大量功能,MyISAM還使用一種表格鎖定的機(jī)制來優(yōu)化多個并發(fā)的讀寫操作囤萤,但是需要經(jīng)常運(yùn)行OPTIMIZE TABLE命令昼窗,來恢復(fù)被更新機(jī)制所浪費(fèi)的空間,否則碎片也會隨之增加涛舍,最終影響數(shù)據(jù)訪問性能澄惊。MyISAM還有一些有用的擴(kuò)展,例如用來修復(fù)數(shù)據(jù)庫文件的MyISAMChk工具和用來恢復(fù)浪費(fèi)空間的MyISAMPack工具。MyISAM強(qiáng)調(diào)了快速讀取操作掸驱,主要用于高負(fù)載的select肛搬,這可能也是MySQL深受Web開發(fā)的主要原因:在Web開發(fā)中進(jìn)行的大量數(shù)據(jù)操作都是讀取操作,所以大多數(shù)虛擬主機(jī)提供商和Internet平臺提供商(Internet Presence Provider毕贼,IPP)只允許使用MyISAM格式靴迫。MyISAM類型的表支持三種不同的存儲結(jié)構(gòu):靜態(tài)型夏志、動態(tài)型俭驮、壓縮型翘悉。
? ??? ??InnoDB該存儲引擎為MySQL表提供了ACID事務(wù)支持、系統(tǒng)崩潰修復(fù)能力和多版本并發(fā)控制(即MVCC Multi-Version Concurrency Control)的行級鎖;該引擎支持自增長列(auto_increment),自增長列的值不能為空待秃,如果在使用的時候?yàn)榭談t自動從現(xiàn)有值開始增值拜秧,如果有但是比現(xiàn)在的還大,則直接保存這個值;該引擎存儲引擎支持外鍵(foreign key),外鍵所在的表稱為子表而所依賴的表稱為父表章郁。該引擎在5.5后的MySQL數(shù)據(jù)庫中為默認(rèn)存儲引擎枉氮。
Cluster/NDB該存儲引擎用于多臺數(shù)據(jù)機(jī)器聯(lián)合提供服務(wù)以提高整體性能和安全性。適合數(shù)據(jù)量大暖庄、安全和性能要求高的場景聊替。