LVS + Heartbeat + DRBD + MySQL

前面两篇介绍了LVS和Heartbeat并进行了基本的搭建,这里我们将LVS与Heartbeat结合起来,高可用加负载均衡,并添加共享存储DRBD以及Mysql数据库。

问题的引入

在之前添加LVS的健康检查时,因为其本身并没有服务健康检查,即使一台real server服务器出现故障,LVS虚拟服务器依旧会将客户端的请求数据包发送至这台服务器,这显然是不合理的,所以在使用LVS时,一般会使用ldirectord软件对LVS下的real server服务器进行健康检查,如果一台服务器出现故障,会将这台服务器从LVS中去除,当服务恢复时,再重新加入到LVS中。

这虽然可以解决LVS的健康检查问题,使得可以监控real server服务器,但是并不能改变LVS是单点的事实,如果LVS虚拟服务器出现了故障,那么就会导致整个LVS体系瘫痪,此时就需要用到高可用集群套件来使得LVS有主备功能,实现高可用。当一台LVS虚拟服务器出现故障,会自动切换到另一台LVS虚拟服务器。

这里我们的是LVS和高可用集群套件heartbeat的结合,形成一个LVS-heartbeat体系,来实现LVS的高可用,并且会再结合DRBD,MySQL数据库实现主备的共享存储。

这是简单制作的整体拓扑图:

先有一个整体的思想


lvs + heartbeat

基础环境:

  • 使用的环境是redhat6.5的linux操作系统。
  • 有一台物理主机和四台虚拟主机,server1和server2作为LVS的虚拟服务器,在其上加入heartbeat高可用套件,server3和server4作为real
    server服务器,提供Apache服务。
  • LVS采用DR模式。
  • 要求selinux,iptables关闭
*由于LVS+健康监测之前已经搭建过,而ldriecrord这个服务本身就是heartbeat内部的服务,所以只需要在LVS完整搭建的基础上再直接按照前面heartbeat所讲解的方法搭建heartbeat就可以直接实现LVS+heartbeat,并且测试也是之前的方法。这里就不再特别说明。

下面直接开始添加后面的服务。


添加DRBD

概述:

DRBD(Distributed Replicated Block Device)
DRBD 号称是“网络RAID”,开源软件,由LINBIT 公司开发。DRBD实际上是一种块设备的实现,主要被用于Linux平台下的高可用(HA)方案之中。
它由内核模块和相关程序而组成,通过网络通信来同步镜像整个设备,有点类似于一个网络RAID-1的功能。也就是说当你将数据写入本地的DRBD设备上的文件系统时,数据会同时被发送到网络中的另外一台主机之上,并以完全相同的形式记录在文件系统中。本地节点与远程节点的数据可以保证实时的同步,并保证IO的一致性。所以当本地节点的主机出现故障时,远程节点的主机上还会保留有一份完全相同的数据,可以继续使用,以达到高可用的目的。
drdb复制的是磁盘的存储数据块

为了能够管理和配置 DRBD 的资源,DRBD 配备了一些管理工具与内核模块进行通信:
  • drbdadm:高层的 DRBD 程序管理套件工具。它从配置文件/etc/drbd.conf 中获取所有配置参数。drbdadm 为drbdsetup 和 drbdeta 两个命令充当程序的前端应用,执行 drbdadm 实际是执行的 drbdsetup 和drbdeta 两个命令。

  • drbdsetup:drbdsetup 可以让用户配置已经加载在内核中运行的 DRBD 模块,它是底层的 DRBD程序管理套件工具。使用该命令时,所有的配置参数都需要直接在命令行中定义,
    虽然命令和灵活,但是大大的降低了命令的简单易用性,因此很多的用户很少使用。

  • drbdmeta:drbdmeta 允许用户创建、转储、还原和修改 drbd 的原数据结构。

添加DRBD

一、基本环境配置

1、安装软件(主备服务器server1)
软件下载地址 : http://oss.linbit.com/drbd

yum install gcc flex rpm-build kernel-devel -y  //解决软件依赖性'

"因为此处用的软件包是源码,为了便于后期的维护,把它制作成RPM包,所以要用到rpmbuild命令具体的参数使用可以查看,rpmbuild --help"
yum install -y rpm-build  ##rpmbuild命令需要安装的是rpm-build软件
rpmbuild ~ ##在家目录生成 rpmbuild 编译所需路径
cp drbd-8.4.0.tar.gz rpmbuild/SOURCES/  ##需要把待制作的软件包拷贝到root/rpmbuild/SOURCES/目录下
tar zxf drbd-8.4.0.tar.gz
cd drbd-8.4.0
./configure --enable-spec --with-km

开始制作RPM包
rpmbuild -bb drbd.spec      ##编译生成 drbd rpm 包
rpmbuild -bb drbd-km.spec   ##编译 drbd 内核模块
     ##如果没有关于内核模块的这个包,那么服务drbd将无法启动
     ##rpm包制作成功后,自动会添加/lib/modules/2.6.32-431.el6.x86_64/updates/drbd.ko模块
    ## 所有制作好的rpm包都在/root/rpmbuild/RPMS/x86_64/这个目录下,一共8个,一个都不能少
cd ~/rpmbuild/RPMS/x86_64
ls查看8个包:        
            drbd-8.4.4-4.el6.x86_64.rpm
            drbd-bash-completion-8.4.4-4.el6.x86_64.rpm
            drbd-heartbeat-8.4.4-4.el6.x86_64.rpm
            drbd-km-2.6.32_431.el6.x86_64-8.4.4-4.el6.x86_64.rpm
            drbd-pacemaker-8.4.4-4.el6.x86_64.rpm
            drbd-udev-8.4.4-4.el6.x86_64.rpm
            drbd-utils-8.4.4-4.el6.x86_64.rpm
            drbd-xen-8.4.4-4.el6.x86_64.rpm 
rpm -ivh *  ##安装所有的包

拷贝生成的 rpm 包到另一主机(server2),并安装软件包:

scp ~/rpmbuild/RPMS/x86_64/* 172.25.77.2:/root
ssh root @172.25.77.2  'rpm -ivh /root/drbd-*.rpm'

2、添加磁盘分区
在server1和server2端,分别添加一块4G大小的虚拟磁盘

  • fdisk -l 此时应该能看到/dev/vdb被添加出来了

    //这里每台主机不一定相同,即不一定是/dev/vdb

3、修改配置文件
DRBD 的所有的控制都是在配置文件/etc/drbd.conf 中。配置文件包含如下内容:

include "/etc/drbd.d/global_common.conf";
include "/etc/drbd.d/*.res";
  • 通常情况下, /etc/drbd.d/global_common.conf 包含 global 和 common 的 DRBD配置部分,而.res文件都包含一个资源的部分。

在/usr/share/doc/drbd-utils-8.4.4下有配置模板

cd /usr/share/doc/drbd-utils-8.4.4
ls
ChangeLog  COPYING  drbd.conf.example  README

进入/etc/drbd.d,编辑一个以.res结尾的文件,文件名可以随意取

vim /etc/drbd.d/drdb.res

resource demo {      #mysqldata,是指定的资源的名字
meta-disk internal;       # internal表示将metadata存放到drbd挂在的磁盘分区的最后的位置上
device /dev/drbd1;
syncer {
verify-alg sha1;
}
on server1 {        #每个主机的说明以"on"开头,后面必须是主机名
disk /dev/vdb;       #此处的disk必须是添加磁盘时 fdisk -l 显示的
address 172.25.32.1:7789;       # 设置DRBD的监听端口,用于与另一台主机通信
}
on server2 {
disk /dev/vdb;
address 172.25.32.2:7789;
}
}

将编辑好的配置文件拷贝到另一个节点(server2)

scp drbd.res 172.25.32.2:/etc/drbd.d    ##两边的配置文件一模一样

需要注意的一点:
  • metadata的存储方式有内部和外部两种方式,使用哪种配置都是在资源配置中定义的
    内部metadata:内部metadata存放在同一块硬盘或分区的最后的位置上

    • 优点:metadata和数据是紧密联系在一起的,如果硬盘损坏,metadata同样就没有了,同样在恢复的时候,metadata也会一起被恢复回来
    • 缺点:metadata和数据在同一块硬盘上,对于写操作的吞吐量会带来负面的影响,因为应用程序的写请求会触发metadata的更新,这样写操作就会造成两次额外的磁头读写移动。

    外部metadata:外部的metadata存放在和数据磁盘分开的独立的块设备上

    • 优点:对于一些写操作可以对一些潜在的行为提供一些改进
    • 缺点:metadata和数据不是联系在一起的,所以如果数据盘出现故障,在更换新盘的时候就需要人工干预操作来进行现有node新硬盘的同步了

二、服务配置

1、开启drbd

drbdadm create-md demo
/etc/init.d/drbd start


//这里最下面的 ” …… “表示它在等待另一个节点,即在server2上也要开启


//这时两端就都开启了

初始化成功,并启动服务都ok,在/dev/下会生成 /dev/drbd1这个设备名。后面的存储,使用的也是 /dev/drbd1

ll /dev/drbd1
brw-rw---- 1 root disk 147, 1 May 23 15:14 /dev/drbd1 

2、 查看分区信息

//在两台服务器上都是Secondary/Secondary

tips :

/proc/drbd 是一个虚拟的文件,用于显示当前配置的所有 drbd 资源的实时状态。简单介绍下/proc/drbd文件中各字段的含义:

  • 第一行显示的为当前系统使用的drbd的版本,第二行包含一些特定的编译信息。 CS(connnection state):网络连接状态

  • 使用命令 drbdadm cstate 查看资源的连接状态。常见的状态有:

    • Connected 连接:Drbd 已经建立连接,数据镜像现在可用,节点处于正常状态。
    • Disconnecting 断开:断开只是临时状态,下一个状态将是 StandAlone 独立的。
    • Unconnected 悬 空 : 是 尝 试 连 接 前 的 临 时 状 态 , 可 能 的 下 一 个 状 态 为
      WFconnection 和WFReportParams。
    • Timeout 超时:与对等节点连接超时,也是临时状态,下一个状态为 Unconected 悬空。
  • RO(role 角色):节点的角色
  • 本地节点一般显示在前,对等节点资源显示在后。资源的角色一般为如下之一:

    • Primary 主:资源目前为主,并且可能正在被读取或者写入。若不是双主模式被激活,这种角色只可能出现在两节点中的一个上。
    • Secondary次:资源目前为次。正常接收对等节点的更新(除非运行在断开模式下才不是),但是它既不能被读取也不能被写入。这种角色只能是两节点中的一个。
    • Unknown 未知:资源角色目前未知。本地资源不会出现这种状态,只有对等节点在断开模式下才会出现在这种情况。 DS(disk
      stats): 磁盘状态
  • 本地和对等节点的磁盘状态都有可能是以下状态之一:

    • Consistent:一个没有连接的节点数据一致。当建立连接时,它决定数据是 UpToDate 或者是Outdated。
    • UpToDate:一致的最新的数据状态,这个状态是正常的状态。
    • Failed 失败:本地块设备报告 I/O 错误的下一个状态。其下一个状态为 Diskless 无盘。
    • Inconsistent:数据是不一致的,在两个节点上(初始的完全同步前)这种状态出现后立即创建一个新的资源。此外,在同步期间(同步目标)在一个节点上出现这种状态。
    • Outdated:数据资源是一致的,但是已经过时。
    • DUnknown:当对等节点网络连接不可用时出现这种状态。

3、数据同步
将 demo 设置为 primary 节点,并同步数据:(在 demo 主机执行以下命令)
drbdsetup /dev/drbd1 primary –force

//一旦开始,两边都会开始同步,即在server2上查看也是在读进度条的。

  • 完成后 ,在server1上可以看到

    //这里是Primary在前,即为主节点
  • server2:

    //副节点

两个节点上的块设备都完全同步之后,使用诸如ext4的文件系统格式化主节点上的 DRBD 设备

mkfs.ext4 /dev/drbd1

  • 注 : 只用格式化一次,另一端自动就已经格式化了

三、测试
server1:

挂载文件系统,存放数据:

卸载文件系统,将 demo 设置为 secondary 节点:

drbdadm secondary demo  ##设置节点等级    

server2:

将 remote 设置为 primary 节点,挂载文件系统,查看数据是否同步:

//可以看到刚刚创建的文件直接就存在了

注意:
两台主机上的/dev/drbd1 不能同时挂载,只有状态为 primary 时,才能被挂载使用,而此时另一方的状态为 secondary。
即:主备只能主操作,也只能一点挂载,格式化也值在主一次就行,另一个用要转换,转换时要解除占用


添加MySQL数据库

正常的生产环境中,一定是用数据库在操作的,所以,我们再向刚刚的服务中再添加数据库,这里使用的是MySQL数据库。

操作环境就是接着上面的继续

1、安装数据库(两端同时做)
yum install mysql-server -y 

启动mysql会生成 /var/lib/mysql/mysql.sock 停掉就没了

2、将文件系统重新挂载在/var/lib/mysql下,这里是数据库的文件存储目录

*需要修改这个目录的所属用户和所属组为mysql,mysql,不然root用户是无法共享的

刚刚因为实验停在了server2上,所以我们现在用server2操作,实际效果是完全一样。

完成后将/dev/lib/mysql文件夹中的所有文件删除,不然影响测试效果


重新设置自动挂载(DRBD+MySQL)

在server1重新编辑Heartbeat服务的/etc/ha.d/haresources文件

注意:
这里的服务后面的顺序是开启heartbeat时自动启动服务的顺序,所以应该是启动网络,然后drbddisk,下来文件系统的挂载,然后在开启MySQL数据库。
其中的drbddisk, Filesystem调用的是/etc/ha.d/resource.d/下的相应脚本文件

发送到server2端


测试

将两主机的所有服务关闭,重新启动服务

在启动heartbeat之前,必须保证/dev/drbd1没有在任一个节点上挂载。而且,172.25.32.1(server1)为主设备,172.25.32.2(server2)为从设备,按配置文件的修改

  • 在两个设备上,分别启动heartbeat服务,当主设备启动正常后,再启动从设备

开启服务之后,可以发现已经自动挂载,并且VIP也设置好了,数据库也已经开启。

在server1端:

进入mysql数据库添加信息:


  • 这时,比拟一个特殊状况,直接将server1的heartbeat关闭
server2端:

此时因为配置了高可用,所以server2会自动接管server1的工作,然后直接在server2进入数据库查看:

//数据是存在的,配置成功!!

这就实现了LVS + Heartbeat + DRBD + MySQL这一整体架构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值