dinggela 发表于 2019-1-7 08:24:15

集群管理之Heartbeat与DRBD

  环境需求:rhel6以上,iptablss与selinx disabled,
  新虚拟机(未进行其他集群操作的)server1与server2为两节点
  Instructor为服务机(M端)。
  

  
  集群管理之Heartbeat
  

Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能。heartbeat最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗 余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运 行在对方主机上的资源或者服务。

两节点上安装hearbeat-3.0.4-2.e16.x86_64 heartbeat-llibs-3.0.4-2.e16.x86_64 heartbeat-devel-3.0.4-e16.x86_64 ldirectord-3.9.5-3.1.x86_64、mysql-server。
在srever1上,
#vim /etc/ha.d/ha.cf
logfile /var/log/ha-log #日志文件

keepalive 2             #心跳时间

deadtime 30             #无响应时间

warntime 10       #警告时间

initdead 60             #守护进程启动后主机启动资源需要等待的时间

udpport 694             #端口

cast   eth0             #使用物理网卡eth0传输心跳消息

auto_failback on      #设置当主机修复后服务是否回返到主机

node    server2.example.com node    server3.example.com #设置节点,主机在上副机在下

ping 172.25.254.55      #判断主副机的网络状况

respawn hacluster /usr/lib64/heartbeat/ipfailapiauth ipfail gid=haclient uid=hacluster #指定用户和用户组
添加2个node,后面接节点的hostname
  #vim /etc/ha.d/haresource
  在最后添加server1.example.com IPaddr::172.25.0.100/24/eth0 Filesystem::/dev/sda1::/var/lib/mysql::ext4 mysqld
Server1.example.com: 主节点
IPaddr::172.25.254.100/24/eth0: 虚拟IP
Filesystem::/dev/sda1::/var/lib/mysql::ext4 : 文件系统
Mysql: 服务
  #vim authkeys ,取消auth 1 、1 crc的注释//crc为明文(不加密)。
  #chmod 600 authkeys.
  将server的远端存储分区并格式化为ext4,分区由heartbeat同步到server2中。
  将这三个文件复制给server2。两节点都启动heartbeat服务。
  #mount /dev/sda1/ /mnt
  #cp -rp /var/lib/mysql/* /mnt
  #chown mysql.mysql /mnt
  #umount /mnt
  若server1的mysqld或者heartbeat停止,则server2mysql启动,vip加在server2上,这就是集群的高可用性。
  

  

  集群管理之DRBD

  

  DRBD(Distributed Replicated Block Device分布式复制块设备),DRBD 号称是 “网络 RAID”,开源软件,由
  LINBIT 公司开发。DRBD实际上是一种块设备的实现,主要被用于Linux平台下的高可用(HA)方案之
  中。他有内核模块和相关程序而组成,通过网络通信来同步镜像整个设备,有点类似于一个网络
  RAID-1的功能。也就是说当你将数据写入本地的DRBD设备上的文件系统时,数据会同时被发送到网络
  中的另外一台主机之上,并以完全相同的形式记录在文件系统中。本地节点与远程节点的数据可以保证
  实时的同步,并保证IO的一致性。所以当本地节点的主机出现故障时,远程节点的主机上还会保留有一
  份完全相同的数据,可以继续使用,以达到高可用的目的
  
  安装
  首先关闭两节点的iscsi,并本地添加4g的存储。
  在节点1上,解压drbd-8.4.3
  #./configure --enable-spec--with-km
  #yum install flex rpm-buildkernel-devel//解决依赖性
  #cp drbd-8.4.3.tar.gz rpmbuild/SOURCES
  #rpmbuild -bb drbd.spec drbd-km.spec //创建rpm包
  #rpm -ivh /root/rpmbuild/RPMS/x86_64/*
  复制这些rpm到server2上安装。
  
  在server1上,/etc/drbd.d/drbd.conf, 可以看到drbd包含drbd.d/下所有以.res结尾的文件。因此可以在/etc/drbd.d下创建example.res文件,对当前集群进行配置
  resource sqldata {    //源为sqldata
  meta-disk internal;    //磁盘为内部的
  device /dev/drbd1;   //设备为/dev/drbd1
  syncer {
  verify-alg sha1;         //同步方式
  }
  on server1.example.com {   //节点1的设置
  disk /dev/vdb;
  address 172.25.0.1:7789;
  }
  on server2.example.com {    //节点2的设置
  disk /dev/vdb;
  address 172.25.0.2:7789;
  }
  }
  将该文件复制到节点2.两节点都对drbd进行初始化:
  #drbdadm create-md sqldata
  
  两节点都启动drbd服务。
  在节点1上
  #cat /proc/drbd 可以看到drbd块信息。显示 secondary/secondary表示server1(第一个secondary)为从设备,server2(第二个secondary)为从设备。
  #drbdadm primary sqldata --force//强制将server1设为主设备,集群服务只会在主设备上运行
  在节点2上,
  #cat /proc/drbd显示secondary/primary表示本机为从设备,server1为主设备。
  #mkfs.ext4 /dev/drbd1
  #mount /dev/drbd1 /mnt
  #cp -rp /var/lib/mysql/* /mnt   
  #chown mysql.mysql /mnt
  #umount /mnt
  数据会同步写入到节点2的/dev/drbd1上。
  #drbdadm secondary sqldata// 将节点1设为从设备
  
  在节点2上
  #mount /dev/drbd1 /mnt
  #drbdadm primary sqldata//将本节点设为主设备
  #ls /mnt会看到mysql文件
  
  注意:两台主机上的/dev/drbd1 不能同时挂载,只有状态为 primary 时,才能被挂载使
  用,而此时另一方的状态为 secondary。
  
  Heartbeat集成drbd
  
  在节点1的/etc/ha.d/haresource,修改最后一行为
  server1.example.com IPaddr::172.25.0.100/24/eth0 drbddisk::sqldata Filesystem::/dev/drbd1::/var/lib/mysql::ext4 mysqld
  并将该文件复制到节点2中。
  两节点都启动heartbeat
  节点1上,由于drbd为primary,可以看到drbd1以被挂载到/var/lib/mysql上,eth0添加了vip。这些都是heartbeat自动完成的
  节点2上,则没挂载没加vip。
  
  附注:接着上篇博客利用远端存储通过HA使用mysql服务
  M端启用luci、tgtd
  两节点启用ricci、iscsi并安装mysql-server,停用mysql服务
  
  在web上禁用apache服务组并不勾选独立运行。
  添加回错域(failover domain)name为sqldb,其他与webfail相同。
  添加resource->ip address 设置虚拟ip为172.25.0.101;
                    -> script   name=mysqld   path为/etc/init.d/mysqld
   Server1上
  卸载之前的添加的逻辑卷、卷组、物理卷
  #service clvmd restart //重启clvmd服务
  #cat /proc/partitions//查看块设备信息
  重新远端存储重新分为2个区
  在server2 上, 运行partprobe然后查看/proc/partitions能看到sda1和sda2两个分区。。
  挂载sda1到mnt。 在mnt下创建index.html,内容为www.redhat.org.然后卸载,数据写入sda1中。再挂载sda2,将/var/lib/mysql下的所有复制到mnt。
  #chown mysql.mysql /mnt
  卸载mnt,mysql写入sda2中。
  
  在web上
  修改resource中的webdata的device为/dev/sda1
  添加resource,name=dbdata文件系统名为ext4,挂载点为/var/www/html,设备为/dev/sda2,勾选force unmount,use quick status checks ,reboot host node if unmount fails.
  添加服务组。Name为mysql,勾选自动启动,回错域为sqldb,然后点添加resource to service
  依次添加新的vip等服务,虚拟ip(172.25.0.101)就和mysql绑定。启用apache服务组。
  这时若server2apache服务被破坏,如network disabled,集群会自动从server1上启动apache。
  哪个节点上开启了mysql,那么它会ip会增加vip。
  




页: [1]
查看完整版本: 集群管理之Heartbeat与DRBD