corosync+pacemaker+drbd构建mysql高可用平台的简单案例

写在前面:如果此文有幸被某位朋友看见并发现有错的地方,希望批评指正。如有不明白的地方,愿可一起探讨。


案例拓扑图

wKioL1Q0-jKCPk2qAAFRVUbBcg4275.jpg

说明:

    ansible主机主要作用在于配置和安装两台corosync+pacemaker+drdb+mysql主机


配置ansible主机

安装ansible

# yum -y install ansible

编译/etc/ansible/hosts文件

# vim /etc/ansible/hosts
[hbhosts]
172.16.115.60
172.16.115.61

提供秘钥认证机制

# ssh-keygen -t rsa -P ''
# ansible hbhosts --module-name=copy --args='src=/root/.ssh/id_rsa.pub
  dest=/root/.ssh/authorized_keys owner=root group=root mode=600' --ask-pass

提供roles各文件

# mkdir -pv corosync/roles/{common,ha,crmsh,drbd}
# mkdir corosync/roles/common/{files,tasks}
# mkdir corosync/roles/ha/{files,handlers,tasks}
# mkdir corosync/roles/crmsh/{files,tasks}
# mkdir corosync/roles/drbd/{files,tasks}

为roles各个目录文件提供相关的配置文件

# vim corosync/roles/common/files/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.0.1  server.magelinux.com server
172.16.115.60   kpa1.muluhe.com kpa1
172.16.115.61   kpa2.muluhe.com kpa2
# vim corosync/roles/common/tasks/main.yml
- name: hosts file
  copy: src=hosts dest=/etc/hosts
- name: sync time
  cron: name="sync time" minute="*/3" job="/usr/sbin/ntpdate 172.16.0.1 &> /dev/null"
# vim corosync/roles/ha/files/corosync.conf
compatibility: whitetank
totem {
        version: 2
        secauth: on
        threads: 0
        interface {
                ringnumber: 0
                bindnetaddr: 172.16.0.0
                mcastaddr: 226.194.115.15
                mcastport: 5405
                ttl: 1
        }
}
logging {
        fileline: off
        to_stderr: no
        to_logfile: yes
        to_syslog: no
        logfile: /var/log/cluster/corosync.log
        debug: off
        timestamp: on
        logger_subsys {
                subsys: AMF
                debug: off
        }
}
amf {
        mode: disabled
}
service {
        ver:    0
        name:   pacemaker
}
aisexec {
        user: root
        group: root
}

生成authkey文件并将生成的corosync文件复制到/root/corosync/roles/common/files目录下(前提是此主机安装了corosync才行)

# corosync-keygen 
Corosync Cluster Engine Authentication key generator.
Gathering 1024 bits for key from /dev/random.
Press keys on your keyboard to generate entropy.
Writing corosync key to /etc/corosync/authkey.
# cp /etc/corosync/authley /root/corosync/roles/common/files/
# vim corosync/roles/ha/tasks/main.yml
- name: installed corosync and pacemaker
  yum: name={{ item }} state=present
  with_items:
    - corosync
    - pacemaker
  tags: inst
- name: auth key file
  copy: src=authkey dest=/etc/corosync/authkey owner=root group=root mode=0400
  tags: authkey
- name: configration file
  copy: src=corosync.conf dest=/etc/corosync/corosync.conf
  tags: conf
  notify:
    - restart corosync
- name: start corosync
  service: name=corosync state=started enabled=no
  tags: start
# vim corosync/roles/ha/handlers/main.yml
- name: restart corosync
  service: name=corosync state=restarted

将crmsh-1.2.6-4.el6.x86_64.rpm和pssh-2.3.1-2.el6.x86_64.rpm安装包放入/root/corosync/roles/crmsh/files目录中

# vim corosyn/roles/crmsh/tasks/main.yml
- name: copy pssh and crmsh
  copy: src={{ item }} dest=/tmp/
  with_items:
  - pssh-2.3.1-2.el6.x86_64.rpm
  - crmsh-1.2.6-4.el6.x86_64.rpm
- name: install pssh and crmsh
  yum: name={{ item }} state=present
  with_items:
  - /tmp/pssh-2.3.1-2.el6.x86_64.rpm
  - /tmp/crmsh-1.2.6-4.el6.x86_64.rpm

将drbd-8.4.3-33.el6.x86_64.rpm和drbd-kmdl-2.6.32-431.el6-8.4.3-33.el6.x86_64.rpm包放入/root/corosync/roles/drbd/files目录中

# vim corosync/roles/drbd/tasks/main.yml

- name: copy drbd and drbd-kmdl
  copy: src={{ item }} dest=/tmp/
  with_items:
  - drbd-8.4.3-33.el6.x86_64.rpm
  - drbd-kmdl-2.6.32-431.el6-8.4.3-33.el6.x86_64.rpm
- name: install drdb and drbd-kmdl
  yum: name={{ item }} state=present
  with_items:
  - /tmp/drbd-8.4.3-33.el6.x86_64.rpm
  - /tmp/drbd-kmdl-2.6.32-431.el6-8.4.3-33.el6.x86_64.rpm
# cd /root/corosync
# vim ha.yml
- name: install and config corosync
  remote_user: root
  hosts: hbhosts
  roles:
  - common
  - ha
  - crmsh

安装各配置文件提供的任务

# ansible-playbook ha.yml

配置两台drbd主机

前提:提供两个空闲分区

在两台drbd主机上提供相同的drbd相关配置文件

# vim global_common.conf
global {
    usage-count no;
    # minor-count dialog-refresh disable-ip-verification
}
common {
    protocol C;
    handlers {
        # pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
        # pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
        # local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";
        # fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
        # split-brain "/usr/lib/drbd/notify-split-brain.sh root";
        # out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
        # before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";
        # after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;
    }
    startup {
        #wfc-timeout 120;
        #degr-wfc-timeout 120;
    }
    disk {
        on-io-error detach;
        #fencing resource-only;
    }
    net {
        cram-hmac-alg "sha1";
        shared-secret "mydrbdlab";
    }
    syncer {
        rate 1000M;
    }
}
# vim mydata.res
resource mydata {
    on kpa1.muluhe.com {
        device    /dev/drbd1;
        disk      /dev/sda5;
        address   172.16.115.60:7790;
        meta-disk internal;
    }
    on kpa2.muluhe.com {
        device    /dev/drbd1;
        disk      /dev/sda5;
        address   172.16.115.61:7790;
        meta-disk internal;
    }
}

在两节点上初始化已定义的资源并启动服务

# drbdadm create-md mydata
# /etc/init.d/drbd start

接下来,我们将IP地址为172.16.115.60的那台主机设置为primary,并安装mysql

# drbdadm primary --force mydata
# mke2fs -t ext4 -L DRBD /dev/drbd1
# mkdir /mysql
# mount /dev/drbd1 /mysql
# cd /mysql
# mkdir data

安装mysql

# groupadd -r -g 336 mysql
# useradd -g mysql -r -u 3306 mysql
# tar xf mariadb-5.5.36-linux-x86_64.tar.gz -C /usr/local
# cd /usr/local
# ln -sv mariadb-5.5.36-linux-x86_64/ mysql
# cd mysql
# chown -R root:mysql ./*
# mkdir /etc/mysql
# cp support-files/my-large.cnf /etc/mysql/my.cnf
# vim /etc/mysql/my.cnf
    datadir = /mysql/data
# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
# chmod +x /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
# chkconfig mysqld off
# scripts/mysql_install_db --user=mysql --datadir=/mysql/data
# vim /etc/profile.d/mysql.sh
    export PATH=/usr/local/mysql/bin:$PATH
# source /etc/profile.d/mysql.sh
# /etc/init.d/mysqld start
# mysql
MariaDB [(none)]> GRANT ALL ON *.* TO 'root'@'172.16.%.%' IDENTIFIED BY 'password';
MariaDB [(none)]> FLUSH PRIVILEGES;

接下来将IP地址为172.16.115.60这台主机降为secondary,并将IP地址为172.16.115.61那台主机升为primary,然后再安装mysql


利用crm工具配置mysql高可用

在IP地址为172.16.115.60这台主机上进行配置

# crm
crm(live)# configure 
crm(live)configure# property stonith-enabled=false
crm(live)configure# property no-quorum-policy=ignore
crm(live)configure# primitive mydrbd ocf:linbit:drbd params drbd_resource=mydata op monitor role=Master interval=20s timeout=20s op monitor role=Slave interval=30s timeout=20s op start timeout=240s op stop timeout=100s
crm(live)configure# primitive myfs ocf:heartbeat:Filesystem params device=/dev/drbd1 directory=/mysql fstype=ext4 op monitor interval=20s timeout=40s op start timeout=60s op stop timeout=60s
crm(live)configure# primitive myip ocf:heartbeat:IPaddr params ip=172.16.115.100 op monitor interval=30s timeout=20s
crm(live)configure# primitive myserver lsb:mysqld op monitor interval=30s timeout=20s
crm(live)configure# group myservice myip myfs myserver
crm(live)configure# ms ms_mydrbd mydrbd meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
crm(live)configure# colocation myfs_with_ms_mydrbd_master inf: myfs ms_mydrbd:Master
crm(live)configure# colocation myserver_with_myfs inf: myserver myfs
crm(live)configure# order myfs_after_ms_mydrbd_master inf: ms_mydrbd:promote myfs:start
crm(live)configure# commit 
crm(live)configure# cd
crm(live)# status
Last updated: Wed Oct  8 18:27:32 2014
Last change: Wed Oct  8 18:27:06 2014 via cibadmin on kpa1.muluhe.com
Stack: classic openais (with plugin)
Current DC: kpa2.muluhe.com - partition with quorum
Version: 1.1.10-14.el6-368c726
2 Nodes configured, 2 expected votes
5 Resources configured
Online: [ kpa1.muluhe.com kpa2.muluhe.com ]
 Resource Group: myservice
     myip(ocf::heartbeat:IPaddr):Started kpa1.muluhe.com 
     myfs(ocf::heartbeat:Filesystem):Started kpa1.muluhe.com 
     myserver(lsb:mysqld):Started kpa1.muluhe.com 
 Master/Slave Set: ms_mydrbd [mydrbd]
     Masters: [ kpa1.muluhe.com ]
     Slaves: [ kpa2.muluhe.com ]
crm(live)#

测试mysql高可用性

在IP地址为172.16.15.1这台主机上进行测试

# mysql -u root -h 172.16.115.100 -p

将IP地址为172.16.115.60这台主机standby

# crm node standby

再次在IP地址为172.16.15.1这台主机上进行测试

# mysql -u root -h 172.16.115.100 -p

测试结果表明,两台drbd主机可高可用mysql

你可能感兴趣的:(mysql,高可用,drbd,pacemaker,corosync)