MySql雙機熱備
一、heartbeat 的安裝和配置 集群并不是一個全新的概念,其實早在七十年代計算機廠商和研究機構(gòu)就開始了對集群系統(tǒng)的研究和開發(fā)。由于主要用于科學工程計算,所以這些系統(tǒng)并不為大家所熟知。直到Linu
一、heartbeat 的安裝和配置 集群并不是一個全新的概念,其實早在七十年代計算機廠商和研究機構(gòu)就開始
了對集群系統(tǒng)的研究和開發(fā)。由于主要用于科學工程計算,
所以這些系統(tǒng)并不為大家所熟知。直到Linux 集群的出現(xiàn),集群的概念才得以廣為傳播。集群系統(tǒng)主要分為高可用(High Av ailability) 集群, 簡稱 HA 集群。常見的就是2個節(jié)點做成的
HA 集群,有很多通俗的不科學的名稱,比如" 雙機熱備", " 雙機互備", " 雙機" 。 這樣做的好處是當服務(wù)啟動的時候,兩臺服務(wù)器一個作為主,另一個是從。測試機每幾秒會ping 主機,當發(fā)現(xiàn)主機沒有回應(yīng),就證明主機宕機了,那么從機馬上會啟動相應(yīng)的服務(wù),繼續(xù)進行服務(wù)。這樣就可以保證服務(wù)不間斷。
具體的拓撲圖如下:
1.1.1安裝網(wǎng)絡(luò)環(huán)境設(shè)定
分別設(shè)置兩臺服務(wù)器eth1、eth0的IP 地址,如:server1所示
,更改計算機名稱
設(shè)置DNS 解析
1.1.2、安裝
1)先要檢查系統(tǒng)中是否有下面軟件開發(fā)包的支持,包括pkgconfig g lib2-devel e2fsprogs 和libnet
2) 我的系統(tǒng)中只缺少libnet ,安裝libnet ,這里使用的是1.1.2. 1版本
tar -zxvf libnet.tar .gz
cd libnet
./configure
make
make install
,3) 安裝heartbeat
tar -zxvf heartbeat-2.0.7.tar .gz
cd heartbeat-2.0.7
./ConfigureMe configure
make
make install
4) 當安裝好heartbeat 后,系統(tǒng)會在/etc/下建立一個ha.d 的目錄,我們需要把一些文件拷到里面去。
cp /soft/heartbeat-2.0.7/doc/ha.cf /etc/ha.d
cp /soft/heartbeat-2.0.7/doc/haresources /etc/ha.d cp /soft/heartbeat-2.0.7/doc/authkeys /etc/ha.d
1.1.3配置主要文件的配置
vi /etc/ha.d/ha.cf
具體要把下面的選項前的注釋去掉
logfile /var/log/ha-log
logfacility local0
keepalive 2 每2秒鐘 測試機發(fā)送一個廣播 deadtime 30 30秒內(nèi)沒有反應(yīng),立即切換服務(wù) warntime 10
initdead 120
udpport 694
bcast eth1 指明心跳連接的接口號
,ucast eth1 192.168.10.1 心跳連接的pc 的ip
auto_failback on
node
server1 兩個的主機名(最好用uname -n 察看) node server2
ping 192.168.0.1 測試機的ip (要寫外部的測試IP ) vi /etc/ha.d/haresources 這個主要是指明資源的來源,添加一條指定虛擬
IP
表示server2是主服務(wù)器,虛擬IP 地址
為192.168.0.10 ,IP 啟動虛擬服務(wù)器HTTPD 。
vi /etc/ha.d/authkeys 這個是安全方面的配置,里面有三種認證方式:crc md5 sha1
啟動sha1 認證,密碼為123456
啟動服務(wù)
二、MYSQL 數(shù)據(jù)庫同步
2.1.1Mysql 數(shù)據(jù)庫沒有增量備份的機制,當數(shù)據(jù)量太大的時候備份是一個很大的問題。還好Mysql 數(shù)據(jù)庫提供了一種主從備份的機制,其實就是把主數(shù)據(jù)庫的所有的數(shù)據(jù)同時寫到備份數(shù)據(jù)庫中。實現(xiàn)Mysql 數(shù)據(jù)庫的熱備份。要想實現(xiàn)雙機的熱備首先要了解主從數(shù)據(jù)庫服務(wù)器的版本的需求。要實現(xiàn)熱備Mysql 的版本都要高于3.2,還有一個基本的原則就是作為從數(shù)據(jù)庫的數(shù)據(jù)庫版本可以高于主服務(wù)器數(shù)據(jù)庫的版本,但是不可以低于主服務(wù)器的數(shù)據(jù)庫版本。首先查看主服務(wù)器的版本是否是支持熱備的版本。然后查看my.cnf(類unix) 或者my.ini(windows)中Mysqld 配置塊的配置有沒有l(wèi)og-bin(記錄數(shù)據(jù)庫更改日志) ,因為Mysql
,的復(fù)制機制是基于日志的復(fù)制機制,所以主服務(wù)器一定要支持更改日志才行。然后設(shè)置要寫入日志的數(shù)據(jù)庫或者不要寫入日志的數(shù)據(jù)庫。這樣只有您感興趣的數(shù)據(jù)庫的更改才寫入到數(shù)據(jù)庫的日志中。
2.1.2安裝MYSQL 5.1.41
兩臺服務(wù)器(主從服務(wù)器)做同樣mysql 刪除和重新安裝的安裝過程
備份數(shù)據(jù)庫:mysqldump T_SIP >/home/T_SIP.sql
Mysqldump T_USER >/home/T_USER.sql
刪除舊數(shù)據(jù)庫:rm –rf /usr/local/mysql
Rm –rf /etc/rc.d/init.d/mysqld
安裝新數(shù)據(jù)庫: 安裝之前,先將my.snf 文件拷貝到/etc目錄下。使用的安裝命令為 rpm –vhi MySQL******。安裝完成之后確定mysql server能夠正常啟動。
cp my.cnf /etc/
rpm –vhi MySQL-server-community-5.1.41-0.rhe15.i386.rpm
rpm -vhi MySQL-client-community-5.1.39-0.rhel4.i386.rpm
rpm -vhi MySQL-devel-community-5.1.39-0.rhel4.i386.rpm
rpm -vhi MySQL-shared-community-5.1.39-0.rhel4.i386.rpm
安裝mysql 數(shù)據(jù)庫二進制日志記錄插件:此插件mysql5.1里面沒有,mysql5.0自帶。 tar -zxvf innodb_plugin-1.0.6-rhel5.i486
cp ha_innodb.so /usr/lib/mysql/plugin/
chmod 777 ha_innodb.so
chown –R root:root ha_innodb.so
導入boromax 數(shù)據(jù)庫:使用mysql 命令進入mysql 數(shù)據(jù)庫控制臺
use T_SIP;
source /home/www/db/T_SIP.sql;
use T_USER;
source /home/www/db/T_USER.sql;
在主服務(wù)器中建立從服務(wù)器訪問主服務(wù)器mysql 上的用戶:使用mysql 命令進入mysql 數(shù)據(jù)庫控制臺
grant replication slave on *.* to 'ccc'@'192.168.10.1' identified by '654321'; flush privileges;
2.1.3 數(shù)據(jù)庫備份設(shè)置
A 、配置主服務(wù)器my.cnf 文件:vi /etc/my.cnf 在[mysqld]塊添加
ignore_builtin_innodb
plugin_load=innodb=ha_innodb.so;innodb_trx=ha_innodb.so;innodb_locks=ha_innodb.so;innodb_lock_waits=ha_innodb.so;innodb_cmp=ha_innodb.so;innodb_cmp_reset=h
,a_innodb.so;innodb_cmpmem=ha_innodb.so;innodb_cmpmem_reset=ha_innodb.so
指用二進制的形式記錄日志
server-id=1 服務(wù)器的ID
log-bin=mysql-bin 日志文件的名稱
binlog-do-db=T_SIP,T_USER 記錄日志的數(shù)據(jù)庫
binlog-ignore-db=mysql,test, information_schema 不記錄日志的數(shù)據(jù)庫
innodb_data_home_dir = /apps/mysql/lib/
innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend
innodb_log_group_home_dir = /apps/mysql/lib/
# You can set .._buffer_pool_size up to 50 - 80
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 128M
innodb_additional_mem_pool_size = 20M
# Set .._log_file_size to 25 of buffer pool size
innodb_log_file_size = 64M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
B 、配置從服務(wù)器my.cnd 文件:vi /etc/my.cnf 在[mysqld]塊添加
ignore_builtin_innodb
plugin_load=innodb=ha_innodb.so;innodb_trx=ha_innodb.so;innodb_locks=ha_innodb.so;innodb_lock_waits=ha_innodb.so;innodb_cmp=ha_innodb.so;innodb_cmp_reset=ha_innodb.so;innodb_cmpmem=ha_innodb.so;innodb_cmpmem_reset=ha_innodb.so
指用二進制的形式記錄日志
Server-id=2 //設(shè)置數(shù)據(jù)庫id 默認主服務(wù)器是1可以隨便設(shè)置但是如果有多臺從服務(wù)器則不能重復(fù)。
Master-host=192.168.10.1 //主服務(wù)器的IP 地址或者域名
Master-port=3306 //主數(shù)據(jù)庫的端口號
Master-user=ccc //同步數(shù)據(jù)庫的用戶
Master-password=654321 //同步數(shù)據(jù)庫的密碼
master-connect-retry=60 //如果從服務(wù)器發(fā)現(xiàn)主服務(wù)器斷掉,重新連接的時間差 report-host=192.168.10.2 //報告錯誤的服務(wù)器
innodb_data_home_dir = /apps/mysql/lib/
innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend
innodb_log_group_home_dir = /apps/mysql/lib/
# You can set .._buffer_pool_size up to 50 - 80
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 128M
innodb_additional_mem_pool_size = 20M
# Set .._log_file_size to 25 of buffer pool size
innodb_log_file_size = 64M
innodb_log_buffer_size = 8M
,innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
對/etc/my.cnf文件設(shè)置完成之后看mysql 服務(wù)是否可以啟動,如可以啟動那說明沒問題了,如果不能啟動說my.cnf 文件設(shè)置有問題。
C 、備份主服務(wù)器數(shù)據(jù)庫,導入到從服務(wù)器中 (主服務(wù)器操作以下命令)
備份之前先鎖定數(shù)據(jù)庫,使用mysql 命令進入mysql 數(shù)據(jù)庫控制臺
FLUSH TABLES WITH READ LOCK; 鎖定數(shù)據(jù)庫
unlock tables; 解除鎖定
show master status; 查看主服務(wù)器的二進制日志名稱和偏移量,如下圖:
日志名稱:mysql-bin.000001
偏移量:106
到這界面不用動了,另外打開一個窗口進行備份數(shù)據(jù)庫。
Cd /apps/mysql/lib 這是數(shù)據(jù)庫存儲目錄
Tar –zcvf 123.tgz ib* T_SIP T_USER
Scp 123.tgz
D 、設(shè)置從服務(wù)器的二進制日志和偏移量
覆蓋主服務(wù)器拷貝過來的數(shù)據(jù)庫和記錄文件
Cd /apps/mysql/lib
Tar –zxvf 123.tgz
使用mysql 命令進入mysql 數(shù)據(jù)庫控制臺:
slave stop; 停止slave 的服務(wù):
Change master to master_log_file='mysql-bin-000001',master_log_pos=106;
Slve stop; 啟動slave 服務(wù)
在主服務(wù)器查看狀態(tài)和信息