Linux学习-week12-综合架构实时同步

老男孩教育64期--week12--综合架构实时同步

  1. 综合架构知识概述说明

    1. 存储服务客户端配置参数
    2. 实时同步备份数据方法
    3. 操作系统远程连接服务 基于密钥远程连接
  2. 综合架构课程回顾:

    1. 全网备份项目 脚本+rsync+crond
    2. 存储数据服务 NFS(网络共享存储数据)
  1. NFS服务客户端配置参数
    实现客户端挂载操作: 自动挂载
    mount -t nfs 172.16.1.31:/data /html/www/wp-content/uploads
    实现开机自动挂载:
    第一种方法: /etc/fstab
    UUID=57485102-49aa-4d0e-81df-42b83a5d8726 /data1 xfs defaults 0 0
    挂载设备信息 挂载点信息 文件系统类型 挂载参数 是否备份磁盘信息 是否对磁盘自检

    172.16.1.31:/data /mnt xfs defaults 0 0

    mount命令挂载参数:
    Use default options: rw, suid, dev, exec, auto, nouser, and async
    rw: 挂载的存储目录可读可写 *
    ro: 挂载的存储目录为只读
    suid: 让挂载点目录中的文件setuid权限生效 *
    nosuid: 让挂载点目录中的文件setuid权限失效 安全性
    exec: 挂载点目录中的脚本代码信息可以直接执行
    noexec: 挂载点目录中的脚本代码信息不能直接执行
    auto: 根据fstab文件配置信息实现自动挂载 mount -a
    noauto: 根据fstab文件配置信息取消自动挂载
    user: 允许普通用户进行挂载操作 mount /mnt
    nouser: 禁止普通用户进行挂载操作 *
    sync: 进行数据同步存储操作 安全
    async: 进入数据异步存储操作 *

    常见问题: fstab文件配置了网络设备开机自动挂载信息,但不能实现开机自动挂载
    系统启动流程问题:
    先加载fstab文件 --- 启动network服务
    centos7: 开启remote-fs服务
    先加载fstab文件 --- 启动network服务 --- remote-fs服务(重新加载fstab文件)
    centos6: 开启netfs服务
    先加载fstab文件 --- 启动network服务 --- netfs服务(重新加载fstab文件)

    第二种方法: /etc/rc.local -- 确认文件权限为执行权限

image.png
image.png
客户端挂载参数扩展:
fg     --- 在前台进行挂载操作 
bg     --- 在后台进行挂载操作
soft   --- 当存储服务器出现问题,会尝试不断重新挂载,具有超时时间   
hard   --- 当存储服务器出现问题,会尝试不断重新挂载.没有超时时间
PS: NFS存储服务属于耦合度太高的服务
rsize  --- 设置一个缓存区域, 可以从内存中读取数据,减少存储服务压力
wsize  --- 设置一个缓冲区域, 可以在内存中写入数据,减少存储服务压力
atime  --- 确认是否更新inode中访问文件时间信息

noatime --- 进制更新inode中访问文件时间信息 性能参数信息
remount --- 重新指定参数信息,挂载文件系统

企业常见文件系统异常案例:
整个文件系统出现只读情况:
mount -o remount rw  /

存储服务课程总结:
1. NFS存储服务部署流程
2. NFS存储服务配置参数
   squash 用户映射参数
3. NFS存储权限信息说明
   a 和存储服务配置文件权限
   b 确认存储目录权限信息
   c 确认客户端挂载参数权限
4. NFS存储服务客户端挂载参数
   NFS客户端如何实现开机自动挂载
5. NFS服务无法实现高可用
   思路解决NFS高可用问题--- 弃用NFS方案  
  1. 综合架构实时同步服务
    架构内部人员存储的数据信息可以采用定时任务进行数据备份 最短数据同步周期1分钟
    架构外部人员存储的数据信息可以采用实时同步进行数据备份 只要有变化数据信息都要进行备份

    实时同步实现数据传输原理:
    存储服务器(10G) ---> 备份服务器(10G)
    新增的5G ---> 备份服务器(5G)
    01: 发现指定目录中有数据信息变化 inotify
    02: 发现数据变化后,利用rsync将变化的数据进行传输备份 rsync

  2. 实现数据实时同步过程:
    方法一: 利用脚本实现实时同步:
    inotify软件 --- 监控软件,监控目录中数据变化信息
    第一个历程: 安装软件程序
    yum install -y inotify-tools
    第二个历程: 使用软件名称监控目录
    /usr/bin/inotifywait --- 监控目录数据变化信息
    /usr/bin/inotifywatch --- 统计目录数据变化情况 /data oldboy01,oldboy02,oldboy03 创建操作3次

    inotifywait命令参数信息:
    --exclude <pattern> 在同步数据信息时,对指定数据信息进行排除同步
    --excludei <pattern> 在同步数据信息时,对指定数据信息进行排除同步(忽略大小写进行数据排除)
    -m|--monitor 实现目录信息进行一直监控
    -r|--recursive 实现递归监控
    --format <fmt> 显示信息格式 ???
    --timefmt <fmt> 显示时间信息格式
    -q|--quiet 只输出有用的信息, 错误无用信息不要进行输出
    -e 指定监控的事件信息 创建 修改 删除

    inotifywait -mr --timefmt "%F %T" --format "%T %w %f %e" /data
    Setting up watches. Beware: since -r was given, this may take a while!
    Watches established.
    2019-09-22 12:18:53 /data/oldboy01/ oldboy06.txt CREATE
    2019-09-22 12:18:53 /data/oldboy01/ oldboy06.txt OPEN
    2019-09-22 12:18:53 /data/oldboy01/ oldboy06.txt ATTRIB
    2019-09-22 12:18:53 /data/oldboy01/ oldboy06.txt CLOSE_WRITE,CLOSE

    常见的事件信息:
    access file or directory contents were read
    文件或目录内容被读取
    modify file or directory contents were written
    文件或目录内容被写入
    attrib file or directory attributes changed
    文件或目录内容被修改
    close_write file or directory closed, after being opened in writeable mode
    文件或目录被关闭,在文件打开之后,进行写入操作之后进行关闭
    close_nowrite
    file or directory closed, after being opened in
    文件或目录被关闭,在文件打开之后,未进行写入操作之后关闭
    read-only mode
    close file or directory closed, regardless of read/write mode
    文件只要被打开了,做了关闭操作
    open file or directory opened
    文件或目录被打开
    moved_to file or directory moved to watched directory
    文件或目录被移动到监控目录中
    moved_from file or directory moved from watched directory
    文件或目录被移除到其他目录中
    move file or directory moved to or from watched directory
    文件或目录被移动过, 文件或目录被重命名
    create file or directory created within watched directory
    文件或目录被创建
    delete file or directory deleted within watched directory
    文件或目录被删除

    需要关注的事件信息: create,delete,move,close_write
    inotifywait -mrq --format "%w %f" -e create,delete,move,close_write /data

编写脚本信息: 实现inotify+rsync服务结合
vim inotify.sh
#!/bin/bash

inotifywait -mrq --format "%w %f" -e create,delete,move,close_write  /data|\
while read line
do  
  rsync -avz  $data   rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
done

/data/oldboy01.txt --> read --> line = /data/oldboy01.txt
rsync -avz $line /data/oldboy01.txt rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
/data/oldboy02.txt --> read --> line = /data/oldboy02.txt
rsync -avz $line /data/oldboy02.txt rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

oldboy_dir/oldboy01.txt --> read --> line = /data/oldboy_dir/oldboy01.txt
rsync -avz  /data/oldboy_dir/oldboy01.txt rsync_backup@172.16.1.41::backup  --password-file=/etc/rsync.password
rsync -avz  /data/oldboy_dir/oldboy01.txt rsync_backup@172.16.1.41::backup/oldboy_dir/

脚本问题:
01. 创建数据目录结构信息不统一
02. 删除数据信息后, 无法进行同步
rsync -avz  /data/ --delete rsync_backup@172.16.1.41::backup  --password-file=/etc/rsync.password 

完善脚本:
[root@nfs01 /data]# cat /server/scripts/inotify.sh 
#!/bin/bash

inotifywait -mrq --format "%w %f" -e create,delete,move,close_write  /data|\
while read line
do  
  rsync -avz  /data/ --delete  rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
done

touch 1000个文件 --> /data/1000个文件  ---> 同步传输到备份服务器

补充: 循环脚本如何进行停止:
方式一: 暂停
ctrl+z -- jobs 显示暂停进行信息 -- fg 编号 让后台暂停进程继续运行
方式二: 彻底停止
kill    进程编号    --- 彻底停止循环脚本运行

killall 进程名      --- 彻底停止循环脚本运行 

pkill   进程名      --- 模糊杀进程信息
pkill -f inotify.sh


使脚本在后台一直运行:
nohup sh /server/scripts/inotify.sh &
image.png
image.png
image.png
方法二: 利用服务程序实现实时同步: sersync lsyncd(扩展研究)
sersync == 将inotify+rsync软件结合 == 中国人 周洋

第一个历程: 下载sersync软件程序 
第二个历程: 将软件包上传到linux系统中,解压使用 二进制包安装软件
mv sersync_installdir_64bit/sersync/ /usr/local/

第三个历程: 修改配置文件
将指定数据信息在实时同步时进行过滤
<filter start="false">
    <exclude expression="(.*)\.svn"></exclude>
    <exclude expression="(.*)\.gz"></exclude>
    <exclude expression="^info/*"></exclude>
    <exclude expression="^static/*"></exclude>
</filter>

<inotify>
    <delete start="true"/>
    <createFolder start="true"/>
    <createFile start="false"/>
    <closeWrite start="true"/>
    <moveFrom start="true"/>
    <moveTo start="true"/>
    <attrib start="false"/>
    <modify start="false"/>
</inotify>

需要进行改动,实现数据实时同步
<localpath watch="/opt/tongbu">
       <remote ip="127.0.0.1" name="tongbu1"/>
       <!--<remote ip="192.168.8.39" name="tongbu"/>-->
       <!--<remote ip="192.168.8.40" name="tongbu"/>-->
   </localpath>
   <rsync>
       <commonParams params="-artuz"/>
       <auth start="false" users="root" passwordfile="/etc/rsync.pas"/>
       <userDefinedPort start="false" port="874"/><!-- port=874 -->

第四个历程: 启动实时同步服务
chmod +x /usr/local/sersync/bin/sersync
serync  -dro  /user/local/sersync/conf/confxml.xml 

参数-d:    启用守护进程模式
参数-r:    在监控前,将监控目录与远程主机用rsync命令推送一遍
参数-o:    指定配置文件,默认使用confxml.xml文件

总结: 软件服务排查问题思路
01. crond        排错:  日志文件 /var/log/crond
02. rsync        排错:  日志文件 rsyncd.log  掌握rsync同步数据原理
03. nfs          排错:  用户映射原理 存储数据权限问题
04. sersync      排错:    设置debug调试模式
05. SSH          排错:  配置文件 对比正确配置文件
06. ansible      排错:  剧本执行--模块执行--命令行测试  ???
07. nginx        排错:  日志文件 访问日志/错误日志  抓包分析
08. keepalived   排错:  日志文件 /var/log/message  关注配置文件
09. zabbix       排错:  日志文件 命令进行测试zabbix-get 图形界面排错  zabbix工作原理
10. jumpserver   排错:  日志文件 关注进程信息(调试信息)
11. 防火墙服务   排错:  iptables 抓取匹配流量信息
  1. 远程管理服务介绍
    SSH: 端口22 密文传输数据 默认允许root用户远程连接
    telnet: 端口23 明文传输数据 默认禁止root用户远程连接

    实现telnet远程连接:

    1. 安装软件
      yum install -y telnet-server
    2. 启动程序
      systemctl start telnet.socket

    网络数据抓包方法:
    方法一: 利用软件进行抓包 wireshark
    方法二: 利用命令进行抓包 tcpdump

  2. SSH远程连接原理:
    私钥/公钥: 私钥==钥匙 公钥==锁 --- 对数据信息进行加密处理

  3. SSH远程连接方式:
    a 基于密码方式远程连接: 安全性较低
    b 基于密钥方式远程连接:

    基于密钥实现远程连接方式:
    第一个历程: 创建密钥对
    ssh-keygen -t dsa/rsa
    Generating public/private dsa key pair.
    Enter file in which to save the key (/root/.ssh/id_dsa):
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /root/.ssh/id_dsa.
    Your public key has been saved in /root/.ssh/id_dsa.pub.
    The key fingerprint is:
    SHA256:jzCv2VTUNnP3mwD4+/1/MmpCKJjAXRY+2+Cx382FBKs root@m01
    The key's randomart image is:
    +---[DSA 1024]----+
    | .. . |
    | .o .+ |
    | . . o= .o.* . .|
    | o .. B o.o.= ..|
    | . o* E...... .|
    | o .=.=.o... o|
    | .=.o.o o |
    | = . o + .|
    | o . o.o +*|
    +----[SHA256]-----+
    [root@m01 ~]# ll /root/.ssh/
    total 12
    -rw------- 1 root root 668 Sep 22 17:02 id_dsa
    -rw-r--r-- 1 root root 598 Sep 22 17:02 id_dsa.pub
    -rw-r--r--. 1 root root 172 Jul 21 15:05 known_hosts

    第二个历程: 将公钥分发给被管理主机
    ssh-copy-id -i /root/.ssh/id_dsa.pub root@10.0.0.31

    第三个历程: 进行远程连接测试
    [root@m01 ~]# ssh 10.0.0.31
    Last login: Sun Sep 22 16:43:22 2019 from 10.0.0.41
    [root@nfs01 ~]# exit
    logout
    Connection to 10.0.0.31 closed.
    [root@m01 ~]# ssh 10.0.0.31 hostname
    nfs01

    简化了ansible批量管理服务配置信息

    如何进行批量分发密钥:

    !/bin/bash

    for ip in 31 41 7
    do
    ssh-copy-id -i /root/.ssh/id_dsa.pub root@10.0.0.$ip
    done

    交互过程:

    1. 第一次连接时需要有确认信息
      ssh-copy-id -i /root/.ssh/id_dsa.pub root@10.0.0.$ip -o StrictHostKeyChecking=no --- 免去确认信息

    2. 第一次连接时需要输入密码信息
      yum install -y sshpass
      sshpass --- 给ssh连接提供免交互密码信息
      sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub root@10.0.0.$ip -o StrictHostKeyChecking=no --- 免去密码输入过程

批量分发公钥脚本 与 检查确认脚本
[root@m01 /server/scripts]# cat fenfa_pub_key.sh 
#!/bin/bash

for ip in 31 41 7
do
  sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub  root@172.16.1.$ip -o StrictHostKeyChecking=no &>/dev/null
  if [ $? -eq 0 ]
  then
     echo "172.16.1.$ip 密钥分发成功"
     echo ""
  else
     echo "172.16.1.$ip 密钥分发失败"
     echo ""
  fi
done    

[root@m01 /server/scripts]# cat fenfa_pub_check.sh
#!/bin/bash

for ip in 31 41 7
do
  ssh 172.16.1.$ip hostname &>/dev/null
  if [ $? -eq 0 ]
  then
     echo "172.16.1.$ip 密钥检查成功"
     echo ""
  else
     echo "172.16.1.$ip 密钥检查失败"
     echo ""
  fi
done

需求给三台主机分发密钥: 最优解决方案--循环数组功能???
172.16.1.31   nfs01    root   123456   端口 52113
172.16.1.41   backup   root   654321   端口 52114
172.16.1.7    web01    root   123123   端口 52115

解决第一个问题: 端口号不是默认22如何分发密钥

sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub  root@172.16.1.31 -o StrictHostKeyChecking=no -p52113
sshpass -p654321 ssh-copy-id -i /root/.ssh/id_dsa.pub  root@172.16.1.41 -o StrictHostKeyChecking=no -p52114
sshpass -p123123 ssh-copy-id -i /root/.ssh/id_dsa.pub  root@172.16.1.7  -o StrictHostKeyChecking=no -p52115

[root@m01 /server/scripts]# cat while_read_line.sh 
#!/bin/bash

while read line
do
  IP_info=$(echo $line|awk '{print $1}')
  password_info=$(echo $line|awk '{print $2}')
  port_info=$(echo $line|awk '{print $3}')

  sshpass -p$password_info ssh-copy-id -i /root/.ssh/id_dsa.pub  root@$IP_info -o StrictHostKeyChecking=no -p$port_info &>/dev/null
  if [ $? -eq 0 ]
  then
      echo "主机:$IP_info, 密码:$password_info, 端口:$port_info    分发公钥成功."
      echo ""
  else
      echo "主机:$IP_info   分发公钥失败"
      echo ""
  fi
done </server/scripts/test.txt

补充: 免交互创建密钥
#!/bin/bash 

if [ ! -f /root/.ssh/id_dsa ]
then 
   ssh-keygen -t dsa -f /root/.ssh/id_dsa  -P ""
   echo "密钥创建成功"
else 
   echo "密钥已经创建"
fi 

09: 课程知识梳理总结
1) 存储服务客户端挂载参数信息 defaults(rw dev auto exec nouser suid async) bg/fg soft/hard wsize/rwsize remont
2) 实时同步数据方法
发现数据变化 --- 变化数据进行传输备份
方式一: 脚本实现
inotifywait + rsync + while read line
方式二: 软件程序 sersync
前提: 部署rsync服务/部署inotify软件
01. 如何编写配置文件
02. 如何启动服务程序 -dro
3) SSH远程连接服务
远程连接管理主机方法 SSH telnet
远程连接原理过程 私钥/公钥
如何基于密钥连接主机 创建密钥对 分发公钥
如何批量分发密钥信息

预习:

  1. ansible 批量管理服务
    a ansible主机清单编写方法 https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html
    b ansible管理模块信息 https://docs.ansible.com/ansible/latest/modules/modules_by_category.html
    c ansible剧本编写方法 https://docs.ansible.com/ansible/latest/user_guide/playbooks.html
  1. lsync 实时同步软件
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容