Hadoop集群搭建(七:MySQL的安装配置)
| 實驗 目的 要求 | ? 目的: 1、掌握MySQL在集群平臺中的安裝 要求:
? | ||||||||||||||||||
| ? ? ? ? ? ? 實 驗 環 境 ? ? ? ? ? ? ? ? ? ? ? ? 實 驗 環 境 ? ? ? ? ? ? | ?
? 軟件版本: ??????? 選用MySQL Cluster的7.5.7版本,軟件包選擇Linux的通用包Generic,軟件包名mysql-cluster-gpl-7.5.7-linux-glibc2.12-x86_64.tar.gz; ? 依賴軟件: ??????? MySQL Cluster的安裝和使用需要依賴與軟件libaio,選用該軟件的0.3.109版本,軟件包名libaio-0.3.109-13.el7.x86_64.rpm; 集群規劃: ????? ????* MySQL數據庫的集群版本有管理節點、 數據服務節點、 SQL服務節點總共3類服務節點, 集群中要求至少一臺單獨的主機作為管理節點, 而集群模式需要滿足數據有備份和數據處理能夠分布并行的基本要求, 所以需要兩臺或以上的主機作為數據服務節點以及兩臺或以上的主機作為SQL服務節點, 具體規劃如下:
? |
?
實驗內容
步驟一:MySQL集群版安裝環境配置
注:1、MySQL集群版安裝過程的所有操作步驟都需要使用root用戶進行;
? ? ? ?2、此項步驟需要在集群中所有主機上進行;
?
1、首先,MySQL相關軟件包上傳到root用戶家目錄的新建“setups”目錄下。
命令:
???? #mkdir setups
2、匹配MySQL關鍵字查詢包,列出本機yum方式安裝的MySQL軟件,并卸載刪除已安裝的MySQL;
命令:
???? #rpm -qa | grep mysql
???? #yum list installed | grep mysql
???? #rpm -e –nodeps 軟件包名
?? ??#yum -y remove mysql
3、匹配MariaDB關鍵字查詢包,列出本機yum方式安裝的MariaDB軟件,并卸載刪除已安裝的MariaDB;
命令:
???? #rpm -qa | grep mariadb
???? #rpm -e –nodeps 軟件包名
???? #rpm -qa | grep libaio
???? #yum list installed | grep libaio
???? #rpm -ivh 軟件包名
4、檢查MySQL用戶組是否存在,若不存在則創建MySQL用戶組;
命令:
???? #cat /etc/group | grep mysql
???? #groupadd mysql
?
5、檢查MySQL用戶是否存在,若不存在則創建MySQL用戶并加入到MySQL用戶組中;
命令:
???? ???#cat /etc/passwd | grep mysql
??????? #useradd -r -g mysql mysql
6、查看前系統中SELinux服務的運行狀態,需要進行永久關閉;
命令:
???? ???#sestatus -v
????? ??#vi /etc/selinux/config
???????? 找到配置項“SELINUX”所在行,將其改為以下內容:
?????????? SELINUX=disable
??????? #reboot?????? //重啟主機
?
步驟二:MySQL集群版基本安裝配置;
注:以下步驟需要在集群中所有主機上進行操作;
1、MySQL Cluster軟件包“mysql-cluster-gpl-7.5.7- linux-glibc2.12-x86_64.tar.gz”我們一提前上傳與用戶家目錄的“setups”目錄下;
命令:
???? #mkdir /mysql
???? #cd /mysql
???? #tar -xzf ~/setups/ mysql-cluster-gpl-7.5.7-linux-glibc2.12-x86_64.tar.gz
2、進入系統的“/usr/local”目錄,在該目錄下創建一個名為“MySQL”的連接指向MySQL Cluster所在的目錄,MySQL源路徑以MySQL Cluster軟件包實際解壓包的路徑為準。
命令:
???? #cd /usr/local
???? #ln -s /mysql/ mysql-cluster-gpl-7.5.7-linux-glibc2.12-x86_64mysql
3、進入連接的MySQL目錄,創建存放MySQL數據庫數據的目錄,更改該數據目錄的權限設置
命令:
?? ?????#cd mysql
??????? #mkdir data
??????? #chmod 770 data
4、更改當前“MySQL”目錄的所屬用戶和所屬組
命令:
?? ?????#chown -R mysql
?????? ??#chgrp -R mysql
5、配置MySQL相關的環境變量,修改系統的配置文件;
命令:
?? ?????#vi /etc/profile
???????? 在文件末尾添加以下內容:
??????? ?#mysql-cluster environment
????????? MYSQL_CLUSTER_HOME=/usr/local/mysql
????????? PATH=$MYSQL_CLUSTER_HOME/bin:$PATH
????????? Export MYSQL_CLUSTER_HOME PATH
6、使新配置的環境變量立即生效,并查看環境變量是否生效;
命令:
? ? ? ? ? ? ? ?#source /etc/profile
?????????????? #echo $MYSQL_CLUSTER_HOME
??? ???????????#echo $PATH
步驟三:配置管理節點Cluster-01;
注:該項的所有操作需要在集群中所有管理節點主機上進行操作。
1、進入MySQL Cluster軟件所在目錄,創建存放MySQL Cluster數據目錄;
命令:
?? ?????#cd /usr/local/mysql
??????? #mkdir mysql-cluster
2、更改“mysql-cluster”目錄的所屬用戶和所屬組;
命令:
???? #chown -R mysql mysql-cluster
???? #chgrp -R mysql mysql-cluster
- 創建用于存放MySQL Cluster管理節點配置文件的目錄,創建MySQL Cluster管理節點的配置文件,并對配置文件進行修改;
命令:
???? #mkdir etc
???? #cd stc
???? #touch config.ini
???? #vi config.ini
????? 在文件中添加如下內容:
[NDB_MGMD DEFAULT]DataDir=/usr/local/mysql/data[NDBD DEFAULT]NoOfReplicas=2DataMemory=512MIndexMemory=32MDataDir=/usr/local/mysql/data[NDB_MGMD]NodeId=1HostName=Cluster-01[NDBD]NodeId=2HostName=Cluster-02[NDBD]NodeId=3HostName=Cluster-03[NDBD]NodeId=4HostName=Cluster-04[NDBD]NodeId=5HostName=Cluster-05
?
4、更改當前“etc”目錄的所屬用戶和所屬組,并啟動MySQL Cluster的管理節點;
注:*首次啟動或修改之后啟動需要添加參數“--initial”,正常啟動時不需要添加參數“--initial”;
命令:
???? #chown -R mysql .
???? #chgrp -R mysql .
???? #ndb_mgmd -f /usr/local/mysql/etc/config.ini –initial
?????? 5、查看系統進程信息,若存在信息中包含“ndb_mgmd”關鍵字的進程則表示MySQL Cluster的管理節點啟動成功,進入MySQL Cluster管理節點的控制臺,查看節點狀況;
命令:
???? ??????????#ps -ef | grep ndb_mgmd
?????????????? #ndb_mgm
?????? ????????>show
?????????????? >exit
???????
步驟四:配置數據服務節點Cluster-02、Cluster-03;
注:*以下步驟需要在集群中所有數據服務節點主機上進行操作。
?
1、進入系統配置文件所在目錄,創建MySQL Cluster數據服務節點的配置文件,并對配置文件進行修改;
命令:
???? ?#cd /etc
????? #touch my.conf
????? #vi my.conf
????? 在其中添加如下內容:
[MYSQLD]ndbclusterndb-connectstring=Cluster-01[MYSQL_CLUSTER]ndb-connectstring=Cluster-01
2、啟動數據服務節點,查看系統進程信息,若存在信息中包含“ndbd”關鍵字的進程則表示MySQL Cluster的數據服務節點啟動成功,并進入MySQL Cluster管理節點的控制臺。
命令:
???? #ndbd –initial
???? #ps =ef | grep ndbd
#ndb_mgm
?????? ????????>show
??????????? ???>exit
??
步驟五:配置SQL服務節點Cluster-04、Cluster-05;
注:*以下步驟需要在集群中所有SQL服務節點主機上進行操作
1、進入系統配置文件所在目錄,創建MySQL Cluster數據服務節點的配置文件,并對配置文件進行修改;
命令:
???? #cd /etc
???? #touch my.cnf
???? #vi my.cnf
????? 在其中添加如下內容:
2、對MySQL數據庫的安裝進行初始化,執行該命令后會有一些提示信息,特別注意最后一行的“[Note]”相關信息,信息內容如下:
[Note] A temporary password is generated for
root@localhost:XXXXXXXXXXXXXX
信息末尾的 “XXXXXXXXXXXXXX”是安裝程序隨機生成的初始密碼, 在首次以root用戶登錄數據庫時雷要使用,非常重要 一定要記下;
命令:
???? # mysql-initialize –user=mysql –basedir=/usr/local/mysql –datadir=/usr/local/mysql/data
3、將MySQL加入到系統的可控制啟動服務目錄內,并將服務命名為“MySQL”,啟動SQL服務節點,查看系統進程信息,若存在信息中包含“ndbd”關鍵字的進程則表示MySQL Cluster的數據服務節點啟動成功;
命令:
?? ????#cp /usr/local/mysql/support-files/mysql.server/etc/init.d/mysql
? ? ? ?#service mysql start
? ? ? ?#ps -ef | grep mysql
?
?
4、進入MySQL Cluster管理節點的控制臺;
命令:
?????? ??#ndb_mgm
???????? >show
??? ?????>sxit
注意:只有本步驟的驗證實在集群中管理節點主機上進行操作,之后的操作仍然是在SQL服務節點主機繼續操作;
?
5、登錄MySQL數據庫,會提示輸入密碼,該密碼為之前進行安裝初始化時所顯示的初始化密碼,然后進入MySQL的控制臺;
命令:
?? ?????#mysql -u root -p
?
5.1、在控制臺使用命令“SET PASSEORD=PASSWORD(‘mysqlabc’);”,重新設置數據庫的“root”用戶的登錄密碼,其中“mysqlabc”部分為自定義的新密碼。
?
5.2、在MySQL控制臺使用命令“USE mysql;” 切換到 “mysql” 數據庫。
?
5.3、在MySQL控制臺使用命令“UPDATE user SET host='%' WHERE user='root'” , 修改數據庫的root用戶所接收請求來源的范圍。 允許遠程登錄。
?
?5.4、使用命令“select host from user where user=root”查看數據庫的host信息6、使新配置的環境變量立即生效,并查看環境變量是否生效;
?
5.5、在MySQL控制臺使用命令“FLUSH PRIVILEGES”,刷新數據庫的權限信息使新配置的權限生效。
?
5.6、在MySQL控制臺使用命令 "exit”可以退出,MySQL控制臺返回到系統命令行界面。
6、啟添加系統防火墻的端口策略, 對外開啟MySQL所使用的端口“3306”,并重啟系統防火墻服務,使新添加的端口策略生效;
命令:
?? ???#firewall-cmd --zone=public --add-port=3306/tep --permanent
?????? #firewall-cmd--reload
步驟六:MySQL集群版驗證;
1、在任意一臺SQL服務 節點主機 上使用命令“mysql-u root -p” 登錄到MySQL數據庫,會提示輸入密碼,正確輸入密碼成功登錄MySQL數據庫之后會進入MySQL的控制臺;
命令:
???? # mysql -u root -P
2、在MySQL控制臺使用命令“CREATEDATABASE? test;"創建數據庫“test”;
命令:
???? >CREATE DATABASE test;
3、在MySQL控制臺使用命令“SHOW DATABASES;"顯示數據庫列表,若存在名為“test”的數據庫,則表示集群同步數據成功;
命令:
?? ????????????> SHOW DATABASES
注:可以使用命令"ssh?? 目標主機名或IP地址”遠程登錄到集群中其它SQU服務節點主機進行操作,完成所有操作后使用命令"logout"退出當前登錄
?
4、在任意一臺集群主機上執行;
命令:
?? ?????#ndb_mgm -e show
步驟七:MySQL集群測試;
1、測試一:
a)現在我們在其中一個SQL節點上進行相關數據庫的創建然后到另外一 個SQL節點上看看數據是否同步。
在SQL節點1.上執行:
shell> /usr/local/mysql/bin/mysql -u root -P
mysql>show databases;mysql>create database aa;
mysql>use aa;
mysql>CREATE TABLE ctest2 Gi INT) ENGINE=NDB;
//這里必須指定數據庫表的引擎為NDB,否則同步失敗
?mysql> INSERT INTO ctest2 O VALUES (1);
mysql> SEL ECT * FROM ctest2;
b)然后在SQL節點2上看數據是否同步過來了
經過測試,在非master.上創建數據,可以同步到master上查看表的引擎是不是NDB,>show create table表名:
2、測試二:
?? ?a) 關閉一個數據節點,在另外一個節點寫輸入,開啟關閉的節點,看數據是否同步過來。
首先把數據節點1重啟,然后在節點2上添加數據
在SQL節點2上操作如下:
mysql> create database bb;
mysql> use bb;
mysql> CREATE TABLE ctest3 (i INT) ENGINE=NDB;
mysql> use aa;
mysql> INSERT INTO ctest2 O VALUES (3333);
mysql> SELECT* FROM ctest2;
b) 等數據節點1啟動完畢,啟動數據節點1的服務
#/usr/local/mysql/bin/ndbd -initial
#service mysqld start
c) 然后登錄進去查看數據
# /ustrlocal/mysql/bin/mysql -u root p
可以看到數據已經同步過來了,說明數據可以雙向同步了。
?
出現的問題與解決方案
本實驗未遇到錯誤,介紹幾個排錯技巧:
1、一般,報錯的時候都會有error code。比如ERROR 1504,Error: 2303等等,遇到這些報錯,我們可以先用mysql的報錯工具perror查看,比如查看報錯號為1504的錯誤,使用命令為:?perror --ndb 1504
2、在出現報錯以后,查看WARNINGS或ERRORS信息,比如出現Error CODE : 1528 Failed TO CREATE LOGFILE GROUP后輸入SHOW WARNINGS;,會顯示出具體的報錯信息:
??Got error 1504 'Out of logbuffer memory' FROM NDB
??Failed TO CREATE LOGFILE GROUP
以上報錯代碼,均可在官網找到解決方案。
知識拓展
1、MySQL集群優缺點;
優點:
a) 99.999%的高可用性
b)快速的自動失效切換
c)靈活的分布式體系結構,沒有單點故障
d)高吞吐量和低延遲
e)可擴展性強,支持在線擴容
缺點:
a)存在很多限制,比如:不支持外鍵
b)部署、管理、配置很復雜
c)占用磁盤空間大,內存大
d)備份和恢復不方便
e)重啟的時候,數據節點將數據load到內存需要很長時間
?
2、MySQL集群如何存儲數據;
a)Master執行提交語句時,事務被發送到slave,slave開始準備事務的提交。
b)每個slave都要準備事務,然后向master發送OK(或ABORT)消息,表明事務已經準備好(或者無法準備該事務)。
c)Master等待所有Slave發送OK或ABORT消息
- 如果Master收到所有 Slave的OK消息,它就會向所有Slave發送提交消息,告訴Slave提交該事務;
- 如果Master收到來自任何一個Slave的ABORT消息,它就向所有 Slave發送ABORT消息,告訴Slave去中止事務。
e)每個Slave等待來自Master的OK或ABORT消息。
- 如果Slave收到提交請求,它們就會提交事務,并向Master發送事務已提交 的確認;
- 如果Slave收到取消請求,它們就會撤銷所有改變并釋放所占有的資源,從而中止事務,然后向Masterv送事務已中止的確認。
f)當Master收到來自所有Slave的確認后,就會報告該事務被提交(或中止),然后繼續進行下一個事務處理。
?
?
3、使用SQLyog連接MySQL集群192.168.10.114或者192.168.10.115
總結
以上是生活随笔為你收集整理的Hadoop集群搭建(七:MySQL的安装配置)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hadoop集群搭建(六:HBase的安
- 下一篇: MongoDB数据库(一:基本操作)