?
MYSQL?CLUSTER 方案介紹
? 本文的大致框架來(lái)自 羅志威、黃川的報(bào)告, 在它的基礎(chǔ)上進(jìn)行簡(jiǎn)化和修改一些bug并且添加了主從復(fù)制的章節(jié),最后做出該文檔
MySQL?Cluster? 是 MySQL 適合于分布式計(jì)算環(huán)境的高實(shí)用、高冗余版本。它采用了 NDB?Cluster? 存儲(chǔ)引擎,允許在 1 個(gè)? Cluster? 中運(yùn)行多個(gè) MySQL 服務(wù)器?,F(xiàn)在 mysql?cluster? 被獨(dú)立出來(lái) ,? 作為一個(gè)專門的產(chǎn)品進(jìn)行運(yùn)營(yíng) ,?mysql-server-5.6+? 就不在存在對(duì) mysql?cluster 的支持,需要獨(dú)立下載 cluster 包進(jìn)行安裝 .?
推薦在 Linux 下完成安裝 ,? 如果一定要在 Windows 上的話 ,? 則需要考慮使用解壓版本的進(jìn)行安裝 ,? 且路徑中不能帶有空格字符 .
測(cè)試環(huán)境信息
服務(wù)器信息
|
項(xiàng) |
項(xiàng) 值 |
|
操作系統(tǒng) |
Ubuntu?14.04?32 位 |
|
Mysql?Cluster? 版本 |
mysql-cluster-gpl-7.3.5-debian6.0-i686 |
|
內(nèi)存 |
2G |
|
CPU |
2.20 雙核 |
|
網(wǎng)絡(luò)環(huán)境 |
100M 局域網(wǎng) |
|
部署 |
1 個(gè)數(shù)據(jù)節(jié)點(diǎn), 1?SQL 節(jié)點(diǎn), 1 管理節(jié)點(diǎn) |
?
管理節(jié)點(diǎn)信息
|
機(jī)器 IP |
數(shù)據(jù)節(jié)點(diǎn)編號(hào) |
|
192.168.1.37 |
1 |
?
|
機(jī)器 IP |
數(shù)據(jù)節(jié)點(diǎn)編號(hào) |
|
192.168.1.37 |
2 |
數(shù)據(jù)節(jié)點(diǎn)信息
?
SQL 節(jié)點(diǎn)信息
|
機(jī)器 IP |
數(shù)據(jù)節(jié)點(diǎn)編號(hào) |
|
192.168.1.37 |
3 |
?
機(jī)器安裝環(huán)境
|
機(jī)器 IP |
用戶名、密碼 |
安裝路徑 |
路徑說(shuō)明 |
|
192.168.1.37 |
root/root |
/root/mysql/mysqlc |
mysql?cluster? 目錄 |
|
/root/mysql/data/mysqld_data |
sql 節(jié)點(diǎn)數(shù)據(jù)路徑 |
||
|
/root/mysql/data/ndb_data |
數(shù)據(jù)節(jié)點(diǎn)數(shù)據(jù)路徑 |
||
|
/root/mysqldata/mgmd_data |
管理節(jié)點(diǎn)數(shù)據(jù) |
||
|
/root/mysql/conf |
配置文件路徑 |
節(jié)點(diǎn)說(shuō)明
SQL 節(jié)點(diǎn):
這是用來(lái)訪問(wèn)簇?cái)?shù)據(jù)的節(jié)點(diǎn)。對(duì)于 MySQL 簇,客戶端節(jié)點(diǎn)是使用 NDB 簇存儲(chǔ)引擎的傳統(tǒng) MySQL 服務(wù)器。典型情況下, SQL 節(jié)點(diǎn)是使用命令 mysqld?– -ndbcluster 啟動(dòng)的,或?qū)? ndbcluster 添加到 my.cnf 后使用 mysqld 啟動(dòng)。簇中所有的表結(jié)構(gòu)都保存在 mysql 節(jié)點(diǎn)中,為了保證每個(gè)數(shù)據(jù)節(jié)點(diǎn)中數(shù)據(jù)分布均勻,在進(jìn)行數(shù)據(jù)插入的時(shí)候 sql 節(jié)點(diǎn)采用了 表分片的策略將數(shù)據(jù)均勻分配到不同的數(shù)據(jù)節(jié)點(diǎn)上。
?
數(shù)據(jù)節(jié)點(diǎn):
這類節(jié)點(diǎn)用于保存簇的數(shù)據(jù)。數(shù)據(jù)節(jié)點(diǎn)的數(shù)目與副本的數(shù)目相關(guān),是片段的倍數(shù)。例如,對(duì)于兩個(gè)副本,每個(gè)副本有兩個(gè)片段,那么就有 1 個(gè)數(shù)據(jù)節(jié)點(diǎn)(在測(cè)試環(huán)境中就采用了兩個(gè)副本兩個(gè)片段的策略,故有 1 個(gè)數(shù)據(jù)節(jié)點(diǎn), ( ndb_mgmd?配置文件中 NoOfReplicas 屬性配置 ) 此時(shí)管理節(jié)點(diǎn)會(huì)將數(shù)據(jù)節(jié)點(diǎn)進(jìn)行分組,?數(shù)據(jù)節(jié)點(diǎn)是用命令 ndbd啟動(dòng)的。
各個(gè)數(shù)據(jù)節(jié)點(diǎn)中都用兩個(gè)檢查點(diǎn):本地檢查點(diǎn)、全局檢查點(diǎn)。本地檢查點(diǎn)的目的是為了將內(nèi)存中的數(shù)據(jù)和磁盤上的數(shù)據(jù)進(jìn)行同步。全局檢查點(diǎn)是在各節(jié)點(diǎn)中進(jìn)行通訊,以保證事物的一致性。
?
管理節(jié)點(diǎn):
管理節(jié)點(diǎn)是管理數(shù)據(jù)節(jié)點(diǎn)和 sql 節(jié)點(diǎn)的工具,在系統(tǒng)正常運(yùn)行期間停止管理節(jié)點(diǎn)對(duì)整個(gè)系統(tǒng)的運(yùn)行不會(huì)有任何影響。在管理節(jié)點(diǎn)提供了數(shù)據(jù)節(jié)點(diǎn)和 sql 節(jié)點(diǎn)的全局配置信息,包括數(shù)據(jù)、索引所占用內(nèi)存大小、數(shù)據(jù)存放的目錄信息、各個(gè)節(jié)點(diǎn) ip 信息等。通過(guò)管理節(jié)點(diǎn)可以啟動(dòng)和停止節(jié)點(diǎn)、啟動(dòng)和停止消息跟蹤(僅對(duì)調(diào)試版本)、顯示節(jié)點(diǎn)版本和狀態(tài)、啟動(dòng)和停止備份等的命令。
?
安裝配置說(shuō)明
?軟件下載說(shuō)明:
1、?軟件下載地址: http://www.mysql.com/downloads/cluster/
2、?安裝版本: mysql-cluster-gpl-7.3.5-debian6.0-i686
安裝步驟說(shuō)明:
一、?管理節(jié)點(diǎn)安裝
1、?登陸系統(tǒng)建立目錄結(jié)構(gòu)
?
mkdir?–p?/root/mysql/data/mgmd_data
mkdir?/root/mysql/data/ndb_data
mkdir?/root/mysql/data/mysqld_data
mkdir?/root/mysql/conf
mkdir?/root/mysql/mysqlc
?
?
2、?安裝 mysqlc
dpkg?–i?mysql-cluster-gpl-7.3.5-debian6.0-i686
mv?/opt/mysql/server-5.6/*?/root/mysql/mysqlc
?
3、?設(shè)置環(huán)境變量
在 .bashrc 文件的 PATH 后面加入如下信息 /root/mysql/mysqlc/bin
vim?~/.bashrc
加入后,文件如下所示
?
加入后執(zhí)行如下命令使配置生效:
.?~/.bashrc
4、?在 /root/mysql/conf 目錄下建立 mgmd.conf文件,然后在文件中配置各節(jié)點(diǎn)信息 , 如下所示:
[ndbd?default]
NoOfReplicas=1?#設(shè)置冗余的分?jǐn)?shù)(一個(gè)sql節(jié)點(diǎn)對(duì)應(yīng)幾個(gè)data節(jié)點(diǎn))
DataMemory=100M?#指定存放數(shù)據(jù)的內(nèi)存段大小
IndexMemory=50M#制定索引的內(nèi)存段大小
LockPagesInMainMemory=1?#將進(jìn)程鎖定在內(nèi)存中
TimeBetweenLocalCheckpoints=20#本地檢查點(diǎn)時(shí)間間隔。
TimeBetweenGlobalCheckpoints=1000#全局檢查點(diǎn)時(shí)間間隔。
TimeBetweenEpochs=100#復(fù)制同步的間隔時(shí)間
TimeBetweenWatchdogCheckInitial=60000?
MaxNoOfTables=1024?#該參數(shù)為作為整體的簇設(shè)置了最大表對(duì)象數(shù)目
MaxNoOfOrderedIndexes=2048?#設(shè)置哈希索引在系統(tǒng)中同一時(shí)間被使用總數(shù)
MaxNoOfUniqueHashIndexes=512?#設(shè)置最大的唯一索引的總數(shù)
MaxNoOfAttributes=20480?#定義了可在簇中定義的屬性數(shù)目
MaxNoOfTriggers=10240#設(shè)置簇中觸發(fā)程序?qū)ο蟮淖畲髷?shù)目
DiskCheckpointSpeedInRestart=100M?#重啟的時(shí)候本地檢查點(diǎn)期間發(fā)送到磁的速度?
NoOfFragmentLogFiles=16?#該參數(shù)用于設(shè)置節(jié)點(diǎn)的REDO日志文件的個(gè)數(shù)??
RedoBuffer=65M?#設(shè)置redo日志緩存
MaxNoOfConcurrentOperations=500000?#設(shè)置事務(wù)中同時(shí)更新的最大記錄數(shù)
MaxNoOfExecutionThreads=8#線程的數(shù)量?
BatchSizePerLocalScan=512?#該參數(shù)用于計(jì)算鎖定記錄的數(shù)目
SharedGlobalMemory=20M?#這個(gè)參數(shù)設(shè)置用于日志緩沖、磁盤操作和表空間...
DiskPageBufferMemory=80M?#設(shè)置硬盤上的緩存頁(yè)的空間總量的大小
#[tcp?default]
#portnumber=2202#通訊端口(現(xiàn)在無(wú)效)
[ndb_mgmd]
hostname=192.168.1.39#管理節(jié)點(diǎn)IP
datadir=/root/mysql/data/mgmd_data#管理節(jié)點(diǎn)數(shù)據(jù)目錄
Nodeid=1#管理節(jié)點(diǎn)編號(hào)
[ndbd]
hostname=192.168.1.39#數(shù)據(jù)節(jié)點(diǎn)IP
datadir=/root/mysql/data/ndb_data#數(shù)據(jù)節(jié)點(diǎn)數(shù)據(jù)目錄
NodeId=2#數(shù)據(jù)節(jié)點(diǎn)編號(hào)
[mysqld]
hostname=192.168.1.39#sql節(jié)點(diǎn)IP
NodeId=3#sql節(jié)點(diǎn)編號(hào)
?
5、?管理節(jié)點(diǎn)啟動(dòng)命令
第一次啟動(dòng):
ndb_mgmd?-f?/root/mysql/conf/mgmd.conf?--configdir=/root/mysql/conf/?--initial
非第一次啟動(dòng):
ndb_mgmd?-f?/root/mysql/conf/mgmd.conf?--configdir=/root/mysql/conf/
注意:?路徑不能使用相對(duì)地址,?需要使用絕對(duì)地址.
啟動(dòng)后可以輸入 ndb_mgm 命令進(jìn)入管理控制臺(tái),然后輸入 show 命令查看節(jié)點(diǎn)狀態(tài),如下圖所示:
?
二、?數(shù)據(jù)節(jié)點(diǎn)安裝
1、?管理節(jié)點(diǎn)啟動(dòng)命令
第一次啟動(dòng)命令:
ndbd?-c?192.168.1.39:1186?--initial?
非第一次啟動(dòng)命令:
ndbd?-c?192.168.1.39:1186?
???注意:如果在啟動(dòng)的時(shí)候加入 initial 參數(shù),那么會(huì)將用于備份和還原的日志信息都會(huì)清空,也就是說(shuō)會(huì)將數(shù)據(jù)庫(kù)中的數(shù)據(jù)刪除掉。在啟動(dòng)的時(shí)候一定要注意。
三、?SQL 節(jié)點(diǎn)安裝
?
1、?在 /root/mysql/conf 目錄下建立 mys qld.conf 文件,然后在文件中配置各節(jié)點(diǎn)信息 , 如下所示:
[mysqld]
ndbcluster
ndb-wait-setup=1?#等待data節(jié)點(diǎn)創(chuàng)建數(shù)據(jù)表時(shí)間限制
datadir=/root/mysql/data/mysqld_data
basedir=/root/mysql/mysqlc
socket=/tmp/mysql.sock?#Windows注釋掉
skip-name-resolve?#跳過(guò)域名解析
port=3306
#ndb-connectstring=192.168.1.39
[mysql_cluster]
ndb-connectstring=192.168.1.39?#指向管理節(jié)點(diǎn)
?
2、?第一次安裝 sql 節(jié)點(diǎn)后要執(zhí)行如下腳本,該腳本只執(zhí)行一次。
cd??/root/mysql/mysqlc
./scripts/mysql_install_db?--no-defaults?--datadir=/root/mysql/data/mysqld_data/?--basedir=.
?
3、?sql節(jié)點(diǎn)啟動(dòng)命令
mysqld?--defaults-file=/root/mysql/conf/mysqld.conf?--user=root
?
4、?權(quán)限配置
本地權(quán)限配置 :
mysqladmin??–uroot???–proot
非本機(jī)訪問(wèn)權(quán)限配置 :
GRANT?ALL?PRIVILEGES?ON?*.*?TO?'root'@'%'?IDENTIFIED?BY?'root'?WITH?GRANT?OPTION;
FLUSH?PRIVILEGES;
關(guān)閉mysql?cluster
數(shù)據(jù)節(jié)點(diǎn)?和?管理節(jié)點(diǎn)通過(guò)進(jìn)入?ndb_mgm?,?輸入shutdown?來(lái)關(guān)閉
sql節(jié)點(diǎn)通過(guò)?mysqladmin?-uroot?-p?shutdown?來(lái)關(guān)閉
方案測(cè)試
一、?測(cè)試工具
壓力測(cè)試工具使用的是 mysql 自帶的 mysqlslap 壓力測(cè)試工具。
mysqlslap:
mysql 自帶的一個(gè)壓力測(cè)試工具,自 5.1.4 版本之后的 MySQL?client? 包含了此工具,下載 mysql?client?rpm 包安裝后可直接使用。在?使用 mysqlslap 的時(shí)候,可以指定 sql 語(yǔ)句或者是包含 sql 語(yǔ)句的文件,如果是文件,那么文件中的每一行至少有一個(gè)語(yǔ)句(不能一個(gè) sql 語(yǔ)句分成?兩行或多行),因?yàn)槟J(rèn)的分隔符( delimiter )是換行符,當(dāng)然,你也可以手動(dòng)重置新的分隔符。另外,你也不能在文件中添加注?釋, mysqlslap 不支持。
Mysqlslap參數(shù)說(shuō)明 :
--concurrency 代表并發(fā)數(shù)量,多個(gè)可以用逗號(hào)隔開,當(dāng)然你也可以用自己的分隔符隔 開,這個(gè)時(shí)候要用到 --delimiter 開關(guān)。
--engines 代表要測(cè)試的引擎,可以有多個(gè),用分隔符隔開。
--iterations 代表要運(yùn)行這些測(cè)試多少次。
--auto-generate-sql? 代表用系統(tǒng)自己生成的 SQL 腳本來(lái)測(cè)試。
--auto-generate-sql-load-type? 代表要測(cè)試的是讀還是寫還是兩者混合的?
--number-of-queries? 代表總共要運(yùn)行多少次查詢。每個(gè)客戶運(yùn)行的查詢數(shù)量可以 用查詢總數(shù) / 并發(fā)數(shù)來(lái)計(jì)算。比如倒數(shù)第二個(gè)結(jié)果 2=200/100 。
--debug-info? 代表要額外輸出 CPU 以及內(nèi)存的相關(guān)信息。
--number-int-cols? 代表示例表中的 INTEGER 類型的屬性有幾個(gè)。
--number-char-cols? 意思同上。
--create-schema? 代表自己定義的模式(在 MySQL 中也就是庫(kù))。
--query? 代表自己的 SQL 腳本。
--only-print? 如果只想打印看看 SQL 語(yǔ)句是什么,可以用這個(gè)選項(xiàng)。
-h?sql 節(jié)點(diǎn) ip
-u? 用戶
-p( 小寫 )? 密碼
-P( 大寫 )? 端口
二、?壓力測(cè)試建表及存儲(chǔ)過(guò)程
1.?建庫(kù)、建表腳本:
CREATE?DATABASE?cluster1;
USE?cluster1;
CREATE?TABLE?ndbtest?(
id?int(11)?NOT?NULL?AUTO_INCREMENT,
regtime?DATETIME?DEFAULT?NULL,
name?VARCHAR(200)?DEFAULT?NULL,
PRIMARY?KEY?(`id`)
)?ENGINE=ndb?AUTO_INCREMENT=1000001?DEFAULT?CHARSET=latin1?PACK_KEYS=0;
?
2.?存儲(chǔ)過(guò)程腳本
DELIMITER?$$
DROP?PROCEDURE?IF?EXISTS?`p_test_t1_disk`?$$
CREATE?PROCEDURE?`p_test_t1_disk`()
BEGIN
declare?i?int?default?0;
test:?loop
insert?into?cluster1.ndbtest(regtime,name)?values(sysdate(),md5(rand()));
set?i=i+1;
if?i>=10000?then
leave?test;
end?if;
end?loop;
END?$$
DELIMITER?;
3.?工具運(yùn)行命令
mysqlslap?-uroot?-proot?--concurrency=1?--iterations=1?--query='call?cluster1.p_test_t1_disk;'?--number-of-queries=1?-h?192.168.1.37?--create-schema=cluster1
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
MYSQL?REPLICATION 方案介紹
Mysql?Replication ( MySQL 主從復(fù)制)是 MySQL 數(shù)據(jù)庫(kù)使用率非常高的一種技術(shù),它使用某個(gè)數(shù)據(jù)庫(kù)服務(wù)器為?主,然后在其他數(shù)據(jù)庫(kù)服務(wù)器上進(jìn)行復(fù)制,后面復(fù)制的數(shù)據(jù)庫(kù)也稱從數(shù)據(jù)庫(kù)。 MySQL 支持單向、異步復(fù)制,復(fù)制過(guò)程中一個(gè)服務(wù)器充當(dāng)主服務(wù)器,而一個(gè)或多個(gè)?其它服務(wù)器充當(dāng)從服務(wù)器。
在設(shè)置鏈?zhǔn)綇?fù)制服務(wù)器時(shí),從服務(wù)器本身也可以充當(dāng)主服務(wù)器,如:
a->b->c
,
b
對(duì)于
a
來(lái)說(shuō)是從服務(wù)器,但是它又?是
c
的主服務(wù)器。
Mysql?Replication
(
MySQL
主從復(fù)制)主要用于:
1. 使用一個(gè)從服務(wù)器執(zhí)行備份,而不會(huì)干擾主服務(wù)器。在備份過(guò)程中主服務(wù)器可以繼續(xù)處理更新;
2.
解決數(shù)據(jù)庫(kù)讀需求很高
(
讀寫分離
),?
通常使用
amoeba
或者
mysqlproxy
作為中間代理層
.
Mysql?Replication
(
MySQL
主從復(fù)制)的原理:
Mysql 的復(fù)制( replication )是一個(gè)異步的復(fù)制,從一個(gè) Mysql?instace (稱之為 Master )復(fù)制到另一個(gè) Mysql?instance (稱之 Slave )。實(shí)現(xiàn)整個(gè)復(fù)制操作主要由三個(gè)進(jìn)程完成的,其中兩個(gè)進(jìn)程在 Slave ( Sql 進(jìn)程和 IO 進(jìn)程),另外一個(gè)進(jìn)程在? Master ( IO 進(jìn)程)上。
要實(shí)施復(fù)制,首先必須打開
Master
端的
binary?log
(
bin-log
)功能,否則無(wú)法實(shí)現(xiàn)。因?yàn)檎麄€(gè)復(fù)制過(guò)程實(shí)際上就是
Slave
從
Master
端獲取該日志然后再在自己身上完全順序的執(zhí)行日志中所記錄的各種操作。
復(fù)制的基本過(guò)程如下:
1)
、
Slave
上面的
IO
進(jìn)程連接上
Master
,并請(qǐng)求從指定日志文件的指定位置(或者從最開始的日志)之后的日志內(nèi)容;
2)
、
Master
接收到來(lái)自
Slave
的
IO
進(jìn)程的請(qǐng)求后,通過(guò)負(fù)責(zé)復(fù)制的
IO
進(jìn)程根據(jù)請(qǐng)求信息讀取制定日志指定位置之后的日志信息,返回給
Slave?
的
IO
進(jìn)程。返回信息中除了日志所包含的信息之外,還包括本次返回的信息已經(jīng)到
Master
端的
bin-log
文件的名稱以及
bin-log
的位置;
3)
、
Slave
的
IO
進(jìn)程接收到信息后,將接收到的日志內(nèi)容依次添加到
Slave
端的
relay-log
文件的最末端,并將讀取到的
Master
端的?
bin-log
的文件名和位置記錄到
master-info
文件中,以便在下一次讀取的時(shí)候能夠清楚的高速
Master“
我需要從某個(gè)
bin-log
的哪個(gè)位置開始往后的日志內(nèi)容,請(qǐng)發(fā)給我
”
;
4)
、
Slave 的 Sql 進(jìn)程檢測(cè)到 relay-log 中新增加了內(nèi)容后,會(huì)馬上解析 relay-log 的內(nèi)容成為在 Master 端真實(shí)執(zhí)行時(shí)候的那些可執(zhí)行的內(nèi)容,并在自身執(zhí)行。
如果要實(shí)現(xiàn) Slave 和 Master 為同一個(gè) mysqld,? 需要添加 log-slave-updates?=?1
參數(shù)到 my.cnf- à[mysqld]
服務(wù)器結(jié)構(gòu):
A 、 B 、 C 三臺(tái)服務(wù)器;?其中 A 為新聞數(shù)據(jù)源, A 為 B 的 Master , B 為 A 的 Slave , 同時(shí)也是 C 的 Master ;
B 服務(wù)器從 A 復(fù)制部分?jǐn)?shù)據(jù), C 備份 A 的所有數(shù)據(jù);
注意 :
如果數(shù)據(jù)庫(kù)在做主從的時(shí)候已經(jīng)有數(shù)據(jù)了 ,? 則需要進(jìn)行鎖表操作 .
mysql>?flush?tables?with?read?lock;
記住數(shù)據(jù)導(dǎo)完后要解鎖:
mysql>?unloclk?tables;
?
Master?A 的配置
?
sudo?vi?/etc/mysql/my.cnf
?
刪除以下參數(shù)前的注釋并修改
server-id???????=?1?// 分配 server-id
log-bin?????????=?master-bin?// 默認(rèn) mysql-bin, 可以不修改
log-bin-index???=?master-bin.index??// 非必須
bind-adress?????=?0.0.0.0?// 默認(rèn) 127.0.0.1? 不修改可能導(dǎo)致無(wú)法訪問(wèn)
?
修改系統(tǒng)防火墻使 B 服務(wù)器可以訪問(wèn) 3306 端口,(詳查 ufw 命令)??
重啟 mysql :
sudo?/init.d/mysql?restart
?
通過(guò)語(yǔ)句:
GRANT?REPLICATION?SLAVE,REPLICATION?CLIENT?ON?*.*?TO?user@'ip?B'?IDENTIFIED?BY?'password';
?
給 B 服務(wù)器建立一個(gè)可以連接到 A 的帳號(hào)
進(jìn)入 mysql ,通過(guò):
show?master?status;
查看 A 的狀態(tài),記錄下 file 的位置和 postion 的參數(shù)
?
?
?
Slave?B 的配置
sudo?vi?/etc/mysql/my.cnf
?
server-id???????=?2
log-bin?????????=?slave-bin
bind-address????=?0.0.0.0
relay-log-index?=??slave-relay-bin.index?// 非必須
relay-log???????=?slave-relay-bin???// 非必須
?
添加參數(shù):
log-slave-updates?=?1???
// 通常情況,從服務(wù)器從主服務(wù)器接收到的更新不記入它的二進(jìn)制日志。
// 該選項(xiàng)告訴從服務(wù)器將其 SQL 線程執(zhí)行的更新記入到從服務(wù)器自己的二進(jìn)制日志。
?
replicate_wild_do_table?=?copy_db.copy_table?// 表示需要復(fù)制的庫(kù)中的表,可以善用 %
replicate_wild_ignore_table?=?ignore_db.ignore_table?// 不復(fù)制的表
?
至于為什么不使用 replicate_do_db 和 replicate_ignore_db 參數(shù),
是為了方式跨庫(kù)更新時(shí)出錯(cuò),如果能確保不會(huì)跨庫(kù)更新可考慮
?
重啟 mysql ,進(jìn)入本機(jī) mysql
?
執(zhí)行以下語(yǔ)句:
CHANGE?MASTER?TO?MASTER_HOST='server?A?ip',
MASTER_PORT=3306,
MASTER_USER='user',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=0;
?
//MASTER_LOG_FILE 和 MASTER_LOG_POS 對(duì)應(yīng) A 中的 file 位置和 postion 參數(shù),表示開始復(fù)制的 bin 文件和位置
?
start?slave;????// 啟動(dòng) Slave
show?slave?status ;?? // 查看 Slave_IO_State 參數(shù),如果是 Waiting?for?master?to?send?event, 則正常
// 正常狀態(tài)下 Slave_IO_Running 與 Slave_SQL_Running 均為 yes
?
// 如不能正常鏈接,根據(jù) Slave_IO_State , Slave_IO_Running , Slave_SQL_Running , Last_IO_Error
// 等參數(shù)查找失敗原因
?
通過(guò):
show?master?status;
命令記錄 file 位置和 postion 參數(shù);
?
給 C 服務(wù)器分配一個(gè)帳號(hào)用于同步;
方法參照 A ,防火墻設(shè)置參照 A ;
?
?
?
?
Slave?C 的配置
sudo?vi?/etc/mysql/my.cnf
server-id??=?3
relay-log-index?=??slave-relay-bin.index?// 非必須
relay-log???????=?slave-relay-bin???// 非必須
?
通過(guò) CHANGE?MASTER?TO 語(yǔ)句來(lái)修改 master 的參數(shù),參照 B 的配置;
通過(guò)
show?slave?status;
檢查 C 的狀態(tài),參照 B
?
?
?
?
?
讀寫分離配置 :
推薦使用 amoeba,?amoeba? 相比較 mysqlproxy,? 優(yōu)點(diǎn)在于中文文檔齊全 ( 國(guó)人編寫 ) ,穩(wěn)定性高,免除了 mysqlproxy 的 lua 配置的復(fù)雜性 .
Amoeba 讀寫分離:
http://docs.hexnova.com/amoeba/rw-splitting.html
高可用性
可以制作兩個(gè) master, 它們兩個(gè)為雙熱備主機(jī),然后通過(guò) keepalive 整合 master? 變?yōu)橐粋€(gè) VIP ,?最后? amoeba 和 slave 都是通過(guò)這個(gè) VIP? 來(lái)進(jìn)行操作, amoeba 把 insert 等操作發(fā)送到這個(gè) VIP ,? slave 通過(guò) VIP 獲得具體的 bin 日志,然后進(jìn)行更新
Keepalive 在使用的時(shí)候,通常只有一臺(tái) master 會(huì)進(jìn)行工作,另外一臺(tái)進(jìn)行主從復(fù)制,當(dāng) query 發(fā)送到 VIP 的時(shí)候,就會(huì)進(jìn)入工作的 master 運(yùn)行。當(dāng)工作 master 宕機(jī)后, keepaliave 會(huì)自動(dòng)切換 VIP 指向空閑 master 進(jìn)行工作,?這樣子就實(shí)現(xiàn)了高可用性。
所以在雙擊熱備的環(huán)境中?,總共會(huì)占用 3+ 個(gè) IP 地址。
?
負(fù)載均衡
負(fù)載均衡在 IP 層上,通常使用 LVS 軟件,在 HTTP 層面上可以使用 Nginx , lighttpd , apache?web?server? 等軟件。
現(xiàn)在為了實(shí)現(xiàn) MySql 的 master 的負(fù)載均衡,可以使用 LVS ,?在 IP 層面上進(jìn)行負(fù)載均衡,
也可以使用 MySql-Cluster(NDB) 產(chǎn)品,?它已經(jīng)實(shí)現(xiàn)了高可用性以及負(fù)載均衡 .
高可用性和負(fù)載均衡都可以直接通過(guò) NDB 來(lái)實(shí)現(xiàn) , 上面提及的是一般方法
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

