DRBD+keepalived+LAMP+discuz
DRBD(Distributed Replicated Block Device)是一個(gè)基于塊設(shè)備級(jí)別在遠(yuǎn)程服務(wù)器直接同步和鏡像數(shù)據(jù)的開源軟件,類似于RAID1數(shù)據(jù)鏡像,通常配合keepalived、heartbeat等HA軟件來實(shí)現(xiàn)高可用性。
DRBD是一種塊設(shè)備,可以被用于高可用(HA)之中.它類似于一個(gè)網(wǎng)絡(luò)RAID-1功能,當(dāng)你將數(shù)據(jù)寫入本地文件系統(tǒng)時(shí),數(shù)據(jù)還將會(huì)被發(fā)送到網(wǎng)絡(luò)中另一臺(tái)主機(jī)上.以相同的形式記錄在一個(gè)文件系統(tǒng)中。
本地(master)與遠(yuǎn)程主機(jī)(backup)的保證實(shí)時(shí)同步,如果本地系統(tǒng)出現(xiàn)故障時(shí),遠(yuǎn)程主機(jī)上還會(huì)保留有一份相同的數(shù)據(jù),可以繼續(xù)使用.在高可用(HA)中使用DRBD功能,可以代替使用一個(gè)共享盤陣.因?yàn)閿?shù)據(jù)同時(shí)存在于本地主機(jī)和遠(yuǎn)程主機(jī)上,切換時(shí),遠(yuǎn)程主機(jī)只要使用它上面的那份備份數(shù)據(jù)。
通過本次課程的學(xué)習(xí),大家可以熟練構(gòu)建企業(yè)級(jí)MySQL+DRBD+Keepalived高性能高可用架構(gòu),滿足企業(yè)網(wǎng)站高效的訪問,有突發(fā)故障及時(shí)切換。
?MySQL+DRBD+Keepalived企業(yè)實(shí)戰(zhàn)
MASTER:192.168.77.133
SLAVE:192.168.77.166
VIP:192.168.77.189
初始化配置
1)?在128、129兩臺(tái)服務(wù)器/etc/hosts里面都添加如下配置:
192.168.77.133? node1
192.168.77.166? node2
每臺(tái)單獨(dú)劃一個(gè)分區(qū),我這里直接各增加一個(gè)大小相同的磁盤
兩臺(tái)服務(wù)器分別添加一塊設(shè)備,用于DRBD主設(shè)備存儲(chǔ),我這里為/dev/sdb 20G硬盤;
執(zhí)行如下命令初始化:
| 1 | mkfs.ext4?/dev/sdb?;dd?if=/dev/zero?of=/dev/sdb?bs=1M?count=1;sync |
DRBD安裝配置
Yum方式安裝:在兩臺(tái)機(jī)器上安裝
| 1 2 3 | rpm?-Uvh?http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm? yum?-y?install?drbd83*?kmod-drbd83?;?modprobe??drbd |
| 1 2 3 4 5 | lsmod?|?grep?drbd???查看drbd模塊 [root@192_168_77_133?~]#?modprobe??drbd FATAL:?Module?drbd?not?found. 需要重啟系統(tǒng) |
修改配置文件/etc/drbd.conf兩臺(tái)配置文件一樣
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | global?{ ????usage-count?yes; } common?{ syncer?{?rate?100M;?}????#同步每s的速率 } resource?r0?{????????????#節(jié)點(diǎn)r0 ?protocol?C; ?startup?{ ?} ?disk?{ ?on-io-error?detach;???????#錯(cuò)誤的信息 ?#size?1G;?????????????????#同步的磁盤空間 ?} ?net?{?????????????????????#網(wǎng)絡(luò)節(jié)點(diǎn)node1,node2 ?} ?on?node1?{?????????????????# ?device?/dev/drbd0;?????????#塊設(shè)備 ?disk?/dev/sdb; ?address?192.168.77.133:7898; ?meta-disk?internal; ?} ?on?node2?{ ?device?/dev/drbd0; ?disk?/dev/sdb; ?address?192.168.77.166:7898; ?meta-disk?internal; ?} } |
配置修改完畢后執(zhí)行如下命令初始化:
| 1 | drbdadm?create-md??r0??;/etc/init.d/drbd?restart?;/etc/init.d/drbd?status |
這里主要如果報(bào)錯(cuò)主機(jī)名問題需要修改主機(jī)名為node1、node2
兩臺(tái)都啟動(dòng)后查看狀態(tài)會(huì)發(fā)現(xiàn)兩臺(tái)都是secondary備用狀態(tài)表示目前兩臺(tái)都為從,我們需要設(shè)置node1為master,命令如下:
| 1 2 3 4 5 6 7 8 9 | [root@node1?~]#?drbdadm??--??--overwrite-data-of-peer?primary?all [root@node1?~]#?/etc/init.d/drbd?status drbd?driver?loaded?OK;?device?status: version:?8.3.16?(api:88/proto:86-97) GIT-hash:?a798fa7e274428a357657fb52f0ecf40192c1985?build?by?phil@Build32R6,?2014-11-24?14:49:06 m:res??cs??????????ro?????????????????ds?????????????????????p??mounted??fstype ...????sync'ed:????44.4%??????????????(586368/1048576)K 0:r0???SyncSource??Primary/Secondary??UpToDate/Inconsistent??C |
查看為主后初始化塊然后掛載:
| 1 2 3 4 5 6 7 8 9 10 11 | [root@node1?~]#?mkfs.ext4??/dev/drbd0 [root@node1?~]#?mkdir??/app??;mount?/dev/drbd0??/app [root@node1?~]#?df?-h???????#查看app已經(jīng)掛載上 Filesystem??????Size??Used?Avail?Use%?Mounted?on /dev/sda5???????3.1G??2.8G??138M??96%?/ tmpfs???????????442M?????0??442M???0%?/dev/shm /dev/sda1???????190M???40M??141M??23%?/boot /dev/sda2????????15G???55M???14G???1%?/data /dev/drbd0???????20G???44M???19G???1%?/app |
注意只需要在主上格式化drbd0然后掛載app即可
LAMP:我這里便于實(shí)驗(yàn)采用yum安裝方式
| 1 | yum?install?http?mysql?mysql-devel?mysql-server?php?php-mysql?php-devel?-y |
停止mysql
nohup cp /var/lib/mysql/* . -a &? 后臺(tái)將mysql數(shù)據(jù)copy到app目錄下面
然后將my.cnf中的數(shù)據(jù)文件路徑改為datadir=/app即可,然后重啟mysql
登錄mysql正常
模擬drbd主down機(jī):
| 1 | [root@node1?app]#?poweroff |
在從上查看drbd狀態(tài)還是從:
| 1 2 3 4 5 6 | [root@node2?~]#?/etc/init.d/drbd?status drbd?driver?loaded?OK;?device?status: version:?8.3.16?(api:88/proto:86-97) GIT-hash:?a798fa7e274428a357657fb52f0ecf40192c1985?build?by?phil@Build32R6,?2014-11-24?14:49:06 m:res??cs????????????ro?????????????????ds?????????????????p??mounted??fstype 0:r0???WFConnection??Secondary/Unknown??UpToDate/DUnknown??C |
把從設(shè)置為主需要執(zhí)行命令:
| 1 2 3 4 5 6 7 | root@node2?~]#?drbdadm??--??--overwrite-data-of-peer?primary?all [root@node2?~]#?/etc/init.d/drbd?status?????????????????????????? drbd?driver?loaded?OK;?device?status: version:?8.3.16?(api:88/proto:86-97) GIT-hash:?a798fa7e274428a357657fb52f0ecf40192c1985?build?by?phil@Build32R6,?2014-11-24?14:49:06 m:res??cs????????????ro???????????????ds?????????????????p??mounted??fstype 0:r0???WFConnection??Primary/Unknown??UpToDate/DUnknown??C |
然后創(chuàng)建一個(gè)掛載點(diǎn)app
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | [root@node2?~]#?mkdir?/app [root@node2?~]#?mount?/dev/drbd0?/app [root@node2?~]#?df?-h Filesystem??????Size??Used?Avail?Use%?Mounted?on /dev/sda2????????29G??2.8G???25G??10%?/ tmpfs???????????442M?????0??442M???0%?/dev/shm /dev/sda1???????190M???40M??141M??22%?/boot /dev/sda5????????48G???73M???46G???1%?/data /dev/drbd0???????20G??106M???19G???1%?/app [root@node2?~]#?cd?/app [root@node2?app]#?ls bbs??????????mysql?????????????mysql-bin.000011??mysql-bin.000022??mysql-bin.000033??mysql-bin.000044 cacti????????mysql-bin.000001??mysql-bin.000012??mysql-bin.000023??mysql-bin.000034??mysql-bin.000045 discuz???????mysql-bin.000002??mysql-bin.000013??mysql-bin.000024??mysql-bin.000035??mysql-bin.index ibdata1??????mysql-bin.000003??mysql-bin.000014??mysql-bin.000025??mysql-bin.000036??nagios ib_logfile0??mysql-bin.000004??mysql-bin.000015??mysql-bin.000026??mysql-bin.000037??nohup.out ib_logfile1??mysql-bin.000005??mysql-bin.000016??mysql-bin.000027??mysql-bin.000038??yuning jfdeu????????mysql-bin.000006??mysql-bin.000017??mysql-bin.000028??mysql-bin.000039 li???????????mysql-bin.000007??mysql-bin.000018??mysql-bin.000029??mysql-bin.000040 lijq?????????mysql-bin.000008??mysql-bin.000019??mysql-bin.000030??mysql-bin.000041 linux????????mysql-bin.000009??mysql-bin.000020??mysql-bin.000031??mysql-bin.000042 lixi?????????mysql-bin.000010??mysql-bin.000021??mysql-bin.000032??mysql-bin.000043 |
查看會(huì)發(fā)現(xiàn)down機(jī)的node1下的文件都掛載到了node2下面的app下面了,,node2下切記不要格式化,否則數(shù)據(jù)會(huì)丟失
然后修改my.cnf路經(jīng)重啟mysql進(jìn)入數(shù)據(jù)庫(kù),會(huì)看到數(shù)據(jù)都存在
以下為DRBD腦裂手動(dòng)恢復(fù)過程:主down機(jī)后主恢復(fù)后發(fā)生腦裂,,無法通信
將Node1設(shè)置為主節(jié)點(diǎn)并掛載測(cè)試
| 1 2 3 4 5 6 7 | [root@node1?~]#/etc/init.d/mysqld?stop [root@node1?~]#?umount?/app [root@node1?~]#?drbdadm?primary?r0 [root@node1?~]#?mount?/dev/drbd0?/app |
將Node2設(shè)置為從節(jié)點(diǎn)并丟棄資源數(shù)據(jù)
| 1 2 3 | [root@node2?~]#?drbdadm?secondary?r0 root@node2?~]#?drbdadm?--?--discard-my-data?connect?r0 |
在Node1主節(jié)點(diǎn)上手動(dòng)連接資源
| 1 | [root@node1?~]#?drbdadm?connect?r0 |
查看drbd服務(wù)啟動(dòng)沒,,如果沒啟動(dòng)啟動(dòng)后
| 1 2 3 4 5 | [root@node1?~]#?cat?/proc/drbd? version:?8.3.16?(api:88/proto:86-97) GIT-hash:?a798fa7e274428a357657fb52f0ecf40192c1985?build?by?phil@Build64R6,?2014-11-24?14:51:37 ?0:?cs:Connected?ro:Primary/Secondary?ds:UpToDate/UpToDate?C?r----- ????ns:304?nr:0?dw:548?dr:12866?al:12?bm:15?lo:0?pe:0?ua:0?ap:0?ep:1?wo:f?oos:0 |
Keepalived配置實(shí)現(xiàn)自動(dòng)切換:
安裝:
| 1 2 3 4 5 6 7 | wget? ./configure;?make?;make?install? 做成系統(tǒng)服務(wù) DIR=/usr/local/?;cp?$DIR/etc/rc.d/init.d/keepalived??/etc/rc.d/init.d/?;?cp$DIR/etc/sysconfig/keepalived?/etc/sysconfig/?; mkdir?-p?/etc/keepalived?;?cp?$DIR/sbin/keepalived?/usr/sbin/ |
???兩臺(tái)服務(wù)器均安裝keepalived,并進(jìn)行配置,首先在node1(master)上配置,keepalived.conf內(nèi)容如下:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | !?Configuration?File?for?keepalived global_defs?{ ???router_id?LVS_DEVEL } vrrp_script?check_mysql?{ ????????script?"/data/sh/check_mysql.sh" ????????interval?5 ????????} vrrp_instance?VI_1?{ ????state?MASTER ????interface?eth0 ????virtual_router_id?52 ????priority?100 ????advert_int?1 ????authentication?{ ????????auth_type?PASS ????????auth_pass?1111 ????} ????virtual_ipaddress?{ ????????192.168.77.189 ?????????} ????????track_script?{ ????????check_mysql ????????} } |
?然后創(chuàng)建check_mysql.sh檢測(cè)腳本,內(nèi)容如下:
| 1 2 3 4 5 6 7 8 | #!/bin/sh A=`ps?-C?mysqld?--no-header?|wc?-l` if [?$A?-eq?0?];then /bin/umount?/app/ drbdadm?secondary?r0 killall?keepalived fi |
添加node2(backup)上配置,keepalived.conf內(nèi)容如下:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | !?Configuration?File?for?keepalived global_defs?{ ???router_id?LVS_DEVEL } vrrp_sync_group?VI{ group?{ ??????VI_1 } notify_master?/data/sh/master.sh notify_backup?/data/sh/backup.sh } vrrp_instance?VI_1?{ ????state?BACKUP ????interface?eth0 ????virtual_router_id?52 ????priority?90 ????advert_int?1 ????authentication?{ ????????auth_type?PASS ????????auth_pass?1111 ????} ????virtual_ipaddress?{ ????????192.168.77.189 ?????????} } |
創(chuàng)建master.sh檢測(cè)腳本,內(nèi)容如下:
| 1 2 3 4 | #!/bin/bash drbdadm?primary?r0 /bin/mount?/dev/drbd0?/app/ /etc/init.d/mysqld?start |
創(chuàng)建backup.sh檢測(cè)腳本,內(nèi)容如下:
| 1 2 3 4 | #!/bin/bash /etc/init.d/mysqld?stop /bin/umount?/dev/drbd0 drbdadm?secondary?r0 |
在主上查看vip:
| 1 2 3 4 5 6 7 8 9 10 11 12 | [root@node1?sh]#?ip?add?list 1:?lo:?<LOOPBACK,UP,LOWER_UP>?mtu?65536?qdisc?noqueue?state?UNKNOWN? ????link/loopback?00:00:00:00:00:00?brd?00:00:00:00:00:00 ????inet?127.0.0.1/8?scope?host?lo ????inet6?::1/128?scope?host? ???????valid_lft?forever?preferred_lft?forever 2:?eth0:?<BROADCAST,MULTICAST,UP,LOWER_UP>?mtu?1500?qdisc?pfifo_fast?state?UNKNOWN?qlen?1000 ????link/ether?00:0c:29:3c:a1:5a?brd?ff:ff:ff:ff:ff:ff ????inet?192.168.77.133/24?brd?192.168.77.255?scope?global?eth0 ????inet?192.168.77.189/32?scope?global?eth0 ????inet6?fe80::20c:29ff:fe3c:a15a/64?scope?link? ???????valid_lft?forever?preferred_lft?forever |
模擬主down機(jī):
| 1 | [root@node1?sh]#?poweroff |
然后在從上查看,,vip自動(dòng)切換到從上,,切mysql啟動(dòng)磁盤自動(dòng)掛載等
discuz安裝:
省略,前面已安裝多次
主上mysql授權(quán)vip權(quán)限,,注冊(cè)數(shù)據(jù)庫(kù)用vip注冊(cè),,然后用vip訪問測(cè)試,可以訪問
copy一份論壇網(wǎng)站到從上的html目錄下面,模擬主down機(jī),,vip自動(dòng)漂移到從上,然后用vip訪問問得出結(jié)果,網(wǎng)站正常訪問。。。
http://www.2cto.com/os/201306/223108.html
http://www.linuxidc.com/Linux/2013-10/91385.htm
http://myhat.blog.51cto.com/391263/606318/
http://blog.itpub.net/29806344/viewspace-1323086/ ?
本文轉(zhuǎn)自 Anonymous123 51CTO博客,原文鏈接:http://blog.51cto.com/woshitieren/1689445
總結(jié)
以上是生活随笔為你收集整理的DRBD+keepalived+LAMP+discuz的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ansible一键部署CDH
- 下一篇: python数据结构之 set