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

nfs高可用部署

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.100nfs1
node2192.168.56.101nfs2
node3192.168.56.102客户端

2.1 node1和node2 部署rsync和lsyncd 做双向同步

2.2 node1和node2 部署nfs提供服务

2.3 node1和node2 部署keepalive做虚拟ip

2.4 环境变量准备

主机同步目录同步账号
node1(192.168.56.100)/home/nfsroot/123456
node2(192.168.56.101)/home/nfsroot/123456
node3(192.168.56.102)/mnt

在这里插入图片描述

3. 部署lsyncd rsync 做双向同步

3.1. 安装

在node1 开放防火墙:

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.101" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.102" accept"
firewall-cmd --reload
firewall-cmd --list-all

在node2 开放防火墙:

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.102" accept"firewall-cmd --reload
firewall-cmd --list-all

在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.101" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.100" accept"firewall-cmd --reload
firewall-cmd --list-all

创建目录

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
复制代码

修改 rsyncd.conf

#需要互相监听的ip
cp /etc/rsyncd.conf /etc/rsyncd.confbakIP='192.168.56.100 192.168.56.101'
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 = /etc/rsync.password 
#允许链接的ip
hosts allow = ${IP}
#hosts deny = x.x.x.x #不允许的ip
EOF
cat /etc/rsyncd.conf

修改 lsyncd.conf

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

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

cp /etc/lsyncd.conf  /etc/lsyncd.conf bak# 100使用101的目标ip
IP='192.168.56.101'
# 101使用100的目标ip
IP='192.168.56.100'
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/", target = "root@${IP}::backup", -- 删除信息也同步delete = true,-- 延迟15秒同步-- delay = 15,delay = 0,-- false代表启动服务前的内容不会同步,如想设置为true,删掉即可,不要配置为trueinit = false,rsync = {-- rsync服务路径binary = "/usr/bin/rsync", -- 认证文件password_file = "/etc/rsyncd.password", archive = true,compress = false,verbose = false,_extra = {"--bwlimit=200", "--omit-link-times"}}
}
EOF
cat /etc/lsyncd.conf

3.3. 创建备份目录

mkdir -p /home/nfs/ 

3.4. 创建账号密码

#认证文件,连接的账号密码 中的配置/etc/rsyncd.conf
echo 'root:123456' > /etc/rsync.password
chmod 600 /etc/rsync.password
#查看配置是否成功
cat /etc/rsync.password
## 123456#指定密码,密码注意和上面的密码一致,用户可在命令中设置 /etc/lsyncd.conf中的设置
echo "123456" > /etc/rsyncd.password
chmod 600 /etc/rsyncd.password #设置文件权限
cat /etc/rsyncd.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 status rsyncd #查看服务状态
systemctl restart lsyncd  #启动服务
systemctl status lsyncd #查看服务状态cat /var/log/rsyncd.log 

3.7. 测试

分别在node1 新增文件 查看node2是否同步

在node2 新增文件查看node1是否同步

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)
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.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. 增加检查脚本

vi /home/nfs/package/installKeepalived/check-nfs.sh

#!/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

5.3 修改 keepalive配置

vi /etc/keepalived/keepalived.conf

global_defs {router_id LVS_2script_user root                    # 脚本执行用户enable_script_security              # 开启脚本安全权限
}vrrp_script checkNfs
{script "/home/nfs/package/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}
}

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.102,192.168.56.101,192.168.56.100mount -t nfs 192.168.56.120:/home/nfs /mnt
cd /mnt
  1. node3上/mnt新增文件2.txt 在node1 node2的/home/nfs上都有文件(代表成功)

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

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

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

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

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

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

精简

1.在node1 开放防火墙:

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.101" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.102" accept"
firewall-cmd --reload
firewall-cmd --list-all

2.在node2 开放防火墙:

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.102" accept"firewall-cmd --reload
firewall-cmd --list-all

3.在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.101" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.100" accept"firewall-cmd --reload
firewall-cmd --list-all

4.node1和node2 执行下面的操作

创建目录

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

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

注意备份的目录 /home/nfs

cd /home/nfs/installRsyncLsyncd && bash installRsyncLsyncd.sh
#需要互相监听的ip
cp /etc/rsyncd.conf /etc/rsyncd.confbakIP='192.168.56.100 192.168.56.101'
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 = /etc/rsync.password 
#允许链接的ip
hosts allow = ${IP}
#hosts deny = x.x.x.x #不允许的ip
EOF
cat /etc/rsyncd.conf#------------------------------------------------------#
######注意下面的账号密码 默认两台测试机都是root和123456#####
#------------------------------------------------------#
#认证文件,连接的账号密码 中的配置/etc/rsyncd.conf
echo 'root:123456' > /etc/rsync.password
chmod 600 /etc/rsync.password
#查看配置是否成功
cat /etc/rsync.password
## 123456#指定密码,密码注意和上面的密码一致,用户可在命令中设置 /etc/lsyncd.conf中的设置
echo "123456" > /etc/rsyncd.password
chmod 600 /etc/rsyncd.password #设置文件权限
cat /etc/rsyncd.password

5.node1执行

注意备份的目录 /home/nfs

cp /etc/lsyncd.conf  /etc/lsyncd.conf bak
# 100使用101的目标ip
IP='192.168.56.101'
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/", target = "root@${IP}::backup", -- 删除信息也同步delete = true,-- 延迟15秒同步-- delay = 15,delay = 0,-- false代表启动服务前的内容不会同步,如想设置为true,删掉即可,不要配置为trueinit = false,rsync = {-- rsync服务路径binary = "/usr/bin/rsync", -- 认证文件password_file = "/etc/rsyncd.password", archive = true,compress = false,verbose = false,_extra = {"--bwlimit=200", "--omit-link-times"}}
}
EOF
cat /etc/lsyncd.conf

6.node2执行

注意备份的目录 /home/nfs

cp /etc/lsyncd.conf  /etc/lsyncd.conf bak
# 100使用101的目标ip
IP='192.168.56.100'
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/", target = "root@${IP}::backup", -- 删除信息也同步delete = true,-- 延迟15秒同步-- delay = 15,delay = 0,-- false代表启动服务前的内容不会同步,如想设置为true,删掉即可,不要配置为trueinit = false,rsync = {-- rsync服务路径binary = "/usr/bin/rsync", -- 认证文件password_file = "/etc/rsyncd.password", archive = true,compress = false,verbose = false,_extra = {"--bwlimit=200", "--omit-link-times"}}
}
EOF
cat /etc/lsyncd.conf

7.node1 和node2执行

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

8.node1和node2安装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)
EOFcat /etc/exports
# 启动
systemctl start nfs
systemctl enable nfs

9.node1和node2安装Keepalived

cd /home/nfs/installKeepalived && chmod +x installKeepalived.sh && ./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"

10.测试(node3)

# 客户端测试    
cd /home/nfs/installNfs && bash installNfs.sh
showmount -e 192.168.56.120
#Export list for 192.168.56.120:
#/home/nfs 192.168.56.102,192.168.56.101,192.168.56.100mount -t nfs 192.168.56.120:/home/nfs /mnt
cd /mnt
  1. node3上/mnt新增文件2.txt 在node1 node2的/home/nfs上都有文件(代表成功)

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

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

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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【HarmonyOS开发】DevEco Studio安装及其配置

目录 前言下载工具准备开始安装配置开始新建一个项目 前言 DevEco Studio是一款用于开发HarmonyOS应用的集成开发环境&#xff0c;在安装DevEco Studio的时候&#xff0c;可能会在安装或者配置的时候出现各种各样的小问题&#xff0c;在此做下记录。 下载工具准备 官网下载地…

springboot集成docker

1、快速构建springboot-demo项目 地址&#xff1a;https://start.spring.io/

计算机msvcr71.dll丢失的解决方法,总结3个有效的方法

在计算机使用过程中&#xff0c;我们常常会遇到一些错误提示&#xff0c;其中之一就是“msvcr71.dll丢失”。这个问题通常是由于系统文件损坏或缺失引起的&#xff0c;会导致某些程序无法正常运行。那么&#xff0c;msvcr71.dll到底是什么呢&#xff1f;它又有什么作用&#xf…

Leetcode刷题笔记题解(C++):165. 比较版本号

思路&#xff1a;利用小数点来分开求和&#xff0c;判断和是否相等来推断两个版本号是否一致 class Solution { public:int compareVersion(string version1, string version2) {int i0;//记录version1的字符下标int j0;//记录version2的字符下标int num10;//保存version1的和…

vue3 + mark.js 实现文字标注功能

效果图 安装依赖 npm install mark.js --save-dev npm i nanoid代码块 <template><!-- 文档标注 --><header><el-buttontype"primary":disabled"selectedTextList.length 0 ? true : false"ghostclick"handleAllDelete"…

使用阿里巴巴同步工具DataX实现Mysql与ElasticSearch(ES)数据同步

一、Linux环境要求 二、准备工作 2.1 Linux安装jdk 2.2 linux安装python 2.3 下载DataX&#xff1a; 三、DataX压缩包导入&#xff0c;解压缩 四、编写同步Job 五、执行Job 六、定时更新 6.1 创建定时任务 6.2 提交定时任务 6.3 查看定时任务 七、增量更新思路 一、Linux环境要…

2023年广东工业大学腾讯杯新生程序设计竞赛

E.不知道叫什么名字 题意&#xff1a;找一段连续的区间&#xff0c;使得区间和为0且区间长度最大&#xff0c;输出区间长度。 思路&#xff1a;考虑前缀和&#xff0c;然后使用map去记录每个前缀和第一次出现的位置&#xff0c;然后对数组进行扫描即可。原理&#xff1a;若 s …

ABB YuMi协作式双臂机器人进入工厂,极大缓解劳动力短缺问题

原创 | 文 BFT机器人 日本SUS公司是一家为汽车和其他制造业提供铝框架和压铸铝部件的知名供应商&#xff0c;近年来&#xff0c;由于全球供应链面临严重中断&#xff0c;该公司希望能够寻找一家自动化供应商来帮助其恢复日本静冈县的产品生产。SUS公司表示&#xff0c;由于生产…

解决idea 通过build project 手动触发热部署失败

在debug运行项目的过程中&#xff0c;并且保证&#xff08;不添加方法&#xff0c;不修改方法名&#xff09;一定的规则的情况下&#xff0c;可以通过build project 来手动热部署项目&#xff0c;也就是会交换class文件与resouces文件。 设置项 Edit Configurations Modify Op…

《python每天一小段》--(8)与GPT-3.5-turbo 模型进行对话

对话如图&#xff1a; 配置环境变量 APIKey如何获得这边不做说明 在Windows操作系统中&#xff0c;你可以按照以下步骤设置环境变量&#xff1a; 打开“控制面板”。在控制面板中&#xff0c;选择“系统和安全”。选择“系统”。在系统窗口中&#xff0c;选择“高级系统设置”…

模电笔记。。。。

模电 2.8 蜂鸣器 按照蜂鸣器驱动方式分为有源蜂鸣器和无源蜂鸣器 有源的有自己的震荡电路&#xff0c;无源的要写代码控制。 里面有个线圈&#xff0c;相当于电感&#xff0c;储能&#xff0c;通直隔交。 蜂鸣器的参数&#xff1a;额定电压&#xff0c;工作电压&#xff0…

力扣每日一题day29[102. 二叉树的层序遍历]

给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]]示例 2&#xff1a; 输入&…