整体方案需要至少五款开源软件,来实现所需功能。
1. 软件介绍
1 NFS Kernel Server 开源内核态软件,用以提供通用NFS服务协议。本地盘格式化后挂载在本地目录,并通过NFS server导出后,其他主机(客户端)可以通过网络访问此目录。
2 Rsync 同步软件,可以将指定目录下的所有内容同步到另一个目录。相比于cp、scp命令的优点在于可以增量同步,通过比对文件大小、修改时间等决定是否需要拷贝文件。其一般有三种工作模式:
本地复制
远程shell访问:借助ssh协议等传输文件
远程daemon访问:借助rsync自己的进程和端口传输文件
3 Inotify-tools 可以用来监控指定目录下发生的文件相关操作,如open、write、close等,并在捕获到操作时调用指定脚本。借助该软件可以监控NFS共享目录,并在发生文件操作时调用rsync进行同步,实现更实时的远程复制。
4 Sersync 国人开发的远程复制工具,对rsync和inotify进行了封装,实现了故障重传、多线程并发复制等功能。
5 KeepAlived 以虚IP的方式提供高可用及故障切换功能,一般有三种状态:
Master:承载虚IP的节点
Backup:备节点
Fault/Stop:故障/停止状态
6 Sersync-api-server 另外,还新开发了一个独立的Python WSGI Server,用于管理配额功能。
2. 安装过程
2.1. 创建lvm数据目录
创建lvm盘
$ pvcreate /dev/sdc
$ vgcreate nfsdata /dev/sdc
$ lvcreate -L 100G -n nfs_1 nfsdata
格式化,创建xfs文件系统,设置自动挂载
$ mkfs.xfs /dev/nfsdata/nfs_1
$ mkdir /nfs-docker
在/etc/fstab中新增一行
/dev/nfsdata/nfs_1 /nfs-docker xfs rw,prjquota 0 0
挂载分区
mount -a
创建目录
$ mkdir /nfs-docker/admin
$ mkdir /nfs-docker/data
2.2. 安装nfs
$ yum install -y nfs-utils
$ echo "/nfs-docker/data *(rw,sync,no_subtree_check,no_root_squash,fsid=1)" >> /etc/exports
$ exportfs -ar
2.3. 安装keepalive
yum install -y keepalived
2.4. 安装 Sersync
$ yum install -y epel-release
$ yum install -y rsync inotify-tools
$ yum install -y python-setuptools python-eventlet python-routes python-webob
安装sersync的rpm包
$ rpm -ivU https://nfs.nos-eastchina1.126.net/sersync-0.2-1.el7.centos.x86_64.rpm
修改配置:
/etc/sersync/rsyncd.conf: hosts allow改为对端节点IP
/etc/sersync/sersync.conf: remote ip改为对端节点IP
(可选)/etc/sersync/functions: report_server的IP改为定时接收探活信息的服务器地址
配置keepalive
cp /etc/sersync/keepalived.example /etc/keepalived/keepalived.conf
/etc/keepalived/keepalived.conf: 可以参考/etc/sersync/keepalived.example,除了通用配置外主要是加入nopreempt选项,设置track_script和notify调用脚本
2.5. 服务启动,开机启动
systemctl daemon-reload && systemctl enable keepalived && systemctl restart keepalived
systemctl daemon-reload && systemctl enable nfs-config && systemctl restart nfs-config
systemctl daemon-reload && systemctl enable nfs-server && systemctl restart nfs-server