zoukankan      html  css  js  c++  java
  • mysql+heartbeat+drbd安装

    环境:

    系统           IP地址            主机名             软件包列表

    centos6.5  192.168.200.101      server1       DRBD、heartbeat、mysql

    centos6.5  192.168.200.102     server2       DRBD、heartbeat、mysql

     

            

     

    安装前准备配置:

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

     

    将两台机器的硬盘分区(10G),分区不需要格式化,过程省略

     

    主从更改主机名以及host

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

        HOSTNAME=server1

    [root@localhost ~]# hostname server1

    [root@localhost ~]# bash

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

     192.168.200.101 server1

     192.168.200.102 server2

     

    Heartbeat 安装:

    主从都需要安装

    将软件包上传

    [root@server1 ~]# yum -y install perl-TimeDate cluster-glue-libs kernel-devel kernel-headers flex

    进入到上传的软件包目录下

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

    [root@server1 ~]# yum -y localinstall heartbeat-*

     

    安装配置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

     

    make KDIR=/usr/src/kernels/2.6.32-431.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

     

    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/

    [root@server1 drbd]# depmod

    [root@server1 drbd]# cp -R /usr/local/drbd/etc/ha.d/resource.d/* /etc/ha.d/resource.d/

    [root@server1 drbd]# cd /usr/local/drbd/etc/drbd.d/

     

    vim  /usr/local/drbd/etc/drbd.conf

    include "drbd.d/global_common.conf";

    include "drbd.d/*.res";  //此目录下所有以.res 结尾的都为资源文件

     

     

    1、配置global_common.conf 文件(主从一致)

    [root@server1 drbd.d]# pwd

    /usr/local/drbd/etc/drbd.d

    [root@server1 drbd.d]# cp global_common.conf{,-$(date +%s)}

    [root@server1 drbd.d]# vim global_common.conf

    global {

        usage-count yes; //是否对使用信息作统计,默认为yes

    }

    common {

        startup {

           wfc-timeout 120; //等待连接的超时时间

           degr-wfc-timeout 120;

    }

    disk {

        on-io-error detach; //当IO 出现错误时执行的动作

    }

    net {

        protocol C; //复制模式为第3 种

    }

    2、配置资源文件(主从一致)

    [root@server1 drbd.d]# vim r0.res

    resource r0 {        //r0 资源名称

               on server1 {

                  device /dev/drbd0;              //逻辑设备路径

                  disk /dev/sdb1;                 //物理设备

                  address 192.168.200.101:7788; //主节点

                  meta-disk internal;

    }

    on server2 {

                  device /dev/drbd0;

                  disk /dev/sdb1;

                  address 192.168.200.102:7788; //备节点

                  meta-disk internal;

        }

    }

     

    注意:将内容复制到文件中的时候,将注释删除掉,否则报错(文件是细新建的)

     

    [root@server1 drbd.d]# scp global_common.conf r0.res

    192.168.200.102:/usr/local/drbd/etc/drbd.d

     

    3、创建元数据(两个节点上操作)

    [root@server1 drbd.d]# modprobe drbd

    [root@server1 drbd.d]# lsmod | grep drbd

    drbd 310268 0

    libcrc32c 1246 1 drbd

    [root@server1 drbd.d]# dd if=/dev/zero bs=1M count=1 of=/dev/sdb1

    [root@server1 drbd.d]# drbdadm create-md r0 //输出以下信息

     

     

    . //当输出成功信息后可Ctrl+C 结束

    注意:

    当执行命令”drbdadm create-md r0”时,出现以下错误信息。

    Device size would be truncated, which

    would corrupt data and result in
    You need to either
    * use external meta data (recommended)
    * shrink that filesystem first
    * zero out the device (destroy the filesystem)
    Operation refused.
    Command 'drbdmeta 0 v08 /dev/xvdb internal create-md' terminated with exit code 40
    drbdadm create-md r0: exited with code 40

    解决办法:初始化磁盘文件格式, dd if=/dev/zero bs=1M count=1 of=/dev/sdb1; sync

     

     

    启动 DRBD(主从节点都要执行)

    [root@server1 ~]#  /etc/init.d/drbd start

     

     

     

    这里的yes是指的终止等待

     

     

    [root@server1 ~]# netstat -anpt | grep 7788

    tcp        0      0 192.168.200.101:7788        0.0.0.0:*                   LISTEN      -

     

     

     手动验证主从切换:

    在server1上执行

    drbdadm -- --overwrite-data-of-peer primary r0

     

    cat /proc/drbd

     

     

    数据同步测试(主节点上操作前 6 步骤,次节点上操作后三步骤)
    [root@server1 drbd.d]# mkfs.ext4 /dev/drbd0
    [root@server1 drbd.d]# mkdir /mysqldata
    [root@server1 drbd.d]# mount /dev/drbd0 /mysqldata
    [root@server1 drbd.d]# echo www.crushlinux.com > /mysqldata/file //建立测试文件

    [root@server1 ~]# umount /dev/drbd0
    [root@server1 ~]# drbdadm secondary r0 //主降为次

     


    [root@server2 drbd.d]# drbdadm primary r0 //次升为主
    [root@server2 drbd.d]# mkdir /mysqldata
    [root@server2 drbd.d]# mount /dev/drbd0 /mysqldata
    [root@server2 drbd.d]# ls /mysqldata //在备节点上查看数据

    file lost+found      //可以看到创建的文件

     

     

    安装 MySQL
    更改 Mysql 数据库的存储位置为共享目录(主从都要执行)
    [root@server1 ~]# yum -y install mysql mysql-server
    [root@server1 ~]# vim /etc/my.cnf
    2 datadir=/mysqldata/mysql
    [root@server1 ~]# chown -R mysql.mysql /mysqldata
    [root@server1 ~]# chkconfig mysqld on
    注意: 此时我们修改了数据目录和其属主和权限,有时会因为此操作导致数据库无法启动,
    解决方法:
    一,查看你的 selinux 是否处于打开状态,将其关闭。
    二, /etc/apparmor.d/usr.sbin.mysqld 文件中,有两行内容规定了 mysql 使用数据文件的路径权限,改掉即可,重启/etc/init.d/apparmor restart。

     

     

    进行数据库测试
    因为此前的操作,现在把 server2 节点降为次
    [root@server2 ~]#umount /dev/drbd0
    [root@server2 ~]#drbdadm secondary r0
    把 server1 升为主节点

    [root@server1 ~]#drbdadm primary r0
    [root@server1 ~]#mount /dev/drbd0 /mysqldata
    [root@server1 ~]# /etc/init.d/mysqld start
    在 server1 上创建一个库 crushlinux,然后主降为备,把 server2 升为主查看库有没有同步。

    [root@server1 ~]# mysql
    mysql> create database crushlinux;
    Query OK, 1 row affected (0.00 sec)
    mysql> exit

    [root@server1 ~]# service mysqld stop

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

    [root@server1 ~]# drbdadm secondary r0

     

    [root@server2 drbd.d]# drbdadm primary r0

     [root@server2 drbd.d]# mount /dev/drbd0 /mysqldata

    [root@server2 drbd.d]# service mysqld start

    [root@server2 drbd.d]# ls /mysqldata/mysql/
    crushlinux ibdata1 ib_logfile0 ib_logfile1 mysql test

     

    配置 heartbeat
    1、配置 ha.cf 文件(主从大体一致)
    [root@server1 ~]# cd /usr/share/doc/heartbeat-3.0.4/
    [root@server1 heartbeat-3.0.4]# cp ha.cf authkeys haresources /etc/ha.d/
    [root@server1 heartbeat-3.0.4]# cd /etc/ha.d/
    [root@server1 ha.d]# vim ha.cf
    29 logfile /var/log/ha-log
    34 logfacility local0
    48 keepalive 2              //多长时间检测一次
    56 deadtime 10              //连续多长时间联系不上后认为对
    61 warntime 5               //连续多长时间联系不上开始警告
    71 initdead 100             //主要是给重启后预留的一段忽略
    76 udpport 694              //UDP 端口
    121 ucast eth0 192.168.200.102 //填写对方 IP(主从的差异点)
    157 auto_failback on        //节点修复后是否切换回来
    211 node server1         //节点名称
    212 node server2         //节点名称
    253 respawn hacluster /usr/lib64/heartbeat/ipfail

                                 //控制 IP 切换的程序
    2、配置 haresources 文件(主从一致)
    [root@server1 ha.d]# vim haresources

    添加以下内容


    server1 IPaddr::192.168.200.254/24/eth0:0 drbddisk::r0
    Filesystem::/dev/drbd0::/mysqldata::ext4 mysqld

     

    IPaddr::192.168.200.254/24/eth0:0:用IPaddr脚本配置浮动VIP

     

    drbddisk::r0:用drbddisk脚本实现DRBD主从节点资源组的挂载和卸载

     

    Filesystem::/dev/drbd0::/mysqldata::ext4:用Filesystem脚本实现磁盘挂载和卸载

     

     

    [root@server1 ha.d]# ln -s /etc/init.d/mysqld /etc/ha.d/resource.d/mysqld

     

    3配置 authkeys 文件(主从一致)

    [root@server1 ha.d]# vim authkeys
    23 auth 1
    24 1 crc
    [root@server1 ha.d]# chmod 600 authkeys

     

     

    4 HA 验证:

    主从节点启动 heartbeat
    [root@server1 ha.d]# service heartbeat start
    查看主节点 VIP 是否存在

    启动报错1:

     

    解决:vim /etc/ha.d/ha.cf 

    //系统是64位的,所以路径应该在/usr/lib64/目录

     

    启动报错2:

     

     

    解决:

         在haresources文件中添加内容必须写在一行

      

    启动成功提示:

    [root@server1 ha.d]# /etc/init.d/heartbeat start

     Starting High-Availability services: INFO:  Resource is stopped

     Done.

     


    [root@server1 ha.d]# ip a //需要等待 10
    inet 192.168.200.254/24 brd 192.168.200.255 scope global secondary eth0:0

     

    验证:先停掉 server1 上的 heartbeat 服务,查看 VIP 是否能转移

    此时 server2 的 mysql 服务是关闭的


    [root@server1 ha.d]# service heartbeat stop //主节点操作
    Stopping High-Availability services: Done.

     

     

    IP地址已经成功漂移到server2上了

     

    [root@server2 ha.d]# mysqladmin -uroot ping //备节点操作,发现 mysql 随之启动
    Mysqld is alive

     

    此时还不具备停掉 mysql 后 VIP 漂移的功能,需要添加脚本实现,当发现 mysql 服务出现挂
    掉,就停掉 heartbeat 服务,实现 VIP 转移(双方都要在后台执行)
    [root@server1 ~]# vim chk_mysql.sh
    #!/bin/bash
    mysql="/etc/init.d/mysqld"
    mysqlpid=$(ps -C mysqld --no-header | wc -l)
    if [ $mysqlpid -eq 0 ];then
    $mysql start
    sleep 3
    13 / 13
    mysqlpid=$(ps -C mysqld --no-header | wc -l)
    if [ $mysqlpid -eq 0 ];then
    /etc/init.d/heartbeat stop
    echo "heartbeat stopped,please check your mysql !" | tee -a
    /var/log/messages
    fi
    fi
    [root@server1 ha.d]# bash chk_mysql.sh &
    [root@server1 ha.d]# echo “bash chk_mysql.sh &” >> /etc/rc.local

     

     

     

     

     

     

  • 相关阅读:
    1649. 超级棒棒糖
    1872. 连接棒材的最低费用
    二叉树的层级遍历转换
    ZMQ的三种消息模式
    logging日志
    Svn基本使用
    Pycharm快捷键
    Redis安装和连接
    整形转中文
    C# Socket连接 无法访问已释放的对象
  • 原文地址:https://www.cnblogs.com/pangbing/p/7782928.html
Copyright © 2011-2022 走看看