文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

mysql、heartbeat、drbd如何实现数据库高可用群集

2024-04-02 19:55

关注

下面一起来了解下mysql、heartbeat、drbd如何实现数据库高可用群集,相信大家看完肯定会受益匪浅,文字在精不在多,希望mysql、heartbeat、drbd如何实现数据库高可用群集这篇短内容是你想要的。

DRBD  概述

一、DRBD简介

         DRBD 的全称为:Distributed ReplicatedBlock Device(DRBD)分布式块设备复制,DRBD

是由内核模块和相关脚本而组成,用来构建数据的高可用性集群。其实现方式是通过网络来镜像整个磁盘设备(数据)。你可以把它看作是一种基于网络的 RAID1。它允许用户在远程机器上建立一个本地块设备的实时镜像。

二、DRBD工作原理

         (DRBD Primary)负责接收数据,把数据写到本地磁盘并发送给另一台主机(DRBD

Secondary)。另一个主机再将数据存储到自己的磁盘中。目前,DRBD每次只允许对一个节

点进行读写访问,但这对于通常的故障切换高可用集群来说已经足够用了。有可能以后的版本支持两个节点进行读写存取。

mysql、heartbeat、drbd如何实现数据库高可用群集

三、DRBD与HA的关系

         一个 DRBD 系统由两个节点构成,与HA 集群类似,也有主节点和备用节点之分,在带有主要设备的节点上,应用程序和操作系统可以运行和访问 DRBD 设备(/dev/drbd*)。在主节点写入的数据通过 DRBD 设备存储到主节点的磁盘设备中,同时,这个数据也会自动发送到备用节点对应的 DRBD 设备,最终写入备用节点的磁盘设备上,在备用节点上,DRBD 只是将数据从 DRBD 设备写入到备用节点的磁盘中。现在大部分的高可用性集群都会使用共享存储,而 DRBD 也可以作为一个共享存储设备,使用 DRBD 不需要太多的硬件的投资。因为它在TCP/IP 网络中运行,所以,利用DRBD 作为共享存储设备,要节约很多成本,因为价格要比专用的存储网络便宜很多;其性能与稳定性方面也不错。

四、DRBD复制模式

协议 A :

         异步复制协议。一旦本地磁盘写入已经完成,数据包已在发送队列中,则写被认为是完成的。在一个节点发生故障时,可能发生数据丢失,因为被写入到远程节点上的数据可能仍在发送队列。尽管,在故障转移节点上的数据是一致的,但没有及时更新。这通常是用于地理上分开的节点。

协议 B :

         内存同步(半同步)复制协议。一旦本地磁盘写入已完成且复制数据包达到了远程节点则认为写在主节点上被认为是完成的。数据丢失可能发生在参加的两个节点同时故障的情况下,因为在传输中的数据可能不会被提交到磁盘。

协议 C :

         同步复制协议。只有在本地和远程节点的磁盘已经确认了写操作完成,写才被认为完成。没有任何数据丢失,所以这是一个群集节点的流行模式,但 I / O 吞吐量依赖于网络带宽一般使用协议 C,但选择 C 协议将影响流量,从而影响网络时延。为了数据可靠性,我们在生产环境使用时须慎重选项使用哪一种协议。

Heartbeat

一、heartbeat简介

         Heartbeat 是 Linux-HA 工程的一个组件,自1999 年开始到现在,发布了众多版本,是目前开源Linux-HA项目最成功的一个例子,在行业内得到了广泛的应用,这里分析的是2007年1月18日发布的版本 2.0.8。

         随着 Linux 在关键行业应用的逐渐增多,它必将提供一些原来由 IBM 和 SUN 这样的大型商业公司所提供的服务,这些商业公司所提供的服务都有一个关键特性,就是高可用集群。

二、heartbeat  工作原理

         Heartbeat 最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过

网络链路和串口进行,而且支持冗余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运行在对方主机上的资源或者服务。

三、高可用集群

         高可用集群是指一组通过硬件和软件连接起来的独立计算机,它们在用户面前表现为一个单一系统,在这样的一组计算机系统内部的一个或者多个节点停止工作,服务会从故障节点切换到正常工作的节点上运行,不会引起服务中断。从这个定义可以看出,集群必须检测节点和服务何时失效,何时恢复为可用。这个任务通常由一组被称为“心跳”的代码完成。在 Linux-HA 里这个功能由一个叫做heartbeat 的程序完成。

环境描述:

操作系统

 IP地址

主机名

软件包列表

CentOS  release 6.5

 192.168.200.101

server1

DRBD 、heartbeat 、mysql

CentOS release  6.5

 192.168.200.102

server2

DRBD  、heartbeat 、mysql

CentOS  release 6.5

192.168.200.103

Slave1

Mysql

CentOS release  6.5

192.168.200.104

Slave2

mysql

CentOS  release 6.5

192.168.200.105

Lvs-m

Lvs+keepalived

CentOS release  6.5

192.168.200.106

Lvs-s

Lvs+keepalived

配置过程:

mysql、heartbeat、drbd如何实现数据库高可用群集

安装前准备配置:

所有主机需要添加一块60G的SCSI接口硬盘

配置所有机器:

关闭防火墙和selinux机制

[root@localhost ~]# service iptables stop

[root@localhost ~]# setenforce 0

主从都要配置,分区不需要格式化

[root@localhost ~]# fdisk /dev/sdb

Command (m for help): n

Command action

e extended

p primary partition (1-4)

P

Partition number (1-4): 1

Last cylinder, +cylinders or +size{K,M,G} (1-2610,default 2610): +10G

Command (m for help): w

[root@server1 ~]# partprobe /dev/sdb

从主机改为 server2

[root@localhost ~]# vim /etc/sysconfig/network

2 HOSTNAME=server1

[root@localhost ~]# hostname server1

[root@localhost ~]# bash

[root@server1 ~]# vim /etc/hosts

3 192.168.200.101 server1

4 192.168.200.102 server2

Heartbeat安装:

主从都需要安装

把包上传到/root下,按照顺序安装。

[root@server1 ~]#rpm -ivhPyXML-0.8.4-19.el6.x86_64.rpm

[root@server1 ~]#rpm -ivhperl-TimeDate-1.16-13.el6.noarch.rpm

[root@server1 ~]#rpm -ivhresource-agents-3.9.5-24.el6_7.1.x86_64.rpm

[root@server1 ~]#rpm -ivh lib64ltdl7-2.2.6-6.1mdv2009.1.x86_64.rpm

[root@server1 ~]#rpm -ivhcluster-glue-libs-1.0.5-6.el6.x86_64.rpm

[root@server1 ~]#rpm -ivhcluster-glue-1.0.5-6.el6.x86_64.rpm

[root@server1 ~]#yum -y install kernel-devel kernel-headers

[root@server1 ~]#rpm -ivh heartbeat-libs-3.0.4-2.el6.x86_64.rpmheartbeat-3.0.4-2.el6.x86_64.rpm

安装配置 DRBD:

主从都需要安装

[root@server1 ~]# tar xf drbd-8.4.3.tar.gz

[root@server1 ~]# cd drbd-8.4.3

[root@server1 drbd-8.4.3]#./configure--prefix=/usr/local/drbd --with-km --with-heartbeat

[root@server1 drbd-8.4.3]# make KDIR=/usr/src/kernels/2.6.32-504.el6.x86_64/&& make &&

make install

[root@server1 drbd-8.4.3]# mkdir -p/usr/local/drbd/var/run/drbd

[root@server1 drbd-8.4.3]# cp/usr/local/drbd/etc/rc.d/init.d/drbd /etc/init.d/

[root@server1 drbd-8.4.3]# chkconfig --add drbd

[root@server1 drbd-8.4.3]# cd drbd

[root@server1 drbd]# make clean

[root@server1 drbd]# make KDIR=/usr/src/kernels/2.6.32-504.el6.x86_64/

[root@server1 drbd]# cp drbd.ko /lib/modules/2.6.32-504.el6.x86_64/kernel/lib/

[root@server1 drbd]# depmod

[root@server1 drbd]# cp -R/usr/local/drbd/etc/ha.d/resource.d10 * * * * ntpdate time.nist.gov

 

修改四台数据库主机的配置文件(注意server_id不要一样)开启binlog日志

[root@server1~]# vim /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

# Disabling symbolic-links is recommended to preventassorted security risks

symbolic-links=0

relay-log =relay-log-bin

server_id =1

relay-log-index= slave-relay-bin.index

 

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

重启服务

[root@server1 ~]# /etc/init.d/mysqld restart

停止 mysqld:                                              [确定]

正在启动 mysqld:                                          [确定]

在serve1上授权,允许从云服务器同步,查看主云服务器的binlog

[root@server1 ~]# msyql

mysql> grant replication slave on *.* to'user'@'192.168.200.%' identified by '123456';

mysql> flush privileges;

mysql> show master status;

+------------------+----------+--------------+------------------+

| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000002 |      187 |              |                  |

+------------------+----------+--------------+------------------+

1 row in set (0.00 sec)

从云服务器同步server1,查看从云服务器状态。

mysql> change master to master_host='192.168.200.254',master_user='user',master_password='123456',master_log_file='mysql-bin.000002', master_log_pos=106;

mysql> flush privileges;

mysql> start slave;

mysql> show slave status \G

在带有VIP的主数据库创建库,验证从云服务器是否同步

server1

mysql> create database abc;

 

slave

mysql> show databases;

+--------------------+

| Database          |

+--------------------+

| information_schema |

| abc                |

| b                 |

| mysql             |

| test              |

+--------------------+

5 rows in set (0.00 sec)

配置LVS+keepalived实现负载

安装keepalived服务,并配置VIP和节点健康检查

在主节点上操作

[root@localhost ~]# yum -y install keepalived

[root@localhost ~]# cd /etc/keepalived/

[root@localhost ~]# cp keepalived.confkeepalived.conf.bak

[root@localhost ~]# vim keepalived.conf

! Configuration File for keepalived

 

global_defs {

notification_email {

    acassen@firewall.loc

    failover@firewall.loc

    sysadmin@firewall.loc

   }

notification_email_from Alexandre.Cassen@firewall.loc

smtp_server 192.168.200.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}

 

vrrp_instance VI_1 {

stateMASTER

interface eth0

virtual_router_id 51

priority100

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

    }

virtual_ipaddress {

       192.168.200.100

    }

}

virtual_server 192.168.200.100 3306 {

delay_loop 6

lb_algo rr

lb_kind DR

nat_mask 255.255.255.0

persistence_timeout 50

protocol TCP

 

real_server 192.168.200.103 3306 {

weight 1

       TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

        }

    }

 

real_server 192.168.200.104 3306 {

weight 1

        TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

        }

}

}

 

备节点与主节点的操作一样,只有配置文件有一些区别

! Configuration File for keepalived

 

global_defs {

notification_email {

    acassen@firewall.loc

    failover@firewall.loc

    sysadmin@firewall.loc

   }

notification_email_from Alexandre.Cassen@firewall.loc

smtp_server 192.168.200.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}

 

vrrp_instance VI_1 {

stateBACKUP

interface eth0

virtual_router_id 51

priority 50

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

    }

virtual_ipaddress {

       192.168.200.100

    }

}

virtual_server 192.168.200.100 3306 {

delay_loop 6

lb_algo rr

lb_kind DR

nat_mask 255.255.255.0

persistence_timeout 50

protocol TCP

 

real_server 192.168.200.103 3306 {

weight 1

       TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

        }

    }

 

real_server 192.168.200.104 3306 {

weight 1

       TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

        }

}

}

编写脚本,配置从数据库(主从都要做)

[root@slave1~]# vim /opt/lvs-dr

 

#!/bin/bash

VIP="192.168.200.100"

/sbin/ifconfigeth0 192.168.200.103/24 up

/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask255.255.255.255 up

/sbin/route add -host $VIP dev lo:0

echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce

echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

 

[root@slave2~]# vim /opt/lvs-dr

 

#!/bin/bash

VIP="192.168.200.100"

/sbin/ifconfigeth0 192.168.200.104/24 up

/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask255.255.255.255 up

/sbin/route add -host $VIP dev lo:0

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce

echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

 

添加执行权限,执行脚本

chmod +x /opt/lvs-dr

echo "/opt/lvs-dr" >> /etc/rc.local

/opt/lvs-dr

 [root@slave1~]# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdiscnoqueue state UNKNOWN

   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet127.0.0.1/8 scope host lo

    inet 192.168.200.100/32 brd192.168.200.100 scope global lo:0

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu1500 qdisc pfifo_fast state UP qlen 1000

    link/ether00:0c:29:3f:03:d5 brd ff:ff:ff:ff:ff:ff

    inet192.168.200.103/24 brd 192.168.200.255 scope global eth0

启动keepalived

[root@localhost keepalived]# /etc/init.d/keepalivedstart

正在启动 keepalived:                                      [确定]

安装ipvsadm用于查看节点记录(主从节点都要配置)

[root@localhost ~]# yum -y install ipvsadm

[root@localhost ~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  ->RemoteAddress:Port           ForwardWeight ActiveConn InActConn

TCP  192.168.200.100:3306 rr persistent 50

  -> 192.168.200.103:3306         Route  1      0          0

  -> 192.168.200.104:3306         Route  1      0          0

[root@localhost ~]#/etc/init.d/ipvsadm save

[root@localhost ~]#/etc/init.d/ipvsadm restart

验证

验证主主切换是否同步从数据库

server1上关闭heartbeat

[root@server1 ~]# service heartbeat stop

Stopping High-Availability services: Done.

slave上查看同步信息

mysql> show slave status\G

*************************** 1. row***************************

              Slave_IO_State: Waiting for master to send event

                 Master_Host: 192.168.200.253

                 Master_User: myslave

                 Master_Port: 3306

               Connect_Retry: 60

             Master_Log_File: mysql-bin.000008

         Read_Master_Log_Pos: 106

              Relay_Log_File: mysqld-relay-bin.000023

               Relay_Log_Pos: 251

       Relay_Master_Log_File: mysql-bin.000008

            Slave_IO_Running: Yes

           Slave_SQL_Running: Yes

              Replicate_Do_DB:

         Replicate_Ignore_DB:

          Replicate_Do_Table:

      Replicate_Ignore_Table:

     Replicate_Wild_Do_Table:

 Replicate_Wild_Ignore_Table:

                  Last_Errno: 0

                  Last_Error:

                Skip_Counter: 0

         Exec_Master_Log_Pos: 106

             Relay_Log_Space: 552

             Until_Condition: None

              Until_Log_File:

               Until_Log_Pos: 0

          Master_SSL_Allowed: No

          Master_SSL_CA_File:

          Master_SSL_CA_Path:

             Master_SSL_Cert:

           Master_SSL_Cipher:

              Master_SSL_Key:

       Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

               Last_IO_Errno: 0

                Last_IO_Error:

              Last_SQL_Errno: 0

              Last_SQL_Error:

1 row in set (0.00 sec)

如果不同步,停一下同步,再重启查看。

验证从数据库是否轮询

在主lvs上查看连接信息

 [root@localhost~]# watch ipvsadm -Lnc           //实时查看远程连接信息

-c (--connection) 显示LVS目前的连接信息

在其他主机通过VIP进行连接测试

 [root@localhostkeepalived]# mysql -umydb -h292.168.200.100 -p123456 -e 'show databases;'

+--------------------+

| Database          |

+--------------------+

| information_schema |

| mysql             |

| slave1             |

| test              |

+--------------------+

查看主lvs信息,等第一次连接断开再测试。

[root@localhost keepalived]# mysql -umydb-h292.168.200.100 -p123456 -e 'show databases;'

+--------------------+

| Database          |

+--------------------+

| information_schema |

| mysql             |

| slave2             |

| test              |

+--------------------+

 看完mysql、heartbeat、drbd如何实现数据库高可用群集这篇文章后,很多读者朋友肯定会想要了解更多的相关内容,如需获取更多的行业信息,可以关注我们的数据库栏目。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯