RHEL下安裝配置基于2臺服務器的MYSQL集群

一、介紹
========
這篇文檔旨在介紹如何在RHEL下安裝配置基于2臺服務器的MySQL集群。并且實現任意一臺服務器出現問題或宕機時MySQL依然能夠繼續運行。

注意!
雖然這是基于2臺服務器的MySQL集群,但也必須有額外的第三臺服務器作為管理節點,但這臺服務器可以在集群啟動完成后關閉。同時需要注意的是并不推薦在集群啟動完成后關閉作為管理節點的服務器。盡管理論上可以建立基于只有2臺服務器的MySQL集群,但是這樣的架構,一旦一臺服務器宕機之后集群就無法繼續正常工作了,這樣也就失去了集群的意義了。出于這個原因,就需要有第三臺服務器作為管理節點運行。

另外,可能很多朋友都沒有3臺服務器的實際環境,可以考慮在VMWare或其他虛擬機中進行實驗。

下面假設這3臺服務的情況:

Server1: mysql1.vmtest.net 192.168.0.1
Server2: mysql2.vmtest.net 192.168.0.2
Server3: mysql3.vmtest.net 192.168.0.3

Servers1和Server2作為實際配置MySQL集群的服務器。對于作為管理節點的Server3則要求較低,只需對Server3的系統進行很小的調整并且無需安裝MySQL,Server3可以使用一臺配置較低的計算機并且可以在Server3同時運行其他服務。


二、在Server1和Server2上安裝MySQL
=================================
從http://www.mysql.com上下載mysql-max-5.0.27-linux-i686.tar.gz
注意:必須是max版本的MySQL,Standard版本不支持集群部署!

以下步驟需要在Server1和Server2上各做一次
# mv mysql-max-5.0.27-linux-i686.tar.gz /usr/local/
# cd /usr/local/
# groupadd mysql
# useradd -g mysql mysql
# tar -zxvf mysql-max-5.0.27-linux-i686.tar.gz
# rm -f mysql-max-5.0.27-linux-i686.tar.gz
# mv mysql-max-5.0.27-linux-i686 mysql
# cd mysql
# scripts/mysql_install_db --user=mysql
# chown -R root .
# chown -R mysql data
# chgrp -R mysql .
# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
# chmod +x /etc/rc.d/init.d/mysqld
# cp support-files/my-large.cnf /etc/my.cnf
# chkconfig --add mysqld

此時不要啟動MySQL!

三、安裝并配置管理節點服務器(Server3)
=====================================
作為管理節點服務器,Server3需要ndb_mgm和ndb_mgmd兩個文件:

從http://www.mysql.com上下載mysql-max-5.0.27-linux-i686.tar.gz

# mkdir /usr/src/mysql-mgm
# cd /usr/src/mysql-mgm
# tar -zxvf mysql-max-5.0.27-linux-i686.tar.gz
# rm mysql-max-5.0.27-linux-i686.tar.gz
# cd mysql-max-5.0.27-linux-i686
# mv bin/ndb_mgm .
# mv bin/ndb_mgmd .
# chmod +x ndb_mg*
# mv ndb_mg* /usr/bin/
# cd
# rm -rf /usr/src/mysql-mgm

現在開始為這臺管理節點服務器建立配置文件:

# mkdir /var/lib/mysql-cluster
# cd /var/lib/mysql-cluster
# vi config.ini

在config.ini中添加如下內容:

[NDBD DEFAULT]
NoOfReplicas=2
[MYSQLD DEFAULT]
[NDB_MGMD DEFAULT]
[TCP DEFAULT]
# Managment Server
[NDB_MGMD]
HostName=192.168.0.3 #管理節點服務器Server3的IP地址
# Storage Engines
[NDBD]
HostName=192.168.0.1 #MySQL集群Server1的IP地址
DataDir= /var/lib/mysql-cluster
[NDBD]
HostName=192.168.0.2 #MySQL集群Server2的IP地址
DataDir=/var/lib/mysql-cluster
# 以下2個[MYSQLD]可以填寫Server1和Server2的主機名。
# 但為了能夠更快的更換集群中的服務器,推薦留空,否則更換服務器后必須對這個配置進行更改。
[MYSQLD]
[MYSQLD]

保存退出后,啟動管理節點服務器Server3:
# ndb_mgmd? -f /var/lib/mysql-cluster/config.ini

啟動管理節點后應該注意,這只是管理節點服務,并不是管理終端。因而你看不到任何關于啟動后的輸出信息。

四、配置集群服務器并啟動MySQL
=============================
在Server1和Server2中都需要進行如下改動:

# vi /etc/my.cnf

[mysqld]
ndbcluster
ndb-connectstring=192.168.0.3 #Server3的IP地址
[mysql_cluster]
ndb-connectstring=192.168.0.3 #Server3的IP地址

保存退出后,建立數據目錄并啟動MySQL:

# mkdir /var/lib/mysql-cluster
# cd /var/lib/mysql-cluster
# /usr/local/mysql/bin/ndbd --initial

(網上資料大多是)# /usr/local/mysql/bin/ndbd --initial -f /var/lib/mysql-cluster/config.ini(應該是沒有"-f"選項的)
# /etc/rc.d/init.d/mysqld start

可以把/usr/local/mysql/bin/ndbd加到/etc/rc.local中實現開機啟動。
注意:只有在第一次啟動ndbd時或者對Server3的config.ini進行改動后才需要使用--initial參數!


五、檢查工作狀態
================
回到管理節點服務器Server3上,并啟動管理終端:

# /usr/bin/ndb_mgm
鍵入show命令查看當前工作狀態:(下面是一個狀態輸出示例)

[root@mysql3 root]# /usr/bin/ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.0.1 (Version: 5.0.27, Nodegroup: 0, Master)
id=3 @192.168.0.2 (Version: 5.0.27, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.3 (Version: 5.0.27)

[mysqld(API)] 2 node(s)
id=4 (Version: 5.0.27)
id=5 (Version: 5.0.27)

ndb_mgm>

如果上面沒有問題,現在開始測試MySQL:
注意,這篇文檔對于MySQL并沒有設置root密碼,推薦你自己設置Server1和Server2的MySQL root密碼。

在Server1中:

# /usr/local/mysql/bin/mysql -u root -p
> use test;
> CREATE TABLE ctest (i INT) ENGINE=NDBCLUSTER;
> INSERT INTO ctest () VALUES (1);
> SELECT * FROM ctest;

應該可以看到1 row returned信息(返回數值1)。

如果上述正常,則換到Server2上重復上面的測試,觀察效果。如果成功,則在Server2中執行INSERT再換回到Server1觀察是否工作正常。
如果都沒有問題,那么恭喜成功!

六、破壞性測試
==============
將Server1或Server2的網線拔掉,觀察另外一臺集群服務器工作是否正常(可以使用SELECT查詢測試)。測試完畢后,重新插入網線即可。

如果你接觸不到物理服務器,也就是說不能拔掉網線,那也可以這樣測試:
在Server1或Server2上:

# ps aux | grep ndbd
將會看到所有ndbd進程信息:

root 5578 0.0 0.3 6220 1964 ? S 03:14 0:00 ndbd
root 5579 0.0 20.4 492072 102828 ? R 03:14 0:04 ndbd
root 23532 0.0 0.1 3680 684 pts/1 S 07:59 0:00 grep ndbd

然后殺掉一個ndbd進程以達到破壞MySQL集群服務器的目的:

# kill -9 5578 5579

之后在另一臺集群服務器上使用SELECT查詢測試。并且在管理節點服務器的管理終端中執行show命令會看到被破壞的那臺服務器的狀態。
測試完成后,只需要重新啟動被破壞服務器的ndbd進程即可:

# ndbd
注意!前面說過了,此時是不用加--inital參數的!

至此,MySQL集群就配置完成了!

摘錄于:http://www.linuxidc.com/Linux/2008-02/11191p4.htm

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535789.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535789.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535789.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JDK源碼解析之 Java.lang.StringBuffer

StringBuffer類表示一個可變的字符序列。StringBuffer的API與StringBuilder互相兼容,但是StringBuffer是線程安全的。在可能的情況下,建議優先使用StringBuilder,因為在大多數實現中它比StringBuffer更快。 一、類定義 public final class S…

redo和undo

這是在網上看到的對redo和undo的探討: 1. redo 記錄所有做過的事情,用于恢復 undo 記錄事務的前鏡相,用于回滾2. redo,恢復數據庫時,按照重做日志文件來恢復你之前的操作 undo,撤消你做過的操作&#xff0…

JDK源碼解析之 Java.lang.StringBuilder

StringBuilder類表示一個可變的字符序列。StringBuilder的API與StringBuffer互相兼容,但是StringBuilder是非線程安全的,在大多數實現中它比StringBuffer更快。 一、類定義 public final class StringBufferextends AbstractStringBuilderimplements ja…

從映射觀點看索引

信息檢索主要有“檢”與“索(辦手續)”兩個動作。在圖書館借書時,一般而言, 找書的時間比辦理手續的時間長得多,因而縮短檢查時間是提高效率的關鍵。數據庫中檢 索信息也與此類似。 在沒有索引文件時,DBM…

JDK源碼解析之 Java.lang.Boolean

Boolean 類是將 boolean 基本類型進行包裝。類型為 Boolean 的對象包含一個單一屬性 value,其類型為 boolean。 此外還提供了許多將 boolean 轉換為 String、String 轉換為 boolean,以及其他一些方法。 一、類定義 public final class Boolean implemen…

MYSQL的集群的安裝與配置(mysql-5.1.21)

具體安裝與配置:1)準備工作:6臺機器,IP地址分別為192.168.0.(231-236)MGM節點:192.168.0.231(232)SQL 節點:192.168.0.233-234NDBD 節點:192.168.0.235-236系統都是REDHA…

JDK源碼解析之 Java.lang.Byte

byte,即字節,由8位的二進制組成。在Java中,byte類型的數據是8位帶符號的二進制數,以二進制補碼表示的整數 取值范圍:默認值為0,最小值為-128(-27);最大值是127(27-1) Byt…

在命令行模式下管理SELinux

作者: Oslad.com (原創!轉載請注明出處) 2006-07-14 在 GUI 圖形界面模式下,要更改 SELinux 的策略使用方式,只需依次點擊“應用程序”,“系統設置”,“安全級別”;然后在“安全級別配置”對…

JDK源碼解析之 Java.lang.Double

Double類是原始類型double的包裝類,它包含若干有效處理double值的方法,如將其轉換為字符串表示形式,反之亦然。Double類的對象可以包含一個double值。 Double類包裝原始類型的值 double中的對象。類型的對象 Double包含一個類型為的字段 doub…

網頁搜索幫助-禁止搜索引擎收錄的方法

什么是robots.txt文件?搜索引擎使用spider程序自動訪問互聯網上的網頁并獲取網頁信息。spider在訪問一個網站時,會首先會檢查該網站的根域下是否有一個叫做robots.txt的純文本文件。您可以在您的網站中創建一個純文本文件robots.txt,在文件中聲明該網站…

JDK源碼解析之 Java.lang.Float

Float類是原始類型float的包裝類&#xff0c;它包含若干有效處理浮點值的方法&#xff0c;如將其轉換為字符串表示形式&#xff0c;反之亦然。Float類的一個對象可以包含一個浮點值 一、類定義 public final class Float extends Number implements Comparable<Float> {…

FTP兩種工作模式:主動模式(Active FTP)和被動模式(Passive FTP)

在主動模式下&#xff0c;FTP客戶端隨機開啟一個大于1024的端口N向服務器的21號端口發起連接&#xff0c;然后開放N1號端口進行監聽&#xff0c;并向服務器發出PORT N 1命令。服務器接收到命令后&#xff0c;會用其本地的FTP數據端口&#xff08;通常是20&#xff09;來連接客戶…

JDK源碼解析之 java.lang.Integer

teger 基本數據類型int 的包裝類 Integer 類型的對象包含一個 int 類型的字段 一、類定義 public final class Integer extends Number implements Comparable<Integer>{}類被聲明為final的,表示不能被繼承;繼承了Number抽象類,可以用于數字類型的一系列轉換;實現了Comp…

Loadrunner的基本概念

1)vuser_init(only one &#xff0c;重復執行腳本的時候&#xff0c;此部分只會執行一次 ) %G< rJc*P 2)action( 一個或者多個 , 重復執行腳本的時候&#xff0c;只有該部分會按重復的次數重復執行 ) z*Xfjy(Mj 3)vuser_end(only one, 重復執行腳本的時候&#xff0c;此…

JDK源碼解析之 java.lang.Long

Long 與Integer 是數值類型中使用頻率最高的兩個,也是提供支持方法最多的兩個 他們提供出來的方法功能也是高度的相似 一、類定義 public final class Long extends Number implements Comparable<Long> {}類被聲明為final的,表示不能被繼承;繼承了Number抽象類,可以用于…

sed教程入門與實例練習(一)

UNIX 世界中有很多文本編輯器可供我們選擇。思考一下 — vi、emacs 和 jed 以及很多其它工具都會浮現在腦海中。我們都有自己已逐漸了解并且喜愛的編輯器&#xff08;以及我們喜愛的組合鍵&#xff09;。有了可信賴的編輯器&#xff0c;我們可以輕松處理任何數量與 UNIX 有關的…

JDK源碼解析之 Java.lang.Short

Short類是基本類型short 的包裝類&#xff0c;它包含幾種有效處理短值的方法&#xff0c;如將其轉換為字符串表示形式&#xff0c;反之亦然。Short類的對象可以包含單個短值。 一、類定義 public final class Short extends Number implements Comparable<Short> {}類被…

sed教程入門與實例練習(二)

讓我們看一下 sed 最有用的命令之一&#xff0c;替換命令。使用該命令&#xff0c;可以將特定字符串或匹配的規則表達式用另一個字符串替換。下面是該命令最基本用法的示例&#xff1a; $ sed -e ’s/foo/bar/’ myfile.txt上面的命令將 myfile.txt 中每行第一次出現的 ‘foo’…

Oracle GoldenGate簡介

一、什么是Oracle GoldenGate&#xff1f; Oracle GoldenGate是用于實時數據集成和復制的綜合軟件包。它支持高可用性解決方案&#xff0c;實時數據集成&#xff0c;事務性更改數據捕獲&#xff0c;數據復制&#xff0c;轉換以及運營和分析企業系統之間的驗證。 使用Oracle G…

sed教程入門與實例練習(三)

在第二篇 sed 文章中&#xff0c;我提供了一些示例來演示 sed 的工作原理&#xff0c;但是它們當中很少有示例能實際做特別有用的事。在這篇 sed 系列的最后文章中&#xff0c;我要改變那種方式&#xff0c;并使用 sed 來做實際的事。我將為您顯示幾個示例&#xff0c;它們不僅…