欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長資訊網
          最全最豐富的資訊網站

          CentOS 7.5數據庫架構之NFS+Heartbeat+DRBD實測

          理論概述

          本案例只是,為搭建MySQL集群做準備,并無MySQL

          DRBD

          DRBD(distributed replicated block device分布式復制塊設備)是一個基于軟件實現(xiàn)的、無共享的、服務器之間鏡像塊設備內容的存儲復制解決方案。DRBD是鏡像塊設備,是按數據位鏡像成一樣的數據塊

          DRBD可以部署在如下類的底層設備上: 1、一個磁盤,或者是磁盤的某一個分區(qū); 2、一個soft raid 設備; 3、一個LVM的邏輯卷; 4、一個EVMS(Enterprise Volume Management System,企業(yè)卷管理系統(tǒng))的卷; 5、其他任何的塊設備。

          工作原理

          CentOS 7.5數據庫架構之NFS+Heartbeat+DRBD實測

          DRBD需要運行在各個節(jié)點上,且是運行在節(jié)點主機的內核中,所以DRBD是內核模塊,在Linux2.6.33版本起開始整合進內核。

          DRBD工作的位置在文件系統(tǒng)的buffer Cache和磁盤調度器之間

          如上圖左節(jié)點為活躍節(jié)點實線箭頭,有節(jié)點為備用節(jié)點虛線箭頭。 左節(jié)點接收到數據法網內核的數據通路,DRBD在數據通路中注冊鉤子檢查數據(類似ipvs)當檢測到接收的數據是發(fā)往自己管理的存儲位置,程序會復制另一份,一份存儲到本機的DRBD存儲設備,另一份就發(fā)給TCP/IP協(xié)議棧,通過網絡傳輸到另一臺節(jié)點上TCP/IP協(xié)議棧;另一臺節(jié)點上運行的DRBD模塊同樣在數據通路上監(jiān)測數據,當檢測到傳輸過來的數據時,運行存儲機制,存儲到本機DRBD存儲設備的對應位置。

          如果左節(jié)點宕機,在高可用集群中右節(jié)點成為活躍節(jié)點,并且會接收到左節(jié)點宕機的信號,接受數據先保存到本地,左節(jié)點恢復上線之后,再把左節(jié)點宕機后右節(jié)點變動的 數據鏡像到左節(jié)點。 每個設備(drbd 提供了不止一個設備)都有一個狀態(tài),可能是‘主’狀態(tài)或‘從’態(tài)。在主節(jié)點上,應用程序應能運行和訪問drbd設備(/dev/drbd)。每次寫入會發(fā)往本地磁盤設備和從節(jié)點設備中。從節(jié)點只能簡單地把數據寫入它的磁盤設上。 讀取數據通常在本地進行。如果主節(jié)點發(fā)生故障,心跳(heartbeat或corosync)將會把從節(jié)點轉換到主狀態(tài),并啟動其上的應用程序。(如果您將它和無日志FS 一起使用,則需要運行fsck)。如果發(fā)生故障的節(jié)點恢復工作,它就會成為新的從節(jié)點,而且必須使自己的內容與主節(jié)點的內容保持同步。

          復制模式 鏡像過程完成之后還需要返回成功或失敗的回應信息。回應信息可以在傳輸過程中的不同位置返回,如上圖A/B/C三處, 可以分為三種復制模式:

          特點: 實時復制:一段修改之后馬上復制過去 透明的傳輸:程序不需要檢測到這個數據存儲在多個主機上 同步或者異步:同步鏡像:程序寫操作完成后會通知所有已經連接的主機;異步同步:程序會在本地寫完之前通知其它的主機。

          A:一旦本地磁盤寫入已經完成,數據包已在發(fā)送隊列中,則寫操作被認為是完成的 。在一個節(jié)點發(fā)生故障時,可能發(fā)生數據丟失,因為被寫入到遠程節(jié)點上的數據可能仍在發(fā)送隊列。盡管,在故障轉移節(jié)點上的數據是一致的,但沒有及時更新。這通常是用于地理上分開的節(jié)點。 B:一旦本地磁盤寫入已完成且復制數據包達到了對等節(jié)點則認為寫操作在主節(jié)點上被認為是完成的。數據丟失可能發(fā)生在參加的兩個節(jié)點同時故障的情況下,因為在飛行中的數據可能不會被提交到磁盤。 C:只有在本地和遠程節(jié)點的磁盤已經確認了寫操作完成,寫才被認為完成。沒有任何數據丟失,所以這是一個群集節(jié)點的流行模式,但I/O吞吐量依賴于網絡帶寬。 A 數據一旦寫入磁盤并發(fā)送到網絡中就認為完成了寫入操作。 B 收到接收確認就認為完成了寫入操作。 C 收到寫入確認就認為完成了寫入操作。 就目前而言應用最多和應用最廣泛的為協(xié)議C。

          架構

          MySQL+heartbeat+drbd+lvs是一套成熟的集群解決方案在現(xiàn)在多數企業(yè)里面,通過heartbeat+DRBD完成MySQL的主節(jié)點寫操作的高可用性,通過MySQL+lvs實現(xiàn)MySQL數據庫的主從復制和MySQL讀寫的負載均衡。這個方案在讀寫方面進行了分離,融合了寫操作的高可用和讀操作的負載均衡。

          NFS

          NFS作為業(yè)界常用的共享存儲方案,被眾多公司采用。使用NFS作為共享存儲,為前端WEB server提供服務,主要存儲網頁代碼以及其他文件。

          • 常用同步技術
          1. rsync+inotify實現(xiàn)文件同步
          2. 借助DRBD,實現(xiàn)文件同步
            但是以上方案都沒有實現(xiàn)高可用,只是實現(xiàn)了兩者數據同步。但是業(yè)務要求NFS服務器必須是高可用,所以我們在第二種同步方案的基礎上,在結合heartbeat來實現(xiàn)高可用。

          架構部署

          采用MySQL讀寫分離的方案;而讀寫之間的數據同步采用MySQL的單項或者雙向復制技術實現(xiàn)。 MySQL寫操作采用基于heartbeat+DRBD+MySQL搭建高可用集群;讀操作普遍采用基于LVS+keepalived搭建高可用擴展集群方案

          本案例中暫時沒部署MySQL,實現(xiàn)思路:dbmaster和dbbackup兩臺機器,分別安裝nfs,heartbeat,dbmaster,DRBD。

          • nfs可以另找一臺服務器搭建專門用為共享存儲。
          • nfs的控制權交給了heartbeat。

          架構拓撲

          CentOS 7.5數據庫架構之NFS+Heartbeat+DRBD實測

          環(huán)境 全部都是CentOS 7.5 系統(tǒng)
          主機名|IP|擔任角色
          –|–|–
          dbmaster|192.168.111.3|drbd主,nfs server,heartbeat主
          dbbackup|192.168.111.4|drbd被,heartbeat被
          VIP|192.168.111.100
          nfs客戶端|192.168.111.5|掛載VIP共享的目錄測試

          部署DRBD

          1. 所有主機配置hosts并且改為對應的主機名
          2. 所有主機保持網絡狀況的良好通信
          3. 所有主機安裝最新的epel源
          4. DRBD這兩臺各自分別添加了1GB硬盤供DRBD使用
          5. 同步時間
          [root@localhost ~]# vim /etc/hosts      192.168.111.7 lvsmaster             192.168.111.8 lvsbackup      192.168.111.3 dbmaster      192.168.111.4 dbbackup      192.168.111.5 dbslave1      192.168.111.6 dbslave2    [root@dbmaster yum.repos.d]# uname -r  3.10.0-862.el7.x86_64  #這是舊的    [root@dbbackup ~]# yum install kernel* -y    [root@dbbackup ~]# reboot    [root@localhost ~]# uname -r  3.10.0-957.12.1.el7.x86_64  #這是新的      drbd                  397041  0   libcrc32c              12644  4 xfs,drbd,nf_nat,nf_conntrack      [root@dbbackup ~]# yum install https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm -y    [root@dbbackup ~]# yum -y install drbd84-utils kmod-drbd84  #安裝DRBD  [root@localhost ~]# modprobe drbd  #不出意外這樣就OK了  [root@localhost ~]# lsmod |grep -i drbd
          • 分區(qū)
          [root@localhost ~]# fdisk /dev/sdb   歡迎使用 fdisk (util-linux 2.23.2)。    更改將停留在內存中,直到您決定將更改寫入磁盤。  使用寫入命令前請三思。    Device does not contain a recognized partition table  使用磁盤標識符 0x7ce5781e 創(chuàng)建新的 DOS 磁盤標簽。    命令(輸入 m 獲取幫助):n  Partition type:     p   primary (0 primary, 0 extended, 4 free)     e   extended  Select (default p): p  分區(qū)號 (1-4,默認 1):  起始 扇區(qū) (2048-2097151,默認為 2048):  將使用默認值 2048  Last 扇區(qū), +扇區(qū) or +size{K,M,G} (2048-2097151,默認為 2097151):  將使用默認值 2097151  分區(qū) 1 已設置為 Linux 類型,大小設為 1023 MiB    命令(輸入 m 獲取幫助):w  The partition table has been altered!    Calling ioctl() to re-read partition table.  正在同步磁盤。    #以上關于DRBD和分區(qū)的操作在111.3和111.4機器上重復操作,master和backup分區(qū)大小一致。
          • 修改配置文件
          [root@dbmaster ~]# vim /etc/drbd.conf   #include "drbd.d/global_common.conf";   #注釋掉這行,避免和我們自己寫的配置產生沖突。      include "drbd.d/*.res";      include "drbd.d/*.cfg";  [root@localhost ~]# vim /etc/drbd.d/drbd_basic.cfg       global {          usage-count yes;          #是否參與DRBD使用者統(tǒng)計,默認為yes,yes or no都無所謂       }      common {          syncer { rate 30M; }      }      #設置主備節(jié)點同步的網絡速率最大值,默認單位是字節(jié),我們可以設定為兆      resource r0 {      #r0為資源名,我們在初始化磁盤的時候就可以使用資源名來初始化。          protocol C;          #使用 C 協(xié)議。          handlers {              pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f ";                pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt ";              local-io-error "echo o > /proc/sysrq-trigger ; halt -f";              fence-peer "/usr/lib4/heartbeat/drbd-peer-outdater -t 5";              pri-lost "echo pri-lst. Have a look at the log file.mail -s 'Drbd Alert' root";              split-brain "/usr/lib/drbd/notify-split-brain.sh root";              out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";      }          net {            cram-hmac-alg "sha1";            shared-secret "MySQL-HA";            #drbd同步時使用的驗證方式和密碼信息      }          disk {            on-io-error detach;            fencing resource-only;            # 使用DOPD(drbd outdate-peer deamon)功能保證數據不同步的時候不進行切換。      }          startup {            wfc-timeout 120;            degr-wfc-timeout 120;      }          device /dev/drbd0;          #這里/dev/drbd0是用戶掛載時的設備名字,由DRBD進程創(chuàng)建          on dbmaster {          #每個主機名的說明以on開頭,后面是hostname(必須在/etc/hosts可解析)            disk /dev/sdb1;            #使用這個磁盤作為drbd的磁盤/dev/drbd0。            address 192.168.111.3:7788;            #設置DRBD的監(jiān)聽端口,用于與另一臺主機通信            meta-disk internal;            #drbd的元數據存放方式      }          on dbbackup {            disk /dev/sdb1;            address 192.168.111.4:7788;            meta-disk internal;      }      }
          • drbd報錯
          [root@dbmaster ~]# drbdadm create-md r0  WARN:    You are using the 'drbd-peer-outdater' as fence-peer program.    If you use that mechanism the dopd heartbeat plugin program needs    to be able to call drbdsetup and drbdmeta with root privileges.      You need to fix this with these commands:    chgrp haclient /lib/drbd/drbdsetup-84    chmod o-x /lib/drbd/drbdsetup-84    chmod u+s /lib/drbd/drbdsetup-84      chgrp haclient /usr/sbin/drbdmeta    chmod o-x /usr/sbin/drbdmeta    chmod u+s /usr/sbin/drbdmeta    md_offset 1072689152  al_offset 1072656384  bm_offset 1072623616    Found xfs filesystem       1047552 kB data area apparently used       1047484 kB left usable by current configuration    Device size would be truncated, which  would corrupt data and result in  'access beyond end of device' errors.  You need to either     * use external meta data (recommended)     * shrink that filesystem first     * zero out the device (destroy the filesystem)  Operation refused.    Command 'drbdmeta 0 v08 /dev/sdb1 internal create-md' terminated with exit code 40

          應該是該分區(qū)有殘留的文件

          • 解決
          [root@dbmaster ~]# dd if=/dev/zero of=/dev/sdb1 bs=1M count=1  記錄了1+0 的讀入  記錄了1+0 的寫出  1048576字節(jié)(1.0 MB)已復制,0.00339429 秒,309 MB/秒  [root@dbmaster ~]# drbdadm create-md r0    --==  Thank you for participating in the global usage survey  ==--  The server's response is:    you are the 14097th user to install this version  WARN:    You are using the 'drbd-peer-outdater' as fence-peer program.    If you use that mechanism the dopd heartbeat plugin program needs    to be able to call drbdsetup and drbdmeta with root privileges.      You need to fix this with these commands:    chgrp haclient /lib/drbd/drbdsetup-84    chmod o-x /lib/drbd/drbdsetup-84    chmod u+s /lib/drbd/drbdsetup-84      chgrp haclient /usr/sbin/drbdmeta    chmod o-x /usr/sbin/drbdmeta    chmod u+s /usr/sbin/drbdmeta    initializing activity log  initializing bitmap (32 KB) to all zero  Writing meta data...  New drbd meta data block successfully created.  success  #使用dd命令清空,然后再執(zhí)行
          • 進一步配置
          [root@dbmaster ~]# systemctl start drbd.service  [root@dbbackup ~]# systemctl enable drbd.service   #啟動服務    #如報錯,試試如下,不報錯跳過這步  [root@dbmaster ~]# groupadd haclient  [root@dbmaster ~]# chgrp haclient /lib/drbd/drbdsetup-84  [root@dbmaster ~]# chmod o-x /lib/drbd/drbdsetup-84  [root@dbmaster ~]# chmod u+s /lib/drbd/drbdsetup-84  [root@dbmaster ~]# chgrp haclient /usr/sbin/drbdmeta  [root@dbmaster ~]# chmod o-x /usr/sbin/drbdmeta  [root@dbmaster ~]# chmod u+s /usr/sbin/drbdmeta  #以上這幾個操作,找了很多資料都沒有提到要做,還特意提醒不用做,可能環(huán)境不同吧,不做一直報錯    [root@dbmaster ~]# drbdadm primary --force r0  #主上操作  [root@dbmaster ~]# drbdadm role r0  Primary/Secondary  #查看狀態(tài)    [root@dbbackup ~]# drbdadm role r0  Secondary/Primary  #backup機器查看狀態(tài)    [root@dbbackup ~]# drbdadm dstate r0  UpToDate/UpToDate  #查看數據同步狀態(tài),如上為一致,還有Inconsistent狀態(tài)為數據不一致正在同步
          • 掛載DRBD磁盤
          現(xiàn)在dbmaster上操作  [root@dbmaster ~]# mkfs.ext4 /dev/drbd0   mke2fs 1.42.9 (28-Dec-2013)  文件系統(tǒng)標簽=  OS type: Linux  塊大小=4096 (log=2)  分塊大小=4096 (log=2)  Stride=0 blocks, Stripe width=0 blocks  65536 inodes, 261871 blocks  13093 blocks (5.00%) reserved for the super user  第一個數據塊=0  Maximum filesystem blocks=268435456  8 block groups  32768 blocks per group, 32768 fragments per group  8192 inodes per group  Superblock backups stored on blocks:       32768, 98304, 163840, 229376    Allocating group tables: 完成                              正在寫入inode表: 完成                              Creating journal (4096 blocks): 完成  Writing superblocks and filesystem accounting information: 完成      [root@dbmaster ~]# mkdir /nfs  [root@dbmaster ~]# mount /dev/drbd0 /nfs          現(xiàn)在是dbbackup上操作,主要是檢測備端是否能夠正常掛載和使用:    [root@dbmaster ~]# umount /nfs  #主上將設備卸載  [root@dbmaster ~]# drbdadm secondary all  #切換為被狀態(tài)    [root@dbbackup ~]# drbdadm primary r0  #被設為主狀態(tài)  [root@dbbackup ~]# mkdir /nfs  [root@dbbackup ~]# mount /dev/drbd0 /nfs    [root@dbbackup ~]# df -Th  文件系統(tǒng)                類型      容量  已用  可用 已用% 掛載點  /dev/mapper/centos-root xfs        17G  4.5G   13G   27% /  devtmpfs                devtmpfs  470M     0  470M    0% /dev  tmpfs                   tmpfs     487M     0  487M    0% /dev/shm  tmpfs                   tmpfs     487M   14M  473M    3% /run  tmpfs                   tmpfs     487M     0  487M    0% /sys/fs/cgroup  /dev/sr0                iso9660   4.2G  4.2G     0  100% /media/cdrom  /dev/sda1               xfs      1014M  251M  764M   25% /boot  tmpfs                   tmpfs      98M     0   98M    0% /run/user/0  /dev/drbd0              ext4      991M  2.6M  922M    1% /database    再按相同的方法將狀態(tài)切換回來

          好的,這下簡單測試了下,先告一段落

          部署heartbeat

          • 安裝cluster-glue
            [root@dbmaster ~]# ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa  [root@dbmaster ~]# ssh-copy-id root@dbbackup  #ssh免密認證    [root@dbbackup ~]# yum install gcc gcc-c++ autoconf automake libtool glib2-devel libxml2-devel bzip2 bzip2-devel e2fsprogs-devel libxslt-devel libtool-ltdl-devel asciidoc -y  #兩機同樣操作安裝依賴    [root@dbbackup ~]# useradd -g haclient hacluster    安裝包下載  下載軟件包:Reusable-Components-glue、resource-agents、heartbeat  免費下載地址在 http://linux.linuxidc.com/  用戶名與密碼都是www.linuxidc.com  具體下載目錄在 /2019年資料/2月/26日/CentOS 7下安裝配置Heartbeat高可用集群/  下載方法見 http://www.linuxidc.com/Linux/2013-07/87684.htm    [root@dbmaster ~]# tar -jxvf glue.tar.bz2   #我這是改名之后的,原來的是一串數字  [root@dbmaster ~]# cd Reusable-Cluster-Components-glue--0a7add1d9996/  [root@dbmaster Reusable-Cluster-Components-glue--0a7add1d9996]# ./autogen.sh  ./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'  make && make install  echo $?  cd ..
          • 安裝resource-agents
            [root@dbbackup ~]# tar zxf resource-agents-3.9.6.tar.gz   [root@dbbackup ~]# cd resource-agents-3.9.6/  ./autogen.sh   ./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'  make && make install  echo $?  cd ..
          • 安裝heartbeat
            [root@dbmaster ~]# tar jxf heartbeat.bz2   #該名稱是我后來改過的  [root@dbmaster ~]# cd Heartbeat-3-0-958e11be8686/    ./bootstrap  export CFLAGS="$CFLAGS -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib"  ./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'  make && make install  echo $?    [root@dbbackup ~]# mkdir -pv /usr/local/heartbeat/usr/lib/ocf/lib/heartbeat/  [root@dbbackup ~]# cp /usr/lib/ocf/lib/heartbeat/ocf-* /usr/local/heartbeat/usr/lib/ocf/lib/heartbeat/    [root@dbmaster ~]# cp Heartbeat-3-0-958e11be8686/doc/{ha.cf,haresources,authkeys} /usr/local/heartbeat/etc/ha.d/  #拷貝配置文件    [root@dbmaster Heartbeat-3-0-958e11be8686]# chmod 600 /usr/local/heartbeat/etc/ha.d/authkeys   #該權限必須為600  #以上安裝兩臺機器一樣
          • 配置文件
          [root@dbmaster ~]# vim /usr/local/heartbeat/etc/ha.d/haresources  #末尾添加如下  dbmaster IPaddr::192.168.111.100/24/ens32 drbddisk::r0 Filesystem::/dev/drbd0::/nfs::ext4 killnfsd  #dbmaster IPaddr::192.168.111.10/24/ens32主機名 后跟虛擬IP地址、接口  #drbddisk::r0管理drbd資源的名稱  #Filesystem::/dev/drbd0::/nfs::ext4 renfsd文件系統(tǒng)::掛載的目錄及格式::后跟renfsd資源腳本    [root@dbmaster ~]# cp /etc/ha.d/resource.d/drbddisk /usr/local/heartbeat/etc/ha.d/resource.d/  #兩臺一樣    [root@dbmaster ~]# echo "pkill -9 nfs; systemctl restart nfs; exit 0" > /usr/local/heartbeat/etc/ha.d/resource.d/killnfsd  #編輯nfs腳本文件killnfsd ,killnfsd 腳本文件的作用,  #drbd主備切換時,若nfs沒有啟動,則此腳本會把nfs啟動  #drbd主備切換時,若nfs已啟動,則此腳本會重啟nfs服務,因為NFS服務切換后,必須重新mount一下nfs共享出來的目錄,否則會出現(xiàn)stale NFS file handle的錯誤    [root@dbmaster ~]# chmod +x /usr/local/heartbeat/etc/ha.d/resource.d/drbddisk  [root@dbmaster ~]# chmod +x /usr/local/heartbeat/etc/ha.d/resource.d/killnfsd         [root@dbmaster resource.d]# pwd  /usr/local/heartbeat/etc/ha.d/resource.d  [root@dbmaster resource.d]#  ll drbddisk Filesystem killnfsd IPaddr   -rwxr-xr-x 1 root root 3162 5月  14 15:43 drbddisk  -rwxr-xr-x 1 root root 1923 5月  14 10:15 Filesystem  -rwxr-xr-x 1 root root 2297 5月  14 10:15 IPaddr  -rwxr-xr-x 1 root root   57 5月  14 15:41 killnfsd  #必須要有這四個腳本,有的是自帶,有的是復制,有的自己寫,上面已經說明而且必須要有執(zhí)行權限。
            [root@dbmaster ~]# vim  /usr/local/heartbeat/etc/ha.d/ha.cf  #修改主配置文件(去掉注釋或修改值)  logfile /var/log/ha-log  #指定heartbeat日志文件的位置  logfacility     local0  #利用系統(tǒng)日志打印日志  keepalive 1  # 心跳發(fā)送時間間隔  deadtime 5   # 備用節(jié)點5s內沒有檢測到master機的心跳,確認對方故障  warntime 2  # 警告2次  initdead 10  # 守護進程啟動30s后,啟動服務資源。  udpport 694  #設定集群節(jié)點間的通信協(xié)議及端口為udp694監(jiān)聽端口(該端口可以修改)  ucast ens32 192.168.111.4  # 另一臺主機節(jié)點eth0的地址,注意是另一臺。  auto_failback off  #當primary節(jié)點切換到secondary節(jié)點之后,primary節(jié)點恢復正常,不進行切回操作,因為切換一次mysql master成本很高。  node    dbmaster  node    dbbackup  # 定義兩個節(jié)點的主機名,一行寫一個。  ping 192.168.111.2  #兩個IP的網關  respawn hacluster /usr/local/heartbeat/libexec/heartbeat/ipfail   #使用這個腳本去偵聽對方是否還活著(使用的是ICMP報文檢測)        [root@dbmaster ~]# vim /usr/local/heartbeat/etc/ha.d/authkeys  #認證文件      auth 1      #表示使用id為2的驗證 下邊需要定義一個2的驗證算法      1 sha1 HA_DB      #口令(HISHA1)隨便給 主從配置相同即可

          dbdackup也是同樣的安裝方法,配置文件直接scp過去就可以了,然后修改

          [root@dbmaster ~]# scp -r /usr/local/heartbeat/etc/ha.d/{authkeys,haresources,ha.cf} root@dbbackup:/usr/local/heartbeat/etc/ha.d/
          [root@dbbackup ha.d]# vim /usr/local/heartbeat/etc/ha.d/ha.cf   ucast ens32 192.168.111.3  #把backup節(jié)點上ha.cf配置文件中ucast中IP改為對方    [root@dbmaster ~]# ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/RAExec/* /usr/local/heartbeat/lib/heartbeat/plugins/RAExec/    [root@dbmaster ~]# ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/* /usr/local/heartbeat/lib/heartbeat/plugins/  #2機器將這些庫文件鏈接過去,要不啟動報錯  May 13 13:09:27 dbmaster heartbeat: [86183]: ERROR: Illegal directive [ucast] in /usr/local/heartbeat/etc/ha.d/ha.cf

          部署NFS及配合heartbeat

          [root@dbbackup ~]# yum -y install  nfs-utils nfs-utils-lib nfs4-acl-tools  #dbmaster和dbbackup安裝  [root@dbmaster ~]# vim /etc/exports      /nfs    192.168.111.0/255.255.255.0(rw,sync,no_root_squash)  #設置nfs共享目錄,權限,網段  [root@dbmaster ~]# systemctl restart rpcbind    #啟動順序一定是rpcbind->nfs,否則有可能出現(xiàn)錯誤  #在這里nfs不需要啟動,它由heartbeat控制    [root@dbmaster ~]# systemctl start heartbeat  [root@dbmaster ~]# systemctl enable heartbeat  #最多等一兩分鐘VIP肯定出來,否則查看日志  [root@dbmaster ~]# ip a | grep inet  #主上查看      inet 127.0.0.1/8 scope host lo      inet6 ::1/128 scope host       inet 192.168.111.3/24 brd 192.168.111.255 scope global noprefixroute ens32      inet 192.168.111.100/24 brd 192.168.111.255 scope global secondary ens32:0  #到了這,VIP肯定要出來,可以稍等會,觀察下日志。如果出錯,上面可能哪一步沒有到位  [root@dbmaster ~]# mount | grep drbd  /dev/drbd0 on /nfs type ext4 (rw,relatime,data=ordered)  #這個也已經根據配置自動掛載    [root@dbbackup ~]# showmount -e 192.168.111.100  Export list for 192.168.111.100:  /nfs 192.168.111.0/255.255.255.0  #查看VIP共享的目錄
          • 配置nfs自動掛載
          [root@localhost ~]# mkdir /nfs  [root@localhost ~]# mount 192.168.111.100:/nfs/ /nfs/  #客戶端測試  [root@localhost ~]# echo "192.168.111.100:/nfs /nfs nfs defaults,soft,intr 0 0" >> /etc/fstab   [root@localhost ~]# tail -1 /etc/fstab   192.168.111.100:/nfs /nfs nfs defaults,soft,intr 0 0  #Nfs是類型  #soft參數是為了向用戶輸出錯誤信息  #intr參數為了解決當網絡出現(xiàn)故障時,我們可以通過按下ctrl+c組合鍵來終止操作  
          • 驗證:接下來我們在主上把nfs服務關掉,模擬故障,看VIP是否切換主機
          [root@dbmaster ~]# systemctl stop nfs  [root@dbmaster ~]# systemctl status nfs  ● nfs-server.service - NFS server and services     Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)    Drop-In: /run/systemd/generator/nfs-server.service.d             └─order-with-mounts.conf     Active: inactive (dead) since 二 2019-05-14 18:21:09 CST; 6s ago    Process: 61802 ExecStopPost=/usr/sbin/exportfs -f (code=exited, status=0/SUCCESS)    Process: 61799 ExecStopPost=/usr/sbin/exportfs -au (code=exited, status=0/SUCCESS)    Process: 61797 ExecStop=/usr/sbin/rpc.nfsd 0 (code=exited, status=0/SUCCESS)   Main PID: 60625 (code=exited, status=0/SUCCESS)    5月 14 16:35:58 dbmaster systemd[1]: Starting NFS server and services...  5月 14 16:35:58 dbmaster systemd[1]: Started NFS server and services.  5月 14 18:21:09 dbmaster systemd[1]: Stopping NFS server and services...  5月 14 18:21:09 dbmaster systemd[1]: Stopped NFS server and services.

          我在主被兩臺機器上查看debug日志,沒有任何變動

          [root@dbbackup ~]# cd /nfs    #我在掛載了VIP的機器上查看共享目錄能否使用,卡死終端

          總結下原因:heartbeat沒有監(jiān)控到nfs的服務狀態(tài),它自身想當然的認為,只有heartbeat服務出故障,才切VIP。

          解決:我們將nfs,和heartbeat服務做一個捆綁,類似于事物性質。即nfs出問題,heartbeat也要宕掉。這里通過腳本實現(xiàn)。

          [root@dbmaster ~]# vim /opt/monitornfs.sh    while true  do      drbdstatus=`cat /proc/drbd 2> /dev/null  | grep ro | tail -n1 | awk -F':' '{print $4}' | awk -F'/' '{print $1}'`      nfsstatus=`systemctl status nfs&>/dev/null ; echo $?`        if [ -z  $drbdstatus ];then          sleep 10          continue      elif [ $drbdstatus == 'Primary' ];then          if [ $nfsstatus -ne 0 ];then              systemctl start nfs &> /dev/null              newnfsstatus=`systemctl status nfs&>/dev/null ; echo $?`              if [ $newnfsstatus -ne 0 ];then              systemctl stop heartbeat              #嘗試開啟之后若還是不行,則關掉heartbeat              fi          fi      fi      sleep 5  done    [root@dbmaster ~]# chmod +x /opt/monitornfs.sh   [root@dbmaster ~]# nohup /opt/monitornfs.sh &  #以上關于腳本操作,在dbbackup上重復
          • 測試
          [root@dbmaster ~]# systemctl stop nfs  #主節(jié)點關掉nfs服務    #但是后臺的腳本又給他開啟了  [root@dbmaster ~]# systemctl stop heartbeat  #VIP切換到備機了  

          但是nfs客戶端的使用并不影響,切換的時候會有輕微的延遲。

          nfs切記要掛載到別的機器上不要為了省事,省機器

          贊(0)
          分享到: 更多 (0)
          網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號