程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> DRBD+MYSQL實現高可用的數據庫環境

DRBD+MYSQL實現高可用的數據庫環境

編輯:關於MYSQL數據庫
運行環境:Ubuntu8.0.4
              DRBD-8.0.11
              MySQL-5.1.36-log
              
服務器名稱及IP:DBTest1 192.168.0.101 primary node
                     DBTest2 192.168.0.102 secondary node步驟:
一,編譯安裝MySQL
     在DBTest1和DBTest2上分別執行如下步驟
     #tar -zxvf MySQL-5.1.36.tar.gz
     #cat MySQL-5.1.36
     #./configure --prefix=/usr/local/MySQL --with-charset=utf8  --with-plugins=max-no-ndb
     #make
     #make install
     #adduser MySQL
     到此mysql安裝完成,先不急著運行MySQL下面安裝DRBD
二,安裝DRBD
    在DBTest1和DBTest2上分別執行如下步驟
    #sudo apt-get install drbd8-utils
    安裝完成後查看drbd是否安裝成功
    #lsmod | grep drbd
      drbd                  213256  4
      cn                      9632  1 drbd
    看到上面的信息則表示安裝成功了
三,增加磁盤分區
     在我的測試環境中有一個新的磁盤/dev/sdb 現在在這個磁盤上分一個區/dev/sdb1用於drbd,  注冊DBTEST1和DBTEST2上的磁盤分區大小最好相同。
     #fdisk /dev/sdb
      
四,配置DRBD
     DRBD 的配置文件一般位於/etc/drbd.conf,修改這個文件,注意在DBTEST1和DBTEST2中這個文件要完成相同  
   
     global {
       usage-count no;
     }     common {
        syncer { rate 10M; }
     }    resource MySQL {
     protocol C;     on DBTest1 {
         device     /dev/drbd0;
        disk       /dev/sdb1;
        address    192.168.0.101:7788;
        flexible-meta-disk  internal;
     }  on DBTest2 {
        device    /dev/drbd0;
        disk      /dev/sdb1;
        address   192.168.0.102:7788;
        meta-disk internal;
    }
}
五,啟動DRBD
     在DBTEST1(主節點)上執行如下命令  
    1) 創建matadata:
        #drbdadm create-md all
    2) 啟動drbd:
       #/etc/init.d/drbd start
    3) 設置為主節點:
       #drbdadm  primary all
    4) 在新設備上面創建文件系統
       #mkfs.ext3 /dev/drbd0
    5) 將文件系統mount上
       #mkdir /dbfile
       #mount /dev/drbd0 /dbfile
     在DBTEST2(從節點)上執行如下命令:
    1) 創建matadata:
       #drbdadm create-md all
    2) 啟動drbd:
       #/etc/init.d/drbd start
    注:在從節點上不用創建文件系統(因為這些信息都會從主節點同步過來的)
六,檢查DRBD的服務狀態:
     在DBTEST1上執行如下命令:
     #pa -aux | grep drbd
root@DBTest1:~# ps aux | grep drbd
root      5761  0.1  0.0      0     0 ?        S    14:44   0:09 [drbd0_worker]
root      5763  0.4  0.0      0     0 ?        S    14:44   0:29 [drbd0_receiver]
root      5768  0.1  0.0      0     0 ?        S    14:44   0:08 [drbd0_asender]
root      6413  0.0  0.4   1784   536 pts/1    R+   16:41   0:00 grep drbd
#cat /proc/drbd
root@DBTest1:~# cat /proc/drbd
version: 8.0.11 (api:86/proto:86)
GIT-hash: b3fe2bdfd3b9f7c2f923186883eb9e2a0d3a5b1b build by phil@mescal, 2008-02-12 11:56:43
0: cs:Connected st:Primary/Secondary ds:Inconsistent/UpToDate C r---
    ns:88796 nr:1060 dw:89856 dr:0 al:42 bm:28 lo:0 pe:0 ua:0 ap:0
        resync: used:0/31 hits:0 misses:0 starving:0 dirty:0 changed:0
        act_log: used:0/257 hits:22157 misses:66 starving:0 dirty:24 changed:42在DBTEST2上執行如下命令
root@DBTest2:/tools/MySQL-5.1.36# ps -aux |grep drbd
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.Net/faq.Html
root      5672  0.0  0.0      0     0 ?        S    14:38   0:00 [drbd0_worker]
root      5673  0.3  0.0      0     0 ?        S    14:38   0:26 [drbd0_receiver]
root      5695  0.0  0.0      0     0 ?        S    14:44   0:03 [drbd0_asender]
root      6097  0.0  0.4   1788   576 pts/0    S+   16:42   0:00 grep drbd
# cat /proc/drbd
version: 8.0.11 (api:86/proto:86)
GIT-hash: b3fe2bdfd3b9f7c2f923186883eb9e2a0d3a5b1b build by phil@mescal, 2008-02-12 11:56:43
0: cs:Connected st:Secondary/Primary ds:UpToDate/Inconsistent C r---
    ns:3302 nr:88796 dw:89856 dr:2615 al:9 bm:8 lo:0 pe:0 ua:0 ap:0
        resync: used:0/31 hits:0 misses:0 starving:0 dirty:0 changed:0
        act_log: used:0/257 hits:256 misses:9 starving:0 dirty:0 changed:9看到以上信息說明DRBD已經正確啟動了。其中drbd0_worker是drbd的主進程,而drbd0_asender是塊發送進程,drbd0_receiver是塊接收進程.  cat /proc/drbd 中的信息如下FIEld        說明                  值:
cs         連接狀態                出現的值:
                    o Unconfigured:設備在等待配置。
                    o  Unconnected:連接模塊時的過渡狀態。
                    o WFConnection:設備等待另一測的配置。
                     o WFReportParams:過渡狀態,等待新TCP 連接的第一個數據包時。.
                     o SyncingAll:正將主節點的所有模塊復制到次級節點上。.
                    o  SyncingQuick:通過復制已被更新的模塊(因為現在次級節點已經離開了集群)來更新次級節點。
                    o  Connected:一切正常。
                    o Timeout:過渡狀態。
st         狀態(設備的作用)       可能的值為:
                    o 本地/遠程一級狀態
                    o 二級狀態
                     o 未知(這不是一種作用)
ns    網絡發送    模塊號碼
nr    網絡接收     模塊號碼
dw   磁盤寫入    模塊號碼
DR   磁盤讀取    模塊號碼
of    運行中(過時的)模塊號碼
pe    待解決的    模塊號碼
ua    未答復的    模塊號碼(最好為0)  
七,配置MySQL
     #cd /usr/local/MySQL
     #bin/mysql_install_db --datadir=/dbfile --user=MySQL
     #vi /dbfile/my.cnf
      
[clIEnt]
#password       = your_passWord
port            = 3306
socket          = /tmp/MySQL.sock# Here follows entrIEs for some specific programs# The MySQL Server
[MySQLd]
port            = 3306
socket          = /tmp/MySQL.sock
skip-locking
key_buffer_size = 16K
max_allowed_packet = 1M
table_open_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 128K
datadir=/dbfile
basedir=/usr/local/MySQLserver-id       = 2log-bin=DBTest_bin# binary logging format - mixed recommended
#binlog_format=mixed# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /opt/data/innodb
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /usr/local/MySQL/var/
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#innodb_buffer_pool_size = 2M
#innodb_additional_mem_pool_size = 1M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 5M
#innodb_log_buffer_size = 1M
#innodb_flush_log_at_trx_commit = 2
#innodb_lock_wait_timeout = 50#Slave Configure
#master-host=192.168.0.101
#master-port=3306
#master-user=repl #同步用戶帳號
#master-passWord=oursaadmin
#master-connect-retry=60 #預設重試間隔60秒
#replicate-do-db=crn #告訴slave只做blog數據庫的更新
#relay-log=mysqld-relay-bin[MySQLdump]
quick
max_allowed_packet = 16M[MySQL]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M[MySQLhotcopy]
interactive-timeout八,測試
     在DBTEST1中啟動MySQL
     #cd /usr/local/MySQL
     # bin/mysqld_safe --defaults-file=/dbfile/my.cnf --user=MySQL  &
     #MySQL > create database crn;
     #MySQL > create table t(i int);
     #MySQL > insert into t values(1),(2),(3)
     #MySQL> select * from t;
+------+
| i    |
+------+
|    1 |
|    2 |
|    3 |
+------+
3 rows in set (0.00 sec)
   退出mysql,並在DBTEST1上關閉MySQL,將主節點切換到DBTEST2
   # bin/MySQLadmin shutdown
   #umount /dbfile
   #drbdadm secondary  all
  在DBTEST2 上執行如下命令
   #drbdadmin primary all
   #mount /dev/drbd0 /dbfile
   #cd /usr/local/MySQL
   #bin/mysqld_safe --defaults-file=/dbfile/my.cnf --user=MySQL &
   #MySQL > use crn;
   #MySQL > select * from t;
     
[color="#000000"]+------+[/color]
[color="#000000"]| i    |[/color]
[color="#000000"]+------+[/color]
[color="#000000"]|    1 | [/color]
[color="#000000"]|    2 | [/color]
[color="#000000"]|    3 | [/color]
[color="#000000"]+------+[/color]
[color="#000000"]3 rows in set (0.00 sec)[/color]
    查看數據完成一致,說明DRBD的同步已經成功了
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved