[高可用web服务器集群]NFS+RSYNC文件服务器

[高可用web服务器集群]NFS+RSYNC文件服务器 - 1

所处层

服务器类型

IP

备注

Storage

NFS主服务器

172.16.1.20

web集群提供文件存储与共享服务,使各web服务器中的web程序数据能够同步

NFS备份服务器

172.16.1.21

该服务器为NFS服务器的备份服务器,使用rsync+ inotify与主NFS服务器进行数据同步,在主NFS服务器宕机\数据被破坏时将web服务器集群挂载切换到该服务器,能够得到相应补救

Mysql主服务器

172.16.1.10

web集群提供数据库写入服务,使用mariadbmaster/slave架构进行读写分离,提高数据库稳定性

Mysql从服务器

172.16.1.11

web集群提供数据读取服务

Server Array

Web服务器0

172.16.1.30

Nginx+xcache架构,挂载NFS主服务器共享目录,Web应用程序为Thinkphp自带读写分离,链接172.16.1.10-11两台服务器,xcache提供PHP编译缓存加速访问速度

Web服务器1

172.16.1.31

同上

Load Blance

Nginx反向代理主服务器

内:172.16.1.1

外:8.8.8.6

Nginx负载均衡+keepalived架构,Nginx反向代理内网web服务器并配置负载均衡,keepalived一旦检测到NGINX服务停止便使用vrrp协议向备用服务器发送组播通告将VIP-8.8.8.8绑定到备用服务器

Nginx反向代理备服务器

内:172.16.1.2

外:8.8.8.7

作用同上

Redis服务器

172.16.1.32

Redis服务器负责两台web服务器的session共享服务,保证用户访问负载均衡服务器能够拥有相同的session

NFS简述 网络文件系统(英语:Network File System,縮寫為NFS)是一种分布式文件系统协议,最初由Sun Microsystems公司开发,并于1984[1]年发布。其功能旨在允许客户端主机可以像访问本地存储一样通过网络访问服务器端文件。 NFS和其他许多协议一样,是基于開放網路運算遠端程序呼叫(ONC RPC) 协议之上的。’

RSYNC简述 rsync是Unix下的一款应用软件,它能同步更新两处计算机的檔案與目錄,並適當利用差分編碼以減少数据傳輸。rsync中一項與其他大部分類似程式或協定中所未見的重要特性是镜像對每個目標只需要一次傳送。rsync可拷貝/顯示目錄內容,以及拷貝檔案,並可選擇性的壓縮以及遞歸拷貝。 在常駐模式(daemon mode)下,rsync預設監聽TCP埠873,以原生rsync傳輸協定或者透過遠端shell如RSH或者SSH伺服檔案。SSH情況下,rsync用戶端執行程式必須同時在本地和遠端機器上安裝。 rsync是自由软件,以GNU通用公共许可证發行。

inotify简述 inotify是Linux核心子系統之一,做為檔案系統的附加功能,它可監控檔案系統並將異動通知應用程式。本系統的出現取代了舊有Linux核心裡,擁有類似功能之dnotify模組。 inotify的原始開發者為John McCutchan、羅伯特·拉姆與Amy Griffis。於Linux核心2.6.13發行時(2005年六月十八日),被正式納入Linux核心[1]。儘管如此,它仍可透過修補程式的方式與2.6.12甚至更早期的Linux核心整合。 inotify的主要應用於桌面搜索軟體,像:Beagle,得以針對有變動的檔案重新索引,而不必沒有效率地每隔幾分鐘就要掃描整個檔案系統。相較於主動輪詢檔案系統,透過作業系統主動告知檔案異動的方式,讓Beagle等軟體甚至可以在檔案更動後一秒內更新索引。

NFS主服务器配置:

hostname NFSMaster
yum -y update

#配置NFS
yum -y install rpcbind
yum -y install nfs-utils
cd / && mkdir nfsshare
echo "/nfsshare 172.16.1.30(rw,sync,no\_root\_squash) 172.16.1.31(rw,sync,no\_root\_squash) 172.16.1.32(rw,sync,no\_root\_squash)" > /etc/exports
exportfs -a

#将nfs加入开机启动项
systemctl enable nfs
systemctl start nfs

#配置rsync同步
yum -y install rsync inotify-tools
echo 123455 > /etc/rsync\_login.passwd
chmod 600 /etc/rsync.passwd 

#建立实时监控同步脚本
————————以下为脚本文件————————
#!/bin/bash
# define value
export server="172.16.1.21"
export src="/nfsshare/"
export dst="share"
export user="masterNFS"
# run inotifywait&rsync
/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T%w%f%e' -e close\_write,modify,delete,create,attrib $src | while read files
do
    /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/server.pass $src $user@$server::$dst
    echo "-${file} was rsynced" >> /tmp/rsync.log 2>&1
done
————————以下为脚本文件————————

#将脚本加入开机启动项
echo "/root/inotifyrsync.sh &" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local

NFS备服务器配置:

hostname NfsSlave
yum -y update

#配置NFS
yum -y install rpcbind
yum -y install nfs-utils
cd / && mkdir nfsshare
echo "/nfsshare 172.16.1.30(rw,sync,no\_root\_squash) 172.16.1.31(rw,sync,no\_root\_squash) 172.16.1.32(rw,sync,no\_root\_squash)" > /etc/exports
exportfs -a
#将nfs加入开机启动项
systemctl enable nfs
systemctl start nfs

#配置Rsync进行数据同步
yum -y install rsync

#修改rsync配置
————————以下为脚本文件————————
#!/bin/bash
# 实时数据同步方案 :http://www.178linux.com/56151#14
# 修改rsyncd.conf
cat > /etc/rsyncd.conf << EOF
uid = nobody            # 运行rsync用户
gid = nobody
use chroot = no         # 关闭chroot
max connections = 100   # 最大并发连接数
pid file = /var/run/rsyncd.pid  # 进程文件位置
log file = /var/log/rsyncd.log  # 日志文件位置
strict modes = yes      # 开启严格模式

\[share\]
path = /nfsshare/           # 同步目录
ignore errors = yes
read only = no              
write only = no             
hosts allow = 172.16.1.20   # 白名单
hosts deny = \*             # 黑名单
list = no                   # 禁止列出目录
uid = root                  # 进程以root用户自行
gid = root
auth users = masterNFS      # 同步用户
secrets file = /etc/rsync.passwd    # 认证文件
EOF

# 建立用户验证文件
echo masterNFS:123456 > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
————————脚本结束————————

#将rsync加入开机启动项
systemctl enable rsyncd
systemctl start rsyncd

3 thoughts on “[高可用web服务器集群]NFS+RSYNC文件服务器”

Leave a Reply

Your email address will not be published. Required fields are marked *