对于传统的热备应用,通常采用的是两个实例共享一块磁盘,利用lvs提供的虚拟ip来对外提供服务。共享磁盘可以通过nfs来实现:
主实例上共享出nfs服务,从实例直接挂载作为数据盘(由于从实例正常情况下不提供服务,主实例使用本地磁盘并提供NFS服务给从实例的方案可以报障正常情况时应用的性能)。
对于磁盘IO特别高的应用,可以考虑将nfs挂载到从实例后,利用rsync同步至本地的磁盘,并用本地磁盘提供服务的方案。
服务端
- 安装
sudo yum install nfs-utils nfs-utils-lib
sudo systemctl start nfs-server
sudo systemctl enable nfs-server
# 替换client_ip(可用域名和CIDR格式IP)和shared path
echo '/share/data client_ip(rw,sync,no_root_squash)' >> /etc/exports
# 重新加载
sudo exportfs -arv
# 查看共享情况
exportfs -v
- 添加防火墙规则
sudo firewall-cmd --permanent --zone=public --add-service=nfs
sudo firewall-cmd --permanent --zone=public --add-service=mountd
sudo firewall-cmd --permanent --zone=public --add-service=rpc-bind
sudo firewall-cmd --reload
客户端
sudo yum install nfs-utils
# 替换 share data和server_ip
sudo mkdir -p /share/data
sudo mount -t nfs server_ip:/share/data /share/data
文件同步
sudo yum install rsync
# 将/share/data/(源必须以/结尾)同步至/mnt/data(利用文件锁同步任务堆积)
flock -xn /tmp/rsync_nfs -c 'rsync -a --delete /share/data/ /mnt/data >/tmp/rsync.log 2>&1'
# 定时执行(替换shell)
crontab -e
*/5 * * * * shell