Centos7 下安装NFS+Heartbeat+DRBD教程
Centos7 下安装NFS+Heartbeat+DRBD
======================================================
- -
需求:一般由于公司资金紧张,也没有更多的资金购买存储设备,手都上只有仅有的资金购买2台服务器,但又想有一个高可用的环境满足企业的日常使用的需求,这里当然有很多种方式,总体来说,NFS+Heartbeat+DRBD,是可以满足,因为NFS部署方便,维护简单,并且NFS是以明文方式存储,不像MFS这样的分布式存储架构,数据分散到每台服务器上,并且数据都是加密存储,如有一台node坏了会影响整个分布式存储的性能,综上考虑还是选择NFS+Heartbeat+DRBD这种架构。
- -
目的:通过部署NFS+Heartbeat+DRBD来满足公司业务在高可用环境的使用,确保业务不中断的运行。
- -
实施规划:
名称接口IP地址
用途heartbeat01eth0
192.168.202.20主服务器端IP地址
eth1172.16.0.20
用于NFS服务器之间心跳连接(直连)VIP
192.168.202.200用于提供对外NFS存储系统服务的VIPheartbeat02eth0
192.168.202.21备服务器端IP地址
eth1172.16.0.21
用于NFS服务器之间心跳连接(直连)VIP
192.168.202.200用于提供对外NFS存储系统服务的VIP- - - - - -
实施步骤:
一、安装过程
1,查看Linux版本及内核版本,需要这2台服务器版本保持一致。
<pre class="brush:bash;toolbar:false">cat /proc/version
<pre class="brush:bash;toolbar:false">uname –r
2,关闭防火墙和selinux,两边都需要做。
<pre class="brush:bash;toolbar:false">systemctl stop firewalld<br></br><br></br>systemctl disable firewalld<br></br><br></br>sed -i 's#SELINUX=enforcing#SELINUX=disabled# /etc/selinux/config’<br></br>
3,配置时间同步,两边都需要做。
<pre class="brush:bash;toolbar:false"># sysnc time from ntpserver<br></br>*/5 * * * * /usr/sbin/ntpdate time.ustc.edu.cn >/dev/null 2>&1<br></br>
4,配置hosts文件,两边都需要做心跳。
<pre class="brush:bash;toolbar:false">echo "`ifconfig ens34 |awk -F '[ :]+' 'NR==2 {print $3}'` `hostname`">>/etc/hosts<br></br>
5,配置路由,两边都需要做
<pre class="brush:bash;toolbar:false">/sbin/route add -host 172.16.0.21 dev ens34<br></br>echo '/sbin/route add -host 172.16.0.21 dev ens34' >>/etc/rc.local<br></br>route –n<br></br>
6,下载安装heartbeat,并提前安装依赖包。
<pre class="brush:bash;toolbar:false">yum install gcc gcc-c++ autoconf automake libtool glib2-devel libxml2-devel bzip2 bzip2-devel e2fsprogs-devel libxslt-devel libtool-ltdl-devel asciidoc -y<br></br>
7,创建用户和组。
<pre class="brush:bash;toolbar:false">groupadd haclient<br></br>useradd -g haclient hacluster<br></br>
8,新建目录,下载软件包。
<pre class="brush:bash;toolbar:false">mkdir –p /data && cd /data<br></br>wget http://hg.linux-ha.org/heartbeat-STABLE_3_0/archive/958e11be8686.tar.bz2<br></br>wget http://hg.linux-ha.org/glue/archive/0a7add1d9996.tar.bz2<br></br>wget https://github.com/ClusterLabs/resource-agents/archive/v3.9.6.tar.gz<br></br>
9,解压并安装glue。
<pre class="brush:bash;toolbar:false">tar xf 0a7add1d9996.tar.bz2<br></br>cd Reusable-Cluster-Components-glue--0a7add1d9996/<br></br>./autogen.sh<br></br>./configure --prefix=/usr/local/heartbeat \<br></br>--with-daemon-user=hacluster \<br></br>--with-daemon-group=haclient \<br></br>--enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'<br></br>make && make install<br></br>cd ..<br></br>
10,解压并安装Resource Agents。
<pre class="brush:bash;toolbar:false">tar xf v3.9.6.tar.gz<br></br>cd resource-agents-3.9.6/<br></br>./autogen.sh <br></br>./configure --prefix=/usr/local/heartbeat \<br></br>--with-daemon-user=hacluster \<br></br>--with-daemon-group=haclient \<br></br>--enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'<br></br>make && make install<br></br>cd ..<br></br>
11,解压并heartbeat。
<pre class="brush:bash;toolbar:false">tar xf 958e11be8686.tar.bz2<br></br>cd Heartbeat-3-0-958e11be8686/<br></br>./bootstrap<br></br>export CFLAGS="$CFLAGS -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib"<br></br>./configure --prefix=/usr/local/heartbeat \<br></br>--with-daemon-user=hacluster \<br></br>--with-daemon-group=haclient \<br></br>--enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'<br></br>make && make install<br></br>
12,配置网卡支持插件文件。
<pre class="brush:bash;toolbar:false">mkdir -pv /usr/local/heartbeat/usr/lib/ocf/lib/heartbeat/<br></br>cp /usr/lib/ocf/lib/heartbeat/ocf-* /usr/local/heartbeat/usr/lib/ocf/lib/heartbeat/<br></br>
13,做一个链接。
<pre class="brush:bash;toolbar:false">ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/RAExec/* /usr/local/heartbeat/lib/heartbeat/plugins/RAExec/<br></br>ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/* /usr/local/heartbeat/lib/heartbeat/plugins/<br></br>
14,到解压的文件下拷贝文件到安装目录下。
<pre class="brush:bash;toolbar:false">cd /data/Heartbeat-3-0-958e11be8686/doc<br></br>拷贝authkeys,haresources,ha.cf 三个文件到/usr/local/heartbeat/etc/ha.d目录下<br></br>cp {authkeys,haresources,ha.cf} /usr/local/heartbeat/etc/ha.d<br></br>
15,配置ha.cf文件,先备份一下配置文件,然后再操作。
<pre class="brush:bash;toolbar:false">vim /usr/local/heartbeat/etc/ha.d/ha.cf<br></br>#the start <br></br>debugfile /var/log/ha-debug<br></br>logfile /var/log/ha-log<br></br>logfacility local1<br></br> <br></br>keepalive 2<br></br>deadtime 30<br></br>warntime 10<br></br>initdead 60<br></br> <br></br>#bcast eth1<br></br>#mcast eth1 225.0.0.18 694 1 0<br></br>ucast ens34 172.16.0.21<br></br>auto_failback on<br></br>node heartbeat01<br></br>node heartbeat02<br></br>crm no<br></br>#the end<br></br>
提示:另外一台也同样配置,唯一不同的是需要改单播ip地址
16,配置authkeys文件,先备份一下配置文件,然后再操作。
<pre class="brush:bash;toolbar:false">vim /usr/local/heartbeat/etc/ha.d/authkeys<br></br>auth 1<br></br>1 sha1 47e9336850f1db6fa58bc470bc9b7810eb397f04<br></br>
17,给authkeys文件权限为600
<pre class="brush:bash;toolbar:false">chmod 600 /usr/local/heartbeat/etc/ha.d/authkeys<br></br>
提示:另外一台也同样配置
18,配置haresources,先备份一下配置文件,然后再操作。
<pre class="brush:bash;toolbar:false">vim /usr/local/heartbeat/etc/ha.d/haresources<br></br>#192.168.202.200 VIP <br></br>#heartbeat01 IPaddr::192.168.202.200/24/ens33<br></br>heartbeat01 IPaddr::192.168.202.200/24/ens33 drbddisk::data Filesystem::/dev/drbd0::/data::ext4<br></br>
19,启动heartbeat测试一下
<pre class="brush:bash;toolbar:false">[root@heartbeat01 heartbeat]# service heartbeat start<br></br>Starting heartbeat (via systemctl): [ OK ]<br></br>[root@heartbeat01 heartbeat]# ip add |grep 192.168.202<br></br> inet 192.168.202.20/24 brd 192.168.202.255 scope global noprefixroute ens33<br></br> inet 192.168.202.200/24 brd 192.168.202.255 scope global secondary ens33:0<br></br>[root@heartbeat01 heartbeat]# ps -ef |grep heartbeat<br></br>root 94686 1 0 15:01 ? 00:00:00 heartbeat: master control process<br></br>root 94688 94686 0 15:01 ? 00:00:00 heartbeat: FIFO reader<br></br>root 94689 94686 0 15:01 ? 00:00:00 heartbeat: write: ucast ens34<br></br>root 94690 94686 0 15:01 ? 00:00:00 heartbeat: read: ucast ens34<br></br>root 94952 1659 0 15:03 pts/0 00:00:00 grep --color=auto heartbeat<br></br>
20,添加yum源并安装DRBD软件。
<pre class="brush:bash;toolbar:false">yum install https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm -y<br></br>yum -y install drbd84-utils kmod-drbd84<br></br>[root@heartbeat01 ~]# modprobe drbd<br></br>[root@heartbeat01 ~]# lsmod |grep -i drbd<br></br>drbd 397041 0 <br></br>libcrc32c 12644 2 xfs,drbd<br></br>echo "modprobe drbd >/dev/null 2>&1" >/etc/sysconfig/modules/drbd.modules<br></br>
21,先分区,然后格式化数据。
<pre class="brush:bash;toolbar:false">fdisk –l<br></br>fdisk /dev/sdb<br></br>mkfs.ext4 /dev/sdb1<br></br>
22,编辑drbd配置文件。
<pre class="brush:bash;toolbar:false">vim /etc/drbd.conf<br></br>#<br></br>global {<br></br> # minor-count 64;<br></br> # dialog-refresh 5; # 5 seconds<br></br> # disable-ip-verification;<br></br> usage-count no;<br></br>}<br></br> <br></br>common {<br></br> protocol C;<br></br> <br></br> disk {<br></br> on-io-error detach;<br></br> no-disk-flushes;<br></br> no-md-flushes;<br></br> }<br></br> <br></br> net {<br></br> sndbuf-size 512k;<br></br> # timeout 60; # 6 seconds (unit = 0.1 seconds)<br></br> # connect-int 10; # 10 seconds (unit = 1 second)<br></br> # ping-int 10; # 10 seconds (unit = 1 second)<br></br> # ping-timeout 5; # 500 ms (unit = 0.1 seconds)<br></br> max-buffers 8000;<br></br> unplug-watermark 1024;<br></br> max-epoch-size 8000;<br></br> # ko-count 4;<br></br> # allow-two-primaries;<br></br> cram-hmac-alg "sha1";<br></br> shared-secret "hdhwXes23sYEhart8t";<br></br> after-sb-0pri disconnect;<br></br> after-sb-1pri disconnect;<br></br> after-sb-2pri disconnect;<br></br> rr-conflict disconnect;<br></br> # data-integrity-alg "md5";<br></br> # no-tcp-cork;<br></br> }<br></br> <br></br> syncer {<br></br> rate 330M;<br></br> }<br></br>}<br></br> <br></br>resource data {<br></br> on heartbeat01 {<br></br> device /dev/drbd0;<br></br> disk /dev/sdb1;<br></br> address 192.168.202.20:7788;<br></br> #meta-disk /dev/sdb1 [0];<br></br> meta-disk internal;<br></br> }<br></br> <br></br> on heartbeat02 {<br></br> device /dev/drbd0;<br></br> disk /dev/sdb1;<br></br> address 192.168.202.21:7788;<br></br> #meta-disk /dev/sdb1 [0];<br></br> meta-disk internal;<br></br> }<br></br>}<br></br>
提示:主要需要修改的地方是IP地址,同时采用内部模式。
23,初始化环境
<pre class="brush:bash;toolbar:false">drbdadm create-md data<br></br>
提示:有报错如下图
解决:dd if=/dev/zero of=/dev/sdb1 bs=1M count=1
24,启动DRBD。
<pre class="brush:bash;toolbar:false">systemctl start drbd.service #启动DRBD服务<br></br>drbdadm primary --force data #把heartbeat01设置为主<br></br>drbdadm role data #查看角色<br></br>drbdadm dstate data #查看数据同步状态,如上为一致,还有Inconsistent状态为数据不一致正在同步<br></br>cat /proc/drbd #查看传输的状态<br></br>
25,在主服务器上执行。
<pre class="brush:bash;toolbar:false">mkdir /md1<br></br>mkfs.ext4 /dev/drbd0<br></br>mount /dev/drbd0 /md1<br></br>cd /md1<br></br>#弄几个文件测试一下,这个步骤可以省略<br></br>for n in `seq 10`;do cp /bin/cat tony$n;done<br></br>
26,heartbeat配合drbd使用说明。
<pre class="brush:bash;toolbar:false">在/usr/local/heartbeat/etc/ha.d/haresources下面配置<br></br>heartbeat01 IPaddr::192.168.202.200/24/ens33 drbddisk::data Filesystem::/dev/drbd0::/md1::ext4<br></br>#参数配置说明<br></br>1,IPaddr::192.168.202.200/24/ens33<br></br>/usr/local/heartbeat/etc/ha.d/resource.d/ IPaddr::192.168.202.200/24/ens33<br></br>start 配置了一个VIP 192.168.202.200<br></br>2,drbddisk::data<br></br>/usr/local/heartbeat/etc/ha.d/resource.d/ drbddisk data stop start <br></br>启动drbd脚本来提供服务。<br></br>3,Filesystem::/dev/drbd0::/md1::ext4<br></br>/usr/local/heartbeat/etc/ha.d/resource.d/ Filesystem /dev/drbd0 /md1 ext4 start 挂载一个文件夹名字叫/md1<br></br>
备注:在/usr/local/heartbeat/etc/ha.d/haresources内IPaddr,Filesystem等脚本存放路径在/etc/ha.d/resource.d/下,也可在该目录下存放服务启动脚本(例如:mysql,www),将相同脚本名称添加到/etc/ha.d/haresources内容中,从而跟随heartbeat启动而启动该脚本。
下面是对上述命令的具体解释:
※IPaddr::192.168.202.200/24/ens33:用IPaddr脚本配置对外服务的浮动虚拟IP这个就是VIP IP地址。
※drbddisk::data:用drbddisk脚本实现DRBD主从节点资源组的挂载和卸载
※Filesystem::/dev/drbd0::/md1:用Filesystem脚本实现磁盘挂载和卸载
27,错误以及解决办法,先看日志,在找解决办法。
有2个错误在执行cat /var/log/ha-debug发现的。
一个是错误大概如下:Setup problem: couldn't find command: fuser
解决办法:安装一个软件yum install psmisc就可以解决了。
还有一个说是没有drbddisk脚本:然后查了一下还是真没有,然后拷贝一个放在/usr/local/heartbeat/etc/ha.d/resource.d目录下,并且授权755就好了。
解决办法:chmod 755 /usr/local/heartbeat/etc/ha.d/resource.d/drbddisk
28,安装NFS,在2台服务器上都要安装
<pre class="brush:bash;toolbar:false">[root@heartbeat01 ~]# yum -y install nfs-utils rpcbind<br></br>[root@heartbeat01 ~]# rpm -qa nfs-utils rpcbind <br></br>rpcbind-0.2.0-49.el7.x86_64<br></br>nfs-utils-1.3.0-0.68.el7.x86_64<br></br>[root@heartbeat01 ~]# systemctl start rpcbind<br></br>[root@heartbeat01 ~]# systemctl start nfs<br></br>[root@heartbeat01 ~]# systemctl enable nfs<br></br>[root@heartbeat01 ~]# systemctl enable rpcbind<br></br>[root@heartbeat02 ~]# systemctl start rpcbind<br></br>[root@heartbeat02 ~]# systemctl start nfs<br></br>[root@heartbeat02 ~]# systemctl enable nfs<br></br>[root@heartbeat02 ~]# systemctl enable rpcbind<br></br>
29,查看启动是否正常。
<pre class="brush:bash;toolbar:false">[root@heartbeat01 ~]# rpcinfo -p localhost<br></br>
30,配置heartbeat01上的参数。
<pre class="brush:bash;toolbar:false">[root@heartbeat01 ~]# cat /etc/exports<br></br>/md1 192.168.202.*(rw,sync)<br></br>[root@heartbeat01 ~]# systemctl reload nfs<br></br>或者是exportfs -r<br></br>[root@heartbeat01 ~]# exportfs -r<br></br>[root@heartbeat01 ~]# showmount -e 192.168.202.20<br></br>Export list for 192.168.202.20:<br></br>/md1 192.168.202.*<br></br>
31,配置heartbeat02上的参数
<pre class="brush:bash;toolbar:false">[root@heartbeat02 ~]# vim /etc/exports<br></br>/md1 192.168.202.*(rw,sync)<br></br>[root@heartbeat02 ~]# exportfs -r<br></br>[root@heartbeat02 ~]# showmount -e 192.168.202.21<br></br>Export list for 192.168.202.21:<br></br>/md1 192.168.202.*<br></br>
32,客户端机器配置。
<pre class="brush:bash;toolbar:false">[root@mysql ~]# yum -y install nfs-utils rpcbind<br></br>[root@mysql ~]# systemctl start rpcbind<br></br>[root@mysql ~]# mkdir /web<br></br>[root@mysql ~]# showmount -e 192.168.202.200<br></br>Export list for 192.168.202.200:<br></br>/md1 192.168.202.*<br></br>
33,将服务端的VIP共享资源挂载到本地的/web目录下面,下面是客户端挂载处理。
<pre class="brush:bash;toolbar:false">[root@mysql ~]# mount -t nfs 192.168.202.200:/md1 /web<br></br>[root@mysql ~]# echo "mount -t nfs 192.168.202.200:/md1 /web" >> /etc/rc.local<br></br>[root@mysql ~]# tail -l /etc/rc.local<br></br># to run scripts during boot instead of using this file.<br></br>#<br></br># In contrast to previous versions due to parallel execution during boot<br></br># this script will NOT be run after all other services.<br></br>#<br></br># Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure<br></br># that this script will be executed during boot.<br></br> <br></br>touch /var/lock/subsys/local<br></br>mount -t nfs 192.168.202.200:/md1 /web<br></br>
34,客户端查看挂载数据是否过来了。
<pre class="brush:bash;toolbar:false">[root@mysql ~]# ls /web<br></br>lost+found test tony1 tony10 tony2 tony3 tony4 tony5 tony6 tony7 tony8 tony9<br></br>
- -
二、错误处理
关于一台主机宕机修复后,主机节点不会自动切换成主节点。注意修复时需要以下步骤:
先在2台主机上查看节点的DRBD状态:
cat /proc/drbd然后在Secondary节点上操作如下步骤:
1,modprobe drbd
2,drbdadm Secondary data
3,drbdadm up data
4,drbdadm disconnect data
5,drbdadm -- --discard-my-data connect data
6,最后在primary节点上,通过cat /proc/drbd查看状态,如果不是connection状态需要手动执行drbdadm connect data
- -
三、总结
1,不要把DRDB服务和Heartbeat服务开机自启动,因为,当一台服务器重维修好重新加入时很容易导致裂脑。
2,当故障发生时,我们需要冷静对待,查看日志,cat /var/log/ha-log文件,一般在这里出现的问题都有明显提示。
3,做好准备工作,你细心一点也能做的更好。