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

2023-12-08 17:45

本文主要是介绍nfs高可用部署(lsyncd三主机三向同步),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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.confbakIP='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,删掉即可,不要配置为trueinit = 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,删掉即可,不要配置为trueinit = 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)
EOFcat /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.100mount -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/nullif[ $? -ne 0]then/usr/bin/systemctl restart nfs/usr/bin/systemctl status nfs &>/dev/nullif[ $? -ne 0]thenexit 1fiexit 0fiexit 0
elseexit 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_2script_user root                    # 脚本执行用户enable_script_security              # 开启脚本安全权限
}vrrp_script checkNfs
{script "/home/nfs/installKeepalived/check-nfs.sh"  # 这个地址写的事容器内脚本路径interval 2weight -30
}vrrp_instance VI_1 {state BACKUPinterface enp0s3virtual_router_id 51priority 100advert_int 1nopreemptvirtual_ipaddress {# 需要修改成对应的虚拟ip192.168.56.120}authentication {auth_type PASSauth_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.100mount -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,删掉即可,不要配置为trueinit = 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,删掉即可,不要配置为trueinit = 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,删掉即可,不要配置为trueinit = 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,删掉即可,不要配置为trueinit = 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,删掉即可,不要配置为trueinit = 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,删掉即可,不要配置为trueinit = 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)
EOFcat /etc/exports
# 启动
systemctl start nfs
systemctl enable nfs

7.node1 ,node2,node3安装Keepalived

cd /home/nfs/installKeepalived && bash installKeepalived.shcp  /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.confbak cat > /etc/keepalived/keepalived.conf << EOF
global_defs {router_id LVS_2script_user root                    # 脚本执行用户enable_script_security              # 开启脚本安全权限
}vrrp_script checkNfs
{script "/home/nfs/installKeepalived/check-nfs.sh"  # 这个地址写的事容器内脚本路径interval 2weight -30
}vrrp_instance VI_1 {state BACKUPinterface enp0s3virtual_router_id 51priority 100advert_int 1nopreemptvirtual_ipaddress {# 需要修改成对应的虚拟ip192.168.56.120}authentication {auth_type PASSauth_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.100mount -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提供服务)

在这里插入图片描述

在这里插入图片描述

这篇关于nfs高可用部署(lsyncd三主机三向同步)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/470778

相关文章

Linux部署jar包过程

《Linux部署jar包过程》文章介绍了在Linux系统上部署Java(jar)包时需要注意的几个关键点,包括统一JDK版本、添加打包插件、修改数据库密码以及正确执行jar包的方法... 目录linux部署jar包1.统一jdk版本2.打包插件依赖3.修改密码4.执行jar包总结Linux部署jar包部署

deepseek本地部署使用步骤详解

《deepseek本地部署使用步骤详解》DeepSeek是一个开源的深度学习模型,支持自然语言处理和推荐系统,本地部署步骤包括克隆仓库、创建虚拟环境、安装依赖、配置模型和数据、启动服务、调试与优化以及... 目录环境要求部署步骤1. 克隆 DeepSeek 仓库2. 创建虚拟环境3. 安装依赖4. 配置模型

DeepSeek模型本地部署的详细教程

《DeepSeek模型本地部署的详细教程》DeepSeek作为一款开源且性能强大的大语言模型,提供了灵活的本地部署方案,让用户能够在本地环境中高效运行模型,同时保护数据隐私,在本地成功部署DeepSe... 目录一、环境准备(一)硬件需求(二)软件依赖二、安装Ollama三、下载并部署DeepSeek模型选

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

NFS实现多服务器文件的共享的方法步骤

《NFS实现多服务器文件的共享的方法步骤》NFS允许网络中的计算机之间共享资源,客户端可以透明地读写远端NFS服务器上的文件,本文就来介绍一下NFS实现多服务器文件的共享的方法步骤,感兴趣的可以了解一... 目录一、简介二、部署1、准备1、服务端和客户端:安装nfs-utils2、服务端:创建共享目录3、服

k8s部署MongDB全过程

《k8s部署MongDB全过程》文章介绍了如何在Kubernetes集群中部署MongoDB,包括环境准备、创建Secret、创建服务和Deployment,并通过Robo3T工具测试连接... 目录一、环境准备1.1 环境说明1.2 创建 namespace1.3 创建mongdb账号/密码二、创建Sec

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

Python项目打包部署到服务器的实现

《Python项目打包部署到服务器的实现》本文主要介绍了PyCharm和Ubuntu服务器部署Python项目,包括打包、上传、安装和设置自启动服务的步骤,具有一定的参考价值,感兴趣的可以了解一下... 目录一、准备工作二、项目打包三、部署到服务器四、设置服务自启动一、准备工作开发环境:本文以PyChar

centos7基于keepalived+nginx部署k8s1.26.0高可用集群

《centos7基于keepalived+nginx部署k8s1.26.0高可用集群》Kubernetes是一个开源的容器编排平台,用于自动化地部署、扩展和管理容器化应用程序,在生产环境中,为了确保集... 目录一、初始化(所有节点都执行)二、安装containerd(所有节点都执行)三、安装docker-