nfs高可用配置
172.16.2.17 master
172.16.2.16 slave
172.16.2.200 vip
1. 主备nfs服务部署
2. 主备rsync服务部署
1)master slave都要操作
创建同步数据用户
nfsdata/xxxxx
useradd nfsdata
echo xxxxx | passwd --stdin nfsdata
安装rsync
yum -y install rsync.x86_64
配置认证文件
[root@~ /]# echo 'nfsdata:xxxxx' > /etc/rsyncd.secrets
[root@~ /]# chmod 600 /etc/rsync.pass
配置rsync认证用户密码
[root@~ /]# echo 'xxxxx' > /etc/rsync.pass
[root@~ /]# chmod 600 /etc/rsync.pass
2)master
配置rsync配置文件
cat /etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon mode
uid = root
gid = root
port = 873
pid file = /var/rsyncd.pid
log file = /var/log/rsyncd.log
use chroot = no
max connections = 200
read only = false
list = false
fake super = yes
ignore errors
[data]
path = /nfsdata
auth users = nfsdata
secrets file = /etc/rsync.secrets
hosts allow = 172.16.2.16
3)slave
配置文件/etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon mode
uid = root
gid = root
port = 873
pid file = /var/rsyncd.pid
log file = /var/log/rsyncd.log
use chroot = no
max connections = 200
read only = false
list = false
fake super = yes
ignore errors
[data]
path = /nfsdata
auth users = nfsdata
secrets file = /etc/rsync.secrets
hosts allow = 172.16.2.17
4)master slave启动rsync服务
[root@~ /]# rsync --daemon --config=/etc/rsyncd.conf
查看rsync daemon进程
[root@~ /]# ps -ef | egrep "rsync --daemon.*rsyncd.conf" | grep -v 'grep'
查看同步日志
tailf /var/log/rsyncd.log
3. 主备Sersync服务部署
1)master slave部署Sersync
[root@~ local]# cd /usr/local
[root@~ local]# tar xvf sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@~ local]# mv GNU-Linux-x86/ sersync
[root@~ local]# cd sersync/
2)master
修改配置文件confxml.xml
[root@~ local]# sed -ri '24s#<localpath watch="/opt/tongbu">#<localpath watch="/nfsdata">#g' confxml.xml
[root@~ local]# sed -ri '25s#<remote ip="127.0.0.1" name="tongbu1"/>#<remote ip="172.16.2.16" name="data"/>#g' confxml.xml
[root@~ local]# sed -ri '30s#<commonParams params="-artuz"/>#<commonParams params="-az"/>#g' confxml.xml
[root@~ local]# sed -ri '31s#<auth start="false" users="root" passwordfile="/etc/rsync.pas"/>#<auth start="true" users="nfsdata" passwordfile="/etc/rsync.pass"/>#g' confxml.xml
[root@~ local]# sed -ri '33s#<timeout start="false" time="100"/><!-- timeout=100 -->#<timeout start="true" time="100"/><!-- timeout=100 -->#g' confxml.xml
3)slave
修改配置文件confxml.xml
[root@~ local]# sed -ri '24s#<localpath watch="/opt/tongbu">#<localpath watch="/nfsdata">#g' confxml.xml
[root@~ local]# sed -ri '25s#<remote ip="127.0.0.1" name="tongbu1"/>#<remote ip="172.16.2.17" name="data"/>#g' confxml.xml
[root@~ local]# sed -ri '30s#<commonParams params="-artuz"/>#<commonParams params="-az"/>#g' confxml.xml
[root@~ local]# sed -ri '31s#<auth start="false" users="root" passwordfile="/etc/rsync.pas"/>#<auth start="true" users="nfsdata" passwordfile="/etc/rsync.pass"/>#g' confxml.xml
[root@~ local]# sed -ri '33s#<timeout start="false" time="100"/><!-- timeout=100 -->#<timeout start="true" time="100"/><!-- timeout=100 -->#g' confxml.xml
4)master启动Sersync
[root@~ local]# /usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml
查看sersync进程
ps -ef | egrep "sersync" | grep -v 'grep'
4. 主备部署keepalived服务
1)master slave安装keepalived
[root@~ ]# yum install -y keepalived
配置keepalived配置文件
2)开通虚拟IP 172.16.2.200
3)master 修改配置文件keepalived.conf
[root@~ ]# cd /etc/keepalived/
/etc/keepalived/keepalived.conf
master
global_defs {
router_id nfs1
}
vrrp_script chk_nfs {
script "/user/k_NFS_check.sh"
interval 1
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
nopreempt //非抢占模式,服务漂移到slave后,master恢复后,不会自动切换到master,避免节点频繁切换
authentication {
auth_type PASS
auth_pass xxxxxxxx
}
track_script {
chk_nfs
}
virtual_ipaddress {
172.16.2.200 //虚拟IP地址
}
}
4)slave 修改配置文件keepalived.conf
/etc/keepalived/keepalived.conf
global_defs {
router_id nfs2
}
vrrp_script chk_nfs {
script "/user/k_NFS_check.sh"
interval 1
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass xxxxxxxx
}
track_script {
chk_nfs
}
virtual_ipaddress {
172.16.2.200
}
}
keepalived监控脚本内容:
/user/k_NFS_check.sh
#!/bin/bash
A=`ps -C rpcbind --no-header |wc -l`
if [ $A -eq 0 ];then
systemctl start rpcbind
fi
B=`ps -C nfsd --no-header |wc -l`
if [ $B -eq 0 ];then
systemctl start nfs
fi
C=`ps -C rsync --no-header |wc -l`
if [ $C -eq 0 ];then
rsync --daemon --config=/etc/rsyncd.conf
fi
if [ $A -eq 0 ];then
pkill keepalived
fi
if [ $B -eq 0 ];then
pkill keepalived
fi
if [ $C -eq 0 ];then
pkill keepalived
fi
5)master slave启动keepalived
systemctl start keepalived
设为开机启动:
systemctl enable keepalived
查看keepalived服务状态
systemctl status keepalived
systemctl start keepalived
systemctl stop keepalived
5. 检查虚拟ip
当主节点nfs服务挂掉后,keepalived监控脚本重启nfs服务,重启失败后会杀掉keepalived进程,节点自动漂移到slave节点
在当前服务可用节点,进行检查虚拟IP,
[root@mynfs01 /]# ip a | grep 172.16.2.200
6. 主备配置定时任务sersync服务状态监控
crontab -e
* * * * * echo -e $(date) `/usr/sersync_check.sh` >> /usr/sersync_check.log 2>&1
/user/sersync_check.sh
#!/bin/bash
# 每秒执行一次
# 间隔的秒数,不能大于60
step=1
vip=172.16.2.200
for (( i = 0; i < 60; i=(i+step) )); do
if [ `/usr/sbin/ip a | grep $vip |wc -l` -eq 0 ]; then
if [ `/usr/bin/ps -C sersync2 --no-header |wc -l` -eq 1 ]; then
/usr/bin/pkill sersync2
fi
else
if [ `/usr/bin/ps -C sersync2 --no-header |wc -l` -eq 0 ]; then
/usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml
if [ `/usr/bin/ps -C sersync2 --no-header |wc -l` -eq 0 ]; then
/usr/bin/pkill keepalived
fi
fi
fi
/usr/bin/sleep $step
done