一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

MYSQL HA的實(shí)列

 shaojin 2007-05-31

做人要厚道,轉(zhuǎn)載請保留原文鏈接:http://www./1/viewspace_1868.html
作者:九尾銀狐

關(guān)于本文

  本文給出了一個(gè)MYSQL HA的實(shí)列,簡單說明了如何實(shí)現(xiàn)MYSQL的高可用性,方法并非僅此一種,感興趣的朋友可參考相關(guān)資料。

背景

   當(dāng)前大多網(wǎng)站采用MYSQL+Linux+APACHE這種經(jīng)典配置,如何防止單點(diǎn)失敗造成的整個(gè)網(wǎng)站的不可用是網(wǎng)站管理者必須要考慮的問題,其中數(shù)據(jù)庫的高可用性(Database server’s high availability)是重中之重。
   對于數(shù)據(jù)庫的高可用性,各商業(yè)軟件的廠商都有各自的解決方案,比如Oracle OPS server和IBM DB2 (share-nothing architecture)。最近MYSQL AB也發(fā)布了MYSQL cluster 軟件,使用與IBM DB2類似的技術(shù)。
   MySQL cluster可能會是日后最理想的方案,但是從資源、可集成度方面考慮,筆者將給出一個(gè)簡單實(shí)用的方案供大家借鑒。

實(shí)現(xiàn)原理

  通過Linux HA 軟件 heartbeat 實(shí)現(xiàn)IP的自動漂移,即當(dāng)一臺服務(wù)器宕機(jī)后,浮動IP(整個(gè)cluster的對外IP )自動漂移到另外一臺服務(wù)器。
  通過Mysql自身的replication 實(shí)現(xiàn)不同機(jī)器上多個(gè)數(shù)據(jù)庫的同步

整體性能

  此方案將會降低MYSQL 1%左右的性能,可用性及數(shù)據(jù)安全性將大有提高,同時(shí)服務(wù)器的切換對終端使用者是透明的,終端應(yīng)用不需要進(jìn)行更改。

所需硬件

  安裝有雙網(wǎng)卡的配置大致相同的服務(wù)器或工作機(jī)兩臺(測試而已,用Vmware虛擬吧)
  一條交叉網(wǎng)線(用于雙機(jī)對連的心跳線)

所需軟件

  Linux HA 軟件 heartbeat (只支持兩個(gè)節(jié)點(diǎn))
  軟件主頁:http://www./
 
  Mysql
  軟件主頁:www.

實(shí)現(xiàn)步驟

  一、設(shè)置硬件環(huán)境:
 
  Node1:
        計(jì)算機(jī)名:RHEL1
        eth0    : 192.168.168.1/255.255.255.0
        eth1    : 10.0.0.1/255.0.0.0 (用于心跳)
  Node2:
        計(jì)算機(jī)名:RHEL2
        eth0    : 192.168.168.2/255.255.255.0
        eth1    : 10.0.0.2/255.0.0.0 (用于心跳)

  Node1和Node2的eth0分別連接到你的交換機(jī)
  Node1和Node2的eth1之間用心跳線直連起來,做心跳
 
  二、安裝MYSQL

   在每個(gè)節(jié)點(diǎn)上分別安裝mysql,不會裝的看下面安裝步驟或是參考其它資料

   1.獲取軟件源碼包
   wget

  http://mysql./Downloads/MySQL-4.0/mysql-4.0.20.tar.gz
   2.解壓縮源碼包
   tar -zxvf mysql-4.0.20.tar.gz
   cd mysql-4.0.20
   3.在linux系統(tǒng)中添加運(yùn)行Mysql的用戶和組
   groupadd mysql
   useradd -g mysql -d /var/lib/mysql -s /sbin/nologin mysql
   4.配置編譯參數(shù)
   ./configure --prefix=/usr --localstatedir=/var/lib/mysql
   5.編譯并安裝
   make
   make install
   6.裝載原始授權(quán)到數(shù)據(jù)庫
   ./scripts/mysql_install_db
   7.copy配置文件到/etc目錄
   cp ./support-files/my-small.cnf /etc/my.cnf
   8.copy啟動腳本到資源目錄
   cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
   9.添加mysql服務(wù)
   chmod +x /etc/rc.d/init.d/mysqld
   chkconfig --add mysqld
  (chkconfig --list mysqld 查看狀態(tài),默認(rèn)在運(yùn)行級2.3.4.5是ON的,如果運(yùn)行級3是Off,則執(zhí)行chkconfig --level 3 mysqld on)
   10.更改目錄屬主
   chown -R mysql.mysql /var/lib/mysql
   11.啟動mysql
   service mysqld start
   12.設(shè)置mysql root用戶密碼
   mysql -u root (登入mysql,以下操作在mysql命令行下進(jìn)行)
   mysql>set password forroot@localhost=password(‘yourpassword‘); (設(shè)置從本地主機(jī)登錄的root用戶密碼)
   mysql>use mysql;
   mysql>delete from user where user=‘‘ ; (刪除匿名用戶)
   mysql>delete from user where host<>‘localhost‘ ; (只充許從localhost登錄)
   mysql>flush privileges ; (使更改生效)
   mysql>\q (退出mysql命令行)

   至此,Mysql基本安裝完畢。

  三、設(shè)置Mysql Replication

   以下步驟在Node1上操作

   1.增加一用于數(shù)據(jù)庫同步的用戶replicate
  
   mysql -u root -p (執(zhí)行后提示輸入密碼,正確輸入mysql root用戶密碼后,登入mysql,以下操作在mysql命令行下進(jìn)行)
 
   mysql>GRANT REPLICATION SLAVE ON *.* TOreplicate@10.0.0.2IDENTIFIED BY ‘password‘ ;
   (授與從10.0.0.2主機(jī)上登錄用戶replicate數(shù)據(jù)復(fù)制權(quán)限,4.02版本以前用:GRANT FILE ON *.* TOreplicate@10.0.0.2IDENTIFIED BY ‘password‘;)

   mysql>flush privileges; (使權(quán)限生效,這步可不做,因?yàn)檫^會要重啟mysql)

   mysql>\q (退出mysql命令行界面)
  
   2.停止mysql服務(wù)
   service mysqld stop

   3.更改Mysql配置文件/etc/my.cnf

   vi /etc/my.cnf

   在[mysqld]一節(jié)中增加以下內(nèi)容


   server-id=1      #服務(wù)器的標(biāo)識 1~2^32-1,不同主機(jī)設(shè)為不同的值,否則可能會出現(xiàn)不可預(yù)料的錯(cuò)誤

   #以下內(nèi)容為作為Master的配置,如果此服務(wù)器只作為Slave,注釋掉以下各行
   log-bin                        #允許二進(jìn)制更新日志
   binlog-do-db=dbname            #指定做二進(jìn)制更新日志的數(shù)據(jù)庫,多個(gè)數(shù)據(jù)庫用多條此語句,如,還有anotherdb,去掉下行的注釋
   #binlog-do-db=anotherdb
   binlog-ignore-db=dbname        #指明數(shù)據(jù)庫dbname不做二進(jìn)制更新日志,沒有則注釋掉此行,多個(gè)數(shù)據(jù)庫用多條此語句,如,還有anotherigdb,去掉下行的注釋
   #binlog-ignore-db=anotherigdb
 
   #以下內(nèi)容為作為Slave的配置,如果此服務(wù)器只作為Master,注釋掉以下各行 
   master-host=10.0.0.2           #Master服務(wù)器地址
   master-user=replicate          #Master服務(wù)器上用于replication的用戶,必須有replication slave權(quán)限
   master-password=replicatepass  #Master服務(wù)器上用于replication的用戶的密碼       
   master-port=3306               #Master服務(wù)器的TCP端口
   master-connect-retry=60        #如果連接Master服務(wù)器失敗,重試連接的間隔,以秒為單位
   replicate-do-db=dodbname       #指明要復(fù)制的數(shù)據(jù)庫,多個(gè)數(shù)據(jù)庫用多條此語句,如,還有anotherdb,去掉下行的注釋
   #replicate-do-db=anotherdb
   replicate-ignore-db=igdbname   #指明不做復(fù)制的數(shù)據(jù)庫,多個(gè)數(shù)據(jù)庫用多條此語句,如,還有anotherigdb,去掉下行的注釋
   #replicate-ignore-db=anotherigdb 

   4.將要進(jìn)行復(fù)制的數(shù)據(jù)庫打包傳到Node2
  
   tar -cvf /tmp/mysql-thisdb-snapshot.tar /var/lib/mysql/thisdb (將要進(jìn)行復(fù)制的thisdb數(shù)據(jù)庫打包)

   scp /tmp/mysql-thisdb-snapshot.tarroot@10.0.0.2:/tmp/ (將mysql-thisdb-snapshot.tar復(fù)制到Node2的/tmp目錄)
 
   5.啟動Mysql

   service mysqld start
 
   至此,Node1上的Mysql設(shè)置完畢,以下操作在Node2上完成
     
   1.增加一用于數(shù)據(jù)庫同步的用戶replicate
  
   mysql -u root -p (執(zhí)行后提示輸入密碼,正確輸入mysql root用戶密碼后,登入mysql,以下操作在mysql命令行下進(jìn)行)
 
   mysql>GRANT REPLICATION SLAVE ON *.* TOreplicate@10.0.0.1IDENTIFIED BY ‘password‘ ;
   (授與從10.0.0.1主機(jī)上登錄用戶replicate數(shù)據(jù)復(fù)制權(quán)限,4.02版本以前用:GRANT FILE ON *.* TOreplicate@10.0.0.1IDENTIFIED BY ‘password‘;)

   mysql>flush privileges; (使權(quán)限生效,這步可不做,因?yàn)檫^會要重啟mysql)

   mysql>\q (退出mysql命令行界面)
  
   2.停止mysql服務(wù)
   service mysqld stop

   3.更改Mysql配置文件/etc/my.cnf

   vi /etc/my.cnf

   在[mysqld]一節(jié)中增加以下內(nèi)容


   server-id=2      #服務(wù)器的標(biāo)識 1~2^32-1,不同主機(jī)設(shè)為不同的值,否則可能會出現(xiàn)不可預(yù)料的錯(cuò)誤

   #以下內(nèi)容為作為Master的配置,如果此服務(wù)器只作為Slave,注釋掉以下各行
   log-bin                        #允許二進(jìn)制更新日志
   binlog-do-db=dbname            #指定做二進(jìn)制更新日志的數(shù)據(jù)庫,多個(gè)數(shù)據(jù)庫用多條此語句,如,還有anotherdb,去掉下行的注釋
   #binlog-do-db=anotherdb
   binlog-ignore-db=dbname        #指明數(shù)據(jù)庫dbname不做二進(jìn)制更新日志,沒有則注釋掉此行,多個(gè)數(shù)據(jù)庫用多條此語句,如,還有anotherigdb,去掉下行的注釋
   #binlog-ignore-db=anotherigdb
 
   #以下內(nèi)容為作為Slave的配置,如果此服務(wù)器只作為Master,注釋掉以下各行 
   master-host=10.0.0.1           #Master服務(wù)器地址
   master-user=replicate          #Master服務(wù)器上用于replication的用戶,必須有replication slave權(quán)限
   master-password=replicatepass  #Master服務(wù)器上用于replication的用戶的密碼       
   master-port=3306               #Master服務(wù)器的TCP端口
   master-connect-retry=60        #如果連接Master服務(wù)器失敗,重試連接的間隔,以秒為單位
   replicate-do-db=dodbname       #指明要復(fù)制的數(shù)據(jù)庫,多個(gè)數(shù)據(jù)庫用多條此語句,如,還有anotherdb,去掉下行的注釋
   #replicate-do-db=anotherdb
   replicate-ignore-db=igdbname   #指明不做復(fù)制的數(shù)據(jù)庫,多個(gè)數(shù)據(jù)庫用多條此語句,如,還有anotherigdb,去掉下行的注釋
   #replicate-ignore-db=anotherigdb 

   4.將先前從Node1上發(fā)過來的數(shù)據(jù)庫的打包文件解壓并替換掉原有文件,并確保屬主及權(quán)限正確
  
   cd /var/lib/mysql
   tar -xvf /tmp/mysql-thisdb-snapshot.tar
   chown -R mysql.mysql thisdb
   chmod 700 thisdb
   chmod 660 thisdb/*

   5.啟動Mysql

   service mysqld start

   至此Node2上的Mysql設(shè)置完畢

   在Mysql中可通過以下命令來查看主從狀態(tài)
  
   show master status 查看master狀態(tài)
   show slave status    查看slave狀態(tài)
   show processlist \G  查看當(dāng)前進(jìn)程
   stop slave  暫時(shí)停止slave進(jìn)程
   start slave  開始slave進(jìn)程
  
   其它相關(guān)命令及詳細(xì)配置參數(shù)請自行查閱Mysql在線文檔
 
 四、安裝配置Linux HA軟件heartbeat

  在每個(gè)節(jié)點(diǎn)上分別安裝heartbeat

  1.安裝支持包(站點(diǎn)提供下載)
  Linux的版本不同,RPM文件名可能會不同,請選擇相應(yīng)版本的RPM
  rpm -iUvh libnet-1.1.0-1.rh.el.1.i386.rpm  
  rpm -iUvh ipvsadm-1.21-1.rh.el.1.i386.rpm
  rpm -iUvh perl-Parse-RecDescent-1.80-1.rh.el.um.1.noarch.rpm
  rpm -iUvh perl-Mail-IMAPClient-2.2.7-1.rh.el.um.1.noarch.rpm
  rpm -iUvh perl-Net-SSLeay-1.23-1.rh.el.um.1.i386.rpm
  rpm -iUvh perl-Digest-SHA1-2.01-10.i386.rpm
  rpm -iUvh perl-Digest-HMAC-1.01-11.noarch.rpm
  rpm -iUvh perl-Authen-SASL-2.03-1.rh.el.um.1.noarch.rpm
  rpm -iUvh perl-Convert-ASN1-0.16-2.rh.el.um.1.noarch.rpm
  rpm -iUvh perl-IO-Socket-SSL-0.92-1.rh.el.um.1.noarch.rpm
  rpm -iUvh perl-XML-NamespaceSupport-1.08-1.rh.el.um.1.noarch.rpm
  rpm -iUvh perl-XML-SAX-0.12-1.rh.el.um.1.noarch.rpm
  rpm -iUvh perl-ldap-0.2701-1.rh.el.um.1.noarch.rpm

  2.按裝heartbeat
  以RPM方式按裝(推薦),Linux的版本不同,RPM文件名可能會不同,請選擇相應(yīng)版本的RPM
  rpm -iUvh heartbeat-pils-1.3.0-1.rh.el.3.0.i386.rpm
  rpm -iUvh heartbeat-stonith-1.3.0-1.rh.el.3.0.i386.rpm
  rpm -iUvh heartbeat-ldirectord-1.3.0-1.rh.el.3.0.i386.rpm
  rpm -iUvh heartbeat-1.3.0-1.rh.el.3.0.i386.rpm 

  3.Copy配置文件到/etc/ha.d目錄 (只在一個(gè)節(jié)點(diǎn)上做即可,所有配置完成后copy到其它節(jié)點(diǎn))
  cp /usr/share/doc/heartbeat-1.3.0/ha.cf /etc/ha.d/
  cp /usr/share/doc/heartbeat-1.3.0/haresources /etc/ha.d/
  cp /usr/share/doc/heartbeat-1.3.0/authkeys /etc/ha.d/

  4.配置/etc/ha.d/ha.cf (只在一個(gè)節(jié)點(diǎn)上配即可,配好后copy到其它節(jié)點(diǎn))

  vi /etc/ha.d/ha.cf

  按如下內(nèi)容進(jìn)行修改(文件中#開頭的行為注釋行,更多的選項(xiàng)及選項(xiàng)的詳細(xì)說明請參考文件中的注釋及相關(guān)文檔)
 
  debugfile /var/log/ha-debug   #寫debug信息到這個(gè)文件中
  logfile /var/log/ha-log       #寫運(yùn)行日志到這個(gè)文件中
  keepalive 2                   #設(shè)置心跳時(shí)間為2秒
  deadtime 30                   #設(shè)置離最近一次心跳多長時(shí)間沒有心跳時(shí)表明節(jié)點(diǎn)失敗
  warntime 10                   #設(shè)置離最近的一次心跳多長時(shí)間沒有心跳時(shí)發(fā)出警告
  initdead 120                  #機(jī)器重啟動或是剛開機(jī)時(shí),網(wǎng)絡(luò)能正確開始工作的時(shí)間,最小設(shè)置為deadtime的兩倍
  udpport 694                   #bcast/ucast方式心跳通訊所用的UDP端口
  #baud   19200                 #串口的波特率,使用串口作心跳時(shí)需設(shè)置
  #serial /dev/ttyS0            #串口設(shè)備名,使用串口作心跳時(shí)需設(shè)置
  bcast   eth1                  #使用哪一個(gè)設(shè)備(網(wǎng)卡)做心跳
  #bcast  eth1 eth2             #使用多個(gè)設(shè)備(網(wǎng)卡)做心跳時(shí)的設(shè)置
  auto_failback on              #當(dāng)主節(jié)點(diǎn)從失敗狀態(tài)恢復(fù)時(shí)是否恢復(fù)其主節(jié)點(diǎn)的身份,即應(yīng)用是否返回到其自身運(yùn)行
                                #on   返回
                                #off  不返回,其它節(jié)點(diǎn)繼續(xù)作為主節(jié)點(diǎn)運(yùn)行
                                #legacy 當(dāng)所有節(jié)點(diǎn)都不支持自動返回時(shí),將自身設(shè)為自動返回
  node    RHEL1                 #節(jié)點(diǎn)的主機(jī)名或域名,需在/etc/hosts文件或

DNS服務(wù)器中設(shè)置
  node    RHEL2                 #所有節(jié)點(diǎn)都以node開始的行列出
  ping    192.168.168.254       #ping節(jié)點(diǎn),不屬于cluster內(nèi)的節(jié)點(diǎn),通常選一臺路由器或交換機(jī)作為Ping節(jié)點(diǎn),
                                #ipfail模塊通過此節(jié)點(diǎn)來驗(yàn)證網(wǎng)絡(luò)的連通性,可指定多個(gè)Ping節(jié)點(diǎn),如:
  #ping   192.168.168.253 192.168.0.254 ns1.rhel.com ping.

  respawn hacluster /usr/lib/heartbeat/ipfail   #由heartbeat調(diào)用并監(jiān)視ipfail模塊                        
 
  5.配置/etc/ha.d/haresources (只在一個(gè)節(jié)點(diǎn)上配即可,配好后copy到其它節(jié)點(diǎn))

  vi /etc/ha.d/haresources
 
  按如下內(nèi)容進(jìn)行修改(文件中#開頭的行為注釋行,更多的選項(xiàng)及選項(xiàng)的詳細(xì)說明請參考文件中的注釋及相關(guān)文檔)

  RHEL1 192.168.168.103 mysqld  #設(shè)置heartbeat管理的資源或服務(wù)
                                #格式為:主節(jié)點(diǎn)主機(jī)名或域名  浮動IP  服務(wù)名
                                #主節(jié)點(diǎn)主機(jī)名或域名為ha.cf中node行中指定的任一節(jié)點(diǎn)
                                #浮動IP 為對外提供訪問的IP,主節(jié)點(diǎn)失敗后會自動漂移到其它節(jié)點(diǎn),繼續(xù)對外提供服務(wù).
                                #服務(wù)名 為 heartbeat管理的服務(wù)

  #注意,此文件內(nèi)容所有節(jié)點(diǎn)必須保持一致。

  6.配置/etc/ha.d/authkeys (只在一個(gè)節(jié)點(diǎn)上配即可,配好后copy到其它節(jié)點(diǎn))

  vi /etc/ha.d/authkeys

  按如下內(nèi)容進(jìn)行修改(文件中#開頭的行為注釋行,更多的選項(xiàng)及選項(xiàng)的詳細(xì)說明請參考文件中的注釋及相關(guān)文檔)

  auth 1   #設(shè)置認(rèn)證方式
  1 crc    #格式為:auth <number>
  #auth 2   #  <number> <authmethod>

[<authkey>]
  #2 md5 Hello!   #如果是用心跳是用交叉線直接對連兩個(gè)節(jié)點(diǎn),用crc方式即可,CPU占用最少
  #auth 3         #如果心跳位于不安全的網(wǎng)絡(luò),如通過共用交換機(jī)連接節(jié)點(diǎn),則選用sha1或md5
  #3 sha1 HI!     #sha1占用CPU資源更多,但是更安全,md5安全性及CPU占用率居中
                  #sha1和md5都需要提供認(rèn)證KEY,即用來加密的KEY
 
  #注意,此文件權(quán)限必須設(shè)置為600

  7.copy配置文件到其它節(jié)點(diǎn)

  scp /etc/ha.d/ha.cf /etc/ha.d/haresources /etc/ha.d/authkeysroot@RHEL2:/etc/ha.d/

  8.分別設(shè)置各節(jié)點(diǎn)/etc/ha.d/authkeys文件權(quán)限

  chmod 600 /etc/ha.d/authkeys   (文件權(quán)限必須設(shè)置為600,否則heartbeat不能正常啟動) 

  9.在每個(gè)節(jié)點(diǎn)上啟動heartbeat

  service heartbeat start

 五、測試

  請自行模擬各種宕機(jī)情況,進(jìn)行測試,這里不一一例舉。

總結(jié)

  此方案在Redhat Linux Enterprise Server 3.0 上測試通過,

其它系統(tǒng)請參照本文自行測試。(完)

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    小黄片大全欧美一区二区| 国产成人精品在线播放| 冬爱琴音一区二区中文字幕| 国产精品一区二区丝袜| 国产免费一区二区三区av大片| 熟女少妇久久一区二区三区| 国产精品欧美一区二区三区| 日韩国产传媒在线精品| 日韩一级免费中文字幕视频| 中文字幕不卡欧美在线| 国产美女精品午夜福利视频| 不卡一区二区在线视频| 久久成人国产欧美精品一区二区| 亚洲国产av一二三区| 丝袜人妻夜夜爽一区二区三区| 香蕉网尹人综合在线观看| 国产又粗又猛又长又大| 午夜国产成人福利视频| 国产精品香蕉一级免费| 国产日韩熟女中文字幕| 午夜精品一区二区三区国产| 五月婷婷欧美中文字幕| 夫妻性生活真人动作视频| 中文字字幕在线中文乱码二区 | 国产亚洲精品久久久优势| 国产免费黄片一区二区| 国产一区欧美一区日韩一区| 日韩欧美在线看一卡一卡| 国产成人午夜在线视频| 欧美大胆女人的大胆人体| 国产一区二区熟女精品免费| 日韩三极片在线免费播放| 国产精品一区日韩欧美| 日韩中文无线码在线视频| 日本女优一色一伦一区二区三区| 激情内射日本一区二区三区| 精品伊人久久大香线蕉综合| 国产乱久久亚洲国产精品| 日韩人妻免费视频一专区| 国内女人精品一区二区三区| 韩日黄片在线免费观看|