|
背景
公司现在要对所有的重要服务进行双机,高可用,或者冷备份等等。当前有台很重要的业务数据存储在本地是一件很不安全的做法。在一次升级讨论中,领导提出要进行升级改造,将业务数据存放在单独的文件服务器,因为有些业务机器运行在windows中,Unix&&Windows 平台共享方案--Samba首当其冲了。
那么Samba如何实现双机以及数据同步呢?答案不止一种了。
经过研究,发现这种方案对于当前的业务场景非常贴近:
Heartbeat+Samba实现双机热备
实现samba的双机集群,当smbsvr1宕机后,smbsvr2能及时的提供服务;当smbsvr1恢复正常后,smbsvr2退出作为备用机
Rsync+Inotify-tools实现数据的实时同步
保证文件的一致性。
在文章之前,大家最好能够看下heartbeat的基础内容,大神请绕过。
http://blog.运维网.com/ljohn/2047150
环境准备
拓扑:

VIP:172.16.3.110
smbsvr1:
eth0:172.16.3.89
smbsvr2:
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-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
ucast eth0 172.16.3.90
auto_failback on
node smbsvr1
node smbsvr2
ping 172.16.3.254
respawn hacluster /usr/lib64/heartbeat/ipfail
配置authkeys
# grep -E -v '^#|^$' /etc/ha.d/authkeys
auth 3
3 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 all
path = /szt
browseable = yes
public = yes
writeable = yes
guest ok = yes
2、smbsvr2
配置参照“1、smbsvr1”
除了ha.cf配置有变化(ucast eth0 172.16.3.89 IP地址为对方节点的),其余都步骤均保持一样
# grep -E -v '^#|^$' /etc/ha.d/ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
ucast eth0 172.16.3.89
auto_failback on
node smbsvr1
node smbsvr2
ping 172.16.3.254
respawn 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 status
smbd (pid 1701) is running...
如此以来就实现了heartbeat+samba双机热备,是不是很简单呢,当然还存在一些问题,数据如何保持一致?如果smb服务关闭,heartbeat会不会产生脑裂呢?
二、rsync+inotify-tools双向数据实时同步配置
数据同步也可参照笔者的另一篇文章:
http://blog.运维网.com/ljohn/2047156
这篇文章仅仅实现了单向的文件同步,双向同步要按照步骤反过来再次部署一次。
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/passwd.txt
#赋权限并启动
# chmod 600 /etc/passwd.txt
# chmod 600 /etc/rsyncd.conf
# chmod 600 /etc/rsync.pass
# /etc/init.d/xinetd restart
#配置inotify-tools
cat >>/etc/sysctl.conf /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 |
|
|
|
|
|
|