首页
斐讯设备
疯言疯语
系统运维
编程语言
网站建设
友情连接
推荐
autojs
Search
1
【N1和Armbian】一、N1刷Linux系统armbian
87 阅读
2
mac下的好用工具小身材大本领-NeatDownloadManager-ndm下载器
81 阅读
3
【N1安装飞牛优化四】关闭不必要服务优化记录
76 阅读
4
银河麒麟系统 OpenSSH 升级至 10.x 实战避坑指南
76 阅读
5
charles破解注册码(含windows和mac)最新安装教程「亲测有效」
73 阅读
登录
Search
标签搜索
JAVA
JAVA学习系列
docker
Linux
js
N1
git
模块二
模块一
端口
模块五
数据库
模块九
模块四
镜像
模块三
模块六
MySQL
百度网盘
nginx
DaiMaFengZi
累计撰写
598
篇文章
累计收到
19
条评论
首页
栏目
斐讯设备
疯言疯语
系统运维
编程语言
网站建设
页面
友情连接
推荐
autojs
搜索到
598
篇与
的结果
2024-06-04
Rsync+Inotify 实现数据同步,双向同步,单向同步
基本了解什么是rsync?与传统的cp、tar备份方式相比,rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等。随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足,首先,rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的。而且正在发生变化的往往是其中很少的一部分,这是非常低效的方式。其次,rsync不能实时的去监测、同步数据,虽然它可以通过linux守护进程的方式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据。基于以上原因,rsync+inotify组合出现了!什么是inotify?Inotify是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。在上面章节中,我们讲到,rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样刚好解决了同步数据的实时性问题。rsync+inotify同步逻辑图环境准备服务器类型IP地址应用操作系统源服务器(数据源服务器),客户端192.168.130.161rsync inotify-tools 脚本centos7/redhat7目标服务器(备份服务器),服务端192.168.130.160rsynccentos7/redhat7重要提示关闭服务端和客户端的防护墙(不是必须,可以开放端口)、selinux(必须)。 #临时关闭 setenforce 0 #长久关闭---使用此方法。需要重启生效。所以可以先执行上面那句,再执行这句。就暂时可以不重启,先配置 sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config如果未关闭,会提示错误:rsync: failed to set times on "." (in backup): Permission denied (13) rsync: recv_generator: failed to stat "ccc" (in backup): Permission denied (13)目标服务器(备份服务器),服务端一:安装rsycn在Centos上只要一句代码而已,其他系统自己找。yum install -y rsync二:添加配置文件参数。[root@server ~]# vim /etc/rsyncd.conf ##日志文件位置. log file = /var/log/rsyncd.log ##pid文件的存放位置 pidfile = /var/run/rsyncd.pid ##支持max connections参数的锁文件 lock file = /var/run/rsync.lock ##用户认证配置文件,用于保存用户名称和密码,必须手动创建 secrets file = /etc/rsync.pass #自定义同步资源名称。 [qingjun] #rsync服务端数据存放路径,客户端的数据将同步至此目录 path = /tmp/ comment = sync runtime from client #设置rsync运行权限为root uid = 0 #设置rsync运行权限为root gid = 0 #默认端口 port = 873 #表示出现错误忽略错误 ignore errors #默认为true,修改为no,增加对目录文件软连接的备份 use chroot = no #设置rsync服务端为读写权限 read only = no #不显示rsync服务端资源列表 list = no #最大连接数 max connections = 200 #设置超时时间 timeout = 600 #执行数据同步的用户名,可以设置多个,用英文状态下逗号隔开 auth users = admin #允许进行数据同步的源服务器IP地址,可以设置多个,用英文状态下逗号隔开 hosts allow = 192.168.0.0/24三:创建用户认证文件,设置文件权限为600。echo 'admin:123456' > /etc/rsync.pass chmod 600 /etc/rsync.pass 四:启动服务,设置开机自启。systemctl enable rsyncd systemctl start rsyncd五:验证是否监听端口ss -antl源服务器(数据源服务器),客户端一:安装rsycn在Centos上只要一句代码而已,其他系统自己找。yum install -y rsync二:配置epel源,安装inotify-tools服务。wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo #################################### wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo sed -i 's|^#baseurl=https://download.example/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel* sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel* ####################################### yum -y install inotify-tools二:创建认证密码文件,只需写密码,设置文件权限为600。echo '123456' > /etc/rsync.pass chmod 600 /etc/rsync.pass三:创建同步目录runtime。mkdir /runtime四:进入同步目录创建文件,开始同步。rsync -avH --port 873 --progress --delete /runtime admin@192.168.130.160::qingjun --password-file=/etc/rsync.pass 说明: rsync -avH --port 873 --progress --delete 源服务器需要同步到其他服务器的目录 admin@同步到哪个服务器IP::上面定义的同步模块 --password-file=/etc/rsync.pass五:服务端查看结果。六:自动同步- 1.写个脚本,给脚本设置开机启动执行。 #!/bin/bash host=192.168.130.160 src=/runtime des=qingjun password=/etc/rsync.pass user=admin 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保存上面脚本到你想存放的目录,这边就存放到了opt目录下- 2. 后台执行脚本。nohup bash /opt/qingjun.sh &- 3. 添加到rc.local,实现开机自动启动这个脚本OK完美收工!
2024年06月04日
19 阅读
0 评论
0 点赞
2024-06-03
Linux 定时备份文件到另一台服务器
1. 需求用户要求将 Tomcat 的日志文件定时备份到另一台服务器。同事给我提供了一个写好的 java 框架,但实在不想给用户再维护另一个服务了,所以另寻他法。2. 问题使用 scp 等跨服务器传输命令时需要手动输入用户名的密码才可进行文件传输,定时任务会卡在这个节点上。3. 解决方案- 使用 crond 服务设置定时任务。 - 使用 sshpass 跳过手动输入密码过程。 - 使用 scp 命令传输文件。 3.1 crond 服务3.1.1 cron 表达式# Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed3.1.2 crond 服务涉及命令# 编辑当前用户的cron表达式文件 crontab -e # 启动服务 /sbin/service crond start # 关闭服务 /sbin/service crond stop # 重启服务 /sbin/service crond restart # 重新载入配置 /sbin/service crond reload # 查看服务状态 service crond status3.2 sshpass + scp# 工具安装 yum install sshpass -y # 命令格式 # -p password 提供密码作为参数(安全性不明智) sshpass -p password scp -r -o StrictHostKeyChecking=no source_directory username@destination_ip:destination_directory # 示例 sshpass -p 123456 scp -r -o StrictHostKeyChecking=no /root/test.txt root@192.168.21.1:/root/其他问题你会发现执行命令之后无反应?可以添加下面代码可以添加-o StrictHostKeyChecking=no选项【表示远程连接时不提示是否输入yes/no】参考几种方法来实现scp拷贝时无需输入密码附上写的一键备份达梦数据库的脚本本地下载2024060308552755{cloud title="蓝奏网盘" type="lz" url="https://daimafengzi.lanzout.com/idnfL20q26gd" password=""/}{cloud title="天翼网盘(访问码:5qie)" type="default" url="https://cloud.189.cn/web/share?code=RjMrIjzMzMVf" password=""/}
2024年06月03日
30 阅读
0 评论
0 点赞
2024-05-30
[上]JAVA学习系列模块七155.模块七回顾&模块八重点说明
[上]JAVA学习系列模块七155.模块七回顾&模块八重点说明视频{bilibili bvid="BV1YT4y1H7YM" /}笔记模块七回顾: 1.面向对象:是java的核心编程思想,自己的事情找对象帮我们去做 有很多功能,别人帮我们实现好了,我们只需要找来这个对象,就可以调用这个对象中实现好的功能 a.啥时候使用面向对象思想编程:在一个类中想访问另外一个类的成员(成员变量,成员方法) b.怎么使用: new对象 ,点成员 特殊 :类名直接调用 -> 调用的成员中必须带static关键字2.类和对象:a.类:实体类 属性(成员变量) 行为(成员方法,不带static的方法) b.对象: 导包:两个类在同一个包下,使用对方的成员不需要导包,相反需要导包 lang包下的类使用时不需要导包 创建对象:想要使用哪个类中的成员,就new哪个类的对象 类名 对象名 = new 类名() 调用:想要使用哪个类的成员,就用哪个类的对象调用哪个成员 对象名.成员 3.匿名对象:没有等号左边的代码只有newa.注意:涉及到赋值,不要使用 4.成员变量和局部变量的区别a.定义位置不同: 成员:类中方法外 局部:方法中或者参数位置 b.初始化值不同 成员:有默认值 局部:没有默认值 c.作用范围不同 成员:作用于整个类 局部:只作用于方法内部 d.内存位置不同 成员:在堆中,跟着对象走 局部:在栈中,跟着方法走 e.生命周期不同 成员:随着对象的创建而创建,随着对象的消失而消失 局部:随着方法的调用而产生,随着方法的调用完毕而消失 模块八重点: 1.要会使用private关键字修饰成员,并知道被private修饰之后作用(访问特点)是什么 2.会使用set方法为属性赋值,使用get方法获取属性值 3.会利用this关键字区分重名的成员变量和局部变量 4.会利用空参构造创建对象,并知道空参构造作用 5.会使用有参构造创建对象,并为属性赋值 6.会快速生成一个标准的javabean类
2024年05月30日
18 阅读
0 评论
0 点赞
2024-05-30
[上]JAVA学习系列模块七154.模块七总结
[上]JAVA学习系列模块七154.模块七总结视频{bilibili bvid="BV1YT4y1H7YM" /}
2024年05月30日
10 阅读
0 评论
0 点赞
2024-05-30
[上]JAVA学习系列模块七第四章153.面向对象_类和对象的练习
[上]JAVA学习系列模块七第四章153.面向对象_类和对象的练习视频{bilibili bvid="BV1YT4y1H7YM" /}笔记练习需求:定义一个类MyDate,属性有 year month day 再定义一个类Citizen(公民类),属性有 name(String类型) birthday(MyDate类型) idCard(String),为这三个属性赋值,然后将值取出来 public class MyDate { int year; int month; int day; }public class Citizen { //姓名 String name; //默认值 null /* 生日 MyDate类型 MyDate属于自定义类型(引用数据类型) 这种类型要操作之前必须要赋值 怎么赋值? 需要new对象赋值 */ MyDate birthday = new MyDate(); // 默认值 null //身份证 String idCard; //默认值null }public class Test01 { public static void main(String[] args) { Citizen citizen = new Citizen(); citizen.name = "涛哥"; citizen.idCard = "111111111"; /* citizen.birthday获取的是MyDate对象 再去点year获取的是MyDate对象中的year 链式调用 */ citizen.birthday.year = 2000; citizen.birthday.month = 10; citizen.birthday.day = 10; System.out.println(citizen.name+","+citizen.birthday.year+","+citizen.idCard); } }给引用数据类型赋值,需要new对象(String比较特殊,可以直接=赋值)
2024年05月30日
9 阅读
0 评论
0 点赞
2024-05-30
[上]JAVA学习系列模块七第四章152.面向对象_成员变量和局部变量区别
[上]JAVA学习系列模块七第四章152.面向对象_成员变量和局部变量区别视频{bilibili bvid="BV1YT4y1H7YM" /}笔记成员变量和局部变量的区别定义位置不同(重点) a.成员变量:类中方法外 b.局部变量:定义在方法之中或者参数位置初始化值不同(重点) a.成员变量:有默认值的,所以不用先手动赋值,就可以直接使用 b.局部变量:是没有默认值的,所以需要先手动赋值,再使用作用范围不同(重点) a.成员变量:作用于整个类 b.局部变量:只作用于自己所在的方法,其他方法使用不了内存位置不同(了解) a.成员变量:在堆中,跟着对象走 b.局部变量:在栈中,跟着方法走生命周期不同(了解) a.成员变量:随着对象的创建而产生,随着对象的消失而消失 b.局部变量:随着方法的调用而产生,随着方法的调用完毕而消失public class Person { String name;//成员变量 public void eat(){ int i = 10;//局部变量 System.out.println(i); System.out.println(name);//成员变量不用手动赋值可以直接使用,因为有默认值 } public void drink(){ int j; //System.out.println(j);//局部变量没有默认值,所以需要手动赋值再使用 System.out.println(name); //System.out.println(i);//i是eat方法的局部变量,在drink中使用不了 } }
2024年05月30日
7 阅读
0 评论
0 点赞
2024-05-30
[上]JAVA学习系列模块七第三章151.面向对象_两个对象指向同一片空间内存图
[上]JAVA学习系列模块七第三章151.面向对象_两个对象指向同一片空间内存图视频{bilibili bvid="BV1YT4y1H7YM" /}笔记两个对象指向同一片空间内存图
2024年05月30日
12 阅读
0 评论
0 点赞
2024-05-30
[上]JAVA学习系列模块七第三章150.面向对象_两个对象内存图
[上]JAVA学习系列模块七第三章150.面向对象_两个对象内存图视频{bilibili bvid="BV1YT4y1H7YM" /}笔记两个对象的内存图phone1和phone2都是new出来的,所以在堆内存中产生了两个不同的空间,所以改变一个空间的数据不会 影响另外一个空间中的数据
2024年05月30日
9 阅读
0 评论
0 点赞
1
...
20
21
22
...
75