首页 > 其他分享 >nfs双机热备

nfs双机热备

时间:2022-09-23 13:45:31浏览次数:47  
标签:热备 keepalived rsync sh nfs rsyncd 双机 节点

192.16.2.1  主机

192.16.2.2  副机

192.16.2.244  vip

 

关闭两台节点机的防火墙和Selinux
关闭防火墙
# systemctl stop firewalld.service
# systemctl disable firewalld.service
# firewall-cmd --state
not running
 
关闭selinux
# cat /etc/sysconfig/selinux
SELINUX=disabled
 
# setenforce 0
# getenforce
Disabled
# reboot

一、安装部署NFS服务(Master和Slave两机器同样操作)
1)安装nfs
# yum -y install nfs-utils
 
2)创建nfs共享目录
# mkdir /data/nfs
 
3)编辑export文件,运行k8s的node节点挂载nfs共享目录
这里可以使用node节点的ip网段进行挂载配置
也可以直接使用node节点的具体ip(一个ip配置一行)进行挂载配置
# vim /etc/exports
/data/nfs *(rw,sync,no_root_squash)
 
4)配置生效
# exportfs -r
 
5)查看生效
# exportfs
 
6)启动rpcbind、nfs服务
systemctl restart rpcbind
systemctl enable rpcbind
systemctl restart nfs
systemctl enable nfs
 
7)查看 RPC 服务的注册状况
# rpcinfo -p localhost
 
8)showmount测试
Master节点测试
# showmount -e 192.16.2.1
Export list for 192.16.2.1:
/data/nfs *
 
Slave节点测试
# showmount -e 192.16.2.2
Export list for 192.16.2.2:
/data/nfs *
 
#############################################################################
或者到ks的任意一个node节点上手动尝试挂载NFS,看是否挂载成功:
[root@k8s-node01 ~]# mkdir /haha
[root@k8s-node01 ~]# mount -t nfs 192.16.2.1:/data/nfs /haha
[root@k8s-node01 ~]# umount /haha
[root@k8s-node01 ~]# mount -t nfs 192.16.2.2:/data/nfs /haha
[root@k8s-node01 ~]# umount /haha
[root@k8s-node01 ~]# rm -rf /haha
#############################################################################


二、安装部署keepalived(Master和Slave两机器同样操作)

1)安装keepalived
yum install -y curl gcc openssl-devel libnl3-devel net-snmp-devel
yum -y install keepalived
 
2)Master节点的keepalived.conf配置
这里特别需要注意:
一定要设置keepalived为非抢占模式,如果设置成抢占模式会在不断的切换主备时容易造成NFS数据丢失。
 
# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf_bak
# >/etc/keepalived/keepalived.conf
# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
    router_id master   #id可以随便设
}
vrrp_script chk_nfs {
    script "/etc/keepalived/nfs_check.sh"    #监控脚本
    interval 2
    weight -20   #keepalived部署了两台,所以设为20,如果三台就设为30
}
vrrp_instance VI_1 {
    state BACKUP    #两台主机都设为backup非抢占模式
    interface eth0  #网卡名写自己的,不要照抄
    virtual_router_id 51
    priority 100    #master设为100,backup设为80,反正要比100小
    advert_int 1
    nopreempt       #设置为非抢占模式必须要该参数
    authentication {
        auth_type PASS
        auth_pass 1111
    }  
    track_script {
        chk_nfs
    }
    virtual_ipaddress {
        192.16.2.244      #虚拟ip
    }
}
 
3)Slave节点的keepalived.conf配置
只需将priority参数项修改为80,其他配置的和master节点一样,脚本也一样。
 
# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf_bak
# >/etc/keepalived/keepalived.conf
# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
    router_id master  
}
vrrp_script chk_nfs {
    script "/etc/keepalived/nfs_check.sh"   
    interval 2
    weight -20  
}
vrrp_instance VI_1 {
    state BACKUP   
    interface eth0
    virtual_router_id 51
    priority 80  
    advert_int 1
    nopreempt      
    authentication {
        auth_type PASS
        auth_pass 1111
    }  
    track_script {
        chk_nfs
    }
    virtual_ipaddress {
        192.16.2.244     
    }
}
 
 
4)编辑nfs_check.sh监控脚本
# vim /etc/keepalived/nfs_check.sh
#!/bin/bash
A=`ps -C nfsd --no-header | wc -l`
if [ $A -eq 0 ];then
        systemctl restart nfs-server.service
        sleep 2
        if [ `ps -C nfsd --no-header| wc -l` -eq 0 ];then
            pkill keepalived
        fi
fi
 
设置脚本执行权限
# chmod 755 /etc/keepalived/nfs_check.sh
 
5)启动keepalived服务
systemctl restart keepalived.service
systemctl enable keepalived.service
 
查看服务进程是否启动
ps -ef|grep keepalived
 
6)检查vip是否存在
在两台节点机器上执行"ip addr"命令查看vip,其中会在一台机器上产生vip地址。
# ip addr|grep 192.16.2.244
    inet 192.16.2.244/32 scope global eth0
     
测试vip地址要能被ping通
# ping 192.16.2.244
PING 192.16.2.244 (192.16.2.244) 56(84) bytes of data.
64 bytes from 192.16.2.244: icmp_seq=1 ttl=64 time=0.063 ms
64 bytes from 192.16.2.244: icmp_seq=2 ttl=64 time=0.042 ms
64 bytes from 192.16.2.244: icmp_seq=3 ttl=64 time=0.077 ms
 
7)keepalived故障测试
停掉vip所在的Master节点机器上的keepalived服务后,发现vip会自动飘移到另一台Backup机器上才算测试成功。
当该Master节点的keepalived服务重新启动后,vip不会重新飘移回来。因为keepalived采用了非抢占模式。
 
如果keepalived设置为抢占模式,vip会在Master节点的keepalived重启恢复后自动飘回去,
但是这样一直来回切换可能会造成NFS数据不完整,因为这里必须设置成非抢占模式。
 
由于配置了nfs的nfs_check.sh监控脚本,所以当其中一台节点机器上的NFS服务宕停后会自动重启NFS。
如果NFS服务重启失败,则会自动关闭该节点机器上的keepalived服务,如果该节点有vip则会自动飘移到另外一台节点上。


三、安装部署Rsync+Inofity(Master和Slave两机器都要操作)
1)安装rsync和inotify
# yum -y install rsync inotify-tools
 
2)Master节点机器配置rsyncd.conf
# cp /etc/rsyncd.conf /etc/rsyncd.conf_bak
# >/etc/rsyncd.conf
vim /etc/rsyncd.conf
uid = root
gid = root
use chroot = 0
port = 873
hosts allow = *  #允许ip访问设置,可以指定ip或ip段
max connections = 0
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
log format = %t %a %m %f %b
transfer logging = yes
syslog facility = local3
 
[master_web]
path = /data/nfs
comment = master_web
ignore errors
read only = no   #是否允许客户端上传文件
list = no
auth users = rsync  #指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块
secrets file = /etc/rsyncd.passwd  #保存密码和用户名文件,需要自己生成
 
编辑密码和用户文件(格式为"用户名:密码")
# vim /etc/rsyncd.passwd
rsync:123456
 
编辑同步密码(注意这个文件和上面的密码和用户文件路径不一样)
该文件内容只需要填写从服务器的密码,例如这里从服务器配的用户名密码都是rsync:123456,则主服务器则写123456一个就可以了
# vim /opt/rsyncd.passwd
123456
 
设置文件执行权限
chmod 600 /etc/rsyncd.passwd
chmod 600 /opt/rsyncd.passwd
 
启动服务
systemctl enable rsyncd
systemctl restart rsyncd
 
检查rsync服务进程是否启动
ps -ef|grep rsync
 
3)Slave节点机器配置rsyncd.conf
就把master主机/etc/rsyncd.conf配置文件里的[master_web]改成[slave_web]
其他都一样,密码文件也设为一样
 
# cp /etc/rsyncd.conf /etc/rsyncd.conf_bak
# >/etc/rsyncd.conf
# vim /etc/rsyncd.conf
uid = root
gid = root
use chroot = 0
port = 873
hosts allow = *
max connections = 0
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
log format = %t %a %m %f %b
transfer logging = yes
syslog facility = local3
 
[slave_web]
path = /data/nfs
comment = master_web
ignore errors
read only = no
list = no
auth users = rsync
secrets file = /etc/rsyncd.passwd
 
编辑密码和用户文件(格式为"用户名:密码")
# vim /etc/rsyncd.passwd
rsync:123456
 
编辑同步密码
# vim /opt/rsyncd.passwd
123456
 
设置文件执行权限
chmod 600 /etc/rsyncd.passwd
chmod 600 /opt/rsyncd.passwd
 
启动服务
systemctl enable rsyncd
systemctl restart rsyncd
 
检查rsync服务进程是否启动
# ps -ef|grep rsync

4)手动验证下Master节点NFS数据同步到Slave节点
在Master节点的NFS共享目录下创建测试数据
# ls /data/nfs/
# mkdir /data/nfs/test
# touch /data/nfs/{a,b}
# ls /data/nfs/
a  b  test
 
手动同步Master节点的NFS共享目录数据到Slave节点的NFS共享目录下
# rsync -avzp --delete /data/nfs/ [email protected]::slave_web --password-file=/opt/rsyncd.passwd
 
到Slave节点查看
# ls /data/nfs/
a  b  test

上面rsync同步命令说明:

/data/nfs/ 是同步的NFS共享目录
[email protected]::slave_web
rsync 是Slave节点服务器的/etc/rsyncd.passwd文件中配置的用户名
192.16.2.2为Slave节点服务ip
slave_web 为Slave服务器的rsyncd.conf中配置的同步模块名
--password-file=/opt/rsyncd.passwd 是Master节点同步到Slave节点使用的密码文件,文件中配置的是Slave节点服务器的/etc/rsyncd.passwd文件中配置的密码

5)设置Rsync+Inotify自动同步
这里需要注意:不能设置Master和Slave节点同时执行rsync自动同步,即不能同时设置双向同步。因为Master节点将数据同步到Slave节点,如果Slave节点再将数据同步回到Master节点,这个就矛盾了。所以需要确保只有一方在执行自动同步到另一方的操作。方式就是判断当前节点服务器是否存在VIP,如存在VIP则自动同步数据到另一台节点上。如不存在VIP则不执行自动同步操作。

+++++++    Master节点服务器操作    +++++++
编写自动同步脚本/opt/rsync_inotify.sh
#!/bin/bash
host=192.16.2.2
src=/data/nfs/
des=slave_web
password=/opt/rsyncd.passwd
user=rsync
inotifywait=/usr/bin/inotifywait
 
$inotifywait -mrq --timefmt '%Y%m%d %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \
| while read files ;do
 rsync -avzP --delete --timeout=100 --password-file=${password} $src $user@$host::$des
 echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
done

编写VIP监控脚本/opt/vip_monitor.sh
#!/bin/bash
VIP_NUM=`ip addr|grep 244|wc -l`
RSYNC_INOTIRY_NUM=`ps -ef|grep /usr/bin/inotifywait|grep -v grep|wc -l`
if [ ${VIP_NUM} -ne 0 ];then
   echo "VIP在当前NFS节点服务器上" >/dev/null 2>&1
   if [ ${RSYNC_INOTIRY_NUM} -ne 0 ];then
      echo "rsync_inotify.sh脚本已经在后台执行中" >/dev/null 2>&1
   else
      echo "需要在后台执行rsync_inotify.sh脚本" >/dev/null 2>&1
      nohup sh /opt/rsync_inotify.sh &
  fi
else
   echo "VIP不在当前NFS节点服务器上" >/dev/null 2>&1
   if [ ${RSYNC_INOTIRY_NUM} -ne 0 ];then
      echo "需要关闭后台执行的rsync_inotify.sh脚本" >/dev/null 2>&1
      ps -ef|grep rsync_inotify.sh|grep -v grep|awk '{print $2}'|xargs kill -9
      ps -ef|grep inotifywait|grep -v grep|awk '{print $2}'|xargs kill -9
   else
      echo "rsync_inotify.sh脚本当前未执行" >/dev/null 2>&1
   fi
fi

编写持续执行脚本/opt/rsync_monit.sh
#!/bin/bash
while [ "1" = "1" ]
do
  /bin/bash -x /opt/vip_monitor.sh >/dev/null 2>&1
done

chmod 755 /opt/rsync_inotify.sh
chmod 755 /opt/vip_monitor.sh
chmod 755 /opt/rsync_monit.sh
 
nohup sh /opt/rsync_inotify.sh &
nohup sh /opt/rsync_monit.sh &


设置rsync_monit.sh脚本的开机启动
# chmod +x /etc/rc.d/rc.local
# echo "nohup sh /opt/rsync_monit.sh & " >> /etc/rc.d/rc.local

+++++++    Slave节点服务器操作    +++++++    
脚本名为/opt/rsync_inotify.sh,内容如下
#!/bin/bash
host=192.16.2.1
src=/data/nfs/
des=master_web
password=/opt/rsyncd.passwd
user=rsync
inotifywait=/usr/bin/inotifywait
 
$inotifywait -mrq --timefmt '%Y%m%d %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \
| while read files ;do
 rsync -avzP --delete --timeout=100 --password-file=${password} $src $user@$host::$des
 echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
done

编写VIP监控脚本/opt/vip_monitor.sh
#!/bin/bash
VIP_NUM=`ip addr|grep 244|wc -l`
RSYNC_INOTIRY_NUM=`ps -ef|grep /usr/bin/inotifywait|grep -v grep|wc -l`
if [ ${VIP_NUM} -ne 0 ];then
   echo "VIP在当前NFS节点服务器上" >/dev/null 2>&1
   if [ ${RSYNC_INOTIRY_NUM} -ne 0 ];then
      echo "rsync_inotify.sh脚本已经在后台执行中" >/dev/null 2>&1
   else
      echo "需要在后台执行rsync_inotify.sh脚本" >/dev/null 2>&1
      nohup sh /opt/rsync_inotify.sh &
  fi
else
   echo "VIP不在当前NFS节点服务器上" >/dev/null 2>&1
   if [ ${RSYNC_INOTIRY_NUM} -ne 0 ];then
      echo "需要关闭后台执行的rsync_inotify.sh脚本" >/dev/null 2>&1
      ps -ef|grep rsync_inotify.sh|grep -v grep|awk '{print $2}'|xargs kill -9
      ps -ef|grep inotifywait|grep -v grep|awk '{print $2}'|xargs kill -9
   else
      echo "rsync_inotify.sh脚本当前未执行" >/dev/null 2>&1
   fi
fi

编写持续执行脚本/opt/rsync_monit.sh
#!/bin/bash
while [ "1" = "1" ]
do
  /bin/bash -x /opt/vip_monitor.sh >/dev/null 2>&1
done

后台运行脚本 (只执行rsync_monit.sh)
chmod 755 /opt/rsync_inotify.sh
chmod 755 /opt/vip_monitor.sh
chmod 755 /opt/rsync_monit.sh
 
nohup sh /opt/rsync_monit.sh &

设置rsync_monit.sh脚本的开机启动

chmod +x /etc/rc.d/rc.local
echo "nohup sh /opt/rsync_monit.sh & " >> /etc/rc.d/rc.local

6)最后验证下自动同步
1)比如当前VIP在Master节点,在Master节点创建测试数据,观察是否自动同步到Slave节点
# ip addr|grep 192.16.2.244
    inet 192.16.2.244/32 scope global eth0
 
# rm -rf /data/nfs/*
# echo "test" > /data/nfs/haha
# ls /data/nfs/
haha
 
到Slave节点上查看,已自动同步过来
# ls /data/nfs/
haha
# cat /data/nfs/haha
test
 
2)接着关闭Master节点的keeplived,将VIP飘移到Slave节点
# systemctl stop keepalived
# ip addr|grep 192.16.2.244
 
到Slave节点上查看,发现VIP已经飘移过来了
# ip addr|grep 192.16.2.244
    inet 192.16.2.244/32 scope global eth0
 
在Slave节点创建测试数据,观察是否自动同步到Master节点
# rm -rf /data/nfs/*
# mkdir /data/nfs/cha
# echo "heihei" > /data/nfs/you
 
到Master节点查看,发现数据已经同步过来了
# ls /data/nfs/
cha heihei
 
3)模拟Master节点和Slave节点关机,观察开机后:
/opt/rsync_monit.sh脚本会实现开机自启动。
按照上面Master和Slave节点的自动同步验证OK。




































标签:热备,keepalived,rsync,sh,nfs,rsyncd,双机,节点
From: https://www.cnblogs.com/zwli/p/16722404.html

相关文章

  • 安装nfs 实现磁盘挂载
    1.安装nfs-untilsyum-yinstallnfs-utils2. 设置共享目录mkdir-p/data/publicDisk001#授权chmod777/data/publicDisk001/#修改文件,让10.0.0.0/24这个网......
  • Ubuntu实现电商网站+Mysql主从复制+NFS
    Ubuntu实现电商网站+Mysql主从复制+NFS1、环境准备提前准备:Mysql8.0.30安装包、Mysql安装脚本、shopxo2.3.0安装包、DNS脚本服务器IP地址作用系统版本Mysql......
  • 22-Nginx高可用(基于Keepalived实现双机主备)
    双机主备HA其实就是高可用,现在部署的其实就是一台Nginx,但凡是单节点,都会存在宕机的可能性,所以我们需要一个备用机,来完成高可用,解决单点故障问题Keepalived......
  • keepalived结合nfs实现生产环境高可用
    keepalived结合nfs实现生产环境高可用-oldlai1、服务器无可厚非会遇到意外宕机的情况,如果服务端出现故障,那么客户端挂载的目录将不可用,如果这个目录是挂载给用户作为静态......
  • helm安装csi-driver-nfs-v4.1.0
    Applicationversionv4.1.0Chartversionv4.1.0获取chart包helmrepoaddcsi-driver-nfshttps://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/ma......
  • cinder对接NFS后端存储
    配置NFS服务安装NFS服务查询是否安装[root@nfs~]#rpm-qa|grepnfsnfs-utils-1.3.0-0.8.el7.x86_64如没有安装,执行以下命令[root@nfs~]#yuminstall-ynfs-ut......
  • Linux的NFS的配置
    快速代码#nfs的Server配置文件和配置方法echo'/newnfs192.168.3.*rw,sync,no_root_squash)'>>/etc/exports#根目录新建文件夹,权限777mkdir/newnfs&&chmod77......
  • 双机热备
    1、双机热备用于解决网关的单点故障问题。在双机热备中有主备之分,也就是在双机热备的环境中,由主设备给相应的终端提供网关的服务,而备设备不做任何的数据转发,只有当主设备出......
  • k8s(kubernetes)基于(NFS+PV+PVC)部署jenkins
    #部署流程:(系统:centos7.9)一、设置存储目录1、安装NFS服务端2、挂载NFS并设置存储文件夹二、创建PV&PVC1、准备PV&PVC部署文件2、创建PV&PVC......
  • Centos7下NFS服务搭建详细介绍
    目录一、服务端二、客户端 三、测试服务一、服务端1.用YUM源下载NFS相关服务 2.创造共享目录并在NFS相关配置文件写入共享目录 3.使用exportfs使设置立......