1、主节点发送SYNC同步请求
2、主节点收到请求后 ,派生子进程fork,进行全量复制(RDB快照)(注意这时还有数据在不断写入主节点)
3、主节点在进行完全量复制后,再将缓存中的数据通过AOF持久化的方式传递给从(就是在进行全量复制时,主节点另一部分还不断写入的数据),AOF持久化类似于将日志传递给从。
4、全量RDB和增量AOF执行完成后,同步写入操作命令,持续性的由主同步给从
监控
1、主节点的信息配置在哨兵的配置文件里
2、命令连接:哨兵会给主节点发送命令连接,建立连接知道主节点位置。
订阅连接:主节点会将自身状态信息定期发送给哨兵,从而达到哨兵监控主节点效果。
3、哨兵会通过命令连接每10s发送一次INFO命令,通过INFO命令,主节点会返回自己的run_id和自己的从节点信息。(哨兵同时会发送订阅连接和命令连接)
4、哨兵会对这些从节点也建立两条连接,命令连接和订阅连接
5、同样的哨兵通过两个连接,也会收到这些从节点的状态信息(run_id 、职能、从服务器复制偏移量offset)
决议
1、哨兵通过命令连接向服务器的sentinel:hello频道发送一条消息,内容包括自己的ip端口、rur. id、配置(后续投票的时候会用到)等
2、哨兵通过订阅连接对服务器的sentinel:hello频道做了监听,所以所有的向该频道发送的哨兵的消息都能被接收到
3、解析监听到的消息,进行分析提取,就可以知道还有那些别的哨兵服务节点也在监听这些主从节点了,更新结构体将这些哨兵节点记录下来
4、向观察到的其他的哨兵节点建立命令连接----没有订阅连接
5、主观下线:当某一节点哨兵,首先监测到主节点出现故障,会进行主观下线,就是,只是自己认为主节点出现故障,进行下线。
6、客观下线:当某一节点哨兵,将主节点主观下线后,会通告其他节点哨兵,告知主节点下线,这时,所有哨兵节点会将自己监测到的主节点信息进行对比,若大部分哨兵节点认为,主节点宕机了,进行客观下线。然后会推举一个哨兵节点作为领导者,主导进行主节点故障漂移(主从切换,将好的从切换为主,进行数据同步)。
1、rsync服务器 介绍
(1)rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。
(2)rsync软件适用于unix/linux/windows等多种操作系统平台
(3) rsync是一个快速和非常方便的文件复制工具。它能本地复制,远程复制,或者远程守护进程方式复制,它提供了大量的参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制
(4)以其delta-transfer算法闻名。
(5)rsync监听端口:873
(6)rsync运行模式:c/s
2、同步方式
(1)全量备份
(2)原有的数据全部传送
(3)把原来的文件和新的文件一起统一传送
(4)全量复制,效率低
3、增量备份
在传输数据之前通过一些算法通过你有的数据和我有的数据进行对比,把不一样的数据通过网络传输增量复制,效率高
4、rsync命令
rsync[选项] 原始位置 目标位置
常用选项
说明
-r 递归模式,包含目录及子目录中的所有文件
-l 对于符号链接文件仍然复制为符号链接文件
-v 显示同步过程的详细信息
-z 在传输文件时进行压缩
-a 归档模式,递归并保留对象属性,等同于-rlptgoD
-p 保留文件的权限标记
-t 保留文件的时间标记
-g 保留文件的属组标记(仅超级用户使用)
-o 保留文件的属主标记(仅超级用户使用>
-H 保留硬链接文件
-A 保留ACL属性信息
-D 保留设备文件及其他特殊文件
–delete 删除目标位置有而原始位置没有的文件
–checksum 根据对象的校验和来决定是否跳过文件
格式一: 用户名@主机地址::共亨模块名 rsync -avz backuper@192.168.4.200 : : wwwroot /root 将主机A.上的/mnt日录复制到主机B的/opt目录下,使用sCP的写发 位置A: scp / mnt root@$B_ip: / opt/ 位置B: scp root@$B_IP:/ mnt l opt 格式二: rsync: //用户名@主机地址/共享模块名 rsync -avz rsync : / / backuper@192.168.4.200 / wwwroot /root http : / / www . baidu . com./ ky13/men/id01.html URL :具体的位置点http: / / www.baidu.com./ky15/men/id01.html URI:标识的是拥有同一特性或类型的一个集合: http: / / www.baidu.com./ky15/men
###所有服务内部都有一个自己的用户
#配置rsync源服务器 rpm -q rsync yum -y install rsync #修改/etc/rsyncd.conf配置文件 vim /etc/ rsyncd.conf #添加以下配置 uid = nobody #root gid = nobody #root use chroot = yes #禁锢在源目录 address = 192.168.226.128 #监听地址 port 873 #监听端口 tcp/udp 873,可通过 cat /etc/services | grep rsync 查看 log file = /var/ log/rsyncd.log #日志文件位置 pid file = /var/run/rsyncd.pid #存放进程ID的文件位置 hosts allow = 192.168.226.0/24 #允许访问的客户机地址 [ wwwroot] ##第一个共享模块 path = /var / www / html #源目录的实际路径 comment = Document Root of www . ljm.com read only = yes #是否为只读 dont comperss = * .gz *.bz2 *.tgz *.zip *.rar *.z #同步时不再压缩的文件类型 auth users = backuper #授权账户,多个账号以空格分隔 secrets file = /etc/rsyncd_users.db #存放账户信息的数据文件 vim /etc//etc/rsyncd_users.db backuper : abc123 #无需建立同名系统用户 chmod 600 /etc/user.db #保证所有用户对源目录/var/ www / html都有读的权限 mkdir -p /var/ www / html chmod +r /var / www / html/ ls -ld /var / www/ html/ #启动rsync 服务程序 rsync --daemon netstat -natp l grep rsync #关闭rsync服务 kill $ (cat /var / run/rsyncd.pid) rm -rf /var/ run/rsyncd.pid #服务端: cd /var/ www / html echo "hello world">> 1.txt #客户端: mkdir / abc rsync -avz backuper@192.168.226.128 : : wwwroot /abc/ #查看同步: cd / abc #客户端:免交互格式配置 echo "abc123" > /etc / server.pass chmod 600 /etc / server.pass #服务端删除1.txt rsync -avz --delete --password-file=/etc/server.pass backuper@192.168.226.128 : : wwwroot / abc ###inotify是用于监控的可以跟rsync结合起来用 二、inotify 1、简介 可以监控文件系统的变动情况,并做出通知响应调整inotify内核参数(优化) /etc/sysctl.conf(内核参数配置文件) inotifywait: #用于持续监控,实时输出结果 inotifywatch: #用于短期监控,任务完成后再输出结果 max_queue_events #监控事件队列大小 max_user_instances #最多监控实例数 max_user_watches #每个实例最多监控文件数 2、inotifywait(持续监控并实时输出监控结果的命令)格式: inotifywait [参数] 常见参数 说明 -m 持续进行监控 -r 递归监控所有子对象 -q 简化输出信息 -e 指定要监控哪些事件类型 3、实验: rsync+inotify #服务端:修改rsync配置文件vim /etc /rsyncd.conf uid = root gid = root read only = no #关闭只读,上行同步需要可写权限 kill `cat /var/ run/rsyncd.pid netstat -natp l grep rsync rsync --daemon netstat -natp l grep rsync #客户端: inotify内核参数 cat /proc/sys/fs/inotify/max_queued_events cat /proc/sys/fs/inotify/max_user_instances cat /proc/sys/fs/inotify/max_user_watches vim /etc/sysctl.conf fs.inotify.max_queued_events = 32768 #监控时间队列,默认为16384 fs.inotify.max_user_instances = 1024 #最多监控实例数,默认为128 fs.inotify.max_user_watches = 1048576 #每个实例最多监控文件数,默认为8192 #当要监控的目录、文件数据量较多或者变化频繁时,建议加大参数值 sysctl -p #client安装inotify-tools yum -y install gcc gcc-c++ tar zxvf inotify-tools-3.14.tar.gz -C /opt cd /opt/inotify-tools-3.14/ ./configure make && make install #执行"inotifywait"命令,然后在服务端向/var/www /html目录下添加文件、移动文件.跟眼踪屏幕输出结果 inotifywait -mrq -e modify,create,move,delete /abc ##脚本作用是rsync和inotify的结合 #client编写触发同步脚本 vim /opt/inotify.sh #!/bin/bash INOTIFY_CND="inotifywait -mrq -e create,delete,move,modify,attrib /abc/" RSYNC_CMD="rsync -apzH --delete --password-file=/etc/server.pass /abc/ backuper@192.168.226.128::wwwroot/" $INOTIFY_CMD | while read DIRECTORY EVENT FILE do if [ $(pgrep rsync | wc -l) -le 0 ] ; then $RSYNC_CMD fi done chmod +x /opt/inotify.sh chmod +x /etc/rc.d/rc.local ##开机自启 echo "/opt/inotify.sh" >> /etc/rc.d/rc.local cd /opt sh -x /opt/inotify.sh ##执行脚本
总结:rsync可以用于本地文件复制、异地同步、删除(在文件数据量非常大的情况下,同步删除不会造成服务器卡死)、迁移
inotify和rsync结合使用,可达到实时监控跟数据同步的效果
hmod +x /etc/rc.d/rc.local
##开机自启
echo “/opt/inotify.sh” >> /etc/rc.d/rc.local
cd /opt
sh -x /opt/inotify.sh ##执行脚本
总结:rsync可以用于本地文件复制、异地同步、删除(在文件数据量非常大的情况下,同步删除不会造成服务器卡死)、迁移 inotify和rsync结合使用,可达到实时监控跟数据同步的效果