博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
heartbeat+rsync+inotify+samba双机热备方案
阅读量:6091 次
发布时间:2019-06-20

本文共 8512 字,大约阅读时间需要 28 分钟。

背景

公司现在要对所有的重要服务进行双机,高可用,或者冷备份等等。当前有台很重要的业务数据存储在本地是一件很不安全的做法。在一次升级讨论中,领导提出要进行升级改造,将业务数据存放在单独的文件服务器,因为有些业务机器运行在windows中,Unix&&Windows 平台共享方案--Samba首当其冲了。

那么Samba如何实现双机以及数据同步呢?答案不止一种了。

经过研究,发现这种方案对于当前的业务场景非常贴近:

Heartbeat+Samba实现双机热备实现samba的双机集群,当smbsvr1宕机后,smbsvr2能及时的提供服务;当smbsvr1恢复正常后,smbsvr2退出作为备用机Rsync+Inotify-tools实现数据的实时同步保证文件的一致性。

在文章之前,大家最好能够看下heartbeat的基础内容,大神请绕过。

环境准备

拓扑:

heartbeat+rsync+inotify+samba双机热备方案

VIP:172.16.3.110smbsvr1:eth0:172.16.3.89smbsvr2:eth0:172.16.3.90##注意:    配置集群的前提:        (1) 时间同步;        (2) 基于当前正在使用的主机名互相访问;        (3) 是否会用到仲裁设备;
程序 版本
samba 3.6.23
heartbeat 3.0.4
rsync 3.0.6
inotify-tools 3.14

安装配置

一:heartbeat+samba安装配置

1、smbsvr1

# yum -y install samba heartbeat# cp /usr/share/doc/heartbeat-3.0.4/{ha.cf,authkeys,haresources} /etc/ha.d/# cd /etc/ha.d/配置ha.cf# grep -E -v '^#|^$' /etc/ha.d/ha.cf debugfile /var/log/ha-debuglogfile /var/log/ha-loglogfacility local0keepalive 2deadtime 30warntime 10initdead 120udpport 694ucast eth0 172.16.3.90auto_failback onnode    smbsvr1node    smbsvr2ping 172.16.3.254respawn hacluster /usr/lib64/heartbeat/ipfail配置authkeys# grep -E -v '^#|^$' /etc/ha.d/authkeys auth 33 md5 Hello!##去掉这两行前的#号配置haresources# grep -E -v '^#|^$' /etc/ha.d/haresources smbsvr1 172.16.3.110/24/eth0:0 smb##文件末尾添加此行配置samba# mkdir -pv /szt    #创建共享文件夹# vim /etc/samba/smb.conf  修改security = share在末行加入以下内容:[szt]comment = share allpath = /sztbrowseable = yespublic = yeswriteable = yesguest ok = yes

2、smbsvr2

配置参照“1、smbsvr1”除了ha.cf配置有变化(ucast eth0 172.16.3.89 IP地址为对方节点的),其余都步骤均保持一样# grep -E -v '^#|^$' /etc/ha.d/ha.cfdebugfile /var/log/ha-debuglogfile /var/log/ha-loglogfacility local0keepalive 2deadtime 30warntime 10initdead 120udpport 694ucast eth0 172.16.3.89auto_failback onnode    smbsvr1node    smbsvr2ping 172.16.3.254respawn hacluster /usr/lib64/heartbeat/ipfail

3、启动测试

两台机器分别heartbeat# service heartbeat start# 查看smbsvr1 ip地址# ifconfig eth0      Link encap:Ethernet  HWaddr 00:50:56:8C:14:95            inet addr:172.16.3.89  Bcast:172.16.3.255  Mask:255.255.255.0          inet6 addr: fd22:455a:117:0:250:56ff:fe8c:1495/64 Scope:Global          inet6 addr: fe80::250:56ff:fe8c:1495/64 Scope:Link          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1          RX packets:1057 errors:0 dropped:0 overruns:0 frame:0          TX packets:469 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:1000           RX bytes:128877 (125.8 KiB)  TX bytes:79903 (78.0 KiB)eth0:0    Link encap:Ethernet  HWaddr 00:50:56:8C:14:95            inet addr:172.16.3.110  Bcast:172.16.3.255  Mask:255.255.255.0          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1# service smb statussmbd (pid  1701) is running...

如此以来就实现了heartbeat+samba双机热备,是不是很简单呢,当然还存在一些问题,数据如何保持一致?如果smb服务关闭,heartbeat会不会产生脑裂呢?

二、rsync+inotify-tools双向数据实时同步配置

数据同步也可参照笔者的另一篇文章:

这篇文章仅仅实现了单向的文件同步,双向同步要按照步骤反过来再次部署一次。

smbsvr1与smbsvr2 两个节点的配置基本保持一致,这里仅提供相关服务的配置过程,其他不再赘述。

# yum -y install rsync xinetd inotify-tools # cp /etc/xinetd.d/rsync{,.bak}#配置sync# sed -i -e 's/= yes/= no/g' /etc/xinetd.d/rsync# cat >/etc/rsyncd.conf <
/etc/rsync.passecho "123456" >/etc/passwd.txt#赋权限并启动# chmod 600 /etc/passwd.txt# chmod 600 /etc/rsyncd.conf # chmod 600 /etc/rsync.pass # /etc/init.d/xinetd restart
#配置inotify-toolscat >>/etc/sysctl.conf<
#实时同步脚本#smbsvr1中:# cat /usr/local/inotify/rsync.sh #!/bin/bash# author ljohn# last uptime  2017.12.1src_dir="/szt/"dst_dir="app_rsync_client"  #目标目录标识exclude_dir="/usr/local/inotify/exclude.list"rsync_user="rsync"rsync_passwd="/etc/passwd.txt"dst_ip="172.16.3.90"  #目标IPrsync_command(){                  rsync -avH --port=873 --progress --delete --exclude-from=$exclude_dir $src_dir $rsync_user@$ip::$dst_dir --password-file=$rsync_passwd}for ip in $dst_ip;do     rsync_commanddone    /usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,modify,delete,create,attrib,move $src_dir \| while read file;do   for ip in $dst_ip;do       rsync_command       echo "${file} was rsynced" >> /tmp/rsync.log 2>&1   done done

注意:

dst_dir="app_rsync_client" #目标目录标识,在smbsvr2为app_rsync_server
dst_ip="172.16.3.90" #目标IP,在smbsvr2中为172.16.3.89

添加为开机启动# cat >> /etc/rc.d/rc.local <

集群验证

一、集群测试

1、关闭主节点heartbeat 服务,是否failover,启动heartbeat 是否failback

[root@smbsvr1 ~]# /etc/init.d/heartbeat stopStopping High-Availability services: Done.[root@smbsvr2 ~]# ifconfig eth0      Link encap:Ethernet  HWaddr 00:50:56:8C:61:EC            inet addr:172.16.3.90  Bcast:172.16.3.255  Mask:255.255.255.0          inet6 addr: fd22:455a:117:0:250:56ff:fe8c:61ec/64 Scope:Global          inet6 addr: fe80::250:56ff:fe8c:61ec/64 Scope:Link          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1          RX packets:83388 errors:0 dropped:0 overruns:0 frame:0          TX packets:80369 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:1000           RX bytes:5447750 (5.1 MiB)  TX bytes:6242625 (5.9 MiB)eth0:0    Link encap:Ethernet  HWaddr 00:50:56:8C:61:EC            inet addr:172.16.3.110  Bcast:172.16.3.255  Mask:255.255.255.0          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1[root@smbsvr1 ~]# ip a 1: lo: 
mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever2: eth0:
mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:50:56:8c:14:95 brd ff:ff:ff:ff:ff:ff inet 172.16.3.89/24 brd 172.16.3.255 scope global eth0 inet 172.16.3.110/24 brd 172.16.3.255 scope global secondary eth0:0 inet6 fd22:455a:117:0:250:56ff:fe8c:1495/64 scope global dynamic valid_lft forever preferred_lft forever inet6 fe80::250:56ff:fe8c:1495/64 scope link valid_lft forever preferred_lft forever[root@smbsvr1 ~]# /etc/init.d/heartbeat startStarting High-Availability services: INFO: Resource is stoppedDone.[root@smbsvr1 ~]# ip a 1: lo:
mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever2: eth0:
mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:50:56:8c:14:95 brd ff:ff:ff:ff:ff:ff inet 172.16.3.89/24 brd 172.16.3.255 scope global eth0 inet 172.16.3.110/24 brd 172.16.3.255 scope global secondary eth0:0 inet6 fd22:455a:117:0:250:56ff:fe8c:1495/64 scope global dynamic valid_lft forever preferred_lft forever inet6 fe80::250:56ff:fe8c:1495/64 scope link valid_lft forever preferred_lft forever[root@smbsvr1 ~]# /etc/init.d/smb statussmbd (pid 2735) is running...

2、关闭主节点系统,重启系统,是否failover;启动主节点的系统,是否failback

重启测试,这里就不演示了,但自己一定要测试。    注意:    要被高可用的的服务一定不能开机启动(这里的samba服务)    #chkconfig smb off

二、数据同步测试

1、主节点创建文件

[root@smbsvr1 szt]# touch smbsvr1{1..10}[root@smbsvr1 szt]# lssmbsvr11  smbsvr110  smbsvr12  smbsvr13  smbsvr14  smbsvr15  smbsvr16  smbsvr17  smbsvr18  smbsvr19[root@smbsvr2 szt]# lssmbsvr11  smbsvr110  smbsvr12  smbsvr13  smbsvr14  smbsvr15  smbsvr16  smbsvr17  smbsvr18  smbsvr19

2、备用节点创建文件

[root@smbsvr2 szt]# touch smbsvr2{1..10}[root@smbsvr2 szt]# lssmbsvr11   smbsvr12  smbsvr14  smbsvr16  smbsvr18  smbsvr21   smbsvr22  smbsvr24  smbsvr26  smbsvr28smbsvr110  smbsvr13  smbsvr15  smbsvr17  smbsvr19  smbsvr210  smbsvr23  smbsvr25  smbsvr27  smbsvr29[root@smbsvr1 szt]# lssmbsvr11   smbsvr12  smbsvr14  smbsvr16  smbsvr18  smbsvr21   smbsvr22  smbsvr24  smbsvr26  smbsvr28smbsvr110  smbsvr13  smbsvr15  smbsvr17  smbsvr19  smbsvr210  smbsvr23  smbsvr25  smbsvr27  smbsvr29

3、 在客户端创建文件测试

[root@smbsvr1 szt]# lsclient1.txt.txt  smbsvr12  smbsvr15  smbsvr18  smbsvr210  smbsvr24  smbsvr27smbsvr11         smbsvr13  smbsvr16  smbsvr19  smbsvr22   smbsvr25  smbsvr28smbsvr110        smbsvr14  smbsvr17  smbsvr21  smbsvr23   smbsvr26  smbsvr29[root@smbsvr2 szt]# lsclient1.txt.txt  smbsvr12  smbsvr15  smbsvr18  smbsvr210  smbsvr24  smbsvr27smbsvr11         smbsvr13  smbsvr16  smbsvr19  smbsvr22   smbsvr25  smbsvr28smbsvr110        smbsvr14  smbsvr17  smbsvr21  smbsvr23   smbsvr26  smbsvr29

这里要提供一个脚本:在测试时发现,如果有人或者意外关闭了samba服务

集群不会Failover。

```#cat /server/scripts/smb.sh #!/bin/bash#it's about to watch smb's statuswhile :doi=`ps aux |grep smbd |grep -v "grep smbd" |wc -l`if [ $i = 0 ];then     service heartbeat stop && exit 1 fidone#在smbsvr1中开机启动(/etc/rc.d/rc.local),或者手动启动。```

至此《heartbeat+rsync+inotify+samba》双机集群 部署完毕!!

转载于:https://blog.51cto.com/ljohn/2047553

你可能感兴趣的文章
本地连接linux虚拟机的方法
查看>>
某公司面试java试题之【二】,看看吧,说不定就是你将要做的题
查看>>
BABOK - 企业分析(Enterprise Analysis)概要
查看>>
Linux 配置vnc,开启linux远程桌面
查看>>
CentOS6.4关闭触控板
查看>>
React Native 极光推送填坑(ios)
查看>>
Terratest:一个用于自动化基础设施测试的开源Go库
查看>>
修改Windows远程终端默认端口,让服务器更安全
查看>>
扩展器必须,SAS 2.0未必(SAS挺进中端存储系统之三)
查看>>
Eclipse遇到Initializing Java Tooling解决办法
查看>>
while((ch = getchar()) != '\n')
查看>>
好程序员web前端分享JS检查浏览器类型和版本
查看>>
Oracle DG 逻辑Standby数据同步性能优化
查看>>
exchange 2010 队列删除
查看>>
「翻译」逐步替换Sass
查看>>
H5实现全屏与F11全屏
查看>>
处理excel表的列
查看>>
C#数据采集类
查看>>
quicksort
查看>>
【BZOJ2019】nim
查看>>