1、负载均衡中文件同步必不可少,我这边选择rsync来实现文件同步
rsync同步文件机制更适用于单向文件同步,可配合unison实现双向同步功能。
实现同步的两种方法
一:ssh方法
rsync -avz 用户名@服务器ip /文件地址 本地目录
回车
input password
二:rsync同步
首先安装yum install rsync
创建 /etc/rsyncd.conf
uid = nobody
gid = nobody
use chroot = yes
max connections =
pid file = /var/run/rsyncd.pid
exclude = lost+found/
transfer logging = yes
timeout =
ignore nonreadable = yes
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 [data]
path = /home/cloud-user/rsync
comment = ftp export area
read only = yes
auth users = username
secrets file = /etc/rsync_user.pas
创建用户密码文件
vim /etc/rsync_user.pas
username:password
启动同步功能
rsync --daemon
另一台服务器同步
rsync -acz username@ip::data 本地目录
回车
input password
注意:对于auth 失败;最可能的原因是rsync_user.pas的权限 必须为600
对于上行同步和下行同步失败还有可能是因为权限的问题,对于权限有两道检测;1:rsync配置文件的对于该用户的权限为只读;2:服务器对于rsync用户在同步的文件夹的权限不够;
上行同步
rsync -avz 本地目录 username@ip:服务器目录
免密登陆
方式一:ssh免密登录
ssh-keygen -t rsa
//回车、回车、回车
系统会生成.ssh目录 ,该目录下有三个文件
id_rsa : 生成的私钥文件
id_rsa.pub : 生成的公钥文件
know_hosts : 已知的主机公钥清单
提交自己的用户名和密码去服务器
ssh-copy-id username@ip //回车
input password
然后可以通过ssh登录
ssh username@ip
二:rsync免密同步
系统中有一个环境变量RSYNC_PASSWORD 初始为空
设置RSYNC_PASSWORD密码
export RSYNC_PASSWORD=password
然后通过rsync同步
rsync -acz username@ip::data 本地目录
如果要实现实时同步需要先监控文件夹中的变化
使用inotifywait
编译安装inotify-tools-3.13
开始监控
//监控;监控/home/cloud-user/rsync/ 的增加和删除操作 inotifywait -mrq -e create,delete /home/cloud-user/rsync/
//同步;将本地home/cloud-user/rsync中的文件同步到改ip下的home/cloud-user/rsync中
rsync -avz /home/cloud-user/rsync/* cloud-user@IP:/home/cloud-user/rsync
编写inotifywait.sh脚本文件
#!bin/bash
inotifywait="inotifywait -mrq -e create,delete /home/cloud-user/rsync/"
rsync="rsync -avz /home/cloud-user/rsync/* cloud-user@IP:/home/cloud-user/rsync"
$inotifywait | while read directory event file
do
$rsync
done
//执行脚本
bash inotifywait.sh
rsync 更适合单向同步
如果要实现双向同步,可使用unison
yum install unison
编写脚本inotifywait_unison.sh
#!bin/bash
inotifywait="inotifywait -mrq -e create,delete,modify,move /home/cloud-user/rsync/"
unison="unison -batch /home/cloud-user/rsync/ ssh://IP//home/cloud-user/rsync"
$inotifywait | while read directory event file
do
$unison
done
注意shell文件权限
执行:
nohup bash inotifywait_unison.sh &
另一台服务也是相同操作,注意修改脚本文件中的ip