高可用版本下载网站: linux-ha.org

  respan ~ [判断ping的短网切换]
  drbd 分布式复制块设备
                ***********************************************
               ***********HA(高可用集群)[开源版]***************
                ***********************************************
一.安装相应的软件及其简介
      目前版本(RH6.5),安装 heartbeat-3.0.4-2.el6.x86_64.rpm,
              heartbeat-devel-3.0.4-2.el6.x86_64.rpm,
               heartbeat-libs-3.0.4-2.el6.x86_64.rpm,
               ldirectord-3.9.5-3.1.x86_64.rpm
    主要文件(显示路径):/etc/ha.d/README.config  [可用 rpm -q heartbeat-d 查看下面所示文件绝对路径]
        They are:
        ha.cf       Main configuration file
        haresources Resource configuration file
        authkeys    Authentication information
二.依次更改/usr/share/doc/heartbeat-3.0.4/~  下的上述文件,并且完成后cp到/etc/ha.d/ 下
  (1)vim /usr/share/doc/heartbeat-3.0.4/ha.cf         [基本类]
      [行标]
        48 keepalive 2                     [心跳互传等待时间:2S]
        56 deadtime 30                     [死亡确认时间:30S]
        61 warntime 10                     [警告时间:10]
        71 initdead 60                     [资源初始化:60]【一个节点机死亡,另一个节点机接管资源并开启的时间】
    76 udpport 1060                     [设定节点:1060]【每个节点机这个必须不同】
        91 bcast eth0                      [单波传播方式,设备eth0]
        211 node   server1.example.com            [写入所用节点机的主机名,必须是主机名,而且谁先谁主,其次为辅]
       212 node   server2.example.com              
       220 ping 172.25.254.250                 [ping,检测主机是否网通,若不同则启动策略转移]
       253 respawn hacluster/usr/lib64/heartbeat/ipfail    [所使用64版本]
       259 apiauth ipfail gid=haclientuid=hacluster        [开启hacluster用户]
   (2)vim/usr/share/doc/heartbeat-3.0.4/haresources        [策略加载类]
    150 server1.example.comIPaddr::172.25.254.168/24/eth0 httpd
    [主机名,加载IPaddr 文件,VIP(虚拟IP设置),服务(httpd)]【IPaddr可执行文件在/etc/ha.d/resource.d/】
  (3)/usr/share/doc/heartbeat-3.0.4/authkeys           [认证类]
    1.首先 chmod 600authkets,所小权限
        2.其次vim
      [行标]
          23 auth1                      [开启明文认证]
        24 crc    
  (4)测试,开启heartbeat(两个都开启) 服务,看httpd服务是否能正确运行(在虚拟机上可能比较慢,需要等待),curl 172.25.254.168 的显示内容;并且关闭heartbeat 服务,看其是否能自动切换节点。
三.添加 drbd(分布式复制块设备存储)
  (1)所用软件下载
        drbd-8.4.2.tar.gz(tar -zxf 解压);
                yum install -y gcc
  (2)执行./configure --enable-spec 和 ./configure --enbale-spec--with-km,
      (a)按照提示(所需) 依次下载软件(flex,rpm-build,等)
       生成drbd.spec,drbd-km.spec,drbd-kernel.spec 等文件,用来制作rpm包
  (3)rpmbuild -bb drbd.spec 和 rpmbuild -bbdrbd-km.spec    按照提示将压缩包放到相应位置,在进行rpmbuild操作。
         cp drbd-8.4.2.tar.gz ~/rpmbuild/SOURCES/
       执行完上述操作之后会在 ~/rpmbuild/RPMS/x86_64 下生成8个drbd-*包,安装(rpm -ivh *)它们,且发送给其它节点机并安装。
  (4)**在/etc/brdb.d/ 中编辑自定义文件,此文件非常重要,即drbd服务所加载的服务机及其向关信息。
       (a)在配置文件之前,向每个虚拟机添加两块4G的虚拟网卡
       (b) vim/etc/brdb.d/example.res
         resource example {
         meta-disk internal;
     device /dev/drbd1;
     syncer {
         verify-alg sha1;
         }
         on server1.example.com {
     disk /dev/vdb;
     address 172.25.254.161:7789;
     }
     on server2.example.com {
     disk /dev/vdb;
     address 172.25.254.162:7789;
     }
      (c)scp example.com -->172.25.254.162
      (d)每一个节点机都要进行drbd服务添加,drbdadm create-md example,并且开启drbd服务
      (e)设置主/备机,并且进行强行同步存储内容
     drbdadm primary/secondary example --force  [那个机子操作此命令那个为主/辅,并且强行同步信息]
         watch cat /proc/drbd               [可以查看同步内容的进程]
      (f)同步好了之后制作文件系统并且挂载(mkxfs.ext4),这样/dev/drbd 设备的内容就可以同步了。
          在挂载设备时,首先要设置当前机为主,再进行mount 操作
      drbdadm primary/secondary example 
   
四.添加 mysql数据库(存储),并完成节点服务异常时,自动转移服务到另一个节点。
  (1)完善挂载mysql点
       a.在主节点中下载mysql-server
         首先开启mysql   /etc/init.d/mysqld start
         挂载mnt,并且删除/mnt 下的所有内容
         关闭mysql(防止产生.sock文件 防止正常开启),并且将/var/lib/mysql/ 中的内同考到/mnt 下
     挂载 mount /dev/drbd1/var/lib/mysql/,进入/var/lib/mysql,将其主组都该为 mysql(chown mysql.mysql ~ -R)
       b.此时,切换主辅 挂载 /dev/drbd1/ 到 /var/lib/mysql 开启mysqld,就可以达成mysql 数据库数据共享了。
  (2)设置服务自动挂载,并且基于heartbeat 的服务转移的策略
       配置/etc/ha.d/haresources
     [行标]
      150 server1.example.comIPaddr::172.25.254.168/24/eth0 drbddisk::exampleFilesystem::/dev/drbd1::/var/lib/mysql::ext4
          mysqld
         【主机名,VIP,加载drbd example文件,挂载文件系统/dev/drbd1 到 /var/lib/mysql ext4本地文件系统,mysql服务】
  (3)测试
    前提,关闭两台主机的mysql服务,将两个主机的都设为辅助机(cat /proc/drbd),关闭两个主机的heartbeat 服务。 
   
        a.开启两台节点机的heatbeat 服务,节点1可以进入mysql服务,并且节点1为主机。
    b.主机1关闭heartbeat 服务,节点2接管mysql服务,并且节点2改变为主机。
        c.开启节点1,服务回到节点1上,并且节点1转为主机,节点2转为辅机
        d.关闭节点机1,节点机2接管服务,开启后,服务回到主机1。反之亦然
        e.当服务在节点机1上运行时,使得节点机1网卡down,节点1 mysql 能登入,在 cat /proc/drbd 信息中会显示对方为DUnknown
          这时,节点2上的heartbeat会将服务在节点2上启动,但是会因为接受不到主节点机的drbd 和 mysql 信息 其动不了drbd mysql服务,
          cat /proc/drbd 中会显示对方为 DUnknown
          [因为,节点机1网络故障。节点机2 找不到节点机1 节点机2的 heartbeat 就会启动节点2,若你重新启动节点2上的 heatbeat ,
      那么节点机2会一至卡住不动,请求主节点的drbd 和 mysql 策略资源,直到主节点修复好网络,但是由于回转模式,当主机网络修复好时,策略资源
      会重新回到主节点机上(节点机1)]
  (4)小拓展,当网络出现问题cat /proc/drbd 时,若两台机子都 Unkown 对方 除了重新制作新的drbd 并同步 这种毁灭性的方法,其时还可以恢复并同步数据。
    在辅机 执行drbdadm disconnect example  [使辅机不连接 example]
              drbdadm ----discard-my-data connect example  [丢掉为的drbd数据,连接 example]
    稍等片刻  cat /proc/drbd    正确信息就会出现在本机 和 主节点机上