490 likes | 679 Views
HA- drbd. vmnet8 (NAT): subnet ip : 10.10.88.0 gateway: 10.10.8.254 vmnet1 (Host-only): subnet ip : 192.168.88.0 ( 拿掉 dhcp ). 第一台 apache server - apache01. 第一台電腦名稱 apache01.abc.com / etc / sysconfig /network HOSTNAME=apache01.abc.com / etc /hosts
E N D
vmnet8 (NAT):subnet ip: 10.10.88.0gateway: 10.10.8.254 • vmnet1 (Host-only):subnet ip: 192.168.88.0(拿掉 dhcp)
第一台apache server - apache01 • 第一台電腦名稱 apache01.abc.com • /etc/sysconfig/network • HOSTNAME=apache01.abc.com • /etc/hosts • 10.10.88.88 apache01.abc.com apache0110.10.88.89 apache02.abc.com apache02
第二台apache server - apache02 • 第一台電腦名稱 apache02.abc.com • /etc/sysconfig/network • HOSTNAME=apache02.abc.com • /etc/hosts • 10.10.88.88 apache01.abc.com apache0110.10.88.89 apache02.abc.com apache0210.10.88.100 apache-ha.abc.com apache-ha
調整第二張網卡(eth1)為Host-Only • apache01 • eth0 (NAT): 10.10.88.88(gateway, dns寫入ifcfg-eth0, 拿掉network GATEWAY, resolv.confnameserver會自動由DNS1 複製)GATEWAY=10.10.88.254DNS1=168.95.1.1 (一定要有1,不可以只有DNS)eth1(Host-only): 192.168.88.88 • apache02 • eth0 (NAT): 10.10.88.89 (同上動作) • eth1(Host-only): 192.168.88.89 • reboot • nslookup & 互ping對方兩張網卡 要 ok
(本ppt為oracle linux專用,跳過):修改yum設定檔?/etc/yum.repos.d/public-yum-ol6.repo • 不需要,因為台灣並沒有 oracle linux yum repo的 mirror site • yum -y install PackageName • yum search PackageName
無法yum下載安裝 HA packages?? • 因為原來的套件庫中,並沒有 • drbd • heartbeat • 也沒有 phpmyadmin…(這句話不用理會) • 擴充yum套件前: yum search drbd heartbeat phpmyadmin • 找不到(第一次search 會做某些更新, 在oracle linux會回應pacemaker含hb套件,但centos找不到) • 以rpm擴充yum套件數量 • 安裝RPMforge, ELRepo, EPEL套件庫(我已下載回來)rpm -Uvhhttp://120.125.145.43/public/ha/rpm/三個rpm檔 rpm -Uvhhttp://120.125.145.43/public/ha/rpm/rpmforge-release-0.5.2-2.el6.rf.i686.rpm rpm -Uvhhttp://120.125.145.43/public/ha/rpm/elrepo-release-6-4.el6.elrepo.noarch.rpm rpm -Uvhhttp://120.125.145.43/public/ha/rpm/epel-release-6-5.noarch.rpm • 再 yum search drbd heartbeat phpmyadmin • 找到了
安裝ha cluster需要的套件 • yum -y install • gcc • drbd83-utils kmod-drbd83 • heartbeat heartbeat-devel heartbeat-libs • 若不能yum • ps -aux | grep yum把前一個yum kill掉 • 若還是找不到drbd package,我已抓回來,安裝如下: rpm -Uvhhttp://120.125.145.43/public/ha/rpm_drbd/drbd83-utils-8.3.15-1.el6.elrepo.i686.rpm rpm -Uvhhttp://120.125.145.43/public/ha/rpm_drbd/kmod-drbd83-8.3.12-2.el6.elrepo.i686.rpm
chkconfig --list drbd • 預設 開啟 >> 關掉 • chkconfigdrbdoff • chkconfig --list heartbeat • 預設 開啟 >> 關掉 • chkconfig heartbeat off • reboot
fdisk新增一partitioin • fdisk新增一partitioin(+1000M) & mkfs-t ext4 • 記住 partition device name (/dev/sdx) • 建 /data(把 httpd.conf的 DocumentRoot換到這裡) • 預備 mount 到 /data • 因後續/data (apache的/var/www/html改成/data) • 由drbd管理,不可以開機就mount • 不是由/etc/fstab管理 • 也就是HA node roll為primary時,才會自動mount /data
/dev/sda6 (+1000M) • /data
關掉一些沒必要的services • echo 'options ipv6 disable=1' > /etc/modprobe.d/disable-ipv6.conf • chkconfig postfix off • chkconfig ip6tables off • chkconfigrpcbind off • chkconfignfslock off • chkconfig cups off • chkconfigacpid off • chkconfigatd off • chkconfigcpuspeed off • chkconfig lvm2-monitor off • chkconfigrpcgssd off • chkconfigrpcidmapd off • chkconfigportreserve off
apache ha流程 • 1.) 安裝 apache • 2.) 設定DRBD資料同步 • apache documentroot > 改為/data • 只有primary node可以存取 /data • 3.) 設定Heartbeat • 監控apache • primary node apache 失效 自動切換由Secondary (備用)node 接手apache • 4.) apache 架設完成後 • 手動切換node test是否可自動切換apache 服務 • 各種故障 apache HA是否還可用 • 5.) apache HA更改設定 • Cluster ip更改 • 正確關/開機流程
1.) 安裝 apache (01, 02) • rpm -qa | grephttpd • 若已安裝,就不用裝了 • chkconfig --list httpd(不用設開機啟動) • yum -y install httpd
2.) 設定DRBD資料同步7步驟 -1 • 2.1 修改DRBD設定檔 (01 &02) • /etc/drbd.conf • 2.2 載入DRBD模組&啟動服務 (01 & 02) • 2.3 初始化apache01的/data partition - /dev/sda5 (你的可能不是這partition)only 01 • 亦即先同步兩台nodes的/dev/sda5 (未來的/data) • 其實,就是在primary node執行resync process以確保secondary的/dev/sda5與primary的相同,這動作當然只在primary做 • 2.4 primary格式化 /dev/sda5 (你的可能不是這partition) only 01
2.) 設定DRBD資料同步 -2 • 2.5 修改apache /etc/httpd/conf/httpd.conf • 01 & 02 (/etc並沒有同步) • DocumentRoot原/var/www/html 改為/data • only 01: 建/data/index.html 內容為”apache ok!” • /data 有sync, 02不需做 • 2.6 啟動apache - only 01 • win7 test http://10.10.88.111 (apache01.abc.com) • 2.7 接下來要設Heartbeat了,設定hb之前 only 01 做以下三件事 • 先把 apache stop • umount /data • 01 的DRBD 資源角色降為secondary • 不然heartbeat會無法設定 • 02 不會做 • DRBD 設定結束
2.1 :修改DRBD設定檔(01 &02) 修改/etc/drbd.conf p1 • 刪除原先在 drbd.conf內的所有文字 • ftp://120.125.145.81/ha/drbd.conf.txt此檔為drbdadm的設定檔,兩台必須完全相同 • 所有參數參考 • http://www.drbd.org/users-guide-8.3/re-drbdconf.html • 有一些參數細節,目前不重要,比如usage-count yes就是告知drbd.org”我正在使用drbd” • 資料同步模式 - Protocol C: • 同步複製協定:Primary與Standby伺服器皆寫入資料並確認後才回報完成,可降低資料漏失風險,但此方式網路頻寬需求較大。 • DRBD同步速率為100Mbps(bits),單.conf中的單位為bytes除以8,取約略10Msyncer { rate 10M; } • resource ha DRBD資源名稱:ha • handlers 處理drbd的一些shell script • wfc-timeout: wait-for-connection時限(01先啟動 drbd, 02必須在60秒內啟動) • outdated-wfc-timeout: 每隔2秒看看對方 drbd是不是掛了 • apache01 server資訊on apache01.abc.com { device /dev/drbd0; //device名稱,用來代表 /dev/sda5,就是/data disk /dev/sda6; // “/data”的partition,可用fdisk -l查//因為已umount,請用fdisk -l查 address 192.168.88.111:7788; //自己的Host-only 網卡ip,drbd同步ip & port meta-disk internal;} • apache02 server資訊,意義同上
matadata, meta-disk是什麼? p2 • metadata • 描述資源/data屬性的data • 也就是描述/data的 • DRBD設備的大小 • flag • journal … • 存放metadata的disk叫做meta-disk • meta-disk 存儲方式有internal & external兩種 • internal:metadata存放在同一partition最後位置 • ..有興趣的再去K文獻,不是很重要
2.1 :修改DRBD設定檔(01 &02,因/sbin並沒有同步) 修改/etc/drbd.confp3 • drbd.conf兩台都改好之後,必須調整drbd相關執行檔的權限,否則 待會兒建立drbd資源(就是建立metadata)時會出錯 • ftp://120.125.145.81/ha/change_per_drbd.txt • chgrphaclient /sbin/drbdsetup • chmod o-x /sbin/drbdsetup • chmodu+x /sbin/drbdsetup • chgrphaclient /sbin/drbdmeta • chmod o-x /sbin/drbdmeta • chmodu+x /sbin/drbdmeta • 目的是讓後續建DRBD資源時,可以順利執行相關指令
2.2: 載入DRBD模組&啟動服務(01 & 02) p1 • (01 & 02) modprobe指令載入drbd模組 (locate drbd.ko確認有此module) • modprobedrbd • (01 & 02)確認 drbd模組是否載入 • lsmod|grepdrbd • (01 & 02)執行drbd之前,必須塞一些資料到/dev/sda5內,否則create-md時會出現錯誤 • dd if=/dev/zero of=/dev/sda6 bs=1M count=100 (塞 100M 資料,內容全為0) • sda6就是/data的partition • (01 & 02)載入drbd moduleok後,就要做”建立 drbdresource”, 指令如下: • drbdadm create-md 資源名稱,因為在 drbd設定檔(drbd.conf)中 resource 名稱為 ha 所以上述的資源名稱就是以ha取代,指令如下:drbdadm create-md ha (執行成功後,若無自動跳出,可以以 ctrl+c跳出) • 啟動 drbd服務 (01先啟動, 02必須在60秒內啟動) • service drbd start • 設定 drbd開機時自動啟動 • chkconfigdrbd on • 所有指令: • ftp://120.125.145.81/ha/drbd_load_mo_create_rs.txt
上一頁,指令匯整(01 & 02都要做) p2 • modprobedrbd //載入 drbd模組 • lsmod|grepdrbd //確認 drbd模組是否載入 • dd if=/dev/zero of=/dev/sda5 bs=1M count=100//執行drbd之前,必須塞一些資料到/dev/sda5內(否則 create-md 時會出現錯誤) • drbdadm create-md ha //建立 drbd resource • 若電腦重開,此動作必須重做(01 & 02) • service drbd start //啟動 drbd服務 • (01先啟動, 02必須在60秒內啟動) • chkconfigdrbd on //設定 drbd開機時自動啟動
2.2: 載入DRBD模組&啟動服務(01 & 02) p3 • 從01 & 02 看目前drbd狀態, watch service drbd status • 影片 • http://youtu.be/irGmU6rm2_Q?hd=1
補充一下drbd status的一些資訊 • IBM的info: • http://pic.dhe.ibm.com/infocenter/ntz/v7r0m3/index.jsp?topic=%2Fcom.ibm.nz.adm.doc%2Fr_sysadm_sample_drbd_status.html
2.3 初始化apache01的(only 01)/data的partition - /dev/sda5 p1 • 確定上一頁的drbdcs為connected • 01 初始化指的是 • 01 promote自己為primary • 01 把 /dev/sda6 resync到 02 的 /dev/sda6 • 01 & 02都先開watch service drbd status監看畫面 • 01再開另一terminal(或剛才用&執行watch),promote自己為primary node • 01執行drbdadm, promote為DRBD primary node,指令如下: • drbdadm -- --overwrite-data-of-peer primary ha • ftp://120.125.145.81/ha/01_promote_to_primary_via_drbdadm-primary-RESOURCE_NAME.txt • 01 promote為primary的同時,會開始同步定義在drbd.conf中的disk 到02,也就是/dev/sda5 (未來的 /data) • 其實,就是在primary node執行resync process以確保secondary的/dev/sda5與primary的相同,這動作當然只在primary做
2.3 初始化apache01的(only 01)/data的partition - /dev/sda5 p2 • 01 & 02先開: watch service drbd status監看畫面 • 01執行: drbdadm-- --overwrite-data-of-peer primary ha • 影片 • http://youtu.be/eBaSN85mE6Y?hd=1錄音時,mic一直有爆音,爛mic~
2.4 primary格式化 /dev/sda5 (only 01) p1 • 確定01 & 02 /dev/sda5已同步 • drbd status 中的 ds (data state): UpToDate • 01 把 /dev/drbd0 (就是/dev/sda5)格式化掉 • mkfs.ext4 /dev/drbd0 (只要01做就好了,02不需做)之前不是for過了?(因為裡面有多放了 zero data) • 這個/dev/drbd0從那兒來的?? • 在drbd.conf中的device /dev/drbd0;disk /dev/sda5;定義 /dev/drbd0 就是 disk /dev/sda5 • 把/dev/drbd0 mount到/data • 啊~不是說drbddisk不要用 mount的嗎?? • 因為我們等一下要test http://apache01.abc.com/index.html 當然要先把 /data 掛到 /dev/sda5 partition,啊不然不就連到/的partition下的/data去了 • 要設定heartbeat前,當然要先把/data再umount回來 • 先開另一termnal觀察 service drbd status • mount /dev/drbd0 /data (看到 mounted & fstype都有東西了) • df -h
2.4 primary格式化 /dev/sda5 (only 01) p2 • 格式化 /dev/drbd0 & mount to /data 練習 • 影片: • http://youtu.be/bKGLKXY-GkM?hd=1
2.5 修改apache /etc/httpd/conf/httpd.conf (01 & 02) • 01 & 02 都要做(/etc並沒有同步) • DocumentRoot:原/var/www/html改為 /data • #DocumentRoot“/var/www/html“ 改為DocumentRoot"/data" • #<Directory "/var/www/html"> 改為<Directory "/data"> • 然後only 01: • 建/data/index.html 內容為”<h1>jj apache ok.</h1>”chmod -R 755 /data • 02不需做, /data 有drbd sync
2.6 啟動apache - only 01 p1 • service httpd start • 啟動apache,若出現DocumentRoot must be a directory無法啟動,是因為selinux沒有關 • sestatus(耶? selinux竟然不能用 disabled 關掉,沒關係,手動調整/data的安全機制即可) • 因/data的selinux安全機制與原來的 /var/www/html不同,必須做調整 • 執行下面兩個指令,再啟動httpd即可semanagefcontext -a -t httpd_sys_content_t "/data(/.*)?“restorecon-Rv /data
2.6 啟動apache - only 01 p2 • service httpd start • win7 test http://10.10.88.111 (apache01.abc.com) • 接下來要設Heartbeat了,設定hb之前 (only 01)做以下三件事 • 先把 apache stop • umount /data • 01 的DRBD 資源角色降為secondary • 不然heartbeat會無法設定 • 02 不用做
2.6 啟動apache - only 01 p3 • 先把 apache stop • service httpd stop • df -h • umount/data • df -h • 01 的DRBD 資源角色降為secondary • 執行前先開 watch service drbd status • drbdadmsecondary ha (觀察上面drbd status) • DRBD 設定結束
DRBD是針對資料備份 • apache的DocumentRoot,就是/data • Heartbeat是針對服務偵測 • apache httpd service
3.) Heartbeat 偵測服務 • 3.1 設定 Heartbeat 通訊設定檔 /etc/ha.d/ha.cf • 3.2 設定 Heartbeat 資源設定檔/etc/ha.d/haresources • 3.3 設定 Heartbeat 驗證設定檔/etc/ha.d/authkeys • 3.4 設定 Heartbeat 偵測服務設定檔/etc/ha.d/resource.d/Apache
3.1 設定 Heartbeat 通訊設定檔(01 & 02)/etc/ha.d/ha.cf p01 • 2台 HA Server,其中一台會產生一個cluster ip,擁有cluster ip的 active node會回應client users的要求 • 當故障轉移(failover)時,新的active node會接手該cluster ip,並更新arp cache中cluster ip所對應的mac • 意即:改成自己的mac, client就可以”無斷線感地”持續要求服務.
3.1 設定 Heartbeat 通訊設定檔 /etc/ha.d/ha.cf p02 • 其實偵測對方是否死掉,就是用簡單的ping而已 • 每隔2秒互ping對方一次 • 超過15秒對方沒有回應,就認定對方死了 • 兩台server的Heartbeat通訊設定檔為 • /etc/ha.d/ha.cf (原無此檔),請自行vim • ftp://120.125.145.81/ha/ha.cf.txt • 不需改權限
3.1 設定 Heartbeat 通訊設定檔(01) /etc/ha.d/ha.cf p03 • debugfile /var/log/ha-debug //Heartbeat服務除錯記錄檔 • logfile /var/log/ha-log //Heartbeat服務記錄檔logfacilitylocal0 • autojoin none • ucastbond0 10.10.88.112 //指定對方(apache02)的bond0 ip (service) • ucastbond1 192.168.88.112 //指定對方(apache02)的bond1 ip (drbd+heartbeat) • ping 10.10.88.254 ////IP 連線偵測用,設定區網內的 Gateway (當網路或 Heartbeat 失效時測試用 • (因為有可能是 heartbeat掉了而已,所以ping一下gw是否還是通的) • respawnhacluster /usr/lib/heartbeat/ipfail • respawnhacluster /usr/lib/heartbeat/dopd • apiauthdopdgid=haclientuid=hacluster • udpport694 // 使用 udp, port 694來 做通訊 • warntime5 //網路disconnect超過5秒就warn • deadtime15 // 網路disconnect超過15秒,就判定對方主機失效 • initdead60 //初始化超過60秒沒有連上對方,就判定 heartbeat 一開始就沒有成功 • keepalive2 //每2秒互ping對方是否還活著 • node apache01.abc.com // 第一台 • node apache02.abc.com // 第二台 • auto_failbackoff // Active node 恢復也不會搶回主控權
3.1 設定 Heartbeat 通訊設定檔(02)/etc/ha.d/ha.cf p04 • debugfile /var/log/ha-debug //Heartbeat服務除錯記錄檔 • logfile /var/log/ha-log //Heartbeat服務記錄檔logfacilitylocal0 • autojoin none • ucastbond0 10.10.88.111 //指定對方(apache01)的bond0 ip (service) • ucastbond1 192.168.88.111 //指定對方(apache01)的bond1 ip (drbd+heartbeat) • ping 10.10.88.254 ////IP 連線偵測用,設定區網內的 Gateway (當網路或 Heartbeat 失效時測試用 • (因為有可能是 heartbeat掉了而已,所以ping一下gw是否還是通的) • respawnhacluster /usr/lib/heartbeat/ipfail • respawnhacluster /usr/lib/heartbeat/dopd • apiauthdopdgid=haclientuid=hacluster • udpport694 // 使用 udp, port 694來 做通訊 • warntime5 //網路disconnect超過5秒就warn • deadtime15 // 網路disconnect超過15秒,就判定對方主機失效 • initdead60 //初始化超過60秒沒有連上對方,就判定 heartbeat 一開始就沒有成功 • keepalive2 //每2秒互ping對方是否還活著 • node apache01.abc.com // 第一台 • node apache02.abc.com // 第二台 • auto_failbackoff // Active node 恢復也不會搶回主控權
3.2 設定 Heartbeat 資源設定檔 /etc/ha.d/haresources, 原為空檔(01 & 02) • 設定 01 & 02的 haresource資源設定檔 01 及 02 設定檔內容一模一樣, • 表示預設使用 01 主機擔任 Primary Node 角色,此設定檔內容可分為五段來看。(01 及 02 都必須設定) • 1.) active Node 的 FQDN >> apache01.abc.com • 2.) 指定 Cluster IP Address : 10.10.88.100 • 3.) 指定 Cluster Resource Name >> drbddisk::ha • 4.) 指定 Cluster Device, Mount Point、File System Type • >> drbddisk::ha Filesystem::/dev/drbd0::/data::ext4 • 5.) 指定 Service>> Apache • haresources設定檔內容如下 (01 & 02完全相同) • apache01.abc.com IPaddr::10.10.88.100/24/eth0 drbddisk::ha Filesystem::/dev/drbd0::/data::ext4 Apache • 檔案內容:ftp://120.125.145.81/ha/heartbeat_etc_ha.d_haresources.txt • 不需改權限
3.3 Heartbeat 驗證設定檔01 & 02均同, /etc/ha.d/authkeys p1 • 此設定檔為 Cluster Node 之間的密碼,也就是主機必須具備此一密碼檔才會被認為是同一個 Cluster 中的 Node,此次使用 sha1 編碼方式並使用 urandom指令將一堆亂數寫入檔案內當作 Cluster 密碼,此步驟在 Node1 主機執行完成後請利用 scp指令將檔案複製到 Node2 主機中以便保持密碼檔案一致。
3.3 Heartbeat 驗證設定檔01 & 02均同, /etc/ha.d/authkeys p2 • 一台執行此指令產生authkeys: • (echo -ne "auth 1\n1 sha1 ";dd if=/dev/urandombs=512 count=1 | openssl md5 | cut -d= -f2) > /etc/ha.d/authkeys • 另一台此檔,用copy-paste即可 • ftp://120.125.145.81/ha/authkeys_cmd.txt • 600 permission: • chmod 600 /etc/ha.d/authkeys
3.4 設定 Heartbeat 偵測服務設定檔(01 & 02均同) /etc/ha.d/resource.d/Apache p1 • ftp://120.125.145.81/ha/Apache.txt • Active 死掉後,standby根豦此檔決定要啟動什麼服務 • 755 permission • chmod 755 /etc/ha.d/resource.d/Apache
01 & 02新增heartbeat為系統服務 • chkconfig --add heartbeat • 系統服務:就是可以設定成開機時-是否啟動的服務 • chkconfig heartbeaton • ll /etc/rc5.d/S7* • 確認一下 heartbeat 比 drbd還要”慢”啟動
01 & 02 啟動 heartbeat • service heartbeat start • ifconfig eth0:0