[优化篇]Ubuntu使用corosync+pacemaker+drbd实现MySQL的HA(1)

环境

  • Ubuntu 14.04.2
  • MySQL1:192.168.12.101
  • MySQL2:192.168.12.102
  • VIP:192.168.12.200

每台MySQL机器都新添加/dev/sdb,当然也可以使用已有的sda做分区。

实施步骤

(1代表mysql1,2代表mysql2,以下类同)

软件安装(1+2)

sudo apt-get install pacemaker corosync heartbeat crmsh cluster-glue resource-agents mysql-server  sysv-rc-conf
drbd8-utils

说明:sysv-rc-conf是一个可视化管理服务器自启动的工具,属于可选

1、保证两台机器时间同步(1+2)
2、SSH可以使用root无密码访问(1+2)

修改/etc/ssh/sshd_config让ssh支持以root用户登录, 并重启 service ssh restart

 #PermitRootLogin without-password
        PermitRootLogin yes

机器1:

ssh-keygen -t rsa -P ''
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.12.103

机器2:

ssh-keygen -t rsa -P ''
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.12.101

测试双方是否可以无密码访问

ssh root@192.168.12.103

3、在一个节点上生成corosync key, 然后拷贝到其他所有节点. 生成key时会默认会调用/dev/random随机数设备,一旦系统中断的IRQS的随机数不够用,将会产生大量的等待时间,所以将random替换成urandom(1)

 mv /dev/{random,random.bak}
 ln -s /dev/urandom /dev/random

4、生成corosync的key文件,然后同步到另外一台机器(1)

 corosync-keygen
   scp /etc/corosync/authkey root@192.168.12.103:/etc/corosync/
   chown root:root /etc/corosync/authkey
   chmod 400 /etc/corosync/authkey

5、取消corosync、pacemaker、drbd的开机启动(1+2)

sysv-rc-conf

使用空格把drbd,pacemaker,corosync有X的地方取消掉,q退出

6、修改corosync.conf配置文件(1+2)

root@mysql1:~# cat /etc/corosync/corosync.conf
# Please read the openais.conf.5 manual page

totem {
    version: 2

    # How long before declaring a token lost (ms)
    token: 10000

    # How many token retransmits before forming a new configuration
    token_retransmits_before_loss_const: 10

    # How long to wait for join messages in the membership protocol (ms)
    join: 60

    # How long to wait for consensus to be achieved before starting a new round of membership configuration (ms)
    consensus: 3600

    # Turn off the virtual synchrony filter
    vsftype: none

    # Number of messages that may be sent by one processor on receipt of the token
    max_messages: 20

    # Limit generated nodeids to 31-bits (positive signed integers)
    clear_node_high_bit: yes

    # Disable encryption
    secauth: on

    # How many threads to use for encryption/decryption
    threads: 0

    # Optionally assign a fixed node id (integer)
    # nodeid: 1234

    # This specifies the mode of redundant ring, which may be none, active, or passive.
    rrp_mode: active

    interface {
        # The following values need to be set based on your environment 
        ringnumber: 0
        bindnetaddr: 192.168.12.0
        mcastaddr: 226.94.1.1
        mcastport: 5405
    }
}

amf {
    mode: disabled
}

service{
    ver:    1
    name:   pacemaker
}
quorum {
    # Quorum for the Pacemaker Cluster Resource Manager
    provider: corosync_votequorum
    expected_votes: 1
}

aisexec {
        user:   root
        group:  root
}

logging {
        fileline: off
        to_stderr: yes
        to_logfile: no
        to_syslog: yes
    syslog_facility: daemon
        debug: off
        timestamp: on
        logger_subsys {
                subsys: AMF
                debug: off
                tags: enter|leave|trace1|trace2|trace3|trace4|trace6
        }
}

7、配置/etc/default/corosync(1+2)

root@mysql2:~# cat /etc/default/corosync
# start corosync at boot [yes|no]
START=yes

重启corosync服务

查看corosync状态

 corosync-cfgtool -s
 corosync-quorumtool -l

重启pacemaker服务
查看状态

root@mysql2:~# crm status
Last updated: Fri Aug 14 10:01:57 2015
Last change: Fri Aug 14 09:17:34 2015 via crm_attribute on mysql1
Stack: corosync
Current DC: mysql1 (1084755045) - partition with quorum
Version: 1.1.10-42f2063
2 Nodes configured
0 Resources configured


Online: [ mysql1 mysql2 ]

8、为drbd创建存储磁盘(1+2)

fdisk /dev/sdb

9、创建drbd的mysql资源(1+2)

root@mysql2:~# cat /etc/drbd.d/mysql.res 
resource mysql {
        device /dev/drbd0;
        disk /dev/sdb1;
        meta-disk internal;
        on mysql1 {
                address 192.168.12.101:7788;
        }
        on mysql2 {
                address 192.168.12.103:7788;
        }
        syncer {
                rate 10M;
        }
}

添加drbd到/etc/modules

echo -e 'drbd # -> added' >> /etc/modules

dump出mysql信息

root@mysql2:~# drbdadm dump mysql 
# resource mysql on mysql2: not ignored, not stacked
# defined at /etc/drbd.d/mysql.res:1
resource mysql {
    on mysql1 {
        volume 0 {
            device       /dev/drbd0 minor 0;
            disk         /dev/sdb1;
            meta-disk    internal;
        }
        address          ipv4 192.168.12.101:7788;
    }
    on mysql2 {
        volume 0 {
            device       /dev/drbd0 minor 0;
            disk         /dev/sdb1;
            meta-disk    internal;
        }
        address          ipv4 192.168.12.103:7788;
    }
    disk {
        resync-rate      10M;
    }
}

初始化DRBD元数据

drbdadm create-md mysql

创建/dev/drbd0设备文件,将指定的后端存储设备附加到该DRBD资源,同时建立所有节点服务器的通信连接。

drbdadm up mysql

验证

drbd-overview

10、创建drbd0文件系统(1)

drbdadm -- --overwrite-data-of-peer primary mysql

执行如下操作,该操作是在同步信息,你可以不停刷新,直至同步100%成功为止

cat /proc/drbd

对/dev/drbd0格式化文件系统
本例使用了ext4文件系统,也可以用更为高效的xfs文件系统

mkfs.ext4 /dev/drbd0

创建一个存储数据库文件的路径

mkdir -p /data/mysql

将drbd0对象mount到该路径下

mount /dev/drbd0 /data/mysql

注意:如果出现mount错误,例如;

mount: block device /dev/drbd0 is write-protected, mounting read-only mount: Wrong medium type

因为mount只能在primary一端使用,所以需要执行如下,再mount

drbdadm primary mysql

可以在mysql1机器创建一个文件夹testfile,然后umount,再将mysql1设置为secondary对mysql2进行测试

mkdir -p /data/mysql/testfile
umount /dev/drbd0
drbdadm secondary mysql

11、另外一台机器进行测试(2)

drbdadm primary mysql
mkfs.ext4 /dev/drbd0
mkdir /data/mysql
mount /dev/drbd0 /data/mysql
ll /data/mysql

如果执行ll命令可以看到新创建的testfile说明配置成功

umount /dev/drbd0
drbdadm secondary mysql

12、将mysql1设置为primary(1)

drbdadm primary mysql

你可能感兴趣的:([优化篇]Ubuntu使用corosync+pacemaker+drbd实现MySQL的HA(1))