• ADADADADAD

    如何搭建Heartbeat+DRBD+Mysql+Lvs+Keepalived高可用[ mysql数据库 ]

    mysql数据库 时间:2024-11-26 22:14:10

    作者:文/会员上传

    简介:

    环境介绍: 主节点mysql1:192.168.9.25主节点mysql2:192.168.9.26Heartbeat的写的VIP:192.168.9.231LVS1:192.168.9.27LVS2:192.168.9.28keepalived 分发的VIP:192.168.9.230要分

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    环境介绍:

    主节点mysql1:192.168.9.25

    主节点mysql2:192.168.9.26

    Heartbeat的写的VIP:192.168.9.231

    LVS1:192.168.9.27

    LVS2:192.168.9.28

    keepalived 分发的VIP:192.168.9.230

    要分发的mysql1: 192.168.9.29

    要分发的mysql2:192.168.9.30

    整体安装注意:1,drbd的两个节点,同一时期只有那个主节点能挂载盘DRBD的那个盘,2,把MySQL的数据文件,日志文件,临时文件目录要写到DRBD那个盘也就是datadir,tmpdir,log_error,log-bin这几个参数。3,关于MySQL的配置文件(/etc/my.cnf)

    也应该放到drdb的那个盘上,并且把主节点和从节点上/etc目录下的my.cnf删掉,但是必须要建立软连接,到/etc/my.cnf。4,lvs+keepalived架构中,lvs实现分发,keepalived实现lvs的高可用,keepalived配置里vip,作为分发的vip.

    heartbeat+drbd搭建流程:
    如果主服务器宕机,造成的损失是不可估量的。要保证主服务器不间断服务,就需要对服务器实现冗余。在众多的实现服务器冗余的解决方案中,heartbeat为我们提供了廉价的、可伸缩的高可用集群方案。我们通过heartbeat+drbd在Linux下创建一个高可用(HA)的集群服务器。
    DRBD是一种块设备,可以被用于高可用(HA)之中。它类似于一个网络RAID-1功能。当你将数据写入本地文件系统时,数据还将会被发送到网络中另一台主机上。以相同的形式记录在一个文件系统中。本地(主节点)与远程主机(备节点)的数据可以保证实时同步。当本地系统出现故障时,远程主机上还会保留有一份相同的数据,可以继续使用。在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘阵。因为数据同时存在于本地主机和远程主机上。切换时,远程主机只要使用它上面的那份备份数据,就可以继续进行服务了

    heartbeat实现当本地节点出问题后,自动检测出来,并且完成主备切换,实现高可用,

    区别于MHA: mha 中从change 的时候指向的是真的IP。而DRBD指向的vip

    1,DRBD的部署(两个主节点都要部署)

    DRBD的安装,centOS6.5自带的yum没有drbd和Heartbeat的包,需要更新yum源,再安装,步骤如下:
    [root@master2~]#yum install kernel-devel ##升级内核
    [root@master2~]#rpm -Uvhhttp://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm ## centOS6的第三方工具包集
    [root@master2~]#rpm -Uvhhttp://www.elrepo.org/elrepo-release-5-5.el5.elrepo.noarch.rpm ## centOS5的第三方工具包集
    [root@master2~]#yum -y install drbd83-utils kmod-drbd83
    [root@master2~]#modprobe drbd #加载DRBD。执行该命令如果报错,将系统重启后再执行。
    [root@master2~]#lsmod |grep drbd

    drbd 332493 4 #显示此条信息,说明drbd加载成功

    2,DRBD的配置

    配置之前需要先使用fdisk -l或df -v看下系统的分区情况,这里用到系统现有的/dev/sdb分区做为drbd的配置。

    2 .对于DRBD的配置,配置/etc/drbd.conf和hosts文件,dbserver1和dbserver2的hosts添加的内容如下:

    [root@master1~]#cat/etc/hosts
    #Donotremovethefollowingline,orvariousprograms
    #thatrequirenetworkfunctionalitywillfail.
    127.0.0.1localhost.localdomainlocalhost
    ::1localhost6.localdomain6localhost6
    192.168.9.25master1
    192.168.9.26master2

    3. #配置/etc/sysconfig/network文件,该文件两边配置

    [root@master1~]#cat/etc/sysconfig/network
    NETWORKING=yes
    NETWORKING_IPV6=yes
    HOSTNAME=master1 、master2

    4. /etc/drbd.conf文件的内容如下(dbserver1和dbserver2的配置一样):

    [root@master1~]#cat/etc/drbd.conf##注意真正配置的时候,要把##注释的东西删掉。

    # You can find an example in /usr/share/doc/drbd.../drbd.conf.example

    #include "drbd.d/global_common.conf";

    #include "drbd.d/*.res";

    global { usage-count yes; }

    common { syncer { rate 10M; } } ###设置主,备节点同步的的网络速率最大值,单位是字节

    resource r1 {

    protocol C; ##使用drbd的第三种同步协议,表示收到远程主机的写入确认后认为写入完成

    startup {

    }

    disk {

    on-io-error detach;

    # size 1G;

    }

    net {

    }

    on mysql_master1 {

    device /dev/drbd0;

    disk /dev/sdb; #这里磁盘或分区两边最好一样,也可以用逻辑分区

    address 192.168.9.25:7888;

    meta-disk internal;

    }

    on mysql_master2 {

    device /dev/drbd0;

    disk /dev/sdb;

    address 192.168.9.26:7888; #端口和上面一样都设置成7888就可以

    meta-disk internal;

    }

    }

    5 .

    先执行dd测试命令,覆盖文件系统中 的设备块信息,不然的话,在第6步创建资源的时候会报错

    Dd if=/dev/zero of=/dev/sdb bs=1M count=100

    6.配置好drbd以后,就需要使用命令在dbserver1和dbserver2上创建drbd元数据库信息,使用如下命令

    drbdadm create-md r1,r1为配置文件中resource后面定义的资源名,如下显示建立资源成功,执行命令时配置文件中的disk /dev/sdb的硬盘处在不挂载的情况,才行,两台机器都不挂载。

    [root@master1~]# drbdadm create-md r1

    Writing meta data...

    initializing activity log

    NOT initialized bitmap

    New drbd meta data block successfully created.

    Success

    6 . DRBD的启动和停止

    [root@master1 ~]# /etc/rc.d/init.d/drbd start #启动drbd

    [root@master1 ~]# /etc/rc.d/init.d/drbd stop #停止drbd

    [root@master1 ~]# /etc/rc.d/init.d/drbd restart #重启drbd

    7 .查看DRBD状态

    watch -n 1 cat /proc/drbd

    /etc/init.d/drbd status

    8 .设置当前节点为主节点,并进行格式化和挂载注意只有主节点能挂载,

    [root@master1 ~]#drbdadm primary all

    如果上条命令不成功,则执行下面命令。

    [root@master1 ~]# drbdadm -- --overwrite-data-of-peer primary all

    [root@master1 ~]# mkfs.ext3 /dev/drbd0 ##这个也就是/dev/sdb

    [root@master1 ~]# mkdir -p /mysql/data##创建drbd那个盘的挂载点

    [root@master1 ~]# mount /dev/drbd0 /mysql/data

    主drbd挂载后可以往drbd目录也就是/mysql/data目录写数据,然后主备切换,如果数据同步,表明drbd搭建成功。

    主切换成从,需要先卸载文件系统,再执行降级为从的命令:

    [root@master1 ~]#umount /dev/drbd0

    [root@master1 ~]#drbdadm secondary all

    从切换成主,要先执行升级成主的命令然后挂在文件系统:

    [root@master1 ~]#drbdadm primary all如果不成功drbdsetup /dev/drbd0 primary -o

    [root@master1 ~]#mount /dev/drbd0 /mysql/data

    9,如下可以判断出是master1是Primary状态。

    [root@master1 ~]# more /proc/drbd| grep ro

    0 : cs : Connected ro :Primary/Secondaryds:UpToDate/UpToDate C r------


    DRBD上Mysql的迁移 (这个步骤的目的就是要把保证数据目录,日志目录,临时文件目录在drbd那个目录下)

    1.将数据目录指定到drbd挂载的mysql目录中并将my.cnf配置文件放到mysql中即可

      关闭dbserver1和dbserver2的mysql

    /etc/rc.d/init.d/mysqld stop

    b)在dbserver1上创建存放数据库数据的目录及日志的目录

    mkdir -p /mysql/data /mysql/log /mysql/tmp

    c)修改mysql目录的属主

    chown -R mysql:mysql /mysql

    d)在dbserver1将配置文件移动到mysql目录中:

    mv /etc/my.cnf /mysql

    删除dbserver2上的/etc/my.cnf,rm -f /etc/my.cnf

    在dbserver1和dbserver2上执行如下命令创建软链接,需要写全路径

    ln -s /mysql/my.cnf /etc/my.cnf

    e)修改/etc/my.cnf的数据目录指向/mysql/data

    f)将原来的mysql数据文件移动到/mysql/data

    g)启动mysql,如果没有移动数据目录内容,需要将mysql重新初始化再启动mysql

    初始化过程:{(1)进入./mysql/bin目录下,执行脚本./mysql_install_db;
    (2)执行完(1)后,此时会在./mysql/var目录下创建两个目录文件mysql、test;
    (3)修改mysql、test两个目录及目录下所有文件的权限:chown mysql:mysql -R mysql test}

      Mysql-master1上主配文件/etc/my.cnf配置如下,当然master2和master1用的是同一个配置文件,不需要配置。

    [root@mysql_master1 ~]# cat /etc/my.cnf

    [mysql]

    default-character-set=utf8

    [mysqld]

    user=mysql

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

    #socket=/var/run/mysql/mysql.sock

    socket=/tmp/mysql.sock

    basedir=/usr/local/mysql

    datadir=/mysql/data

    tmpdir=/mysql/tmp

    max_connections = 2000 #定义最大连接数

    server-id=3 #每个MySQL server的此选项都必须唯一

    ###begin innodb settiong###

    innodb_file_per_table=1

    innodb_lock_wait_timeout=500

    innodb_buffer_pool_size=512M

    ###end innodb setting###

    ###key buffer size set###

    key-buffer-size=500M

    sort_buffer_size=500M

    max_user_connections=1000

    table-cache=5000

    query_cache_size=500M

    ###key buffer size set###

    ###begin bin log###

    log-bin=/mysql/log/binlog

    log-bin-index=/mysql/log/binlog.index

    expire-logs-days=90

    ###end bin log###

    ###begin general log###

    #general_log=1

    #general_log_file=/mysql/log/record.log

    ###end general log###

    ###begin error log###

    log_error=/mysql/log/error.log

    ###end error log###

    ###begin skip name resolve###

    ###end skip name resolve###

    ###being slow query log###

    slow_query_log=1

    long_query_time=60

    slow_query_log_file=/mysql/log/slow.log

    ###end slow query log###

    3. Mysql的主从配置

    在mysql主上创建复制账号

    mysql> create user repl identified by ‘%#7a@H)’;

    为从mysql授权

    mysql> GRANT replication slave ON *.* TO 'repl'@'%' ;

    mysql> Flush privileges;

    4. Mysql从/etc/my.cnf配置

    [root@localhost ~]# cat /etc/my.cnf

    [mysql]

    default-character-set=utf8

    [mysqld]

    user=mysql

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

    #socket=/var/run/mysql/mysql.sock

    socket=/tmp/mysql.sock

    basedir=/usr/local/mysql

    datadir=/wgz/mysql/data

    tmpdir=/wgz/mysql/tmp

    max_connections = 2000 #定义最大连接数

    server-id=12 #每个MySQL server的此选项都必须唯一

    read_only=1 #设置只读

    ###begin innodb settiong###

    innodb_file_per_table=1

    innodb_lock_wait_timeout=500

    innodb_buffer_pool_size=512M

    ###end innodb setting###

    ###key buffer size set###

    key-buffer-size=500M

    sort_buffer_size=500M

    max_user_connections=1000

    table-cache=5000

    query_cache_size=500M

    ###key buffer size set###

    ###begin bin log###

    log-bin=/wgz/mysql/log/binlog

    log-bin-index=/wgz/mysql/log/binlog.index

    expire-logs-days=90

    ###end bin log###

    ###begin general log###

    #general_log=1

    #general_log_file=/wgz/mysql/log/record.log

    ###end general log###

    ###begin error log###

    log_error=/wgz/mysql/log/error.log

    ###end error log###

    ###begin skip name resolve###

    ###end skip name resolve###

    ###being slow query log###

    slow_query_log=1

    long_query_time=60

    slow_query_log_file=/wgz/mysql/log/slow.log

    ###end slow query log###

    5.在mysql从上做指向主的操作

    mysql>change master to master_host='192.168.15.47', master_port=3306, master_user='repl', master_password='%#7a@H)', master_log_file='binlog.000011',master_log_pos=3234;

    启动主从复制

    mysql> start slave;

    #查看同步状态

    mysql> show slave status \G;

    Slave_IO_Running: Yes

    Slave_SQL_Running: Yes

    Slave_IO_Running和Slave_SQL_Running:两个显示Yes说明主从同步成功。

    Heartbeat的部署(自动完成两个主之间的切换)

      安装heartbeat,需安装epel扩展源

    [root@master1~]#yum -y install epel-release

    [root@master1~]#yum install -y heartbeat

    2. .Hearbeat的配置主要包括三个配置文件,authkeys,ha.cf和haresources的配置,下面就分别来看!

    Authkerys密码认证文件的配置,两台机器配置一样。

    [root@master1~]#vim /etc/ha.d/authkeys

    auth 1

    1 crc

    [root@master1~]#chmod 600 /etc/ha.d/authkeys#配置完成后,修改文件的权限,否者heartbeat启动报错

      ha.cf的配置

    Master1(dbserver1)的ha.cf的配置

    [root@master1~]#cat /etc/ha.d/ha.cf

    logfile /var/log/ha-log

    logfacility local0

    keepalive 2

    deadtime 30

    warntime 10

    initdead 60

    udpport 694

    ucast eth0 192.168.9.26#写对方的ip

    auto_failback off ## 建议使用off,如果使用on会导致主备机之间来回切换,增加成本。

    nodemaster1

    node master2

    ping 192.168.15.254 #网关就行

    respawn hacluster /usr/lib64/heartbeat/ipfail

    Master2(dbserver2)的ha.cf的配置

    [root@master2 ~]# cat /etc/ha.d/ha.cf

    logfile /var/log/ha-log

    logfacility local0

    keepalive 2

    deadtime 30

    warntime 10

    initdead 60

    udpport 694

    ucast eth0 192.168.9.25 #写对方的ip

    auto_failback on

    nodemaster1

    nodemaster2

    ping 192.168.9.254

    respawn hacluster /usr/lib64/heartbeat/ipfail

      haresources的配置,两台机器配置完全一样,mysqld需要做成服务,放在/etc/rc.d/init.d/目录下,配置配置如下:

    [root@master1~]#cat/etc/ha.d/haresources
    master1IPaddr::192.168.9.231/24/eth0:0drbddisk::r1Filesystem::/dev/drbd0::/mysql/data::ext3mysqld

    以上/etc/ha.d/haresources配置文件说明:192.168.9.231/24/eth0:0,192.168.9.231/24为mysql高可用的vip,eth0:0:表示vip走eth0:0口,r1:表示上面drbd定义的资源库,/dev/drbd0:表示以上drbd自己形成的硬盘分区,/mysql/data:表示drbd挂载的目录,mysqld:表示mysql的服务。

    5 . Heartbeat的管理

    配置好heartbeat之后,需要将mysql从自启动服务器中去掉,因为主heartbeat启动的时候会挂载drdb文件系统以及启动mysql,切换的时候会将主上的mysql停止并卸载文件系统,从上会挂载文件系统,并启动mysql。因此需要做如下操作:

    [root@master1~]#chkconfig mysqld off

    [root@master1~]#chkconfig --add heartbeat

    [root@master1~]#chkconfig heartbeat on

    [root@master1~]#service heartbeat start #启动Heartbeat

    6. Heartbeat+DRBD+Mysql测试

    用脚本判断mysql宕后,脚本将heartbeat服务stop掉,vip和drbd的分区挂载自转移到drbd从的上,当主mysql修复启动,在将heartbeat服务启动,vip和drbd的分区挂载又自转移到drbd主的上。

    7.判断mysql服务及停止heartbeat服务脚本,在主的上后台执行,nohup /opt/check_mysql_heartbeat.sh &,脚本中的password需要改成当前mysql的root密码。

    [root@mysql_master1 opt]# cat check_mysql_heartbeat.sh

    #!/bin/bash

    trap 'echo PROGRAM INTERRUPTED; exit 1' INT

    username=root

    password=123456

    n=0

    log='/var/log/mysqlmon.log'

    while true

    do

    if mysql -u${username} -p${password} -e "use test" >&/dev/null

    then

    echo `date +"%Y-%m-%d %H:%M:%S"` mysqld is alive! >> ${log}

    n=0

    else

    echo "`date +"%Y-%m-%d %H:%M:%S"` mysqld cannot be connected!" >> ${log}

    n=$[n + 1]

    if [ $n -eq 3 ]

    then

    /etc/init.d/heartbeat stop

    echo "`date +"%Y-%m-%d %H:%M:%S"` mysqld switched to backup!" >> ${log}

    echo "`date +"%Y-%m-%d %H:%M:%S"` mysqld switched to backup"

    break

    fi

    fi

    sleep 10

    done

    测试总结:

    判断脚本放在drbd主的上后台执行就行,从的上不用,如果主的mysql宕掉后,脚本将heartbeat服务杀掉,vip和挂载自动切换到从上,等主的mysql和heartbeat修复启动后,vip和挂载又自动切换到主。

    二: lvs+keepalived安装部署

    试验环境:

    LVS1:192.168.9.27

    LVS2:192.168.9.28

    keepalived 的VIP:192.168.9.230

    要分发的mysql1: 192.168.9.29

    要分发的mysql2:192.168.9.30

    具体安装步骤:

    #下载ipvsadm (也就是LVS程序包)

    wgethttp://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz

    #解压

    [root@lvs-a~]#tar -zxf ipvsadm-1.24.tar.gz

    #进入该ipvsadm目录

    [root@lvs-a~]#cd /usr/local/ipvsadm-1.24

    #安装开发包及库文件

    [root@lvs-aipvsadm-1.24]##yum install zlib-devel gcc gcc-c++ openssl-devel pcre-devel libtool kernel-devel ncurses-devel -y

    #创建内核连接

    [root@lvs-aipvsadm-1.24]#ln -sv /usr/src/kernels/2.6.18-194.el5-i686/ /usr/src/linux#(2.6.18-194.el5-i686)根据系统版本修改。

    #编译安装

    [root@lvs-aipvsadm-1.24]#make;make install

    #进入目录

    [root@lvs-a~]#cd /usr/local/

    #下载keepalived

    wget http://www.keepalived.org/software/keepalived-1.1.17.tar.gz

    #解压

    [root@lvs-aipvsadm-1.24]#tar -zxf keepalived-1.2.12.tar.gz

    #进入该keepalived目录

    [root@lvs-a~]cd keepalived-1.2.12

    #编译安装

    [root@lvs-akeepalived-1.2.12]#./configure --prefix=/usr/local/keepalived#这里编译完后面显示三个yes,说明编译成功,否则安装不成功。

    #以下为1.2.12版本./configure结果如下

    #如果为1.1.17版本./configure结果如下

    [root@lvs-akeepalived-1.2.12]#make

    [root@lvs-akeepalived-1.2.12]#make install

    #复制启动文件

    [root@lvs-akeepalived-1.2.12]#cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/##这样才能用service keepalived 的命令。

    #复制命令文件

    [root@lvs-akeepalived-1.2.12]#cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

    #复制【配置文件

    [root@lvs-akeepalived-1.2.12]#cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

    #新建主配置文件目录

    [root@lvs-akeepalived-1.2.12]#mkdir -p /etc/keepalived

    #编辑配置文件LVS1

    [root@lvs-asysconfig]#vim /etc/keepalived/keepalived.conf
    !ConfigurationFileforkeepalived

    global_defs{
    router_idlvs
    }

    vrrp_sync_grouphttp{#设置vrrp组,随便起名字,
    group{
    mysql###随便起的名字
    }
    }

    vrrp_instanceapache{###定义一个vrrp实例
    stateMASTER#设置lvs的状态,MASTER和BACKUP两种,必须大写,主节点master,从节点backup
    interfaceeth0#设置对外服务的接口,也就是/LVS监控的网络接口
    virtual_router_id01#设置lvs监听的接口,同一实例下virtual_router_id必须相同,随便起名字
    priority500 ##设置优先级,数值越大,优先级越高 ,也就是主节点的这个值大
    advert_int1 ##//MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒

    authentication{ #设置验证类型和密码
    auth_typePASS
    auth_passaabb##密码
    }
    virtual_ipaddress{ ##设置keepalived的VIP
    192.168.9.230 #如果有多个,往下加就行了

    #192.168.9.231

    #192.168.9.232

    }

    }

    virtual_server192.168.9.2303306{ ##定义虚拟服务器
    delay_loop6 #健康检查时间,单位是秒。
    lb_algorr #负载调度算法,这里设置为rr,即轮询算法
    lb_kindDR #LVS实现负载均衡的机制,可以有NAT、TUN和DR三个模式可选
    nat_mask255.255.255.0 #可以不填写这个参数,
    #persistence_timeout50
    protocolTCP

    real_server192.168.9.293306{ ##要分发的目标服务器IP,
    weight1#设置权重,也就是分发的次数,这里表示每个分发一次,
    TCP_CHECK{ #通过tcpcheck判断RealServer的健康状态
    connect_timeout3##连接超时时间

    #nb_get_retry 3#重连次数,有默认值
    #delay_before_retry 3#重连间隔时间 有默认值
    connect_port3306
    }
    }
    real_server192.168.9.303306{
    weight1
    TCP_CHECK{
    connect_timeout3
    connect_port3306
    }
    }
    }

    #配置完成重启keepalived

    [root@lvs-asysconfig]#service keepalived restart

    #添加自己的网关

    [root@lvs-anetwork-scripts]#route add -host 192.168.9.254 dev eth0


    #安装keepalived同lvs1相同

    #安装keepalived后配置LVS2,配置如下:

    [root@lvs-b~]#cat/etc/keepalived/keepalived.conf

    !ConfigurationFileforkeepalived

    global_defs{
    router_idlvs
    }

    vrrp_sync_grouphttp{
    group{
    mysql
    }
    }

    vrrp_instanceapache{
    stateBACKUP
    interfaceeth0
    virtual_router_id01
    priority400
    advert_int1
    #nopreempt
    authentication{
    auth_typePASS
    auth_passaabb
    }
    virtual_ipaddress{
    192.168.9.230
    }
    }

    virtual_server192.168.9.2303306{
    delay_loop6
    lb_algorr
    lb_kindDR
    nat_mask255.255.255.0
    #persistence_timeout50
    protocolTCP

    real_server192.168.9.293306{
    weight1
    TCP_CHECK{
    connect_timeout3
    connect_port3306
    }
    }
    real_server192.168.9.303306{
    weight1
    TCP_CHECK{
    connect_timeout3
    connect_port3306
    }
    }
    }

    #配置完成重启keepalived

    service keepalived restart

    #添加自己的网关

    route add -host 192.168.9.254 dev eth0

    #查看

    route -n

    #查看分发结果

    Ipvsadm -ln

    #清除分发

    Ipvsadm -C

    #查看虚拟ip(VIP)

    Ip addr

    #配置mysql-realserver1 在192.168.9.29上执行:

    [root@lvs-a~]#ifconfig lo:0 192.168.9.230 netmask 255.255.255.0 broadcast192.168.9.230up##设置的一个临时的IP

    设置到主机的路由

    [root@lvs-b~]#route add -host 192.168.9.230 dev lo:0

    设置默认路由

    [root@lvs-b~]#route add default gw 192.168.9.137

    保证arp协议在连接过程中,路由器上,只知道网络中192.168.9.230对应的是分发器

    [root@lvs-b~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

    [root@lvs-b~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

    #配置mysql-realserver2 在192.168.9.30上执行:

    [root@lvs-a~]#ifconfig lo:0 192.168.9.230 netmask 255.255.255.0 broadcast192.168.9.230up

    设置到主机的路由

    [root@lvs-a~]#route add -host 192.168.9.230 dev lo:0

    设置默认路由

    [root@lvs-a~]#route add default gw 192.168.153.137

    保证arp协议在连接过程中,路由器上,只知道网络中192.168.9.230对应的是分发器

    [root@lvs-a~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

    [root@lvs-a~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

    #两台mysql-realserver配置完成后启动分别mysql

    Service mysqld start

    LVS分发测试:

    1,在 mysql-realserver1(192.168.9.29)创建一个名字叫做slave1的数据库:

    mysql> create database slave1;

    Query OK, 1 row affected (0.00 sec)

    2,在mysql-realserver2 (192.168.9.30)上创建一个名字叫做slave2的数据库:

    mysql> create database slave2;

    Query OK, 1 row affected (0.00 sec)

    3,在一台能ping通mysql-realserver1和mysql-realserver2的机器上执行(注意不要在正在用着的lvs机器上执行,例如我现在lvs用着[root@lvs-a~]#这个机器,如果你在这里执行他会报错

    [root@lvs-a~]#mysql-uroot-pliuwenhe-h292.168.9.230-e'showdatabases';
    ERROR2003(HY000):Can'tconnecttoMySQLserveron'192.168.9.230'(111)
    Youhavenewmailin/var/spool/mail/root

    [root@lvs-b~]#mysql-uroot-pliuwenhe-h292.168.9.230-e'showdatabases';

    +--------------------+
    |Database|
    +--------------------+
    |information_schema|
    |he|
    |liuwenhe|
    |mysql|
    |performance_schema|
    |slave1|
    |test|
    +--------------------+
    [root@lvs-b~]#mysql-uroot-pliuwenhe-h292.168.9.230-e'showdatabases';
    +--------------------+
    |Database|
    +--------------------+
    |information_schema|
    |he|
    |liuwenhe|
    |mysql|
    |performance_schema|
    |slave2|
    |test|
    +--------------------+

    说明lvs分发成功。

    五、故障处理:

    当主drbd (mysql)宕掉以后恢复过程:

    1.先恢复启动主drbd上的mysql服务

    service mysqld start

    2.确定主drbd的mysql启动后,在启动heartbeat服务,这时vip和挂载自动切换到主drbd

    service heartbeat start

    3.在主drbd上执行后台脚本

    nohup /opt/check_mysql_heartbeat.sh &

    六、参考网址

    http://blog.chinaunix.net/uid-20639775-id-3337484.html #部署主要参考网址

    http://www.centoscn.com/CentosServer/cluster/2015/0605/5604.html#安装drbd网址

    http://www.51ou.com/browse/Apache/60681.html #安装heartbeat网址

    迁移mysql说明:mysql迁移需要注意的步骤

    部署在drbd搭建成后,主从切换drbd同步没有问题,将mysql的配置文件移动到drbd的挂载目录下,将drbd从上的配置文件删除或改名,然后将挂载目录下的配置文件软连接到/etc/my.cn,因为他们用的同一个配置文件,在挂载目录下,建立mysql的数据目录和日志目录,并且修改目录的属主mysql,如果原有的mysql有数据将数据和日志移动到新建的目录下,配置文件也将相应的目录修改,然后重启mysql,如果不移动数据,数据库需要初始化,然后重启,这时可以参照网址上的步骤手动切换drbd的主从,看从drbd的mysql是否能正常启动,在主上mysql插入的数据是否同步,如果同步,然后就可以启动已经配置好的heartbeat服务,这时看当前主drbd上挂载和vip是否显示,在主drbd上执行后台脚本后,关闭主drbd上的mysql服务,看从drbd上的mysql是否正常启动,以及挂载和vip是否自动切换到从上,如果以上三项正常飘移,说明搭建成功。

    故障处理说明:

    当主mysql宕以后,需要修复时,需要先启动heartbeat,否则drbd不会飘到主上,自然挂载也不会切换过来,更别说启动mysql了,mysql主配置文件都在drbd的磁盘上,所以修复时,启动heartbeat后,看主drbd的mysql是否正常启动,如果没有,解决后再启动。

    附录1

    下面是keepalived详细配置文件解析:

    [root@localhost kernels]# cat /etc/keepalived/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_sync_group VGM { //定义一个vrrp组
    group {
    VI_1
    }
    }
    vrrp_instance VI_1 {//定义vrrp实例
    state MASTER//主LVS是MASTER,从的BACKUP
    interface eth0 //LVS监控的网络接口
    virtual_router_id 51 //同一实例下virtual_router_id必须相同
    priority 100//定义优先级,数字越大,优先级越高
    advert_int 5 //MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
    authentication { //验证类型和密码
    auth_type PASS
    auth_pass 1111
    }
    virtual_ipaddress {//虚拟IP
    192.168.1.8
    #192.168.1.9//如果有多个,往下加就行了
    #192.168.1.7
    }
    }
    virtual_server 192.168.1.8 80 {//定义虚拟服务器
    delay_loop 6 //健康检查时间,单位是秒
    lb_algo rr //负载调度算法,这里设置为rr,即轮询算法
    lb_kind DR //LVS实现负载均衡的机制,可以有NAT、TUN和DR三个模式可选
    persistence_timeout 50//会话保持时间,单位是秒(可以适当延长时间以保持session)
    protocol TCP //转发协议类型,有tcp和udp两种
    sorry_server 127.0.0.1 80 //web服务器全部失败,vip指向本机80端口
    real_server 192.168.1.16 80 { //定义WEB服务器
    weight 1 //权重
    TCP_CHECK {//通过tcpcheck判断RealServer的健康状态
    connect_timeout 5 //连接超时时间
    nb_get_retry 3//重连次数
    delay_before_retry 3 //重连间隔时间
    connect_port 80//检测端口
    }
    }
    real_server 192.168.1.17 80 {
    weight 1
    TCP_CHECK {
    connect_timeout 5
    nb_get_retry 3
    delay_before_retry 3
    connect_port 80
    }
    }
    }

    ,解决后再启动。

    如何搭建Heartbeat+DRBD+Mysql+Lvs+Keepalived高可用.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: heartbeatmysqldrbd