mysql+drbd+keepalived高可用集群

前一段时间公司要做一个mysql高可用集群:一主一备一从;要求:主宕机会自动切换到备机,从机也跟着自动切换。
我就用了mysql+drbd+keepalived,从机复制的是VIP的二进制日志。时间有点长,下面的和生产环境中的也许有点不同。


,drbd
的安装

安装依赖包

yum -y install gcc kernel-devel kernel-headers flex

下载drbd软件

drbd-8.4.1.tar.gz

tar -zxvf drbd-8.4.1.tar.gz

cd drbd-8.4.1

./configure --prefix=/usr/local/drbd --with-km

make KDIR=/usr/src/kernels/2.6.32-431.29.2.el6.x86_64/

make install

 mkdir -p /usr/local/drbd/var/run/drbd

 cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/rc.d/init.d

 cd drbd

  make clean

  uname –r

make KDIR=/usr/src/kernels/2.6.32-431.el6.x86_64/

cp drbd.ko /lib/modules/2.6.32-431.el6.x86_64/kernel/lib/

depmod

查看mod有没有加载成功:

insmod drbd/drbd.ko 或者 modprobe drbd

修改主机名:

cat /etc/hosts

192.168.47.169  drbdm1

192.168.47.170  drbdm2

 

Fdisk第二块磁盘:

fdisk   –l

fdisk   /dev/sdb

建立挂载点:

mkdir    /data

 

配置drbd

cat /usr/local/drbd/etc/drbd.d/global_common.conf

global {

        usage-count no;

        # minor-count dialog-refresh disable-ip-verification

}

 

common {

 syncer { rate 200M; }

        }

}

 

cat /usr/local/drbd/etc/drbd.d/r0.res

resource r0 {

protocol      C;

net {

    # timeout           60;

    # connect-int       10;

    # ping-int          10;

    # max-buffers     2048;

    # max-epoch-size  2048;

    cram-hmac-alg "sha1";

shared-secret "MySQL-HA";

}

disk {

    on-io-error detach;

fencing resource-only;

}

 startup {

    wfc-timeout 120;

    degr-wfc-timeout 120;

  }

 device        /dev/drbd1;

  on drbdm1 {

   

    disk      /dev/sdb1;

    address   192.168.47.169:7788;

    meta-disk internal;

  }

  on drbdm2 {

  

    disk      /dev/sdb1;

    address   192.168.47.170:7788;

    meta-disk internal;

  }

}

创建drbd资源:

drbdadm create-md r0

 

启动drbd

/etc/init.d/drbd start

 

查看:

Cat  /proc/drbd

version: 8.4.1 (api:1/proto:86-100)

GIT-hash: 91b4c048c1a0e06777b5f65d312b38d47abaea80 build by root@localhost.localdomain, 2014-10-14 20:09:36

 

 1: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----

ns:40 nr:124 dw:164 dr:1345 al:2 bm:2 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

注:2个节点都是secondary

 

设置主节点:

drbdadm  primary all    (第一次要运行drbdadm -- --overwrite-data-of-peer primary all)

格式化和挂载:

Mkfs.ext4  /dev/drbd1

Mount   /dev/drbd1   /data

注意:切换的顺序:1,主节点先umount   /dev/drbd1  2,drbdadm secondary all    3,次节点drbdadm primary all变成主节点,再mount  /dev/drbd1  /data

 

 

 

二、keepalived的安装

 

yum -y install gcc kernel-devel openssl-devel

tar -zxvf keepalived-1.2.13.tar.gz

cd keepalived-1.2.13

./configure --sysconf=/etc --with-kernel-dir=/usr/src/kernels/2.6.32-431.17.1.el6.x86_64/

Make && make install

ln -s /etc/init.d/keepalived  /etc/rc.d/rc3.d/S99keepalived

ln -s /etc/init.d/keepalived  /etc/rc.d/rc5.d/S99keepalived

ln -s /usr/local/sbin/keepalived  /sbin/

 

配置keepalived:

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_instance VI_1 {

    state MASTER    #备机:BACKUP

    interface eth1

    virtual_router_id 59

    priority 100     #备机:80

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.47.250

    }

}

启动:/etc/init.d/keepalived start

查看:ip  a

查看日志:

Tail   -f  /var/log/message

 

 

三、mysql的安装

Yum  install  mysql  mysql-server

修改数据库路径:

Mkdir  /data/mysql

Vi   /etc/my.cnf

Datadir=/data/mysql

设置权限:

Chmod –R  777  /data/msql

Chown  mysql:mysql  /data/mysql

Chkconfig  --del mysqld

 

四、设置mysql主从复制

mysql从机器上安装mysql:

Yum install mysql mysql-server

Mysql主从配置略

注意:复制的ipVIP,即是上面的192.168.47.250

 

 

五、设置自动切换

修改/etc/keepalived/keepalived.conf

 

/usr/local/sbin下新建两个脚本,分别为to-master.shto-backup.sh:

Vi   /usr/local/sbin/to-master.sh

! 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 {

    state MASTER    #备机:BACKUP

    interface eth1

    virtual_router_id 59

    priority 100     #备机:80

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.47.250

    }

   #加入下面3行:

    notify_master "/usr/local/sbin/to-master.sh"
notify_backup "/usr/local/sbin/to-backup.sh"
notify_fault "/usr/local/sbin/to-backup.sh"

#注意:备机只增加notify_master “/usr/local/sbin/to-master.sh”

}

 

To-master.sh脚本如下
#!/bin/bash
while :
do
drbd_status=`service drbd status|grep Inconsistent | gawk '{print $4}'`
if [ -n "$drbd_status" ]; then
echo "drbd's status is inconsisten,waiting..."
sleep 1
else
echo "drbd's status is ok,namenode will be changing"
break
fi
done

while :
do
if [ -d /data/mysql ]; then
#service mysqld stop
service mysqld start
break
else
drbdadm primary r0
mount /dev/drbd1 /data
sleep 1
service mysqld start
fi
done


drbd_status=`service drbd status|grep StandAlone | gawk '{print $2}'`
if [ -n "$drbd_status" ]; then
vip_status=`ip addr |grep eth0|grep "192.168.47.250"`
   if [[ ! -z ${vip_status} ]];then
     for i in $(seq 3)
       do 
        drbdadm connect all
        sleep 2
     done
   fi
fi


To-backup.sh脚步如下
#!/bin/bash
if [ -d /data/mysql ];then
service mysqld stop
pkill -9 mysql
sleep 1
fuser -ck /data/
umount -l /dev/drbd1
drbdadm secondary all
else
drbd_status=`service drbd status|grep StandAlone | gawk '{print $2}'`
if [ -n "$drbd_status" ]; then
drbdadm secondary all

fi
fi

 

修改权限:

Chmod +x  to-master.sh

Chmod +x  to-backup.sh

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29806344/viewspace-1323086/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29806344/viewspace-1323086/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值