mysql群集配置_CentOS7 - 建立一个MySQL集群
Standing up a MySQL cluster
此配方將指導(dǎo)您完成設(shè)置MySQL群集的過程。 通過跨多個(gè)系統(tǒng)劃分?jǐn)?shù)據(jù)并維護(hù)副本以避免單點(diǎn)故障,群集數(shù)據(jù)庫可以應(yīng)對(duì)可伸縮性和高可用性的挑戰(zhàn)。
集群的成員稱為節(jié)點(diǎn)。 MySQL集群中有三種節(jié)點(diǎn)類型:數(shù)據(jù)節(jié)點(diǎn),API節(jié)點(diǎn)和管理節(jié)點(diǎn)。 數(shù)據(jù)節(jié)點(diǎn)負(fù)責(zé)存儲(chǔ)數(shù)據(jù)。 然后,用戶和進(jìn)程連接到API節(jié)點(diǎn)以訪問數(shù)據(jù)庫。 管理節(jié)點(diǎn)作為整體管理集群。 雖然可以在同一系統(tǒng)上安裝多個(gè)節(jié)點(diǎn),但是,API節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)都可以托管在同一系統(tǒng)上。 但是,在同一系統(tǒng)上托管多個(gè)數(shù)據(jù)節(jié)點(diǎn)顯然不是一個(gè)好主意,因?yàn)樗穸薓ySQL分發(fā)數(shù)據(jù)的努力。
準(zhǔn)備
此配方演示了如何使用四個(gè)系統(tǒng)部署MySQL集群。 第一個(gè)系統(tǒng)將托管管理節(jié)點(diǎn),我們假設(shè)它具有IP地址192.168.56.100。 第二個(gè)系統(tǒng)將托管API節(jié)點(diǎn)并具有地址192.168.56.101。 其余系統(tǒng)將配置數(shù)據(jù)節(jié)點(diǎn),并使用地址192.168.56.102和192.168.56.103。 您需要使用root帳戶或sudo在所有四個(gè)系統(tǒng)上進(jìn)行管理訪問.
怎么做。。。
請(qǐng)按照以下步驟設(shè)置群集MySQL數(shù)據(jù)庫:
- 從MySQL網(wǎng)站下載集群存檔,并使用tar解壓縮其包:
- 在每個(gè)系統(tǒng)上,安裝perl-Data-Dumper并將已安裝的mariadb-libspackage替換為下載的MySQL-Cluster-shared軟件包:
- 在每個(gè)系統(tǒng)上安裝MySQL-Cluster-server和MySQL-Cluster-client軟件包:
- 在托管管理節(jié)點(diǎn)的系統(tǒng)上,創(chuàng)建/ var / lib / mysql-cluster目錄:
- 在/var/lib/mysql-cluster/config.ini中為管理節(jié)點(diǎn)創(chuàng)建集群的配置文件,如下所示:
- 啟動(dòng)管理節(jié)點(diǎn):
- 在管理節(jié)點(diǎn)系統(tǒng)的防火墻中打開端口1186:
- 在每個(gè)數(shù)據(jù)節(jié)點(diǎn)的系統(tǒng)上,使用以下命令創(chuàng)建文件/etc/my.cnf:
- 啟動(dòng)每個(gè)數(shù)據(jù)節(jié)點(diǎn):
- 在數(shù)據(jù)節(jié)點(diǎn)的系統(tǒng)防火墻中打開端口2202:
- 使用以下命令在托管API節(jié)點(diǎn)的系統(tǒng)上創(chuàng)建/etc/my.cnf:
- 啟動(dòng)MySQL服務(wù)器作為API節(jié)點(diǎn):
- 檢索安裝MySQL服務(wù)器時(shí)創(chuàng)建的root帳戶的臨時(shí)密碼。 它記錄在/root/.mysql_secret中:
- 使用mysqladmin為root帳戶設(shè)置新密碼。 提示輸入當(dāng)前密碼時(shí),請(qǐng)輸入上一步中標(biāo)識(shí)的密碼:
- 在API節(jié)點(diǎn)系統(tǒng)的防火墻中打開端口3306:
- 使用托管管理節(jié)點(diǎn)的系統(tǒng)上的ndb_mgm客戶端驗(yàn)證集群的狀態(tài):
工作原理
本文教您如何使用兩個(gè)數(shù)據(jù)節(jié)點(diǎn)設(shè)置MySQL集群數(shù)據(jù)庫:一個(gè)API節(jié)點(diǎn)和一個(gè)管理節(jié)點(diǎn)。 管理節(jié)點(diǎn)由ndb_mgmdprocess組成,該處理器向其他節(jié)點(diǎn)提供配置信息并對(duì)其進(jìn)行監(jiān)視。 在數(shù)據(jù)節(jié)點(diǎn)上,ndbd進(jìn)程處理群集數(shù)據(jù)的存儲(chǔ),分區(qū)和復(fù)制。 知道管理節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)的MySQL服務(wù)器充當(dāng)API節(jié)點(diǎn),用戶可以通過該節(jié)點(diǎn)使用集群數(shù)據(jù)庫。
Oracle維護(hù)的存儲(chǔ)庫中可用的軟件包是在不支持網(wǎng)絡(luò)數(shù)據(jù)庫(NDB)的情況下構(gòu)建的,因此我們首先從MySQL網(wǎng)站下載了一個(gè)存檔,該存檔包含將安裝支持NDB /集群的MySQL版本的軟件包:
curl -L dev.mysql.com/get/Downloads/MySQL-Cluster-7.4/MySQL- Cluster-gpl-7.4.10-1.el7.x86_64.rpm-bundle.tar | tar xMySQL抽象了數(shù)據(jù)的物理組織和操作細(xì)節(jié),并將其委托給各種存儲(chǔ)引擎。 不同的引擎具有不同的能力。 由于NDB引擎是實(shí)現(xiàn)集群的引擎,因此我們需要一個(gè)支持引擎的構(gòu)建。 而不是像我們?cè)谄渌浞街心菢訉url的輸出寫入文件,這次我們使用x參數(shù)將輸出直接傳遞給tar,以便動(dòng)態(tài)擴(kuò)展存檔。
之后,我們從CentOS存儲(chǔ)庫安裝了perl-Data-Dumper軟件包,并將已安裝的mariadb-libs軟件包替換為每個(gè)系統(tǒng)上剛剛下載的MySQL-Cluster-shared軟件包:
yum install perl-Data-Dumper MySQL-Cluster-shared-gpl-*.rpmyum erase mariadb-libsMySQL-Cluster-shared軟件包提供其他程序使用的共享庫來使用MySQL。默認(rèn)情況下,這些庫取代了從CentOS存儲(chǔ)庫安裝的MariaDB版本,使我們免于遇到會(huì)阻止干凈安裝的庫沖突。由于之后不再需要它,我們卸載了mariadb-libspackage。
Yum在安裝MySQL-Cluster-server軟件包之后執(zhí)行的一些安裝后步驟是在Perl中編寫的,并使用Perl的Data :: Dumper模塊。這使得Perl-Data-Dumper包成為MySQL-Cluster-server包的依賴項(xiàng)。但是,一個(gè)錯(cuò)誤導(dǎo)致Yum錯(cuò)過了這個(gè),所以我們自己安裝了這個(gè)包,以便MySQL-Cluster-server軟件包的安裝順利進(jìn)行。它不會(huì)阻止軟件包的安裝,但它需要我們手動(dòng)完成一些額外的配置步驟。
有了這些要求,我們就在每個(gè)系統(tǒng)上安裝了MySQL-Cluster-server和MySQL-Cluster-client軟件包:
yum install MySQL-Cluster-{server,client}-gpl-*.rpm整個(gè)集群的配置幾乎集中在/var/lib/mysql-cluster/config.ini中的管理節(jié)點(diǎn)。 該文件分為幾個(gè)部分,第一部分是[ndb default],它提供了應(yīng)該用于集群的默認(rèn)配置值。 這里的值適用于集群的每個(gè)節(jié)點(diǎn),除非在相應(yīng)節(jié)點(diǎn)的配置部分中被更具體的指令覆蓋:
[ndbd default]NoOfReplicas = 2DataMemory = 100MIndexMemory = 10MServerPort = 2202NoOfReplicas選項(xiàng)設(shè)置群集中的副本數(shù)。它的值可以設(shè)置為1或2,盡管2是推薦值。回想一下,不僅跨數(shù)據(jù)節(jié)點(diǎn)對(duì)集群數(shù)據(jù)庫進(jìn)行了分區(qū),而且還對(duì)其進(jìn)行了復(fù)制;每個(gè)節(jié)點(diǎn)通常承載一個(gè)分區(qū),通常是數(shù)據(jù)庫大小的1 / n(其中n是數(shù)據(jù)節(jié)點(diǎn)的數(shù)量),也是其他節(jié)點(diǎn)的副本。如果系統(tǒng)脫機(jī),群集仍然可以正常運(yùn)行,因?yàn)槠鋽?shù)據(jù)在副本中仍然可用。 NoOfReplicas的值為1意味著只有一個(gè)數(shù)據(jù)庫副本(沒有副本),并且數(shù)據(jù)庫的可用性取決于所有數(shù)據(jù)節(jié)點(diǎn)都在運(yùn)行。
數(shù)據(jù)節(jié)點(diǎn)將其數(shù)據(jù)庫的工作副本保存在RAM中,以減少延遲,同時(shí)定期將數(shù)據(jù)同步到磁盤。 DataMemory選項(xiàng)指定節(jié)點(diǎn)應(yīng)為數(shù)據(jù)保留多少RAM,IndexMemory指定應(yīng)為主鍵和唯一索引保留多少內(nèi)存。無論您提供什么值,請(qǐng)確保有足夠的資源可以避免RAM交換。
ServerPort選項(xiàng)指定節(jié)點(diǎn)將用于彼此通信的端口號(hào)。默認(rèn)情況下,MySQL會(huì)動(dòng)態(tài)分配端口,以便更容易在同一系統(tǒng)上運(yùn)行多個(gè)節(jié)點(diǎn),但由于此配方在其自己的主機(jī)系統(tǒng)上運(yùn)行每個(gè)節(jié)點(diǎn),我們需要知道端口以允許通過防火墻的流量,我們指定了我們自己。
配置中的后續(xù)部分使用hostname選項(xiàng)指定管理節(jié)點(diǎn)(通過[ndb_mgmtd]部分),API節(jié)點(diǎn)([mysqld]部分)和數(shù)據(jù)節(jié)點(diǎn)([ndbd]部分)的地址正在跑步。如多個(gè)[ndbd]部分所示,如果在集群中運(yùn)行該類型的多個(gè)節(jié)點(diǎn),則會(huì)出現(xiàn)相同類型的多個(gè)部分:
[ndb_mgmd]hostname = 192.168.56.100[mysqld]hostname = 192.168.56.101[ndbd]hostname = 192.168.56.102[ndbd]hostname = 192.168.56.103在其余系統(tǒng)上,/etc/my.cnf被創(chuàng)建為數(shù)據(jù)節(jié)點(diǎn)和API節(jié)點(diǎn)使用的配置文件。 每個(gè)包含一個(gè)[mysql_cluster]部分,它提供了ndb-connectionstring選項(xiàng):
[mysql_cluster]ndb-connectstring = 192.168.56.100ndb-connectstring選項(xiàng)指定承載管理節(jié)點(diǎn)的系統(tǒng)的地址。 當(dāng)數(shù)據(jù)和API節(jié)點(diǎn)聯(lián)機(jī)時(shí),它們與管理器通信以接收其配置信息。 如果您的群集有多個(gè)管理節(jié)點(diǎn),則可以在用逗號(hào)分隔的連接字符串中列出其他節(jié)點(diǎn):
ndb-connectstring = "192.168.56.100,192.168.56.105,192.168.56.106"此外,API節(jié)點(diǎn)的配置包括[mysqld]部分。 它包括用于啟用NDB引擎的ndbcluster選項(xiàng)和default-storage-engine選項(xiàng),指示MySQL使用NDB來管理所有新表,除非在表的CREATE TABLE語句中另有指定:
[mysqld]ndbclusterdefault-storage-engine = ndbcluster當(dāng)用戶或進(jìn)程使用CREATE TABLE語句創(chuàng)建新表時(shí),他們可以使用ENGINE指令指定應(yīng)使用哪些MySQL存儲(chǔ)引擎來管理其數(shù)據(jù),例如:
CREATE TABLE users ( id INTEGER UNSIGNED NOT NULL PRIMARY KEY, first_name VARCHAR(50) NOT NULL DEFAULT '', last_name VARCHAR(50) NOT NULL DEFAULT '')ENGINE = NDBCluster;默認(rèn)引擎是InnoDB引擎。 但是,只有NDB管理的表中的數(shù)據(jù)才能進(jìn)入群集。 如果表由另一個(gè)引擎管理,則數(shù)據(jù)駐留在API節(jié)點(diǎn)上本地,并且不可用于群集中的其他節(jié)點(diǎn)。 為了防止意外問題和這可能導(dǎo)致的任何混淆,我們更改了默認(rèn)引擎,以便在未提供ENGINE指令時(shí)表將使用NDB引擎。
啟動(dòng)MySQL集群時(shí)啟動(dòng)節(jié)點(diǎn)的順序很重要,因?yàn)橐粋€(gè)節(jié)點(diǎn)可能依賴于其他節(jié)點(diǎn)。 首先啟動(dòng)管理節(jié)點(diǎn),然后啟動(dòng)數(shù)據(jù)節(jié)點(diǎn),然后啟動(dòng)API節(jié)點(diǎn)。
API節(jié)點(diǎn)上MySQL的root帳戶的密碼是在第一次啟動(dòng)服務(wù)器時(shí)隨機(jī)生成的,并寫入/root/.mysql_secret文件,就像我們?cè)谠O(shè)置MySQL數(shù)據(jù)庫配方時(shí)使用mysqladmin更改它一樣:
cat /root/.mysql_secretmysqladmin -u root -p password發(fā)送到管理節(jié)點(diǎn)系統(tǒng)上的ndb_mgm客戶端的SHOW命令允許我們查看集群的狀態(tài),并確保一切正常運(yùn)行。 可以在交互模式下調(diào)用客戶端,也可以使用-e參數(shù)直接將命令傳遞給它:
ndb_mgm -e SHOW可以使用ndb_mgm客戶端查看MySQL集群的狀態(tài)
See also
Refer to the following resources for more information on working with MySQL clusters:
- MySQL Reference Manual: MySQL Cluster Core Concepts (http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-basics.html)
- MySQL Reference Manual: MySQL Cluster Installation (http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-installation.html)
- MySQL Reference Manual: MySQL Cluster Nodes, Node Groups, Replicas, and Partitions (http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-nodes-groups.html)
- MySQL Reference Manual: Online Backup of MySQL Cluster (http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-backup.html)
- Set Up a MySQL Cluster the Easy Way (http://youtube.com/watch?v=64jtbkuPtvc)
- High Availability MySQL Cookbook by Alex Davies (https://www.packtpub.com/big-data-and-business-intelligence/high-availability-mysql-cookbook)
總結(jié)
以上是生活随笔為你收集整理的mysql群集配置_CentOS7 - 建立一个MySQL集群的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 广州python平均薪资_爬取广州的py
- 下一篇: linux 多线程客户端服务端通信,[转