nfs高可用部署(lsyncd三主机三向同步)

news2024/11/18 17:20:36

nfs高可用部署

nfs高可用部署(lsyncd两主机双向同步)
nfs高可用部署(lsyncd三主机三向同步)

1. 工具简介

1.1. rsync

​ rsync(remote synchronize)是 Liunx/Unix 下的一个远程数据同步工具,它可通过 LAN/WAN 快速同步多台主机间的文件和目录。rsync 通过比较两边文件是否相同,不相同才进行更新。
​ 但是rsync无法知道“什么时候同步”,因为rsync只有执行同步命令的时候,才会去扫描文件判断哪些文件被修改了,只能建立一个定时任务,每隔一定的时间(比如5分钟,10分钟等等)去执行一次同步,这样虽然能同步,但却“不实时”。

1.2. lsyncd

​ lsyncd实际上是lua语言封装了 inotify 和 rsync 工具,采用了 Linux 内核(2.6.13 及以后)里的 inotify 触发机制,然后通过rsync去差异同步,达到实时的效果。我认为它最令人称道的特性是,完美解决了 inotify + rsync海量文件同步带来的文件频繁发送文件列表的问题 -通过时间延迟或累计触发事件次数实现。

1.3. nfs

NFS(Network File System,网络文件系统)是众多文件共享协议之一,最初是由 Sun Microsystems 公司于 1984 年开发出来的。

由于 NFS 使用起来非常方便,因此在 UNIX 操作系统中被广泛使用。现在,许多非 UNIX 或非类 UNIX 操作系统也对 NFS 提供了支持。

NFS 的配置和使用其实都非常简单,但是它的工作原理和其他的文件共享协议又有所不同,我们有必要了解一下。

2. 环境准备

虚拟ip主机IP同步目录同步账号功能
192.168.56.120node1192.168.56.100/home/nfsroot/123456100nfs1
node2192.168.56.101/home/nfsroot/123456101nfs2
node3192.168.56.102/home/nfsroot/123456102nfs3
node4192.168.56.103/mnt客户端测试

可以用passwd进行密码修改(方便区分下面的配置文件)

设置主机名 hostnamectl set-hostname node3 && bash

2.1 node1,node2,node3 部署rsync和lsyncd 做三向同步

2.2 node1,node2,node3 部署nfs提供服务

2.3 node1,node2,node3 部署keepalive做虚拟ip

在这里插入图片描述

3. 部署lsyncd rsync 做双向同步

3.1. 安装

在所有节点 开放防火墙(具体的ip不细究,当前4台互通即可):

sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/sysconfig/selinux
#刷新配置,立即生效
setenforce 0
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.100" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.101" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.102" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.103" accept"
firewall-cmd --reload
firewall-cmd --list-all

node1,node2,node3 创建目录

mkdir -p /home/nfs && cd /home/nfs

方式一(在线)后续步骤以此为基础:

yum install -y epel-release 

#安装
yum install -y rsync lsyncd
#yum install --downloadonly --downloaddir=/root/rsyncLsyncd rsync lsyncd 
#rpm -Uvh ./*
systemctl start rsyncd
systemctl start lsyncd
systemctl enable lsyncd
systemctl enable rsyncd
#验证是否启动
ps -aux |grep rsync
#root      2470  0.0  0.0 114748  1028 ?        Ss   08:45   0:00 /usr/bin/rsync --daemon --no-detach
#查看监听端口状态
netstat -an |grep 873
#tcp4 0 0 *.873 *.* LISTEN

3.2. 修改配置

#默认lsyncd配置文件路径
/etc/lsyncd.conf
#默认lsyncd日志路径,使用yum安装会自动配置日志截断,不须要额外干预
/var/log/lsyncd/lsyncd.log

#默认的rsync路径
/etc/rsyncd.conf
#默认的rsync日志路径
/var/log/messages
复制代码

创建账号

# node1执行
#认证文件,连接的账号密码 中的配置/etc/rsyncNode1.conf
echo 'root:123456100' > /etc/rsyncNode1.password
#查看配置是否成功
cat /etc/rsyncNode1.password


# node2执行
#认证文件,连接的账号密码 中的配置/etc/rsyncNode2.conf
echo 'root:123456101' > /etc/rsyncNode2.password
#查看配置是否成功
cat /etc/rsyncNode2.password


# node3执行
#认证文件,连接的账号密码 中的配置/etc/rsyncNode3.conf
echo 'root:123456102' > /etc/rsyncNode3.password
#查看配置是否成功
cat /etc/rsyncNode3.password

修改 rsyncd.conf

#需要互相监听的ip
cp /etc/rsyncd.conf /etc/rsyncd.confbak

IP='192.168.56.100 192.168.56.101 192.168.56.102'
#IPPassword='/etc/rsyncNode1.password'
#IPPassword='/etc/rsyncNode2.password'
IPPassword='/etc/rsyncNode3.password'
cat > /etc/rsyncd.conf << EOF
#日志路径
log file = /var/log/rsyncd.log 
pidfile = /run/rsyncd.pid
lock file = /run/rsync.lock
#模块名称,有多个源服务端时就在下面复制整个模块
[backup]
#存储接收数据的路径
path = /home/nfs/ 
comment = sync etc from client
# 其他账号注意这个
uid = root
# 其他账号注意这个
gid = root
port = 873
ignore errors
use chroot = no
read only = no
list = no  
max connections = 200
timeout = 600
#认证用户,同认证文件里的
# 其他账号注意这个
auth users = root
# 其他账号注意这个
#认证文件,连接的账号密码(当前主机的账号密码)
secrets file = ${IPPassword}
#允许链接的ip
hosts allow = ${IP}
#hosts deny = x.x.x.x #不允许的ip
EOF
cat /etc/rsyncd.conf

node1

在这里插入图片描述

node2

在这里插入图片描述

node3

在这里插入图片描述

修改 lsyncd.conf

node1(100)机器监听node2(101)

node1(100)机器监听node3(102)

node2(101)机器监听node1(100)

node2(101)机器监听node3(102)

node3(102)机器监听node1(100)

node3(102)机器监听node2(101)

cp /etc/lsyncd.conf  /etc/lsyncd.conf bak

# 100使用101的目标ip
IP1='192.168.56.100'
IP1Password='/etc/rsyncdNode1.password'
# 100使用102的目标ip
IP2='192.168.56.101'
IP2Password='/etc/rsyncdNode2.password'
cat > /etc/lsyncd.conf  << EOF
----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync, but executing moves through on the target.
--
-- For more examples, see /usr/share/doc/lsyncd*/examples/
-- 
-- 具体参数含义可自行百度
settings {
    logfile = "/var/log/lsyncd/lsyncd.log",
    statusFile = "/var/log/lsyncd/lsyncd.status",
    inotifyMode = "CloseWrite",
    maxProcesses = 8,
    -- 累计到多少所监控的事件激活一次同步,即使后面的delay延迟时间还未到。
    -- maxDelays = 5, 
    nodaemon = false,
}
-- 如果有多台服务器需要同步,依次往下配置多个sync即可
sync { 
    default.rsync,
    -- 监控的需要备份的目录
    source = "/home/nfs/", 
    -- 其他账号注意这个
    -- 需要同步的ip主机的账号密码
    target = "root@${IP1}::backup", 
    -- 删除信息也同步
    delete = true,
    -- 延迟15秒同步
    -- delay = 15,
    delay = 0,
    -- false代表启动服务前的内容不会同步,如想设置为true,删掉即可,不要配置为true
    init = false,
    rsync = {
        -- rsync服务路径
        binary = "/usr/bin/rsync", 
        -- 其他账号注意这个
        -- 认证文件
        password_file = "${IP1Password}", 
        archive = true,
        compress = false,
        verbose = false,
        _extra = {"--bwlimit=200", "--omit-link-times"}
    }
}
sync { 
    default.rsync,
    -- 监控的需要备份的目录
    source = "/home/nfs/", 
    -- 其他账号注意这个
    -- 需要同步的ip主机的账号密码
    target = "root@${IP2}::backup", 
    -- 删除信息也同步
    delete = true,
    -- 延迟15秒同步
    -- delay = 15,
    delay = 0,
    -- false代表启动服务前的内容不会同步,如想设置为true,删掉即可,不要配置为true
    init = false,
    rsync = {
        -- rsync服务路径
        binary = "/usr/bin/rsync", 
        -- 其他账号注意这个
        -- 认证文件
        password_file = "${IP2Password}", 
        archive = true,
        compress = false,
        verbose = false,
        _extra = {"--bwlimit=200", "--omit-link-times"}
    }
}
EOF
cat /etc/lsyncd.conf

node1

在这里插入图片描述

node2

在这里插入图片描述

node3

在这里插入图片描述

3.3. 创建备份目录

mkdir -p /home/nfs/ 

3.4. 创建账号密码

#三台都可以执行
#指定密码,密码注意和上面的密码一致,用户可在命令中设置 /etc/lsyncd.conf中的设置
echo "123456100" > /etc/rsyncdNode1.password
cat /etc/rsyncdNode1.password
echo "123456101" > /etc/rsyncdNode2.password
cat /etc/rsyncdNode2.password
echo "123456102" > /etc/rsyncdNode3.password
cat /etc/rsyncdNode3.password

3.5. 设置文件权限

chmod 600 /etc/rsync*
ll /etc/rsync*
## -rw-------. 1 root root 880 Aug 13 14:54 /etc/rsyncd.conf
## -rw-------. 1 root root  10 Aug 13 14:55 /etc/rsync.password

3.6. 重启服务

systemctl restart rsyncd  #启动服务
systemctl restart lsyncd  #启动服务
systemctl status lsyncd #查看服务状态
systemctl status rsyncd #查看服务状态
cat /var/log/rsyncd.log 

3.7. 测试

分别/home/nfs 目录在node1 新增或者删除文件 查看node2,node3是否同步

在node2 新增或者删除文件查看node1,node3是否同步

在node3 新增或者删除文件查看node1,node2是否同步

4. 部署nfs提供服务

4.1. nfs实现的原理

本地文件操作方式

1.当用户执行mkdir命令,BashShell无法完成该命令操作,会将其翻译给内核。
2.Kernel内核解析完成后会驱动对应的磁盘设备,完成创建目录的操作。

NFS实现原理(需要先了解[程序|进程|线程])

1.NFS客户端执行增、删等操作,客户端会使用不同的函数对该操作进行封装。
2.NFS客户端会通过TCP/IP的方式传递给NFS服务端。
3.NFS服务端接收到请求后,会先调用portmap进程进行端口映射。
4.nfsd进程用于判断NFS客户端是否拥有权限连接NFS服务端。
5.Rpc.mount进程判断客户端是否有对应的权限进行验证。
6.idmap进程实现用户映射和压缩。
7.最后NFS服务端会将客户端的函数转换为本地能执行的命令,然后将命令传递至内核,由内核驱动硬件。

注意: rpc是一个远程过程调用,那么使用nfs必须有rpc服务

4.2 安装、配置、nfs服务

yum install nfs-utils -y
#yum install --downloadonly --downloaddir=/root/nfs nfs-utils
#rpm -Uvh ./*
# 配置
#	1.要共享什么		/home/nfs
#	2.共享给谁	    172.16.1.0/24 网段
#	3.共享的权限		
#   id root 查询root的id
cat > /etc/exports  << EOF
/home/nfs 192.168.56.100(rw,sync,all_squash,anonuid=0,anongid=0)
/home/nfs 192.168.56.101(rw,sync,all_squash,anonuid=0,anongid=0)
/home/nfs 192.168.56.102(rw,sync,all_squash,anonuid=0,anongid=0)
/home/nfs 192.168.56.103(rw,sync,all_squash,anonuid=0,anongid=0)
EOF

cat /etc/exports
# 启动
systemctl start nfs
systemctl enable nfs

4.3 客户端测试

# 客户端测试    
yum install nfs-utils -y
showmount -e 192.168.56.100
# Export list for 192.168.56.100:
# /home/nfs 192.168.56.103,192.168.56.102,192.168.56.101,192.168.56.100

mount -t nfs 192.168.56.100:/home/nfs /mnt

4.4 nfs 参数

rw*					读写权限
ro					只读权限
root_squash			当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户(不常用)
no_root_squash		当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员(不常用)
no_all_squash		无论NFS客户端使用什么账户访问,都不进行压缩 (云计算)
	
sync*				同时将数据写入到内存与硬盘中,保证不丢失数据
async				优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据
	
all_squash			无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户(常用)
anonuid*			配置all_squash使用,指定NFS的用户UID,必须存在系统 id root
anongid*			配置all_squash使用,指定NFS的用户UID,必须存在系统 id root


4.5.实现开机自动挂载

cat /etc/fstab 
192.168.56.100:/home/nfs			/mnt			nfs	defaults 0 0 
	
mount -a 
df -h
#文件系统           容量  已用  可用 已用% 挂载点
#192.168.56.100:/home/nfs  100G  1.8G   99G    2% /mnt

NFS存储优点

  1. NFS简单易用、方便部署、数据可靠、服务稳定、满足中小企业需求。
  2. NFS的数据都在文件系统之上,所有数据都是能看得见。

NFS存储局限

  1. 存在单点故障, 如果构建高可用维护麻烦web->nfs()->backupglusterfs
  2. NFS数据都是明文, 并不对数据做任何校验,也没有密码验证(强烈建议内网使用)。

NFS应用建议

  1. 生产场景应将静态数据(jpg\png\mp4\avi\css\js)尽可能放置CDN场景进行环境, 以此来减少后端存储压力
  2. 如果没有缓存或架构、代码等,本身历史遗留问题太大,在多存储也没意义存储不能带来性能上的提升

5. 部署keepalive做虚拟ip

5.1. 安装依赖

yum install -y openssl openssl-devel

离线 下载安装包

yum install --downloadonly --downloaddir=/root/opensslPackage openssl openssl-devel

安装

rpm -Uvh /root/opensslPackage/*

安装keepalive

mkdir -p /home/pxc/keepalived 
curl -o /home/pxc/keepalived/keepalived-2.2.4.tar.gz https://keepalived.org/software/keepalived-2.2.4.tar.gz
tar -zxf /home/pxc/keepalived/keepalived-2.2.4.tar.gz -C /home/pxc/keepalived/ 
cd /home/pxc/keepalived/keepalived-2.2.4 
./configure --sysconf=/etc --prefix=/usr/local make && make install

5.2. 增加检查脚本

mkdir -p /home/nfs/package/installKeepalived
cat > /home/nfs/package/installKeepalived/check-nfs.sh << EOF
#!/bin/bash
count=`netstat -apn | grep 873 | wc -l`
if [ $count -gt 0 ]; then
    /usr/bin/systemctl status nfs &>/dev/null
    if[ $? -ne 0]
    then
        /usr/bin/systemctl restart nfs
        /usr/bin/systemctl status nfs &>/dev/null
        if[ $? -ne 0]
        then
           exit 1
        fi
        exit 0
    fi
    exit 0
else
    exit 1
fi
EOF

5.3 修改 keepalive配置

cp  /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.confbak 

cat > /etc/keepalived/keepalived.conf << EOF
global_defs {
   router_id LVS_2
   script_user root                    # 脚本执行用户
   enable_script_security              # 开启脚本安全权限
}

vrrp_script checkNfs
{
    script "/home/nfs/installKeepalived/check-nfs.sh"  # 这个地址写的事容器内脚本路径
    interval 2
    weight -30
}

vrrp_instance VI_1 {
    state BACKUP
    interface enp0s3
    virtual_router_id 51
    priority 100
    advert_int 1
    nopreempt
    
    virtual_ipaddress {
      # 需要修改成对应的虚拟ip
        192.168.56.120
    }

    authentication {
        auth_type PASS
        auth_pass password
    }

    track_script {
        checkNfs
    }
}
EOF

5.4 启动

service keepalived start

5.5 设置开机自启

chkconfig keepalived on
systemctl list-unit-files | grep keepalived
systemctl status keepalived

查看日志

tail -f /var/log/messages

可以通过连接192.168.56.120 进行挂载了

6.测试(node3)

# 客户端测试    
yum install nfs-utils -y
showmount -e 192.168.56.120
#Export list for 192.168.56.120:
#/home/nfs 192.168.56.103,192.168.56.102,192.168.56.101,192.168.56.100



mount -t nfs 192.168.56.120:/home/nfs /mnt
cd /mnt
  1. node4上/mnt新增文件2.txt 在node1 node2 node3的/home/nfs上都有文件(代表成功)

  2. node1或者node2或者node3新增文件,node4查看是否存在

  3. node1挂掉,在node4新增文件,查看node2,node1是否新增

  4. node1重启,看node1是否恢复步骤3的数据

  5. node2挂掉,在node4新增文件,查看node1,node3是否新增

  6. node1新增文件,查看node4,node3是否新增文件

  7. node2重启,看node2是否恢复步骤5的数据

精简

链接:https://pan.baidu.com/s/1zXQ2k1xNXx1RwEMGik_o8g?pwd=zbr4

虚拟ip主机IP同步目录同步账号功能
192.168.56.120node1192.168.56.100/home/nfsroot/123456100nfs1
node2192.168.56.101/home/nfsroot/123456101nfs2
node3192.168.56.102/home/nfsroot/123456102nfs3
node4192.168.56.103/mnt客户端测试

可以用passwd进行密码修改(方便区分下面的配置文件)

设置主机名 hostnamectl set-hostname node3 && bash

1.在node1,node2,node3 开放防火墙:

sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/sysconfig/selinux
#刷新配置,立即生效
setenforce 0
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.100" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.101" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.102" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.103" accept"
firewall-cmd --reload
firewall-cmd --list-all

2.node1执行下面的操作

创建目录

mkdir -p /home/nfs && cd /home/nfs

将nfs3Package.zip拷贝到/home/nfs 进行解压

注意备份的目录 /home/nfs

cd /home/nfs/installRsyncLsyncd && bash installRsyncLsyncd.sh

# 修改/etc/rsyncd.conf
cp /etc/rsyncd.conf /etc/rsyncd.confbak
#需要互相监听的ip
IP='192.168.56.100 192.168.56.101 192.168.56.102'
IPPassword='/etc/rsyncNode1.password'
cat > /etc/rsyncd.conf << EOF
#日志路径
log file = /var/log/rsyncd.log 
pidfile = /run/rsyncd.pid
lock file = /run/rsync.lock
#模块名称,有多个源服务端时就在下面复制整个模块
[backup]
#存储接收数据的路径
path = /home/nfs/ 
comment = sync etc from client
# 其他账号注意这个
uid = root
# 其他账号注意这个
gid = root
port = 873
ignore errors
use chroot = no
read only = no
list = no  
max connections = 200
timeout = 600
#认证用户,同认证文件里的
# 其他账号注意这个
auth users = root
# 其他账号注意这个
#认证文件,连接的账号密码(当前主机的账号密码)
secrets file = ${IPPassword}
#允许链接的ip
hosts allow = ${IP}
#hosts deny = x.x.x.x #不允许的ip
EOF
cat /etc/rsyncd.conf 


#认证文件,连接的账号密码 中的配置/etc/rsyncNode1.conf
echo 'root:123456100' > /etc/rsyncNode1.password
#查看配置是否成功
cat /etc/rsyncNode1.password


#指定密码,密码注意和上面的密码一致,用户可在命令中设置 /etc/lsyncd.conf中的设置
echo "123456100" > /etc/rsyncdNode1.password
cat /etc/rsyncdNode1.password
echo "123456101" > /etc/rsyncdNode2.password
cat /etc/rsyncdNode2.password
echo "123456102" > /etc/rsyncdNode3.password
cat /etc/rsyncdNode3.password

# 设置文件权限
chmod 600 /etc/rsync*
ll /etc/rsync*
## -rw-------. 1 root root 880 Aug 13 14:54 /etc/rsyncd.conf
## -rw-------. 1 root root  10 Aug 13 14:55 /etc/rsync.password


# 修改/etc/lsyncd.conf
cp /etc/lsyncd.conf  /etc/lsyncd.confbak

# 100使用101的目标ip
IP1='192.168.56.101'
IP1Password='/etc/rsyncdNode2.password'
# 100使用102的目标ip
IP2='192.168.56.102'
IP2Password='/etc/rsyncdNode3.password'
cat > /etc/lsyncd.conf  << EOF
----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync, but executing moves through on the target.
--
-- For more examples, see /usr/share/doc/lsyncd*/examples/
-- 
-- 具体参数含义可自行百度
settings {
    logfile = "/var/log/lsyncd/lsyncd.log",
    statusFile = "/var/log/lsyncd/lsyncd.status",
    inotifyMode = "CloseWrite",
    maxProcesses = 8,
    -- 累计到多少所监控的事件激活一次同步,即使后面的delay延迟时间还未到。
    -- maxDelays = 5, 
    nodaemon = false,
}
-- 如果有多台服务器需要同步,依次往下配置多个sync即可
sync { 
    default.rsync,
    -- 监控的需要备份的目录
    source = "/home/nfs/", 
    -- 其他账号注意这个
    -- 需要同步的ip主机的账号密码
    target = "root@${IP1}::backup", 
    -- 删除信息也同步
    delete = true,
    -- 延迟15秒同步
    -- delay = 15,
    delay = 0,
    -- false代表启动服务前的内容不会同步,如想设置为true,删掉即可,不要配置为true
    init = false,
    rsync = {
        -- rsync服务路径
        binary = "/usr/bin/rsync", 
        -- 其他账号注意这个
        -- 认证文件
        password_file = "${IP1Password}", 
        archive = true,
        compress = false,
        verbose = false,
        _extra = {"--bwlimit=200", "--omit-link-times"}
    }
}
sync { 
    default.rsync,
    -- 监控的需要备份的目录
    source = "/home/nfs/", 
    -- 其他账号注意这个
    -- 需要同步的ip主机的账号密码
    target = "root@${IP2}::backup", 
    -- 删除信息也同步
    delete = true,
    -- 延迟15秒同步
    -- delay = 15,
    delay = 0,
    -- false代表启动服务前的内容不会同步,如想设置为true,删掉即可,不要配置为true
    init = false,
    rsync = {
        -- rsync服务路径
        binary = "/usr/bin/rsync", 
        -- 其他账号注意这个
        -- 认证文件
        password_file = "${IP2Password}", 
        archive = true,
        compress = false,
        verbose = false,
        _extra = {"--bwlimit=200", "--omit-link-times"}
    }
}
EOF
cat /etc/lsyncd.conf

3.node2执行下面的操作

创建目录

mkdir -p /home/nfs && cd /home/nfs

将nfs3Package.zip拷贝到/home/nfs 进行解压

注意备份的目录 /home/nfs

cd /home/nfs/installRsyncLsyncd && bash installRsyncLsyncd.sh

# 修改/etc/rsyncd.conf
cp /etc/rsyncd.conf /etc/rsyncd.confbak
#需要互相监听的ip
IP='192.168.56.100 192.168.56.101 192.168.56.102'
IPPassword='/etc/rsyncNode2.password'
cat > /etc/rsyncd.conf << EOF
#日志路径
log file = /var/log/rsyncd.log 
pidfile = /run/rsyncd.pid
lock file = /run/rsync.lock
#模块名称,有多个源服务端时就在下面复制整个模块
[backup]
#存储接收数据的路径
path = /home/nfs/ 
comment = sync etc from client
# 其他账号注意这个
uid = root
# 其他账号注意这个
gid = root
port = 873
ignore errors
use chroot = no
read only = no
list = no  
max connections = 200
timeout = 600
#认证用户,同认证文件里的
# 其他账号注意这个
auth users = root
# 其他账号注意这个
#认证文件,连接的账号密码(当前主机的账号密码)
secrets file = ${IPPassword}
#允许链接的ip
hosts allow = ${IP}
#hosts deny = x.x.x.x #不允许的ip
EOF
cat /etc/rsyncd.conf


#认证文件,连接的账号密码 中的配置/etc/rsyncNode1.conf
echo 'root:123456101' > /etc/rsyncNode2.password
#查看配置是否成功
cat /etc/rsyncNode2.password


#指定密码,密码注意和上面的密码一致,用户可在命令中设置 /etc/lsyncd.conf中的设置
echo "123456100" > /etc/rsyncdNode1.password
cat /etc/rsyncdNode1.password
echo "123456101" > /etc/rsyncdNode2.password
cat /etc/rsyncdNode2.password
echo "123456102" > /etc/rsyncdNode3.password
cat /etc/rsyncdNode3.password

# 设置文件权限
chmod 600 /etc/rsync*
ll /etc/rsync*
## -rw-------. 1 root root 880 Aug 13 14:54 /etc/rsyncd.conf
## -rw-------. 1 root root  10 Aug 13 14:55 /etc/rsync.password


# 修改/etc/lsyncd.conf
cp /etc/lsyncd.conf  /etc/lsyncd.confbak

# 100使用101的目标ip
IP1='192.168.56.100'
IP1Password='/etc/rsyncdNode1.password'
# 100使用102的目标ip
IP2='192.168.56.102'
IP2Password='/etc/rsyncdNode3.password'
cat > /etc/lsyncd.conf  << EOF
----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync, but executing moves through on the target.
--
-- For more examples, see /usr/share/doc/lsyncd*/examples/
-- 
-- 具体参数含义可自行百度
settings {
    logfile = "/var/log/lsyncd/lsyncd.log",
    statusFile = "/var/log/lsyncd/lsyncd.status",
    inotifyMode = "CloseWrite",
    maxProcesses = 8,
    -- 累计到多少所监控的事件激活一次同步,即使后面的delay延迟时间还未到。
    -- maxDelays = 5, 
    nodaemon = false,
}
-- 如果有多台服务器需要同步,依次往下配置多个sync即可
sync { 
    default.rsync,
    -- 监控的需要备份的目录
    source = "/home/nfs/", 
    -- 其他账号注意这个
    -- 需要同步的ip主机的账号密码
    target = "root@${IP1}::backup", 
    -- 删除信息也同步
    delete = true,
    -- 延迟15秒同步
    -- delay = 15,
    delay = 0,
    -- false代表启动服务前的内容不会同步,如想设置为true,删掉即可,不要配置为true
    init = false,
    rsync = {
        -- rsync服务路径
        binary = "/usr/bin/rsync", 
        -- 其他账号注意这个
        -- 认证文件
        password_file = "${IP1Password}", 
        archive = true,
        compress = false,
        verbose = false,
        _extra = {"--bwlimit=200", "--omit-link-times"}
    }
}
sync { 
    default.rsync,
    -- 监控的需要备份的目录
    source = "/home/nfs/", 
    -- 其他账号注意这个
    -- 需要同步的ip主机的账号密码
    target = "root@${IP2}::backup", 
    -- 删除信息也同步
    delete = true,
    -- 延迟15秒同步
    -- delay = 15,
    delay = 0,
    -- false代表启动服务前的内容不会同步,如想设置为true,删掉即可,不要配置为true
    init = false,
    rsync = {
        -- rsync服务路径
        binary = "/usr/bin/rsync", 
        -- 其他账号注意这个
        -- 认证文件
        password_file = "${IP2Password}", 
        archive = true,
        compress = false,
        verbose = false,
        _extra = {"--bwlimit=200", "--omit-link-times"}
    }
}
EOF
cat /etc/lsyncd.conf

4.node3执行下面的操作

创建目录

mkdir -p /home/nfs && cd /home/nfs

将nfs3Package.zip拷贝到/home/nfs 进行解压

注意备份的目录 /home/nfs

cd /home/nfs/installRsyncLsyncd && bash installRsyncLsyncd.sh

# 修改/etc/rsyncd.conf
cp /etc/rsyncd.conf /etc/rsyncd.confbak
#需要互相监听的ip
IP='192.168.56.100 192.168.56.101 192.168.56.102'
IPPassword='/etc/rsyncNode3.password'
cat > /etc/rsyncd.conf << EOF
#日志路径
log file = /var/log/rsyncd.log 
pidfile = /run/rsyncd.pid
lock file = /run/rsync.lock
#模块名称,有多个源服务端时就在下面复制整个模块
[backup]
#存储接收数据的路径
path = /home/nfs/ 
comment = sync etc from client
# 其他账号注意这个
uid = root
# 其他账号注意这个
gid = root
port = 873
ignore errors
use chroot = no
read only = no
list = no  
max connections = 200
timeout = 600
#认证用户,同认证文件里的
# 其他账号注意这个
auth users = root
# 其他账号注意这个
#认证文件,连接的账号密码(当前主机的账号密码)
secrets file = ${IPPassword}
#允许链接的ip
hosts allow = ${IP}
#hosts deny = x.x.x.x #不允许的ip
EOF
cat /etc/rsyncd.conf


#认证文件,连接的账号密码 中的配置/etc/rsyncNode1.conf
echo 'root:123456102' > /etc/rsyncNode3.password
#查看配置是否成功
cat /etc/rsyncNode3.password


#指定密码,密码注意和上面的密码一致,用户可在命令中设置 /etc/lsyncd.conf中的设置
echo "123456100" > /etc/rsyncdNode1.password
cat /etc/rsyncdNode1.password
echo "123456101" > /etc/rsyncdNode2.password
cat /etc/rsyncdNode2.password
echo "123456102" > /etc/rsyncdNode3.password
cat /etc/rsyncdNode3.password

# 设置文件权限
chmod 600 /etc/rsync*
ll /etc/rsync*
## -rw-------. 1 root root 880 Aug 13 14:54 /etc/rsyncd.conf
## -rw-------. 1 root root  10 Aug 13 14:55 /etc/rsync.password


# 修改/etc/lsyncd.conf
cp /etc/lsyncd.conf  /etc/lsyncd.confbak

# 100使用101的目标ip
IP1='192.168.56.100'
IP1Password='/etc/rsyncdNode1.password'
# 100使用102的目标ip
IP2='192.168.56.101'
IP2Password='/etc/rsyncdNode2.password'
cat > /etc/lsyncd.conf  << EOF
----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync, but executing moves through on the target.
--
-- For more examples, see /usr/share/doc/lsyncd*/examples/
-- 
-- 具体参数含义可自行百度
settings {
    logfile = "/var/log/lsyncd/lsyncd.log",
    statusFile = "/var/log/lsyncd/lsyncd.status",
    inotifyMode = "CloseWrite",
    maxProcesses = 8,
    -- 累计到多少所监控的事件激活一次同步,即使后面的delay延迟时间还未到。
    -- maxDelays = 5, 
    nodaemon = false,
}
-- 如果有多台服务器需要同步,依次往下配置多个sync即可
sync { 
    default.rsync,
    -- 监控的需要备份的目录
    source = "/home/nfs/", 
    -- 其他账号注意这个
    -- 需要同步的ip主机的账号密码
    target = "root@${IP1}::backup", 
    -- 删除信息也同步
    delete = true,
    -- 延迟15秒同步
    -- delay = 15,
    delay = 0,
    -- false代表启动服务前的内容不会同步,如想设置为true,删掉即可,不要配置为true
    init = false,
    rsync = {
        -- rsync服务路径
        binary = "/usr/bin/rsync", 
        -- 其他账号注意这个
        -- 认证文件
        password_file = "${IP1Password}", 
        archive = true,
        compress = false,
        verbose = false,
        _extra = {"--bwlimit=200", "--omit-link-times"}
    }
}
sync { 
    default.rsync,
    -- 监控的需要备份的目录
    source = "/home/nfs/", 
    -- 其他账号注意这个
    -- 需要同步的ip主机的账号密码
    target = "root@${IP2}::backup", 
    -- 删除信息也同步
    delete = true,
    -- 延迟15秒同步
    -- delay = 15,
    delay = 0,
    -- false代表启动服务前的内容不会同步,如想设置为true,删掉即可,不要配置为true
    init = false,
    rsync = {
        -- rsync服务路径
        binary = "/usr/bin/rsync", 
        -- 其他账号注意这个
        -- 认证文件
        password_file = "${IP2Password}", 
        archive = true,
        compress = false,
        verbose = false,
        _extra = {"--bwlimit=200", "--omit-link-times"}
    }
}
EOF
cat /etc/lsyncd.conf

5.node1 ,node2,node3 执行

systemctl restart rsyncd  #启动服务
systemctl status rsyncd #查看服务状态
systemctl restart lsyncd  #启动服务
systemctl status lsyncd #查看服务状态

6.node1 ,node2,node3安装nfs

cd /home/nfs/installNfs && bash installNfs.sh
cat > /etc/exports  << EOF
/home/nfs 192.168.56.100(rw,sync,all_squash,anonuid=0,anongid=0)
/home/nfs 192.168.56.101(rw,sync,all_squash,anonuid=0,anongid=0)
/home/nfs 192.168.56.102(rw,sync,all_squash,anonuid=0,anongid=0)
/home/nfs 192.168.56.103(rw,sync,all_squash,anonuid=0,anongid=0)
EOF

cat /etc/exports
# 启动
systemctl start nfs
systemctl enable nfs

7.node1 ,node2,node3安装Keepalived

cd /home/nfs/installKeepalived && bash installKeepalived.sh

cp  /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.confbak 

cat > /etc/keepalived/keepalived.conf << EOF
global_defs {
   router_id LVS_2
   script_user root                    # 脚本执行用户
   enable_script_security              # 开启脚本安全权限
}

vrrp_script checkNfs
{
    script "/home/nfs/installKeepalived/check-nfs.sh"  # 这个地址写的事容器内脚本路径
    interval 2
    weight -30
}

vrrp_instance VI_1 {
    state BACKUP
    interface enp0s3
    virtual_router_id 51
    priority 100
    advert_int 1
    nopreempt
    
    virtual_ipaddress {
      # 需要修改成对应的虚拟ip
        192.168.56.120
    }

    authentication {
        auth_type PASS
        auth_pass password
    }

    track_script {
        checkNfs
    }
}
EOF
service keepalived start
systemctl status keepalived
chkconfig keepalived on
systemctl list-unit-files | grep keepalived
ifconfig | grep -C 10 "enp0s3"

8.测试(node4)

# 客户端测试    
yum install nfs-utils -y
showmount -e 192.168.56.120
#Export list for 192.168.56.120:
#/home/nfs 192.168.56.103,192.168.56.102,192.168.56.101,192.168.56.100



mount -t nfs 192.168.56.120:/home/nfs /mnt
cd /mnt
  1. node4上/mnt新增文件2.txt 在node1 node2 node3的/home/nfs上都有文件(代表成功)

  2. node1或者node2或者node3新增文件,node4查看是否存在

  3. node1挂掉,在node4新增文件,查看node2,node1是否新增

  4. node1重启,看node1是否恢复步骤3的数据

  5. node2挂掉,在node4新增文件,查看node1,node3是否新增

  6. node1新增文件,查看node4,node3是否新增文件

  7. node2重启,看node2是否恢复步骤5的数据

FQA:

1.在容器中使用软链接可以达到文件同步的状态

ln -s [源文件或目录] [目标文件或目录]
rm -ef [软链接名字]

ln -s /home/node1 /home/nfs
ln -s /home/node2 /home/nfs
ln -s /home/node3 /home/nfs
结论:
在容器中使用软链接可以达到文件同步的状态
使用mount挂载的时候会变成真实地址(不建议使用不同的存放路径作为 软连接进行nfs提供服务)

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1294843.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java】深入剖析Java枚举类

目录 定义1&#xff09;定义2&#xff09;内部实现3&#xff09;方法与源码 高级特性1&#xff09;switch用法2&#xff09;自定义传值与构造函数3&#xff09;枚举实现抽象方法4&#xff09;枚举注解属性5&#xff09;枚举实现接口 总结 定义 1&#xff09;定义 枚举类是Jav…

sfp8472学习CDR

1,cdr名称解释 因为光信号传输至一定距离的时候,通常是长距离传输,其波形会出现一定程度的失真,接收端接收到的信号是一个个长短不一的脉冲信号,这个时候在接收端,我们就无法得到我们需要的数据。所以,这个时候就需要有信号的再生,信号的再生功能为再放大、再整形和再…

全景万店通打造掌上智慧生活助手,助力店铺全景引流

随着网络经济的崛起&#xff0c;新一代的消费群体的消费习惯逐渐变得富有个性化&#xff0c;因此他们对于传统的营销方式具有视觉疲劳&#xff0c;传统广告的效果也越发微小&#xff0c;但是请明显来代言&#xff0c;成本又十分高昂&#xff0c;那么还有什么引流好方法呢&#…

c语言词法分析器

词法分析器&#xff08;也称为词法解析器或词法扫描器&#xff09;是编译器的一个组成部分&#xff0c;它的任务是将输入的源代码&#xff08;字符流&#xff09;分解成称为“标记”的序列&#xff0c;其中每个标记对应于源代码中的一个单词或符号。 以下是一个简单的C语言词法…

学习Java第64天,乱码问题

乱码问题产生的根本原因是什么 数据的编码和解码使用的不是同一个字符集 使用了不支持某个语言文字的字符集 由上图得知,上述字符集都兼容了ASCII ASCII中有什么? 英文字母和一些通常使用的符号,所以这些东西无论使用什么字符集都不会乱码 10.1.1 HTML乱码问题 设置项目…

六款好用的设备管理系统推荐

阅读本文你将了解&#xff1a;一、六款好用的设备管理系统&#xff1b;二、企业为什么要做设备管理&#xff1b;三、企业怎样选择适合自己的设备管理系统。 制造企业生产过程中对机器设备的依赖程度非常高&#xff0c;因而一系列设备巡检、维修、保养的管理需求也应运而生。设…

Spark---DataFrame存储、Spark UDF函数、UDAF函数

四、DataFrame存储Spark UDF函数 1、储存DataFrame 1&#xff09;、将DataFrame存储为parquet文件 2&#xff09;、将DataFrame存储到JDBC数据库 3&#xff09;、将DataFrame存储到Hive表 2、UDF&#xff1a;用户自定义函数 可以自定义类实现UDFX接口 java&#xff1a; …

fastadmin打印页面

如下图选中订单号进行打印 html中增加代码 <div id"toolbar" class"toolbar"><a href"javascript:;" class"btn btn-primary btn-refresh" title"{:__(Refresh)}" ><i class"fa fa-refresh">&l…

喜讯频传|海川润泽获物联网场景应用品牌企业、国家高新技术企业认定

物联网场景应用品牌企业 12月5日至6日&#xff0c;以“物联中国 数智雄安”为主题的“千企雄安行&#xff1a;2023物联网产业品牌大会”在雄安新区成功举办。大会发起了“物联网场景应用品牌企业”的评选活动&#xff0c;面向农业、城市、工业、医疗、园区、建筑、文旅、能源、…

100V耐压 3A峰值电流 60V 72V输入 输出12V 1.5A内置MOS 大电流降压芯片

100V耐压 3A峰值电流 60V 72V输入 输出12V 1.5A 内置MOS 大电流降压芯片

gitee对接使用

1.创建一个文件夹 2.进入Gitee接受对方项目编辑 3.打开终端初始化一开始创建的文件夹 git init 3.1打开终端 3.2输入git.init 4.克隆对方的项目 4.1进入Gitee复制对方项目的路径 4.2在编辑器终端内克隆对方项目 git clone 网址 如此你的编辑器就会出现对方的项目 …

公司敏感数据被上传Github,吓得我赶紧改提交记录

大家好&#xff0c;我是小富&#xff5e; 说个事吧&#xff01;最近公司发生了一个事故&#xff0c;有同事不小心把敏感数据上传到了GitHub上&#xff0c;结果被安全部门扫描出来了。这件事导致公司对所有员工进行了一次数据安全的培训。对于这个事我相信&#xff0c;有点工作…

106.进程控制(结束、孤儿、僵尸进程)以及进程回收

目录 结束进程 孤儿进程 僵尸进程 进程回收 wait() waitpid 进程控制是指在操作系统中对进程进行创建、终止、挂起、唤醒以及进程之间的同步、通信等操作的管理。 结束进程 exit() 和 _exit() 函数都用于终止一个进程&#xff0c;但它们之间有一些重要的区别&#xf…

OpenAI的Sam Altman,获《时代》2023年度最佳CEO

12月7日&#xff0c;《时代》周刊在官网公布了2023年最佳CEO——OpenAI的Sam Altman。 此外&#xff0c;梅西入选了年度最佳运动员&#xff0c;Taylor Swift入选年度最佳人物&#xff0c;Alex Newell获年度突破奖。 《时代》周刊曾在今年的9月8日发布了“2023年AI领域最有影响…

Stable Diffusion XL on diffusers

Stable Diffusion XL on diffusers 翻译自&#xff1a;https://huggingface.co/docs/diffusers/using-diffusers/sdxl v0.24.0 非逐字翻译 Stable Diffusion XL (SDXL) 是一个强大的图像生成模型&#xff0c;其在上一代 Stable Diffusion 的基础上主要做了如下优化&#xff1a;…

超详细介绍Ubuntu系统安装CUDA和cuDNN【一站式服务!!!】

文章目录 简介1.安装显卡驱动查看显卡型号下载并安装NVIDIA驱动使用Ubuntu自带的软件和更新&#xff08;Software&Updates&#xff09;工具安装【博主使用的这种方式&#xff0c;推荐】自行下载使用命令行安装【自由度更高&#xff0c;大佬自行尝试】 2.下载并安装CUDA3.下…

docker容器_自定义上传jenkins镜像(Dockerfile实现)

1.创建jenkins目录&#xff0c;并上传相应的包 mkdir /jenkins/ 2.创建一个Dockerfile文件 FROM daocloud.io/library/centos:7#把当前目录下的jenkins.war包传到内部容器的/ 下 ADD ./jenkins.war /#把当前目录下的jdk传到内部容器的/opt/,并解压 ADD ./jdk-11.0.19_linu…

【软件推荐】文本转语音,语音转wav,导入ue5

文字转语音 在线免费文字转语音 - TTSMaker官网 | 马克配音https://ttsmaker.cn/ 文件转换器 语音转wav Convertio — 文件转换器https://convertio.co/zh/

前端学习微信小程序开发

1.微信小程序项目结构 2.WXML和HTML的区别 3.WXSS与CSS的区别 4.小程序中的.js文件 5.小程序的宿主环境 宿主环境是指程序运行所必须的依赖环境&#xff0c;因此手机微信时小程序的宿主环境。小程序宿主环境包含了通信模型、运行机制、组件、API。 &#xff08;1&#xff09;…

基于jsp+servlet的图书管理系统

基于jspservlet的图书管理系统演示地址为 图书馆后台管理系统 用户名:mr ,密码:123 图书馆管理系统主要的目的是实现图书馆的信息化管理。图书馆的主要业务就是新书的借阅和归还&#xff0c; 因此系统最核心的功能便是实现图书的借阅和归还。此外&#xff0c;还需要提供图书…