欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

MySql 集群配置

系統 2164 0

?

MYSQL?CLUSTER 方案介紹

?                                 本文的大致框架來自 羅志威、黃川的報告, 在它的基礎上進行簡化和修改一些bug并且添加了主從復制的章節,最后做出該文檔

MySQL?Cluster? MySQL 適合于分布式計算環境的高實用、高冗余版本。它采用了 NDB?Cluster? 存儲引擎,允許在 1 個? Cluster? 中運行多個 MySQL 服務器。現在 mysql?cluster? 被獨立出來 ,? 作為一個專門的產品進行運營 ,?mysql-server-5.6+? 就不在存在對 mysql?cluster 的支持,需要獨立下載 cluster 包進行安裝 .?

推薦在 Linux 下完成安裝 ,? 如果一定要在 Windows 上的話 ,? 則需要考慮使用解壓版本的進行安裝 ,? 且路徑中不能帶有空格字符 .

測試環境信息

服務器信息

項 值

操作系統

Ubuntu?14.04?32

Mysql?Cluster? 版本

mysql-cluster-gpl-7.3.5-debian6.0-i686

內存

2G

CPU

2.20 雙核

網絡環境

100M 局域網

部署

1 個數據節點, 1?SQL 節點, 1 管理節點

?

管理節點信息

機器 IP

數據節點編號

192.168.1.37

1

?

機器 IP

數據節點編號

192.168.1.37

2

數據節點信息

?

SQL 節點信息

機器 IP

數據節點編號

192.168.1.37

3

?

機器安裝環境

機器 IP

用戶名、密碼

安裝路徑

路徑說明

192.168.1.37

root/root

/root/mysql/mysqlc

mysql?cluster? 目錄

/root/mysql/data/mysqld_data

sql 節點數據路徑

/root/mysql/data/ndb_data

數據節點數據路徑

/root/mysqldata/mgmd_data

管理節點數據

/root/mysql/conf

配置文件路徑

節點說明

SQL 節點:

這是用來訪問簇數據的節點。對于 MySQL 簇,客戶端節點是使用 NDB 簇存儲引擎的傳統 MySQL 服務器。典型情況下, SQL 節點是使用命令 mysqld?– -ndbcluster 啟動的,或將 ndbcluster 添加到 my.cnf 后使用 mysqld 啟動。簇中所有的表結構都保存在 mysql 節點中,為了保證每個數據節點中數據分布均勻,在進行數據插入的時候 sql 節點采用了 表分片的策略將數據均勻分配到不同的數據節點上。

?

數據節點:

這類節點用于保存簇的數據。數據節點的數目與副本的數目相關,是片段的倍數。例如,對于兩個副本,每個副本有兩個片段,那么就有 1 個數據節點(在測試環境中就采用了兩個副本兩個片段的策略,故有 1 個數據節點, ( ndb_mgmd?配置文件中 NoOfReplicas 屬性配置 ) 此時管理節點會將數據節點進行分組,?數據節點是用命令 ndbd啟動的。

各個數據節點中都用兩個檢查點:本地檢查點、全局檢查點。本地檢查點的目的是為了將內存中的數據和磁盤上的數據進行同步。全局檢查點是在各節點中進行通訊,以保證事物的一致性。

?

管理節點:

管理節點是管理數據節點和 sql 節點的工具,在系統正常運行期間停止管理節點對整個系統的運行不會有任何影響。在管理節點提供了數據節點和 sql 節點的全局配置信息,包括數據、索引所占用內存大小、數據存放的目錄信息、各個節點 ip 信息等。通過管理節點可以啟動和停止節點、啟動和停止消息跟蹤(僅對調試版本)、顯示節點版本和狀態、啟動和停止備份等的命令。

?

安裝配置說明

?軟件下載說明:

1、?軟件下載地址: http://www.mysql.com/downloads/cluster/

2、?安裝版本: mysql-cluster-gpl-7.3.5-debian6.0-i686

安裝步驟說明:

一、?管理節點安裝

1、?登陸系統建立目錄結構

?

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、?設置環境變量

.bashrc 文件的 PATH 后面加入如下信息 /root/mysql/mysqlc/bin

vim?~/.bashrc

加入后,文件如下所示

?

加入后執行如下命令使配置生效:

.?~/.bashrc

4、?在 /root/mysql/conf 目錄下建立 mgmd.conf文件,然后在文件中配置各節點信息 , 如下所示:

[ndbd?default]

NoOfReplicas=1?#設置冗余的分數(一個sql節點對應幾個data節點)

DataMemory=100M?#指定存放數據的內存段大小

IndexMemory=50M#制定索引的內存段大小

LockPagesInMainMemory=1?#將進程鎖定在內存中

TimeBetweenLocalCheckpoints=20#本地檢查點時間間隔。

TimeBetweenGlobalCheckpoints=1000#全局檢查點時間間隔。

TimeBetweenEpochs=100#復制同步的間隔時間

TimeBetweenWatchdogCheckInitial=60000?

MaxNoOfTables=1024?#該參數為作為整體的簇設置了最大表對象數目

MaxNoOfOrderedIndexes=2048?#設置哈希索引在系統中同一時間被使用總數

MaxNoOfUniqueHashIndexes=512?#設置最大的唯一索引的總數

MaxNoOfAttributes=20480?#定義了可在簇中定義的屬性數目

MaxNoOfTriggers=10240#設置簇中觸發程序對象的最大數目

DiskCheckpointSpeedInRestart=100M?#重啟的時候本地檢查點期間發送到磁的速度?

NoOfFragmentLogFiles=16?#該參數用于設置節點的REDO日志文件的個數??

RedoBuffer=65M?#設置redo日志緩存

MaxNoOfConcurrentOperations=500000?#設置事務中同時更新的最大記錄數

MaxNoOfExecutionThreads=8#線程的數量?

BatchSizePerLocalScan=512?#該參數用于計算鎖定記錄的數目

SharedGlobalMemory=20M?#這個參數設置用于日志緩沖、磁盤操作和表空間...

DiskPageBufferMemory=80M?#設置硬盤上的緩存頁的空間總量的大小

#[tcp?default]

#portnumber=2202#通訊端口(現在無效)

[ndb_mgmd]

hostname=192.168.1.39#管理節點IP

datadir=/root/mysql/data/mgmd_data#管理節點數據目錄

Nodeid=1#管理節點編號

[ndbd]

hostname=192.168.1.39#數據節點IP

datadir=/root/mysql/data/ndb_data#數據節點數據目錄

NodeId=2#數據節點編號

[mysqld]

hostname=192.168.1.39#sql節點IP

NodeId=3#sql節點編號

?

5、?管理節點啟動命令

第一次啟動:

ndb_mgmd?-f?/root/mysql/conf/mgmd.conf?--configdir=/root/mysql/conf/?--initial

非第一次啟動:

ndb_mgmd?-f?/root/mysql/conf/mgmd.conf?--configdir=/root/mysql/conf/

注意:?路徑不能使用相對地址,?需要使用絕對地址.

啟動后可以輸入 ndb_mgm 命令進入管理控制臺,然后輸入 show 命令查看節點狀態,如下圖所示:

?

二、?數據節點安裝

1、?管理節點啟動命令

第一次啟動命令:

ndbd?-c?192.168.1.39:1186?--initial?

非第一次啟動命令:

ndbd?-c?192.168.1.39:1186?

???注意:如果在啟動的時候加入 initial 參數,那么會將用于備份和還原的日志信息都會清空,也就是說會將數據庫中的數據刪除掉。在啟動的時候一定要注意。

三、?SQL 節點安裝

?

1、?在 /root/mysql/conf 目錄下建立 mys qld.conf 文件,然后在文件中配置各節點信息 , 如下所示:

[mysqld]

ndbcluster

ndb-wait-setup=1?#等待data節點創建數據表時間限制

datadir=/root/mysql/data/mysqld_data

basedir=/root/mysql/mysqlc

socket=/tmp/mysql.sock?#Windows注釋掉

skip-name-resolve?#跳過域名解析

port=3306

#ndb-connectstring=192.168.1.39

[mysql_cluster]

ndb-connectstring=192.168.1.39?#指向管理節點

?

2、?第一次安裝 sql 節點后要執行如下腳本,該腳本只執行一次。

cd??/root/mysql/mysqlc

./scripts/mysql_install_db?--no-defaults?--datadir=/root/mysql/data/mysqld_data/?--basedir=.

?

3、?sql節點啟動命令

mysqld?--defaults-file=/root/mysql/conf/mysqld.conf?--user=root

?

4、?權限配置

本地權限配置 :

mysqladmin??–uroot???–proot

非本機訪問權限配置 :

GRANT?ALL?PRIVILEGES?ON?*.*?TO?'root'@'%'?IDENTIFIED?BY?'root'?WITH?GRANT?OPTION;

FLUSH?PRIVILEGES;

關閉mysql?cluster

數據節點?和?管理節點通過進入?ndb_mgm?,?輸入shutdown?來關閉

sql節點通過?mysqladmin?-uroot?-p?shutdown?來關閉

方案測試

一、?測試工具

壓力測試工具使用的是 mysql 自帶的 mysqlslap 壓力測試工具。

mysqlslap:

mysql 自帶的一個壓力測試工具,自 5.1.4 版本之后的 MySQL?client? 包含了此工具,下載 mysql?client?rpm 包安裝后可直接使用。在?使用 mysqlslap 的時候,可以指定 sql 語句或者是包含 sql 語句的文件,如果是文件,那么文件中的每一行至少有一個語句(不能一個 sql 語句分成?兩行或多行),因為默認的分隔符( delimiter )是換行符,當然,你也可以手動重置新的分隔符。另外,你也不能在文件中添加注?釋, mysqlslap 不支持。

Mysqlslap參數說明 :

--concurrency 代表并發數量,多個可以用逗號隔開,當然你也可以用自己的分隔符隔 開,這個時候要用到 --delimiter 開關。

--engines 代表要測試的引擎,可以有多個,用分隔符隔開。

--iterations 代表要運行這些測試多少次。

--auto-generate-sql? 代表用系統自己生成的 SQL 腳本來測試。

--auto-generate-sql-load-type? 代表要測試的是讀還是寫還是兩者混合的?

--number-of-queries? 代表總共要運行多少次查詢。每個客戶運行的查詢數量可以 用查詢總數 / 并發數來計算。比如倒數第二個結果 2=200/100

--debug-info? 代表要額外輸出 CPU 以及內存的相關信息。

--number-int-cols? 代表示例表中的 INTEGER 類型的屬性有幾個。

--number-char-cols? 意思同上。

--create-schema? 代表自己定義的模式(在 MySQL 中也就是庫)。

--query? 代表自己的 SQL 腳本。

--only-print? 如果只想打印看看 SQL 語句是什么,可以用這個選項。

-h?sql 節點 ip

-u? 用戶

-p( 小寫 )? 密碼

-P( 大寫 )? 端口

二、?壓力測試建表及存儲過程

1.?建庫、建表腳本:

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.?存儲過程腳本

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.?工具運行命令

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 主從復制)是 MySQL 數據庫使用率非常高的一種技術,它使用某個數據庫服務器為?主,然后在其他數據庫服務器上進行復制,后面復制的數據庫也稱從數據庫。 MySQL 支持單向、異步復制,復制過程中一個服務器充當主服務器,而一個或多個?其它服務器充當從服務器。

在設置鏈式復制服務器時,從服務器本身也可以充當主服務器,如: a->b->c b 對于 a 來說是從服務器,但是它又?是 c 的主服務器。
Mysql?Replication MySQL 主從復制)主要用于:

1. 使用一個從服務器執行備份,而不會干擾主服務器。在備份過程中主服務器可以繼續處理更新;

2. 解決數據庫讀需求很高 ( 讀寫分離 ),? 通常使用 amoeba 或者 mysqlproxy 作為中間代理層 .


Mysql?Replication MySQL 主從復制)的原理:

Mysql 的復制( replication )是一個異步的復制,從一個 Mysql?instace (稱之為 Master )復制到另一個 Mysql?instance (稱之 Slave )。實現整個復制操作主要由三個進程完成的,其中兩個進程在 Slave Sql 進程和 IO 進程),另外一個進程在? Master IO 進程)上。

要實施復制,首先必須打開 Master 端的 binary?log bin-log )功能,否則無法實現。因為整個復制過程實際上就是 Slave Master 端獲取該日志然后再在自己身上完全順序的執行日志中所記錄的各種操作。
復制的基本過程如下:
1)

Slave 上面的 IO 進程連接上 Master ,并請求從指定日志文件的指定位置(或者從最開始的日志)之后的日志內容;
2)

Master 接收到來自 Slave IO 進程的請求后,通過負責復制的 IO 進程根據請求信息讀取制定日志指定位置之后的日志信息,返回給 Slave? IO 進程。返回信息中除了日志所包含的信息之外,還包括本次返回的信息已經到 Master 端的 bin-log 文件的名稱以及 bin-log 的位置;
3)

Slave IO 進程接收到信息后,將接收到的日志內容依次添加到 Slave 端的 relay-log 文件的最末端,并將讀取到的 Master 端的? bin-log 的文件名和位置記錄到 master-info 文件中,以便在下一次讀取的時候能夠清楚的高速 Master“ 我需要從某個 bin-log 的哪個位置開始往后的日志內容,請發給我
4)

Slave Sql 進程檢測到 relay-log 中新增加了內容后,會馬上解析 relay-log 的內容成為在 Master 端真實執行時候的那些可執行的內容,并在自身執行。

如果要實現 Slave Master 為同一個 mysqld,? 需要添加 log-slave-updates?=?1

參數到 my.cnf- à[mysqld]

服務器結構:

A B C 三臺服務器;?其中 A 為新聞數據源, A B Master B A Slave 同時也是 C Master

B 服務器從 A 復制部分數據, C 備份 A 的所有數據;

注意 :

如果數據庫在做主從的時候已經有數據了 ,? 則需要進行鎖表操作 .

mysql>?flush?tables?with?read?lock;

記住數據導完后要解鎖:

mysql>?unloclk?tables;

?

Master?A 的配置

?

sudo?vi?/etc/mysql/my.cnf

?

刪除以下參數前的注釋并修改

server-id???????=?1?// 分配 server-id

log-bin?????????=?master-bin?// 默認 mysql-bin, 可以不修改

log-bin-index???=?master-bin.index??// 非必須

bind-adress?????=?0.0.0.0?// 默認 127.0.0.1? 不修改可能導致無法訪問

?

修改系統防火墻使 B 服務器可以訪問 3306 端口,(詳查 ufw 命令)??

重啟 mysql

sudo?/init.d/mysql?restart

?

通過語句:

GRANT?REPLICATION?SLAVE,REPLICATION?CLIENT?ON?*.*?TO?user@'ip?B'?IDENTIFIED?BY?'password';

?

B 服務器建立一個可以連接到 A 的帳號

進入 mysql ,通過:

show?master?status;

查看 A 的狀態,記錄下 file 的位置和 postion 的參數

?

?

?

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???// 非必須

?

添加參數:

log-slave-updates?=?1???

// 通常情況,從服務器從主服務器接收到的更新不記入它的二進制日志。

// 該選項告訴從服務器將其 SQL 線程執行的更新記入到從服務器自己的二進制日志。

?

replicate_wild_do_table?=?copy_db.copy_table?// 表示需要復制的庫中的表,可以善用 %

replicate_wild_ignore_table?=?ignore_db.ignore_table?// 不復制的表

?

至于為什么不使用 replicate_do_db replicate_ignore_db 參數,

是為了方式跨庫更新時出錯,如果能確保不會跨庫更新可考慮

?

重啟 mysql ,進入本機 mysql

?

執行以下語句:

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 對應 A 中的 file 位置和 postion 參數,表示開始復制的 bin 文件和位置

?

start?slave;????// 啟動 Slave

show?slave?status ;?? // 查看 Slave_IO_State 參數,如果是 Waiting?for?master?to?send?event, 則正常

// 正常狀態下 Slave_IO_Running Slave_SQL_Running 均為 yes

?

// 如不能正常鏈接,根據 Slave_IO_State Slave_IO_Running Slave_SQL_Running Last_IO_Error

// 等參數查找失敗原因

?

通過:

show?master?status;

命令記錄 file 位置和 postion 參數;

?

C 服務器分配一個帳號用于同步;

方法參照 A ,防火墻設置參照 A

?

?

?

?

Slave?C 的配置

sudo?vi?/etc/mysql/my.cnf

server-id??=?3

relay-log-index?=??slave-relay-bin.index?// 非必須

relay-log???????=?slave-relay-bin???// 非必須

?

通過 CHANGE?MASTER?TO 語句來修改 master 的參數,參照 B 的配置;

通過

show?slave?status;

檢查 C 的狀態,參照 B

?

?

?

?

?

讀寫分離配置 :

推薦使用 amoeba,?amoeba? 相比較 mysqlproxy,? 優點在于中文文檔齊全 ( 國人編寫 ) ,穩定性高,免除了 mysqlproxy lua 配置的復雜性 .

Amoeba 讀寫分離:

http://docs.hexnova.com/amoeba/rw-splitting.html

高可用性

可以制作兩個 master, 它們兩個為雙熱備主機,然后通過 keepalive 整合 master? 變為一個 VIP ,?最后? amoeba slave 都是通過這個 VIP? 來進行操作, amoeba insert 等操作發送到這個 VIP ,? slave 通過 VIP 獲得具體的 bin 日志,然后進行更新

Keepalive 在使用的時候,通常只有一臺 master 會進行工作,另外一臺進行主從復制,當 query 發送到 VIP 的時候,就會進入工作的 master 運行。當工作 master 宕機后, keepaliave 會自動切換 VIP 指向空閑 master 進行工作,?這樣子就實現了高可用性。

所以在雙擊熱備的環境中?,總共會占用 3+ IP 地址。

?

負載均衡

負載均衡在 IP 層上,通常使用 LVS 軟件,在 HTTP 層面上可以使用 Nginx lighttpd apache?web?server? 等軟件。

現在為了實現 MySql master 的負載均衡,可以使用 LVS ,?在 IP 層面上進行負載均衡,

也可以使用 MySql-Cluster(NDB) 產品,?它已經實現了高可用性以及負載均衡 .

高可用性和負載均衡都可以直接通過 NDB 來實現 , 上面提及的是一般方法

?

MySql 集群配置


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 黄色在线观看 | 色接久久 | 伦理一区二区 | 欧美一级网址 | 妇女毛片 | 91看片在线看片 | 亚洲免费人成在线视频观看 | 欧美精品网站 | 手机在线看片国产日韩生活片 | 在线观看国产情趣免费视频 | 亚洲欧美日韩在线观看播放 | 玛米亚奥特曼 | 99亚洲精品色情无码久久 | 午夜电影在线观看 | 干干干操操操 | 五月天国产视频 | 欧美亚洲精品在线 | 成年免费视频网站入口 | 噜噜噜噜精品视频在线观看 | 91精品久久久久久久久网影视 | 国产99精品在线观看 | 精品视频手机在线观看免费 | 日本美女一区二区 | 亚洲精品午夜国产va久久成人 | 亚洲精品一区二区三区蜜桃久 | 成人欧美视频在线观看 | 日韩一级在线 | 久久亚洲国产精品 | 国产日韩一区二区三区在线观看 | 日韩成人免费视频 | 久久久无码精品成人A片小说 | 6080yy精品一区二区三区 | 欧美国产激情二区三区 | 久久久精品久久视频只有精品 | aiai888永久免费视频 | 桃花综合| 91av免费 | 亚洲综合日韩 | 亚洲一级电影 | 日产一卡二卡乱码免费 | 亚洲精品不卡 |