Mysql HA實現MYSQL的高可用
一、背景
當前大多網站採用MYSQL+Linux+APACHE這種經典配置,如何防止單點失敗造成的整個網站的不可用是網站管理者必須要考慮的問題,其中資料庫的高可用性(Database server’s high availability)是重中之重。
對於資料庫的高可用性,各商業軟體的廠商都有各自的解決方案,比如Oracle OPS server和IBM DB2 (share-nothing architecture)。最近MYSQL AB也發布了MYSQL cluster 軟體,使用與IBM DB2類似的技術。
MySQL cluster可能會是日後最理想的方案,但是從資源、可整合度方面考慮,給出一個簡單實用的方案借鑒。本文介紹的是性價比比較高的一種: 使用Heartbeat 2.0配置Linux高可用性設定組群。
二、實現原理
通過Linux HA 軟體 heartbeat 實現IP的自動漂移,即當一台伺服器宕機後,浮動IP(整個cluster的對外IP )自動漂移到另外一台伺服器。
通過Mysql自身的replication 實現不同機器上多個資料庫的同步整體效能此方案將會降低MYSQL 1%左右的效能,可用性及資料安全性將大有提高,同時伺服器的切換對終端使用者是透明的,終端應用不需要變更。
所需硬體
安裝有雙網卡的配置大致相同的伺服器或工作機兩台 一條交叉網線(用於雙機對連的心跳線)
所需軟體
Linux HA 軟體 heartbeat (只支援兩個節點),安裝盤裡整合的有這個軟體的rpm包
軟體首頁:http://www.linux-ha.org/
Mysql軟體
軟體首頁:http://www.mysql.com
實現步驟
一、設定硬體環境:如下表:
| 電腦名稱: |
網卡 |
ip地址 |
| primary |
Eth0 eth1 |
192.168.0.10/255.255.255.0 10.0.0.1/255.0.0.0 (用於心跳) |
| backup |
Eth0 eth1 |
192.168.0.11/255.255.255.0 10.0.0.2/255.0.0.0 (用於心跳 |
primary和backup的eth0分別串連到你的交換器
primary和backup的eth1之間用心跳線直連起來,做心跳
浮動IP為192.168.0.8/255.255.255.0
二、安裝MYSQL
在primary節點上安裝mysql資料庫
這裡我開始都把它下載到本地了,所以這裡我用軟體把mysql包上傳到伺服器root目錄下
1、在linux系統中添加運行Mysql的使用者和組
[root@primary ~]# groupadd mysql
[root@primary ~]# useradd -g mysql mysql
2、解壓縮源碼包
[root@primary ~]# tar -zxvf mysql-5.0.22.tar.gz
[root@primary ~]# cd mysql-5.0.22
3、配置編譯
配置mysql的安裝目錄,並制定資料庫的存放位置
[root@primary mysql-5.0.22]# ./configure –prefix=/usr/local/mysql \
–localstatedir=/var/lib/mysql
4、編譯並安裝
[root@primary mysql-5.0.22]#make
[root@primary mysql-5.0.22]#make install
5、裝載原始授權到資料庫
[root@primary mysql-5.0.22]#./scripts/mysql_install_db
6、copy設定檔到/etc目錄
[root@primary mysql-5.0.22]# cp support-files/my-medium.cnf /etc/my.cnf
7、copy啟動指令碼到資來源目錄
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
8、添加mysql服務,讓系統啟動時自動啟動mysql服務
[root@primary mysql-5.0.22]#chmod +x /etc/rc.d/init.d/mysqld
[root@primary mysql-5.0.22]#chkconfig –level 235 mysqld on
9、更改目錄屬主/var/lib/mysql
[root@primary mysql-5.0.22]#chown -R mysql.mysql /var/lib/mysql
10、啟動mysql
[root@primary mysql-5.0.22]#service mysqld start
11、設定環境變數
[root@primary ~]# vi /etc/profile添加一行就 ,在運行mysql的時候就不用輸入很長的路經了
export PATH=$PATH:/usr/local/mysql/bin
設定好之後,用下行命令是設定立即生效
# source /etc/profile
在backup伺服器上安裝mysql如同上面的步驟
在mysql資料庫中建立一個庫,用來同步資料和測試用,mysql安裝完後有一個練習庫test這裡就不建了直接就用它了。在test庫裡面先建一個表
登陸mysql資料庫
mysql -u root -p
(執行後提示輸入密碼,正確輸入mysql root使用者密碼後,登入mysql,以下操作在mysql命令列下進行)
要使用test資料庫,先用use命令選擇該資料庫:
mysql> use test
建立一個表
下面使用create table語句指定你要建的表的布局,下面只是用於一個測試的表。我就隨便建了一個:
mysql> create table data(name VARCHAR(20), address VARCHAR(50), phone VARCHAR(20));
Query OK, 0 rows affected (0.11 sec)
在表中添加一條記錄,用insert into語句:
mysql> insert into data(name,address,phone) values(‘jhone’,'beijing’,’138000000′);
Query OK, 1 row affected (0.02 sec)
查看錶中的記錄
mysql> select * from data;
+——-+———+———–+
| name | address | phone |
+——-+———+———–+
| jhone | beijing | 138000000 |
+——-+———+———–+
1 row in set (0.05 sec)