友情提醒:文中实验环境 vmware10 + Centos 6.6 X86_64,文中命令请谨慎使用

   一  实验环境和拓扑

主机
IP地址
角色
Test01.lijun.com
eth1:192.168.100.1/24
后台NFS共享服务器
Test04.lijun.com

eth1:192.168.100.4/24

eth0:172.16.34.4/16

集群节点
Test03.lijun.com

eth1:192.168.100.3/24

eth0:172.16.34.3/16

集群节点
集群节点虚拟出IP地址192.168.100.20,给外界提供mysql查询接口

  实验拓扑:

wKioL1VxhyGSLqNEAAJeIp8pgBU391.jpg



二  实验步骤

2.1) 环境准备:
Test03:
-----关闭防护墙和selinux,放置干扰实验-------------------------

[root@Test03 ~]# service iptables stop
[root@Test03 ~]# setenforce 0

----设定ssh互信--------------------------------------------------

[root@Test03 ~]# ssh-keygen -t rsa -P ''
[root@Test03 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub Test04

----使用统一ntp server进行时间对时----------------------------------

[root@Test03 ~]#ntpserver 172.16.0.1
[root@Test03 ~]#crontab -e
*/5 * * * * /usr/sbin/ntpdate 172.16.0.1

Test04:
-----关闭防护墙和selinux,放置干扰实验-------------------------

[root@Test04 ~]# service iptables stop
[root@Test04 ~]# setenforce 0

----设定ssh互信--------------------------------------------------

[root@Test04 ~]# ssh-keygen -t rsa -P ''
[root@Test04 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub Test03

----使用统一ntp server进行时间对时----------------------------------

[root@Test04 ~]#ntpserver 172.16.0.1
[root@Test04 ~]#crontab -e
*/5 * * * * /usr/sbin/ntpdate 172.16.0.1

2.2)-------------安装corosync+pacemaker------------------------

[root@Test03 ~]# yum -y install corosync pacemaker
[root@Test04 ~]# yum -y install corosync pacemaker

2.3)--------配置和启动corosync服务-----------------------------

[root@Test03 ~]# cd /etc/corosync/
[root@Test03 corosync]# ls
corosync.conf.example  corosync.conf.example.udpu  service.d  uidgid.d
[root@Test03 corosync]# cp corosync.conf.example corosync.conf
[root@Test03 corosync]#vim corosync.conf
[root@Test03 corosync]# egrep -v '^[[:space:]]{1,}#' corosync.conf
#兼容OPENAIS whitetank分支
compatibility: whitetank
totem {    
version: 2
#启用通信的数字签名,需要使用#corosync-keygen产生authenkey文件    
secauth: on
#不使用线程模型,使用进程模型    
threads: 0    
interface {
#同下文TTL配合,限定报文生存周期        
ringnumber: 0
#集群服务监听的网络地址而不是主机地址        
bindnetaddr: 192.168.100.0
#集群节点massage layer层进行通信监听的地址和端口       
mcastaddr: 239.165.17.91        
mcastport: 5405        
ttl: 1    
}
}
logging {
    fileline: off    
    to_stderr: no    
    to_logfile: yes    
    logfile: /var/log/cluster/corosync.log    
    to_syslog: no    
    debug: off    
    timestamp: off    
    logger_subsys {        
    subsys: AMF       
     debug: off    
     }
}
#让pacemaker以插件的形式同pacemaker配合使用
service {    
    ver:    0    
    name:    pacemaker    
    use_mgmtd:    yes
}
aisexec {    
     user:    root   
     group:    root
}

#使用corosync-keygen产生密钥文件,用于heartbeat通信数字签名

[root@Test03 corosync]# corosync-keygen

#为保证集群节点配置文件一致性,这里使用复制的形式传递个别的集群节点

[root@Test03 corosync]#scp -p authkey corosync.conf Test04:/etc/corosync
[root@Test03 corosync]# service corosync start
[root@Test04 corosync]# service corosync start

2.4)--------------Test03上安装crmshell----------------------------------

[root@Test03 corosync]#cd  /root/source
[root@Test03 source]# yum -y localinstall --nogpgcheck  crmsh-2.1-1.6.x86_64 .rpm pssh-2.3.1-2.el6.x86_64.rpm


 
后台共享存储Tese01上NFS提供分区,在Test03上挂载Test01共享的分区,用来承载mariadb初始化数据库
Test04上只是解压maraidb不初始化。
哪个节点上mariadb启动,那个节点挂载nfs共享分区。

2.5) ----------------Test01上提供nfs共享服务---------------------
 Test01:
添加的新磁盘被识别为/dev/sdb,给其分区,格式化为ext4文件系统,这里不再演示,自动解决

wKiom1VyYjSThJLzAAMr60CItIM015.jpg#关闭防火墙和selinux放置干扰

[root@Test01 ~]# service iptables stop
[root@Test01 ~]# setenforce 0

#建立mysql用户

[root@Test01 ~]# groupadd -g 27 mysql
[root@Test01 ~]# useradd -g 27 -u 27 -r mysql

#建立目录用于nfs共享

[root@Test01 ~]# mkdir  /mydata/
[root@Test01 ~]# vim /etc/fstab
#新增
/dev/sdb1               /mydata/data            ext4    defaults        0 0
[root@Test01 ~]# mount -a
[root@Test01 ~]# mount | grep sdb
/dev/sdb1 on /mydata/data type ext4 (rw)

#建立/mydata/data用于被共享后被集群节点挂载,承载mariadb初始化文件

[root@Test01 ~]# mkdir /mydata/data

#更改/mydata/data的属主为mysql  属组为mysql

[root@Test01 ~]# chown -R mysql.mysql /mydata/data/
[root@Test01 ~]# ls -ld /mydata/data/
drwxr-xr-x. 2 mysql mysql 4096 Jun  4 09:45 /mydata/data/

#修改nfs共享配置文件:

[root@Test01 ~]# vim /etc/exports 
/mydata 192.168.100.0/24(rw,no_root_squash)
#***初始该目录不可设定roo_squash,root用于要执行mariadb初始化

#启动nfs服务

[root@Test01 ~]# service nfs start
Starting NFS services:                                     [  OK  ]
Starting NFS quotas:                                       [  OK  ]
Starting NFS mountd:                                       [  OK  ]
Starting NFS daemon:                                       [  OK  ]
Starting RPC idmapd:                                       [  OK  ]
[root@Test01 ~]# showmount -e  192.168.100.1
Export list for 192.168.100.1:
/mydata 192.168.100.0/24
[root@Test01 ~]#


2.6)Test03--------------部署mariadb------------------------------

#建立统一mysql用户和组要同Test01上的mysql用户的uid与gid相同

[root@Test03 ~]# groupadd -r -g 27 mysql
[root@Test03 ~]# useradd -r -g 27 -u 27 mysql

#建立挂载目录,要同mariadb配置文件中设定一致

[root@Test03 ~]# mkdir /mydata
[root@Test03 ~]# mount -t nfs 192.168.100.1:/mydata /mydata
[root@Test03 ~]# mount | grep 'mydata'
192.168.100.1:/mydata on /mydata type nfs (rw,vers=4,addr=192.168.100.1,clientaddr=192.168.100.2)
[root@Test03 ~]#

#安装mariadb

[root@Test03 ~]# cd /root/source/
[root@Test03 source]# tar -xf mariadb-5.5.43-linux-x86_64.tar.gz  -C /usr/local
[root@Test03 source]# cd /usr/local
[root@Test03 local]# ln -sv mariadb-5.5.43-linux-x86_64 mysql
`mysql' -> `mariadb-5.5.43-linux-x86_64'
[root@Test03 local]# cd mysql/
[root@Test03 mysql]# chown -R root.mysql ./*
[root@Test03 mysql]# ./scripts/mysql_install_db --datadir=/mydata/data --user=mysql
[root@Test03 mysql]# mkdir /etc/mysql
[root@Test03 mysql]# cp support-files/my-medium.cnf  /etc/mysql/my.cnf
[root@Test03 mysql]# vim /etc/mysql/my.cnf 
[mysqld]
datadir = /mydata/data
innodb_file_per_table = on
[root@Test03 mysql]# cp support-files/mysql.server /etc/init.d/mariadb
[root@Test03 mysql]# chmod +x /etc/init.d/mariadb

#测试mariadb是否可启动

[root@Test03 mysql]# service mariadb start
Starting MySQL....                                         [  OK  ]
[root@Test03 mysql]# ss -tlpn | grep 3306
LISTEN     0      50                        *:3306                     *:*      users:(("mysqld",3241,15))

#集群中服务不可以自动启动

[root@Test03 mysql]# service mariadb stop
Shutting down MySQL..                                      [  OK  ]
[root@Test03 mysql]# chkconfig --add mariadb 
[root@Test03 mysql]# chkconfig mariadb off
[root@Test03 mysql]#umount /mydata



2.7)Test04 只解压mariadb不做初始化动作,初始化数据库在Test03上已完成

[root@Test04 ~]# groupadd -r -g 27 mysql
[root@Test04 ~]# useradd -r -u 27 -g 27  mysql
[root@Test04 ~]# cd /root/source/
[root@Test04 source]# tar -xf mariadb-5.5.43-linux-x86_64.tar.gz -C /usr/local
[root@Test04 source]# cd /usr/local/
[root@Test04 local]# ln -sv mariadb-5.5.43-linux-x86_64  mysql
`mysql' -> `mariadb-5.5.43-linux-x86_64'
[root@Test04 local]# cd mysql/
[root@Test04 mysql]# chown -R root.mysql ./*
[root@Test04 mysql]# mkdir /etc/mysql
[root@Test04 mysql]# scp -p Test03:/etc/mysql/my.cnf /etc/mysql/
my.cnf                                             100% 4963     4.9KB/s   00:00    
[root@Test04 mysql]# scp -p Test03:/etc/init.d/mariadb /etc/init.d/
mariadb                                            100%   12KB  11.9KB/s   00:00 
[root@Test04 mysql]# mkdir /mydata
[root@Test04 mysql]# mount -t nfs 192.168.100.1:/mydata /mydata

 #测试数据库是否可启动

[root@Test04 mysql]# service mariadb start
Starting MySQL...                                          [  OK  ]

#集群节点上服务不可开机自动启动

[root@Test04 mysql]# service mariadb stop
Shutting down MySQL.                                       [  OK  ]
[root@Test04 mysql]# chkconfig --add mariadb
[root@Test04 mysql]# chkconfig mariadb off
[root@Test04 mysql]# umount /mydata

2.8)在集群中部署mariadb资源

=============在Test03上通过crmshell配置mariadb 高可用================

#查看集群现在的状态信息

[root@Test03 ~]# crm status
Last updated: Thu Jun  4 02:20:45 2015
Last change: Wed Jun  3 12:41:17 2015
Stack: classic openais (with plugin)
Current DC: Test03.lijun.com - partition with quorum
Version: 1.1.11-97629de
2 Nodes configured, 2 expected votes
0 Resources configured
Online: [ Test03.lijun.com Test04.lijun.com ]

#实验环境中没有stonith设备,因此必须关闭,否则集群服务启动不起来

[root@Test03 source]# crm configure property stonith-enabled=false

#因为是2个节点,防止因票数不过半而使集群服务不知如何运作,故设定下面这个参数

[root@Test03 source]# crm configure property no-quorum-policy=ignore

#配置集群mariadb高可用时,对外使用的资源IP

#先查看配置命令的说明

[root@Test03 source]#crm ra info ocf:heartbeat:IPaddr
[root@Test03 source]#crm configure primitive sqlip ocf:heartbeat:IPaddr params ip=192.168.100.10 nic=eth1 cidr_netmask=24


#mariadb的初始化数据库放置在后端存储上通过nfs共享的,因此需配置nfs共享被节点挂载的资源

#先查看命令配置说明

[root@Test03 source]##crm ra info ocf:heartbeat:Filesystem


#配置mariadb集群服务

[root@Test03 source]#crm configure primitive sqlserver lsb:mariadb op monitor interval=15s timeout=15s

#配置资源类型为group来统一管理上述的mariadb相关的资源,注意资源名称的先后顺序,决定在集群节点上开启的先后。

[root@Test03 source]#crm configure group mysqlservice  sqlip sqlfilesystem sqlserver

2.9)验证配置

wKiom1VyYpDi6ou2AAPNif3xct0598.jpg

资源已经运行在Test04.lijun.com节点上。

现在设定Test04节点为standby状态后,看下资源服务是否会在Test03节点上运行

wKioL1VyZLbRSIHLAAZ2SRNFknk876.jpg


这就是corosync+pacemaker实现mariadb高可用实验。