友情提醒:文中实验环境 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查询接口 |
实验拓扑:
二 实验步骤
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文件系统,这里不再演示,自动解决
#关闭防火墙和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)验证配置
资源已经运行在Test04.lijun.com节点上。
现在设定Test04节点为standby状态后,看下资源服务是否会在Test03节点上运行
这就是corosync+pacemaker实现mariadb高可用实验。