linux第二阶段架构

综合架构

day01 综合架构原理

1.企业上网原理

路由器配置:
    第一步:获取设备管理IP地址,修改笔记本网卡地址
    第二步:外网线路配置(运营商),完成路由或拨号配置(用户名 密码--			获取外网IP)
	第三步:配置DHCP服务,实现办公环境主机自动获取IP地址
            IP地址池信息:192.168.19.1~~192.168.19.200
            子网掩码信息:255.255.255.0
            网关地址信息:192.168.19.254
            DNS地址信息:223.5.5.5

交换机配置:
	第一步:配置交换机的vlan (v虚拟 lan局域网)
			一个交换机所有接口属于一个广播域
交换机的接口类型():
	01. 属于vlan接口,标记属于哪个vlan
	02. 属于trunk接口,实现不同vlan数据进行传递

2.虚拟机上网原理

NAT:  
	优势:防止IP地址冲突
	劣势:不便于其他物理主机访问虚拟主机
	桥接:
	优势:便于其他物理主机访问虚拟主机
	劣势:容易造成IP地址冲突
仅主机:
	优势:网络环境安全
	劣势:不能访问外网

3.系统路由配置说明

静态网段路由配置:
centos6:net-tools
route
route add -net 192.168.10.0 netmask 255.255.255.0 gw 192.168.1.100
route del -net 192.168.10.0 netmask 255.255.255.0 gw 192.168.1.100

centos7:iproute(推荐)
ip route
ip route add 192.168.10.0/24 via(经由) 192.168.1.100
ip route del 192.168.10.0/24 via(经由) 192.168.1.100

静态主机路由配置:
centos6:net-tools
route add -host 223.5.5.5/32 gw 10.0.0.254

centos7:iproute(推荐)
ip route add 223.5.5.5/32 via 10.0.0.254

静态默认路由:
centos6:net-tools
route add default gw 10.0.0.254

centos7:iproute(推荐)
ip route add default via 10.0.0.254

4.综合架构阶段

1.能力分水岭,架构述职(面试:曾经干过运维,你以前公司架构是什么)
2.学习很多服务(三剑客 vim 配置文件(定时任务 网卡)find w ps df free--监控服务)
3.学习到很多专业术语 
什么是架构? 多台服务器组合在一起,服务器架构
什么是集群? 完成相同工作的一组服务器
什么是负载均衡? 
...
4. 学习服务的排错能力?运维工程师 服务稳定运行 进行架构服务的维护(不能出问题)
自动化部署服务
5.服务的优化操作

5.综合架构的组成部分

1)防火墙服务器		实现访问流量安全控制			iptables(docker)/firewalld
2)负载均衡服务器	实现访问流量调度处理			nginx
3)web服务器		实现处理用户请求        		nginx
4)数据库服务器     实现数据信息存储(字符串)  	mysql
5)存储服务器		实现数据信息存储(图片/附件)   NFS
6)备份服务器       实现数据信息备份				rsync(自动备份 shell+定时任务/sersync实时备份)
7)缓存服务器*      实现数据内存存储                memcache/redis/mongodb
8)批量管理服务器   实现服务器批量管理				ansible
9)监控服务器       实现监控服务运行状态/报警       zabbix
架构完善部分:
1)解决单点问题     实现主备服务器切换              keepalived
2)VPN服务器        远程技术人员身份                pptpvpn (扩展研究)
https://blog.oldboyedu.com/?s=vpn
3)审计服务器       监控内部人员的所有操作          jumpserver(跳板机)
========================================
面试问题:
01. 公司数据如何进行备份
回答:
1)有备份服务器
2)购买云存储设备(安全问题)
3)两地三中心

6.架构的规划说明:

主机名称和IP地址规划  10台服务器 内存--10G
    负载均衡服务器	 lb01           10.0.0.5/24(外网)172.16.1.5/24(内网)
				 lb02           10.0.0.6/24(外网)172.16.1.6/24(内网)
    web服务器         web01          10.0.0.7/24(外网)172.16.1.7/24(内网)
    				web02          10.0.0.8/24(外网)172.16.1.8/24(内网)
   					web03 			10.0.0.9/24(外网)172.16.1.9/24(内网)
    数据库服务器     db01 			10.0.0.51/24(外网)172.16.1.51/24(内网)
    存储服务器       nfs01 			10.0.0.31/24(外网)172.16.1.31/24(内网)
    备份服务器       backup 		10.0.0.41/24(外网)172.16.1.41/24(内网)
    批量管理服务器   m01 			10.0.0.61/24(外网)172.16.1.61/24(内网)
    监控管理服务器   zabbix-server 	10.0.0.71/24(外网)172.16.1.71/24(内网)

系统基础优化部分:
01. 安全优化
    防火墙关闭(永久)
    selinux关闭(永久)
02. yum镜像源
    阿里云镜像源
    清华yum源
03. 优化hosts文件
    cat >>/etc/hosts<<EOF
    lb01     172.16.1.5
    lb02     172.16.1.6
    web01    172.16.1.7
    web02    172.16.1.8
    web03    172.16.1.9
    db01     172.16.1.51
    nfs01    172.16.1.31
    backup   172.16.1.41
    m01      172.16.1.61
    zabbix-server  172.16.1.71
    EOF
   

7.虚拟主机网络配置:

第一个步骤:创建第二块网卡,设置LAN区段
第二个步骤:开启服务器,对第二块网卡进行地址配置
	nmtui--systemctl restart NetworkManager --- systemctl restart network
第三个步骤:清除网卡的mac地址信息和UUID
	sed -i '/UUID/d' /etc/sysconfig/network-scripts/ifcfg-eth[01]
第四个步骤:重启网卡服务
    systemctl stop/disable NetworkManager
    systemctl restart network

8.虚拟主机的克隆操作

第一个步骤:模板主机链接克隆
第二个步骤:需要对克隆好的主机进行配置
1.网卡地址修改
	sed -i 's#200#41#g' /etc/sysconfig/network-scripts/ifcfg-eth[01]
2.修改主机名称
	hostnamectl set-hostname backup
3.建立新的xshell会话
	systemctl restart network
完整快照拍摄工作

PS:克隆好的主机要一台一台启动配置 

day02 rsync

1.总和架构备份服务

1.用于将数据信息进行恢复
2.用于出现问题进行文件信息对比

2.如何实现备份服务部署(rsync)

1.a fast, versatile, remote (and local) file-copying tool
	rsync软件是一个快速,多功能,远程和本地文件备份工具
	rsync软件可以实现全量和增量备份	(优势)
	增量备份是如何实现的
        两种方式:数学算法--数据比对
        第一种:比对文件数据属性信息(默认)
        第二种:比对文件md5数值

2.rsync命令使用
	rsync软件 cp scp rm ls 有的功能 rsync都有
    rsync替换cp:
    cp /etc/hosts /tmp/      --- 备份文件
    rsync /etc/hosts /tmp/   --- 备份文件
    rsync -a /oldboy /tmp    --- 备份目录
    PS:rsync备份目录时
    目录后面有/    oldboy/   将目录下面的数据信息进行备份
    目录后面没有/  oldboy    将目录下面的内容以及目录备份都进行备份
    
    rsync替换scp:远程备份
    scp -rp /etc/hosts  172.16.1.31:/tmp   --- 远程传输备份文件
    rsync -rp /etc/hosts  172.16.1.31:/tmp
    
    rsync替换rm:
    mkdir /null
    rsync -avz --delete /null/ /tmp   --- 将目录中的数据进行删除或者清空
    --delete 无差异同步参数
    
    rsync替换ls:
    rsync /etc/hosts
    -rw-r-xr-x            391 2019/06/11 09:36:15 hosts

3.rsync命令详细用法说明

1.本地数据备份:等价于cp
    Local:  rsync [OPTION...] SRC... [DEST]
    src:需要备份的数据信息
    dest:备份到什么路径中

2.程的方式备份:类似于scp(全量备份)
    Access via remote shell:
    Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
	[USER@]: 以什么用户身份登录到远程主机,默认以当前登录用户身份登录远程主机
	HOST:    远程主机IP地址或者主机名称信息
	SRC:     需要拉取的远程主机数据信息
	dest:    数据保存到本地主机的路径信息
	
    Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
	SRC:     需要推送的本地主机数据信息
	[USER@]   以什么用户身份登录到远程主机,默认以当前登录用户身份登录远程主机
	HOST:    远程主机IP地址或者主机名称信息
	DEST:    数据保存到远程主机的路径信息

3.守护进程方式进行数据传输(远程方式)
    Access via rsync daemon:
    Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
          rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
    Push: rsync [OPTION...] SRC...         [USER@]HOST::DEST
	      src:  需要推送的本地主机数据信息
		  [USER@]: 输入正确认证用户信息
		  HOST:   远程主机IP地址或者主机名称信息
		  ::DEST   指定备份数据的模块信息
		  
          rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
		  
    1. 可以实现免交互传输数据
    2. 实现远程传输认证功能
    3. 守护进程方式具有配置文件,满足更多企业需求
    4. 控制客户端连接服务端的数量

4.rsync守护进程部署过程

服务端部署流程:
	第一步:确认软件是否安装
	rpm -qa rsync
	yum -y install rsync
	
	第二步:编写配置文件
	vim /etc/rsyncd.conf
-------------------------配置文件---------------------------
	#rsync_config
    #created by HQ at 2017
    ##rsyncd.conf start##

    uid = rsync						#备份目录的管理用户(属主信息)
    gid = rsync						#备份用户的管理目录(属组信息)
    port = 873						#rsync守护进程服务端口号
    fake super = yes				#伪装成管理员 需要有管理员权限
    use chroot = no					#和安全相关的配置
    max connections = 200			#最大连接数
    timeout = 300					#设置连接的超时时间
    pid file = /var/run/rsyncd.pid		#记录进程的号码信息(停止服务/判断服务是否启动)
    lock file = /var/run/rsync.lock		#锁文件,进行连接的限制
    log file = /var/log/rsyncd.log		#服务的日志文件
    ignore errors					#忽略错误,提高传输数据效率
    read only = false				#设置备份目录是否可读可写
    list = false					#?!!?
    hosts allow = 172.16.1.0/24		#白名单(允许指定网段或主机)
    hosts deny = 0.0.0.0/32			#黑名单(拒绝指定网段或主机)
    auth users = rsync_backup		#指定认真过得用户
    secrets file = /etc/rsync.password	#创建一个密码文件(用户名称:用户密码)
    [backup]						#模块信息
    comment = "backup dir by oldboy"	
    path = /backup					#指定备份目录路径信息
-------------------------配置文件---------------------------
	
	第三步:创建备份目录管理用户
	useradd rsync -s /sbin/nologin -M
	
	第四步:创建认证密码信息,并修改权限
	echo "rsync_backup:123456" > /etc/rsync.password
	chmod 600 /etc/rsync.password
	
	第五步:创建备份目录,并修改目录权限
	mkdir /backup
	chown rsync.rsync /backup/
	
	第六步:启动备份服务
	systemctl start rsyncd
	systemctl enable rsyncd
	
	============================
	所有服务端部署流程:
	1.软件部署安装
	2.软件配置文件编写
	3.软件环境准备(目录 文件 用户信息)
	4.将服务进行启动 systemctl start rsyncd/xxx
	5.进行服务程序验证

客户端部署流程:
	第一步:创建密码文件,并修改权限
	echo "123456" > /etc/rsync.password
	chmod 600 /etc/rsync.password
	第二步:实现免交互传输数据
	rsync -avz /etc/hosts [email protected]::backup --password-file=/etc/rsync.password

day03 rsync使用及其参数

1.rsync命令参数说明

参数 参数解释
-v 详细模式输出,传输是的进度等信息
-z 传输时进行压缩以提高传输效率
-a 归档参数,表示以递归方式传输文件,并保持所有文件属性,等于-rtopgDl
-r 对子目录以递归模式,及目录下的所有目录都同样传输
-t 保持文件时间信息不变(mtime)
-o 保持文件属主信息
-g 保持文件属组信息
-p 保持文件权限
-P 显示同步的过程及传输时的进度等信息
-D 保持设备文件信息 b s c
-l 保留软连接 (没什么用)
-L 将链接文件源文件内容进行传输复制
-e 使用的信道协议(remote shell),指定替代rsh的shell程序。
–exclude=PATTERN 指定排除不需要传输的文件信息(和tar参数一样)。???
–exclude-from=file 文件名所在的目录文件,即可以实现排除多个文件(和tar参数一样)。???
–bwlimit=RATE 限速功能
–delete(慎用) 让目标目录SRC和源目录数据DST一致,即无差异同步数据。
补充:如何保证备份的数据属主和属组信息不变
方法一:增加模块
	不同用户向不同模块传输数据
方法二:修改配置文件uid信息
    uid = root
    gid = root
    #fake super = yes
    备份目录属主属组需要修改为 root权限

2.rsync守护进程企业应用

  1. 守护进程多模块功能配置

    • 开发人员
    • 运维人员
    • 数据库人员
  2. 创建多模块 — 创建多模块对应目录并授权 — 重启服务

    [backup]
    comment = "backup dir by oldboy"
    path = /backup
    [devdir]
    path = /devdir
    [dbdir]
    path = /dbdir
    
  3. 操作实例

    环境准备:
    [root@nfs01 ~]# mkdir /oldboy_dir/oldboy{01..03} -p
    [root@nfs01 ~]# touch /oldboy_dir/oldboy{01..03}/{a..c}.txt
    [root@nfs01 ~]# tree /oldboy_dir/
    /oldboy_dir/
    ├── oldboy01
    │?? ├── a.txt
    │?? ├── b.txt
    │?? └── c.txt
    ├── oldboy02
    │?? ├── a.txt
    │?? ├── b.txt
    │?? └── c.txt
    └── oldboy03
    ├── a.txt
    ├── b.txt
    └── c.txt
    
    需求:
    01. 排除oldboy01目录不要传输备份,排除oldboy03目录中a.txt文件不要传输备份
    实现需求:--exclude=PATTERN
    [root@nfs01 ~]# rsync -avz /oldboy_dir/ --exclude=oldboy01 --exclude=oldboy03/a.txt [email protected]::backup --password-file=/etc/rsync.password
    sending incremental file list
    ./
    oldboy02/
    oldboy02/a.txt
    oldboy02/b.txt
    oldboy02/c.txt
    oldboy03/
    oldboy03/b.txt
    oldboy03/c.txt
    
    sent 381 bytes  received 134 bytes  1,030.00 bytes/sec
    total size is 0  speedup is 0.00
    
    总结:排除的路径信息,需要编写为指定目录的相对路径
    
    常见错误:
    1. 排除参数后面数据信息,不能写绝对路径
    2. 排除参数后面数据信息,不能写相对路径
    
    02. 排除的数据量比较大,有多个目录,多个文件都要排除
    vim exlude.txt 
    oldboy01
    oldboy03/a.txt
    
    [root@nfs01 oldboy_dir]# rsync -avz /oldboy_dir/ --exclude-from=/oldboy_dir/exclude.txt [email protected]::backup --password-file=/etc/rsync.password
    sending incremental file list
    ./
    exclude.txt
    oldboy02/
    oldboy02/a.txt
    oldboy02/b.txt
    oldboy02/c.txt
    oldboy03/
    oldboy03/b.txt
    oldboy03/c.txt
    
    sent 482 bytes  received 157 bytes  1,278.00 bytes/sec
    total size is 24  speedup is 0.04
    
    3) 守护进程来创建备份目录(全网备份项目)
    [root@nfs01 oldboy_dir]# rsync -avz /etc/hosts [email protected]::backup/oldboy/ --password-file=/etc/rsync.password
    sending incremental file list
    created directory oldboy
    hosts
    
    sent 146 bytes  received 72 bytes  436.00 bytes/sec
    total size is 158  speedup is 0.72
    [root@nfs01 oldboy_dir]# rsync -avz /etc/hosts [email protected]::backup/oldboy/oldboy01/oldboy02/oldboy03/ --password-file=/etc/rsync.password
    sending incremental file list
    rsync: mkdir "oldboy/oldboy01/oldboy02/oldboy03" (in backup) failed: No such file or directory (2)
    rsync error: error in file IO (code 11) at main.c(657) [Receiver=3.1.2]
    问题:不能创建多级目录
    
    nfs 数据备份 backup/172.16.1.31/ 
    web 数据备份 backup/172.16.1.7/ 
    db  数据备份 backup/172.16.1.51/
    
    4) 守护进程的访问控制配置
    hosts allow = 172.16.1.0/24
    hosts deny = 172.17.1.0/24
    建议:尽量只使用一种名单
    
    补充:rsyncd.conf文件中全局配置和局部配置
    全局配置:模块以上的配置信息 影响全部模块
    局部配置:模块以下的配置信息 只影响当前模块  
    总结:局部配置优先于全局配置
    
    5)守护进程无差异同步配置
    目录之间实现无差异同步
    rsync -avz /null/ --delete [email protected]::backup 
    PS: 可以快速清空目录中的数据
    文件之间实现无差异同步(没什么用)
    rsync -avz /oldboy/hosts01 --delete [email protected]::backup --password-file=/etc/rsync.password
    
    6)守护进程的列表功能配置
    list = true
    在客户端,显示服务端的所有模块信息
    

3.rsync备份服务优缺点

  1. 优势

    1.可以实现增量备份
    2.具有守护进程模式(服务端)
      认证管理控制
      实现白名单黑名单安全访问控制
      密码文件信息,可以实现免交互传输数据
      网络连接数量进行限制
    3.实现数据的加密传输 -e
    
  2. 缺点

    1.比较擅长传输大文件,传输大量小文件,容易出问题 (需要打包)
    2.传输大文件,有可能会传输中断 --partial 断点续传
    

4.异常问题

01. 备份服务用户身份映射问题(uid 用户名称)
第一种情况:
    备份服务器有oldboy用户  存储服务器有oldboy用户
    oldboy uid(备份) == oldboy uid (存储)
第二种情况:
    备份服务器有oldboy用户  存储服务器有oldboy用户
    oldboy uid(备份) <> oldboy uid (存储)
    传输的数据信息,属主和属组信息也是oldboy
第三种情况
    备份服务器没有oldboy用户  存储服务器有oldboy用户
    oldgirl uid(备份)== oldboy uid (存储)
    传输的数据信息,属主和属组信息为oldgirl

02. 服务配置文件被移动到其他路径,如何启动服务
rsync --daemon  --config=/tmp/rsyncd.conf
03.指定服务端口号
--port 

day04 NFS安装部署

1.存储服务器概念

NFS是Network File System的缩写,中文意思是网络共享文件系统,它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录.

企业环境:实现数据共享存储
1. FTP服务器(windows--server-U)  部署安装麻烦 / 权限设置
2. samba软件                       部署安装麻烦 windows linux系统都支持
3. 分布式存储 Moosefs(mfs)、GlusterFS、FastDFS  

img

2.NFS存储服务器架构中作用

  1. 实现数据共享同一储存,保证数据一致性
  2. 降低公司架构服务器成本

3.NFS安装部署

RPC:远程过程中调用程序(开发网络编程) 起到的作用相当于中介作用
########################################################
服务器部署:
#第一步:软件部署安装
#yum源中没有 NFS服务首先要更新yum源
yum -y install epel-release
#第二步:编写配置文件
vim /etc/exports
#配置文件中写入
#存储目录信息    主机地址或网段信息-进行安全访问控制(共享目录权限参数)
/data           172.16.1.0/24(rw,sync)
#第三步:创建储存目录,并进行授权
mkdir /data
chown -R www.www /data
#第四步:启动服务
systemctl start rpcbind (设置开机启动 enable)
systemctl start nfs (设置开机启动 enable)
#第五步:进行检查验证
rpcinfo -p 172.16.1.31 #检查nfs服务信息是否注册
    [root@nfs01 ~]# rpcinfo -p 172.16.1.31
       program vers proto   port  service
        100000    4   tcp    111  portmapper
        100000    3   tcp    111  portmapper
        100000    2   tcp    111  portmapper
        100000    4   udp    111  portmapper
        100000    3   udp    111  portmapper
        100000    2   udp    111  portmapper
        100024    1   udp  36205  status
        100024    1   tcp  48893  status
        100005    1   udp  20048  mountd
        100005    1   tcp  20048  mountd
        100005    2   udp  20048  mountd
        100005    2   tcp  20048  mountd
        100005    3   udp  20048  mountd
        100005    3   tcp  20048  mountd
        100003    3   tcp   2049  nfs
        100003    4   tcp   2049  nfs
        100227    3   tcp   2049  nfs_acl
        100003    3   udp   2049  nfs
        100003    4   udp   2049  nfs
        100227    3   udp   2049  nfs_acl
        100021    1   udp  46407  nlockmgr
        100021    3   udp  46407  nlockmgr
        100021    4   udp  46407  nlockmgr
        100021    1   tcp  46327  nlockmgr
        100021    3   tcp  46327  nlockmgr
        100021    4   tcp  46327  nlockmgr

showmount -e 172.16.1.31 #检查是否有共享存储目录信息 
	[root@nfs01 ~]# showmount -e 172.16.1.31
    Export list for 172.16.1.31:
    /data 172.16.1.0/24
    
客户端部署:
#第一步:安装部署软件
yum install -y nfs-utils
#第二步:实现挂载存储目录
mount -t nfs  172.16.1.31:/data  /mnt
#第三步:查看是否挂载成功
[root@backup ~]# df -h |tail -1
Filesystem         Size  Used Avail Use% Mounted on
172.16.1.31:/data   19G  1.6G   18G   9% /mnt

4.nfs存储服务存储原理

  1. nfs服务端创建共享储存目录
  2. nfs客户端创建远程挂载点目录
  3. nfs客户端进行远程挂载
  4. 实现客户端数据信息统一一致

img

  1. 服务端做了三件事:

    1.启动rpcbind服务,创建中介
    2.启动nfs服务,创建房源信息
    3.将房源信息向中介进行注册,在nfs服务稳定运行中,房源信息只注册一次
    
  2. 客户端做了三件事:

    1.启动rpcbind服务
    2.确保客户端和服务端网络连接建立成功
    3.执行mount命令进行网络存储挂载
    

img

  1. 服务端注册进程信息:

    	[root@oldboy ~]# ps -ef|egrep "rpc|nfs"
        rpc        1564      1  0 09:32 ?        00:00:00 rpcbind
        rpc        1065      1  0 09:32 ?        00:00:00 rpc statd		<- 检查数据存储一致性
        root       4736      2  0 21:31 ?        00:00:00 [rpciod/0]
        root       5363      1  0 21:47 ?        00:00:00 rpc.rquotad	<- 磁盘配额进程(remote
        quote server)
    	                     带宽 100M  限速 1个人10M  2个人10M 
    						/ -- 分区大小10G   /tmp 8G  oldboy(6G)  oldgirl(2G) root (2G)
        root       5368      1  0 21:47 ?        00:00:00 rpc.mountd	<- 权限管理验证等(NFS 
        mount daemon)
        root       5375      2  0 21:47 ?        00:00:00 [nfsd4]
        root       5376      2  0 21:47 ?        00:00:00 [nfsd4_callbacks]
        root       5377      2  0 21:47 ?        00:00:00 [nfsd]		<- NFS主进程
        root       5378      2  0 21:47 ?        00:00:00 [nfsd] 		<- NFS主进程
        root       5379      2  0 21:47 ?        00:00:00 [nfsd] 		<- NFS主进程,管理登入,
        ID身份判别等。
        root       5380      2  0 21:47 ?        00:00:00 [nfsd]
        root       5381      2  0 21:47 ?        00:00:00 [nfsd]
        root       5382      2  0 21:47 ?        00:00:00 [nfsd]
        root       5383      2  0 21:47 ?        00:00:00 [nfsd]
        root       5384      2  0 21:47 ?        00:00:00 [nfsd]		<- NFS主进程
        root       5415      1  0 21:47 ?        00:00:00 rpc.idmapd	<- name mapping daemon
                                                                    用户压缩/用户映射(记录)
    
    

5.nfs配置文件参数说明

rw 	#设置共享目录权限为可读可写
ro 	#设置共享目录权限为只读
	#企业应用:开发人员想查看线上服务器数据,可以给只读权限
sync	#同步存储数据,数据传输到服务器--磁盘 保证数据安全性 存储服务器
async	#异步存储数据,数据传输到服务器--内存 保证数据传输效率
root_squash	#root用户传输数据需要做映射转换 nfsnobody
no_root_squash	#root用户传输数据不需要做映射转换 root
all_squash	#普通用户传输数据需要做映射转换 nfsnobody
no_all_squash	#普通用户传输数据不需要做映射转换,原来是什么用户,存储好的数据就是什么用户管理

企业中配置:
#root用户
no_root_squash:存储数据可以被客户端root用户随意改动
root_squash:   原有的其他用户文件不能查看,可以编辑 (推荐)
#普通用户
no_all_squash: 目录属主修改好,有效提高存储目录安全  (推荐)
 all_squash:    安全性较低
 
 企业存储服务器部署方案:
 服务端
 #第一步:编写配置文件
 vim /etc/exports
 /data 172.16.1.0/24(rw,sync,root_squash,no_all_squsah)
 #第二步:修改目录权限
 chown -R www.www /data
 #第三步:重启服务
 systemctl restart nfs
 
 客户端
 第一步:进行挂载
 mount -t nfs 172.16.1.31:/data /mnt

day05 NFS常见问题使用总结

1.NFS测试练习题

服务端要求:
    /data/r 可读 进行数据同步方式存储,将所有用户都做映射 (nfsnobody)
    /data/w 可读可写 进行数据同步方式存储,将所有用户都做映射 (nfsnobody)
客户端要求:
	web01 /data/r 存储目录共享目录/data/r 挂载点目录只有读的权限
	backup /data/w 存储共享目录/data/w 挂载点目录只可读可写
	
开始部署
#服务端
第一步编写配置文件:
    [root@nfs01 ~]# vim /etc/exports
    /data/r 172.16.1.0/24(ro,sync,root_squash,all_squash)
    /data/w 172.16.1.0/24(rw,sync,root_squash,all_squash)
第二步创建共享目录并设置权限:
    [root@nfs01 ~]# mkdir -p /data/{r,w}
    [root@nfs01 ~]# chown -R nfsnobody. /data
    [root@nfs01 ~]# ll /data
    total 0
    drwxr-xr-x 2 nfsnobody nfsnobody 30 Jun 14 17:39 r
    drwxr-xr-x 2 nfsnobody nfsnobody 31 Jun 14 17:44 w
第三步重启服务:
	systemctl reload nfs (reload 平滑重启)

#客户端
第一步创建挂载点目录:
web01
    [root@nfs01 ~]# mkdir -p /data/r
backup
	[root@nfs01 ~]# mkdir -p /data/w
第二步挂载目录:
web01
	mount -t nfs 172.16.1.31:/data/r /mnt
backup
	mount -t nfs 172.16.1.31:/data/w /mnt

2.NFS服务程序常见问题

  1. 服务权限不正确

    1.配置文件中权限参数书写不正确
    2.目录本身权限不正确,755,nfsnobody
    3.目录的权限具有继承关系
    	(注意:尽量储存服务配置文件中不要出现父子关系例如:/data 是挂载点 /data/r 是挂载点)
    4.客户端挂载参数权限指定不正确
    
  2. 错误信息 ‘/data/w’: Stale file handle

    文件句柄错误:存储服务端把共享目录取消了,客户端没有进行卸载
    查看 /etc/proc/mounts 文件有没有相关挂载信息 没有就是完全卸载了
    解决:将所有挂在信息,进行卸载重新挂载
    
  3. 存储服务无法进行启动:

    当服务没有启动的时候,无法使用reload平滑重启
    
  4. clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

    原因:防火墙服务没有关闭 客户端 --- 访问 --- 服务端 111
    
  5. RPC: Program not registered

    原因:rpcbind服务和nfs服务重启顺序不正确,nfs服务没有启动
    解决:两个服务全关闭,在按照顺序进行启动
    
  6. 无法卸载挂载目录:/data/w: device is busy

    方法一:离开挂载点目录进行卸载
    方法二:强制卸载
    	umount -lf /挂载点目录
    	-l lazy(懒惰)
    	-f force(强制)
    
  7. nfs实现restart重启==放大招(大招冷却时间cd)

    当重启完 不能立刻创建文件 需要等待原因
    在系统配置中/etc/sysconfig/nfs中指定了无敌时间的配置参数
    NFSD_V4_GRACE=90
    NFSD_V4_LEASE=90
    NLM_GRACE_PERI0D=90
    
  8. 补充:运维异常问题三种大招 被人攻击了 负载过高

    1. 服务重启
    2. 操作系统重启
    3. 服务或系统重装
    

3.存储服务重要文件/命令总结

路径 文件作用
/etc/exports 存储服务端配置文件
/usr/sbin/exportfs 负责平滑重启nfs服务
/usr/sbin/showmount 检查可用储存共享目录信息
/var/lib/nfs/etab nfs服务默认配置信息记录文件(日志文件)
/proc/mounts 显示客户端挂载信息文件(默认挂载参数)
[root@nfs01 ~]# exportfs -rv
exporting 172.16.1.0/24:/data

可以临时配置共享存储目录信息
exportfs -o rw,sync 172.16.1.0/24:/data

4.客户端挂载参数说明

  1. 客户端如何实现自动挂载

    方法一:/etc/fstab
    编写fstab文件 
    172.16.1.31:/data/w     /data/w    nfs    defautls    0 0
    
    remote-fs.target 必须启动,才能加载fstab
    
    centos6:系统启动流程----串行启动
    1./etc/fstab 网络配置
    2.network
    3.netfs服务
      服务启动之后,重新加载fstab文件
    
    centos7:系统启动流程----并行启动
    1./etc/fatab 网络配置
    2.network remote-fs
    3.系统启动完毕:重新加载fatab
    
    方法二:
    写入到/etc/rc.local ---- 文件权限是可执行权限
    
  2. 客户端挂载权限参数信息:

    mount -o xx xx
    客户端(开机自动挂载) --- 开机尝试挂载 --- nfs服务端
    
    #fg/bg:
    	fg:程序在前台运行 mount -t nfs xxx
    	bg:程序在后台运行 mount -t nfs -o bg
    	
    #soft/hard:
    	soft:出现nfs服务端停止,只尝试挂载一段时间,一段时间过后停止挂载
    	hard:出现nfs服务端停止,一直尝试挂载,根本停不下来
    	
    #rw/ro:
    	指定挂载点目录权限
    	
    #suid/nosuid:
    	特殊权限setuid=suid 安全性
    	权限位:像文件所有者执行操作动作一样
    	suid:挂载点目录中suid功能是可以起作用的
    	nosuid:挂载点目录文件suid权限是没用的
    	
    #exec/noexec:存储目录中的文件是否可以直接执行
    	exec:可以让存储目录可执行文件直接运行 安全性
    	noexec:不可以让存储目录可执行文件直接运行
    
    #auto/noauto:fstab文件进行指定挂载参数
    	mount -a 快速加载fstab文件中的配置信息
    	remount 重新挂载
    
    企业案例:文件系统异常: 阵列 分区 格式化(创建文件系统 ext3 ext4 xfs) 挂载
    什么是文件系统:数据进行存储方式(机制) fat32(单个文件不能大于4G)  ntfs(不管数据多大都可以直接存储)
    系统全部数据出现只读情况
    mount -o remount rw  /   
    
    架构中耦合度:(架构师)
    架构中一台服务器出现问题,影响其他服务器运行  -- 紧耦合
    架构中一台服务器出现问题,不会影响其它服务    -- 松耦合 (分布式存储)
    
    

day06 全网备份

1.全网备份需求

1、基本备份要求
已知 3 台服务器主机名分别为 web01、backup 、nfs01,主机信息见下表:
服务器说明 外网 IP(NAT) 内网 IP(NAT) 主机名称
nginx web 服务器 10.0.0.8/24 172.16.1.8/24 web01
NFS 存储服务器 10.0.0.31/24 172.16.1.31/24 nfs01
rsync 备份服务器 10.0.0.41/24 172.16.1.41/24 backup
要求:每天晚上 00 点整在 Web 服务器上打包备份系统配置文件、网站程序目录及访问日
志并通过 rsync 命令推送备份服务器 backup 上备份保留(备份思路可以是先在本地按日
期打包,然后再推到备份服务器 backup 上),NFS 存储服务器同 Web 服务器,实际工作
中就是全部的服务器。
具体要求如下:
	1)所有服务器的备份目录必须都为/backup。
	2)要备份的系统配置文件包括但不限于:
		a.定时任务服务的配置文件(/var/spool/cron/root)(适合 web 和 nfs 服务器)。
		b.开机自启动的配置文件(/etc/rc.local)(适合 web 和 nfs 服务器)。
		c.日常脚本的目录 (/server/scripts)。
		d.防火墙 iptables 的配置文件(/etc/sysconfig/iptables)。
		e.自己思考下还有什么需要备份呢?
	3)Web 服务器站点目录假定为(/var/html/www)。
	4)Web 服务器 A 访问日志路径假定为(/app/logs)
	5)Web 服务器保留打包后的 7 天的备份数据即可(本地留存不能多于 7 天,因为太多硬盘会
	满)
	6)备份服务器上,保留每周一的所有数据副本,其它要保留 6 个月的数据副本。
	7)备份服务器上要按照备份数据服务器的内网 IP 为目录保存备份,备份的文件按照时间名
	字保存。
	8)*需要确保备份的数据尽量完整正确,在备份服务器上对备份的数据进行检查,把备份的成功及失败结
	果信息发给系统管理员邮箱中(发邮件技巧见 VIP 群资料)。

2.解题思路

客户端
1.创建需要的目录
2.打包需要打包的文件或目录
3.删除7天以前的压缩包
4.生成指纹文件
5.推送文件到服务端

服务端
1.rsync部署完需要正常运行
2.创建所需要的目录
3.验证数据完整性
4.删除180天前的数据
5.发送通知邮件

3.NFS01脚本部署

vim /server/scripts/nfs01_backup.sh #编写脚本
--------------------------------脚本部署----------------------------------
#!/bin/bash
#变量
nfsdate=$(date +%F_%a -d -1day)
nfsdir="backup"
nfsname=$(hostname)
nfsip=$(hostname -i)
#cd / 打包
cd /
tar zchf /$nfsdir/$nfsip/${nfsname}_${nfsdate}.tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables
#删除7天前并删除
find /$nfsdir/$nfsip/ -type f -name "*.tar.gz" -mtime + 7 |xargs rm &>/dev/null
#md5校验
find /$nfsdir/$nfsip/ -type f -name "*.tar.gz" |xargs md5sum -c >/$nfsdir/$nfsip/finger.txt
#push
rsync -az /$nfsdir/$nfsip [email protected]::bakcup --password-file=/etc/rsync.password

-----------------------------------------------------------------------
#定时任务
crontab -e
* * * * * /bin/bash //server/scripts/nfs01_backup.sh

4.WEB01脚本部署

vim /server/scripts/web01_backup.sh
-----------------------------------脚本-----------------------------------
#!/bin/bash
#bialiang
ip=$(hostname -i)
webdir="backup"
webdate=$(date +%F_%a -d -1day)
webname=$(hostname)
#cd /
cd /
#mk dir
mkdir -p /$webdir/$ip/
#tar 
tar -zchf /$webdir/$ip/${webname}_sys_${webdate}.tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables
tar -zchf /$webdir/$ip/${webname}_www_${webdate}.tar.gz ./var/html/www
tar -zchf /$webdir/$ip/${webname}_logs_${webdate}.tar.gz ./app/logs
#find 7 ago del
find /$webdir/$ip/ -type f -name "*.tar.gz" -mtime +7 | xargs rm &>/dev/null
#find tar.gz md5
find /$webdir/$ip/ -type f -name "*.tar.gz" | xargs md5sum >/$webdir/$ip/finger.txt
#push
rsync -az /$webdir/$ip [email protected]::backup --password-file=/etc/rsync.password

定时任务
crontab -e 
* * * * * /bin/bash /server/scripts/web01_backup.sh

5.backup脚本部署

vim /server/scripts/backup_backup.sh
-----------------------------------脚本-----------------------
#!/bin/bash
#bianliang
dirbackup="backup"
#校验MD5
find /$dirbackup/ -type f -name "finger.txt" |xargs md5sum -c >/tmp/check_data.log
#删除180前的文件
find /$dirbackup/ -type f -name "*.tar.gz" -mtime +180 ! -name "*_Mon.tar.gz" |xargs rm &>/dev/null
#发送邮件
mail -s "今日备份结果" [email protected] </tmp/check_data.log
-------------------------------------------------------------------------
#定时任务
crontab -e
* * * * * /bin/bash /server/scripts/backup_backup.sh

day07远程连接ssh

1.远程连接服务概念介绍

SSH:系统默认设置 22 默认可以使用root用户进行登录 数据信息进行加密
TELNET:网站访问请求信息和响应信息进行加密(HTTPS)

2.远程连接服务连接原理

openssh   远程连接数据包进行加密处理
openssl   网站访问请求信息和响应信息进行加密(HTTPS)	
原理总结:
01. 客户端 - 服务端   请求建立ssh远程连接 
02. 服务端 - 客户端   请求确认公钥信息
03. 客户端 - 服务端   确认接收公钥信息,保存到~/.ssh/know_hosts文件中  
04. 服务端 - 客户端   询问用户密码信息
05. 客户端 - 服务端   用户密码信息
06. 服务端 - 客户端   确认密码信息正确 远程连接建立

01 之后:不用反复确认公钥信息
06 之后:所有传输的数据信息会进行加密处理
总结:
作用01:利用公钥和私钥对数据信息进行加密处理
作用02:对用户身份信息进行认证

3.远程连接通讯建立方式

基于口令方式(基于密码方式) 
基于秘钥方式

4.基于秘钥方式实现远程连接步骤:

管理端服务器
第一步:创建密钥对信息
ssh-keygen -t dsa

[root@web01 ~]# ssh-keygen -t dsa
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:v4ECG80UO1dv2WHn3jDkOrT/8luPwDks6NnGh4L8il8 root@web01
The key's randomart image is:
+---[DSA 1024]----+
|      .   .   + .|
|       o . . * + |
|      + .   = = .|
|     + o   o o +.|
|    o o S   +   o|
|     +   + o +   |
|    ....E.+.* . .|
|     .o+.o++.o.oo|
|    ..oo+oo.  .+=|
+----[SHA256]-----+
[root@web01 ~]# ll ~/.ssh/id*
-rw------- 1 root root 668 Jun 19 00:00 /root/.ssh/id_dsa
-rw-r--r-- 1 root root 600 Jun 19 00:00 /root/.ssh/id_dsa.pub

第二步:分发公钥
ssh-copy-id -i /root/.ssh/id_dsa.pub [email protected]

[root@web01 ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub [email protected]
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_dsa.pub"
The authenticity of host '172.16.1.31 (172.16.1.31)' can't be established.
ECDSA key fingerprint is SHA256:E/rcVrdk84L/HagYfRXIz1QC1pERVXeaQiu8dfyF0qY.
ECDSA key fingerprint is MD5:3c:a2:1e:8f:33:48:56:1d:14:aa:5c:6e:31:a9:de:8c.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

第三步:检查确认
ssh 172.16.1.31

[root@web01 .ssh]# ssh 172.16.1.31
Last login: Tue Jun 18 23:37:04 2019 from 10.0.0.1
[root@nfs01 ~]# exit
logout
Connection to 172.16.1.31 closed.
[root@web01 .ssh]# ssh 172.16.1.31 hostname
nfs01


被管理端服务器
第一步:检查确认
[root@nfs01 ssh]# cd /root/.ssh/
[root@nfs01 .ssh]# ll
total 8
-rw------- 1 root root 600 Jun 19 00:04 authorized_keys
-rw-r--r-- 1 root root 346 Jun 18 02:31 known_hosts
[root@nfs01 .ssh]# cat authorized_keys 
ssh-dss AAAAB3NzaC1kc3MAAACBALkIMlfU30rSp6A9F0+LMg5cPRbDoPlCTm82FuOVXMKieeqniuOMgRSsRlUIwuEIe1e3fwTGmwoKdYGa4RaV8S3ZFm+dc1rEFOIOgC2GLRjLRf14Hmp9ZMOQVpE6AWycs2ziImhxYznawjMm4YgYUGpkeobhM++6ri3MRd+J6wpXAAAAFQD3mmoOxftbuAShzVMzeD/y4T36SQAAAIBfgM8KWsy2+sJRsqKeGmjiXr7OXLTtPaeWjEhJc/Q06HyWuV/K0Phr+c8KHGL1ClgPr0/uUpmoelVy9/ng53olqNy2Vyb6QMyIfenBj6OlQ96WBKNOregKCMgbpOquYgXhCVWMELv7b8PTOV6Rrx1vD0hQI/V9hFTLIYxE95eoqwAAAIA4gYv/P2yJKa156sTPyk+F/e7oMgM5rcpGuLSRk4DV779GE7NFU33A9Xia6EbxDL1fzfkRq3YP83lpmrFYbg8UkEwZpLIPlmshIrvQsuVFnV9nt8JE+uQR75KhT0jTGZZv2mZ+g7NIWDEa1QFsbo+9Nauj8yADiLzXmXrDXCC2nw== root@web01

被管理主机有多台,进行批量分发公钥
解决免交互问题
1.第一次连接有yes/no
ssh-copy-id -i /root/id_rsa.pub 172.16.1.7 -o StrictHostKeyChecking=no
2.需要有密码信息确认
yum -y install sshpass
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.7 -o StrictHostKeyChecking=no

ssh-copy-id分发公钥原理:
1.进行ssh远程连接
2.scp将公钥进行传输
3.被管理端将公钥保存到用户家目录中的.ssh目录中
4.修改公钥文件名称和权限 authorized_keys 600

分发脚本
vim /server/scripts/fenfa_key.sh

#!/bin/bash
for ip in {7,31,41}
do
  echo "===============start fenfa_Key to 172.16.1.$ip========================="
  sshpass -p123456 ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.$ip -o StrictHostKeyChecking=no &>/dev/null
  if [ $? -eq 0 ]
  then
     echo "===============pub_key fenfa ok with 172.16.1.$ip========================="
     echo ""
  else
     echo "===============pub_key fenfa failed with 172.16.1.$ip========================="
     echo ""
  fi 
done

检查脚本:
[root@m01 scripts]# vim fenfa_check.sh 
#!/bin/bash
if [ $# -ne 1 ]
then
  echo "Usage: $0 请在脚本后面输入一个命令信息"
  exit 100
fi
for ip in {7,31,41}
do
  echo "===============start fenfa_Key to 172.16.1.$ip========================="
  ssh 172.16.1.$ip $1
done

1.if判断比较信息

=  -eq equal
>  -gt greater than
<  -lt less than
>= -ge greater equal
<= -less equal
<> -ne no equal

2.分发公钥问题说明

1.密码信息不正确
2.免密码分发公钥 yum -y install sshpass
3.分发公钥信息,需要分发你有的公钥,是否有公钥 m01-- /root/.ssh/id_xsa.pub

3.排错方法

1.测试脚本 ssh 172.16.1.7 hostname
2.脚本中命令手动执行
	sshpass -p123456 ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.$ip -o StrictHostKeyChecking=no

4.脚本免交互编写

03. 远程服务端口号发生变化了,如何修改脚本命令
centos7:掌握
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.7 -o StrictHostKeyChecking=no -p 52113
centos6:分发公钥
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub "10.0.0.7 -o StrictHostKeyChecking=no -p 52113"
Warning: Permanently added '[10.0.0.7]:52113' (RSA) to the list of known hosts.
Now try logging into the machine, with "ssh '10.0.0.7 -o StrictHostKeyChecking=no -p 52113'", and check in:.ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting.
[root@localhost ~]# ssh -p52113 10.0.0.7 hostname
web01

shift ---> 排队
餐饮店:1 2 3 4 5 6 7
员工:2 3 4 5 6 7
员工:3 4 5 6 7

ssh $1 "exec sh -c 'cd; umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys && (test -x /sbin/restorecon && /sbin/restorecon .ssh .ssh/authorized_keys >/dev/null 2>&1 || true)'"
01. 远程连接到指定主机
02. 切换到家目录,临时修改umask数值
03. 判断是否存在.ssh目录,不存在创建.ssh 
04. 生成.ssh/authorized_keys,并且把公钥信息保存在此文件中

5.总结:掌握批量分发公钥脚本编写能力

1.解决免交互问题:yes/no 密码问题
2.远程被管理主机端口变化:解决端口问题

5.SSH服务端配置文件说明

vim /etc/ssh/sshd_config
#Port 22                 --- 指定服务端口号信息
#ListenAddress 0.0.0.0   --- 指定相应网卡可以接收远程访问请求  web
						#默认:主机上所有网卡都可以接收远程连接请求
						#监听地址信息,一定是本地网卡上有的地址信息******
#PermitEmptyPasswords no --- 是否允许空密码登录
#PermitRootLogin yes     --- 不允许root用户登录
#UseDNS yes              --- 是否进行DNS反向解析 no  172.16.1.31 --> 172.16.1.61
GSSAPIAuthentication yes --- 是否开启GSSAPI  no     

6.SSH防范远程入侵方案

https://blog.51cto.com/phenixikki/1546669
1. 用密钥登录,不用密码登陆
2. 防火墙封闭SSH,指定源IP限制(局域网、信任公网)  ???
3. 尽量不给服务器外网IP
4. 负载均衡主机,只监听内网地址的远程访问
5. 最小化(软件安装-授权)  web nfs rsync mysql zabbix ... 端口(门)
yum install -y nmap  --- 扫描网站端口信息
nmap -p 1-65535 www.baidu.com   80 443
6. 给系统的重要文件或命令做一个指纹   md5sum -c /etc/passwd  abcd  --- zabbix
7. chattr +i 锁住文件  

day08 综合架构批量管理服务

1.ansible批量管理服务概述

1.1 ansible批量功能          -- 并行
1.1.1 可以实现批量系统操作配置
1.1.2 可以实现批量软件服务部署
1.1.3 可以实现批量文件数据分发
1.1.4 可以实现批量系统信息收集

1.2 ansible批量管理服务意义
1.2.1提高工作的效率(部署综合架构)  
1.2.2提高工作准确度
1.2.3减少维护的成本
1.2.4减少重复性工作

2.ansible软件安装部署

2.1 特点
2.1.1 没有配置文件(不需要配置)
2.1.2 不需要启动服务
2.1.3 客户端没有需要部署任务

2.2 管理服务器
2.2.1 第一步:安装ansible 需要有epel源
	yum install -y ansible

3.ansible 软件主机清单

  1. ansible 软件功能组成模块

    ansible软件功能组成模块:
    主机清单功能模块
    剧本功能模块
    核心或自定义模块
    插件功能(python)

  2. 主机清单是什么

    • 编辑管理主机信息配置文件

    [外链图片转存失败(img-lqEVGaNk-1562167294247)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561189979789.png)]

    [外链图片转存失败(img-VRpW0x16-1562167294248)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561190055541.png)]

    • 语法格式

      ansible 管理主机信息 -m ping

    [外链图片转存失败(img-ZxieCxUi-1562167294249)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561190114883.png)]

    [外链图片转存失败(img-6gf7KhdC-1562167294250)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561190136852.png)]

    • 测试ansible连接失败,排错思路:

      01. 利用SSH远程连接测试   (重新分发公钥)
      02. SSH测试成功,ansible测试失败
      	在被管理主机上,杀死ssh特殊进程
      	sshd: root@notty
      
      
    • 主机清单如何进行配置

      参考文档https://docs.ansible.com/
      

      第一种配置方法:指定主机组配置

      [外链图片转存失败(img-n9XpRSmv-1562167294252)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561190263506.png)]

      [外链图片转存失败(img-SZ2UaII5-1562167294253)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561190270081.png)]

      第二种配置方法: 支持主机名符号匹配配置

      [外链图片转存失败(img-xoQuAqsI-1562167294255)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561190279960.png)]

      第三种配置方法: 支持内置变量信息配置

      [外链图片转存失败(img-5gCQiaZq-1562167294257)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561190289289.png)]

      [外链图片转存失败(img-r5f8C7nv-1562167294258)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561190295838.png)]

      第四种配置方法:支持特殊变量信息配置 (剧本)

      [外链图片转存失败(img-I9ZfLEPP-1562167294259)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561190307091.png)]

      第五种配置方法:嵌入式配置方法

      [外链图片转存失败(img-kI7PPu0M-1562167294259)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561190317952.png)]

      [外链图片转存失败(img-zhDX6HRC-1562167294260)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561190322914.png)]

4.ansible 软件模块实践

  1. 模块的作用:

    完成不同的批量管理功能ping(测试)

  2. 显示ansible所有模块数量:

    [外链图片转存失败(img-CnWdCzJe-1562167294261)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561190435916.png)]

    10几个模块需要掌握

  3. ansible 命令语法:

    ansible 主机信息(ip/主机组/all) -m command(模块名) -a  "动作"
    1		       2			 3           4       5    6
    
  4. 第一个模块:命令模块 --command(默认)

    • 作用:在目标主机执行命令:

    • 参数

      chdir:在执行命令前,先切换目录信息
      creates:判断一个文件是否存在,如果存在,后面的命令跳过不执行
      removes:判断一个文件是否存在,如果存在,后面命令就执行
      free_from:在使用command模块时必须输入一个合法的linux命令
      
    • 基本用法

      [外链图片转存失败(img-CQoWcbnY-1562167294264)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561192550327.png)]

    • chdir 参数

      [外链图片转存失败(img-peqKLaH4-1562167294265)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561192571735.png)]

    • creates 参数

      [外链图片转存失败(img-W8CFagKw-1562167294266)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561192600797.png)]

      [外链图片转存失败(img-1xVSEfym-1562167294267)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561192605226.png)]

      [外链图片转存失败(img-2Yl18Olo-1562167294268)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561192608740.png)]

      [外链图片转存失败(img-kALLKT42-1562167294269)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561192614914.png)]

    • removes 参数: (还是使用creates的操作环境)

      [外链图片转存失败(img-BcG9GL8J-1562167294270)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561192640970.png)]

      [外链图片转存失败(img-DgrtdI8c-1562167294272)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561192646407.png)]

      [外链图片转存失败(img-cQDhkCrM-1562167294274)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561192651667.png)]

      [外链图片转存失败(img-ACsLw4Kt-1562167294275)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561192655295.png)]

  5. 第二个模块:命令模块-shell (万能模块)

    • 作用:在目标主机执行命令

    • 参数

      chdir:在执行命令前,先切换目录信息
      creates:判断一个文件是否存在,如果存在,后面命令不执行
      removes:判断一个文件是否存在,如果存在,后面命令就执行
      free_form:在使用command模块时候必须输入一个合法的linux命令 
      可以识别一些特殊字符  < > | ; $
      PS: shell模块虽然是万能模块,但最好选择专业的模块完成专业事情
      
    • 参数操作同command

      [外链图片转存失败(img-wTr19yxs-1562167294277)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561197108119.png)]

  6. 第三个模块 脚本模块 -scripts(执行脚本)

    • 第一步编辑脚本

      [外链图片转存失败(img-gBc9rVI9-1562167294278)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561197200067.png)]

    • 运行脚本

      [外链图片转存失败(img-1XesJ3Ik-1562167294279)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561197222729.png)]

    • 验证

      [外链图片转存失败(img-QPFgeIQr-1562167294280)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561197231796.png)]

  7. 第四个模块:文件模块 -copy (批量分发文件—推)

    • 作用

      1.分发文件数据信息	从管理段---被管理段
      2.修改文件权限属性信息
      3.移动远程主机数据信息 被管理段 --- /tmp/tts.txt ---/opt
      
    • 参数

      src:指定要推送的数据信息
      dest:指定数据保存在远程主机什么目录中
      mode:修改文件权限信息
      owner:修改文件属主信息
      group:修改文件属组信息
      backup:分发文件数据时,会对源文件进行备份
      remote_src:复制远程主机文件到其他路径,或者进行远程主机数据备份
      content:直接编辑文件内容
      
    • 基本用法

      [外链图片转存失败(img-7BISzlqR-1562167294284)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561197346156.png)]

      [外链图片转存失败(img-mZwol30F-1562167294285)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561197352380.png)]

    • 特殊用法:传输文件时,修改文件权限

      [外链图片转存失败(img-6s8Qr3yX-1562167294286)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561197368335.png)]

      [外链图片转存失败(img-xGvuuZZf-1562167294287)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561197371911.png)]

    • 特殊用法:分发文件时,对源文件进行备份

      [外链图片转存失败(img-PGbaBSDf-1562167294288)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561197385817.png)]

      [外链图片转存失败(img-sypdObTi-1562167294289)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561197391457.png)]

    • 特殊用法:远程主机文件进行复制备份(便于批量还原)

      [外链图片转存失败(img-zJKt36rG-1562167294290)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561197406067.png)]

      [外链图片转存失败(img-pHNu5P31-1562167294292)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561197411359.png)]

    • 特殊用法:直接编辑文件信息,并且进行批量分发

      [外链图片转存失败(img-qjg8E6QD-1562167294293)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561197480072.png)]

      [外链图片转存失败(img-0tUDHTof-1562167294294)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561197489170.png)]

  8. 第五个模块:文件模块 - fetch(批量拉取文件—拉) 扩展

    • 基本用法

      [外链图片转存失败(img-tvA7bbUo-1562167294296)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561197586773.png)]

      [外链图片转存失败(img-pWsTiFlA-1562167294297)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561197594915.png)]

  9. 第六个模块:文件模型 - file (修改文件权限)

    • 作用

      1.修改文件权限信息
      2.创建数据信息/删除数据信息
      
    • 基本用法:修改文件权限

      [外链图片转存失败(img-BOQ82pUI-1562167294298)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561197655785.png)]

      [外链图片转存失败(img-Kuzhp6x0-1562167294300)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561197658884.png)]

    • 特殊用法:创建数据信息:

      • 参数

        参数:state
        absent       -- 删除数据信息 
        directory    -- 创建目录
        file ←
        hard         -- 创建硬链接
        link         -- 创建软链接
        touch        -- 创建文件
        
    • 创建文件

      [外链图片转存失败(img-QZMccROY-1562167294302)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561197712800.png)]

      [外链图片转存失败(img-vuzpkNZe-1562167294303)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561197716177.png)]

    • 创建目录

      [外链图片转存失败(img-9PXDOHJI-1562167294304)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561197882450.png)]

      [外链图片转存失败(img-ZJx7c6qq-1562167294305)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561197888026.png)]

    • 创建链接文件:软连接/硬链接

      创建硬链接

      [外链图片转存失败(img-pkLKO4CZ-1562167294306)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561197923420.png)]

      [外链图片转存失败(img-29qOeGtb-1562167294308)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561197927014.png)]

      创建软连接

      [外链图片转存失败(img-fg57xrSi-1562167294309)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561197935747.png)]

      [外链图片转存失败(img-0Ft21smc-1562167294310)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561197939945.png)]

    • 删除文件数据:

      [外链图片转存失败(img-gphvopQT-1562167294311)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561197952070.png)]

      [外链图片转存失败(img-wCTIHieo-1562167294312)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\1561197955404.png)]

5.ansible软件学习方法

官方资料:docs.ansible.com
通过帮助命令:
	ansible-doc -l      --- 查看模块的作用说明
	ansible-doc -s yum  --- 查看指定模块参数说明
	ansible-doc yum     --- 显示模块详细说明
总结学习过的模块

6.ansible 输出信息有颜色显示

绿色: 操作执行成功,没有对远程主机做任何改动
黄色: 操作执行成功,对远程主机数据信息有改动
红色: 操作执行失败
粉色: 操作警告信息(忠告)
蓝色: 显示命令操作执行的过程

day09

1.ansible模块应用

cron 定时任务模块:
作用:批量添加设置定时任务信息
*       *      *     *       *        定时任务信息 &>/dev/null
分      时     日    月      周
minute  hour   day   month  weekday   job='任务信息 &>/dev/null'
参数:
minute  hour   day   month  weekday  --- 时间参数
job	--指定定时任务信息
name	--添加注释信息
state   -- absent 删除定时任务 present 添加定时任务
disabled   -- 注释定时任务 yes  取消定时任务注释 no

批量编写定时任务:每隔5分钟,时间同步
# ansible backup -m cron -a "name='date ntpdate crond02'  minute=*/5 job='ntpdate ntp1.aliyun.com &>/dev/null'"
172.16.1.41 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "envs": [], 
    "jobs": [
        "date ntpdate crond", 
        "date ntpdate crond02"
    ]
}

批量删除定时任务信息:
[root@m01 ~]# ansible backup -m cron -a "name='date ntpdate crond' state=absent"
172.16.1.41 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "envs": [], 
    "jobs": []
}

批量注释定时任务信息:
[root@m01 ~]# ansible backup -m cron -a "name='date ntpdate crond'  minute=*/5 job='ntpdate ntp1.aliyun.com &>/dev/null' disabled=yes"
172.16.1.41 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "envs": [], 
    "jobs": [
        "date ntpdate crond"
    ]
}

yum 批量下载安装软件
作用:安装部署软件
参数:
name:  指定软件名称
state: 指定动作信息  installed 

安装软件
[root@m01 ~]# ansible backup -m yum -a "name=nmap state=installed"
172.16.1.41 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "msg": "", 
    "rc": 0, 
    "results": [
        "2:nmap-6.40-16.el7.x86_64 providing nmap is already installed"
    ]
}

service 管理服务状态模块
作用:批量启动/停止服务程序  设置服务是否开机自动启动
参数:
name:   定义服务名称
state:  是否启动 started 停止 stopped 重启 restarted 平滑重启 reloaded
enabled:设置服务是否开机自动启动 

设置服务启动/停止:
ansible backup -m service -a "name=firewalld state=started enabled=yes"
ansible backup -m service -a "name=firewalld state=stopped enabled=no"

user  用户管理模块
作用  创建用户信息
参数 
name  创建的用户名称
uid   指定用户的uid信息
group    指定属于主要组
groups   指定属于哪个附属组
password 设置用户密码信息???
shell    指定登录方式 /bin/bash  /sbin/nologin
create_home:

创建虚拟用户:
[root@m01 ~]# ansible backup -m user -a "name=Alex uid=250 group=root groups=oldboy shell=/sbin/nologin create_home=no"
172.16.1.41 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "comment": "", 
    "create_home": false, 
    "group": 0, 
    "groups": "oldboy", 
    "home": "/home/Alex", 
    "name": "Alex", 
    "shell": "/sbin/nologin", 
    "state": "present", 
    "system": false, 
    "uid": 250
}

设置用户密码:
PS:密码信息必须是加密的
ansible backup -m user -a 'name=Alex02 password="$6$oldgirl$kAUTXVC2z1agr1HlmpFe9abFhWKwJ1fNyg64F95U3rVumwQfqOuhV3YkyZU9.H79TChzIKn5epl5M18B199qV1"'
如何生成密码信息:
=================================================================================================
ps: 密码密文生成方式:
https://docs.ansible.com/ansible/faq.html#how-do-i-generate-crypted-passwords-for-the-user-module
方法一: 
ansible all -i localhost, -m debug -a "msg={{ 'mypassword' | password_hash('sha512', 'mysecretsalt') }}"
mypassword   	--- 明文密码信息
sha512       	--- 明文转换为密文加密方法
mysecretsalt 	--- 用什么做算法依据生成密文信息
ansible all -i localhost, -m debug -a "msg={{ 'oldboy123' | password_hash('sha512', 'oldgirl') }}"

实践操作:
[root@m01 ~]# ansible all -i localhost, -m debug -a "msg={{ '123456' | password_hash('sha512', 'oldboy123') }}"
localhost | SUCCESS => {
    "msg": "$6$oldboy123$W3jkmkkVTr.9UStm4S50RT2uIEjB/4GEtaAeVCSZ..uWVN1YGxHvluss9JVfAPV0gSJoGn1qAfxGyttIsTjcz0"
}

方法二:  在centos7中无法使用
mkpasswd --method=sha-512
		
方法三:  利用python模块功能
yum install python-pip
pip install passlib			
python -c "from passlib.hash import sha512_crypt; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))"
=================================================================================================

mount  挂载模块
作用:实现批量挂载操作
参数: 
src    :需要挂载存储设备信息
path   : 挂载点路径信息
fstype :挂载类型信息
state  :挂载操作(mounted present)/卸载操作(unmounted absent)
         mounted: 可以实现立即挂载  永久开机自动挂载
		 present:                   永久开机自动挂载
		 unmounted: 可以实现立即卸载
		 absent:    可以实现立即卸载  永久卸载

批量挂载操作:
ansible 172.16.1.7 -m mount -a "src=172.16.1.31:/data path=/mnt fstype=nfs state=mounted"
172.16.1.7 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "dump": "0", 
    "fstab": "/etc/fstab", 
    "fstype": "nfs", 
    "name": "/mnt", 
    "opts": "defaults", 
    "passno": "0", 
    "src": "172.16.1.31:/data"
}

2.批量部署服务

编写脚本:
一键化部署rsync服务:ansible命令
rsync服务部署流程:
服务端部署:
01. 安装软件程序
    ansible 172.16.1.41 -m yum -a "name=rsync state=installed"
02. 编写配置文件
    ansible 172.16.1.41 -m copy -a "src=/etc/rsyncd.conf dest=/etc/"
03. 创建虚拟用户
    ansible 172.16.1.41 -m user -a "name=rsync shell=/sbin/nologin create_home=no"
04. 创建密码文件,并修改权限
    ansible 172.16.1.41 -m copy -a "content='rsync_backup:oldboy123' dest=/etc/rsync.password mode=600"
05. 创建备份目录,并修改权限
    ansible 172.16.1.41 -m file -a "path=/backup state=directory owner=rsync group=rsync"
06. 启动程序服务
    ansible 172.16.1.41 -m service -a "name=rsyncd state=restarted enabled=yes"

客户端部署:
01. 安装软件程序 
    ansible rsync_client -m yum -a "name=rsync state=installed"
02. 创建密码文件,并修改权限 
    ansible rsync_client -m copy -a "content='oldboy123' dest=/etc/rsync.password mode=600"

3.利用剧本功能完成服务程序一键化部署

模块--命令
剧本--脚本:汇总多个模块的批量操作

剧本如何编写: python yaml 语法规范
三种规范原则:
空格:  缩进信息  两个空格  
        PS:编写剧本时,将tab键扣掉
冒号:  key-value(键值关系)  hosts: 172.16.1.41
        冒号后面不需要有空格情况:
		01. 以冒号结尾
        02. 冒号信息出现在注释信息中
短横线:- 生成列表信息  
- hosts: 172.16.1.41
- hosts: 172.16.1.31

剧本内容编写:(剧本 -- 人 事件)
mkdir /etc/ansible/ansible_playbook
vim /etc/ansible/ansible_playbook/test.yaml

- hosts: 172.16.1.41/oldboy/all 
  tasks:
    - yum: name=rsync state=installed
    - copy: src=/etc/rsyncd.conf dest=/etc/
    
剧本执行方法:
01. 检查剧本语法信息
    # ansible-playbook --syntax-check test.yaml 
    playbook: test.yaml
02. 剧本模拟执行
    ansible-playbook -C test.yaml
03. 真实执行剧本
    ansible-playbook  test.yaml
	
常见问题:
01. 如果安装了cowsay
    vim /etc/ansible/ansible.cfg
	nocows = 1

4.一键化剧本编写

rsync服务程序一键化剧本
第一个历程:修改主机清单
[rsync_client]
172.16.1.7
172.16.1.31

第二个历程:创建所需分发文件
/etc/ansible/ansible_playbook/rsyncd.conf 

第三个历程:编写剧本文件
[root@m01 ansible_playbook]# cat rsync_auto.yaml 
- hosts: 172.16.1.41
  tasks:
    - name: 01:install rsync software
      yum: name=rsync state=installed
    - name: 02:push client
      copy: src=./rsyncd.conf dest=/etc/
    - name: 03:create user
      user: name=rsync shell=/sbin/nologin create_home=no
    - name: 04:create password file
      copy: content='rsync_backup:oldboy123' dest=/etc/rsync.password mode=600
    - name: 05:create backup dir
      file: path=/backup state=directory owner=rsync group=rsync
    - name: 06:重启rsync服务
      service: name=rsyncd state=restarted enabled=yes  

- hosts: rsync_client
  tasks:
    - name: 01:ceate password file
      copy: content='oldboy123' dest=/etc/rsync.password mode=600

第四个历程:测试剧本功能
	
07. 课程知识总结说明:
    1) ansible模块实践说明
	    cron yum service user mount 
	2) ansible剧本实践说明
	    剧本编写规范(格式-3点 内容 人 事(模块))
		剧本执行方法(测试语法 模拟执行 真实执行)
    3) 完成了rsync一键化部署剧本

day10

day11 sersync实时备份

1.数据实现同步备份

概念说明:
	定时同步备份数据:缺点,备份的周期最短为1分钟 企业内部人员数据
	实现同步备份数据:数据同步备份效率高        用户外部人员数据

同步原理:
	1.发现指定目录数据有变化	inotify
	2.将变化数据进行传输备份	rsync
	3.利用脚本实现实时同步	while循环(条件判断)->sersync

2.实时监控软件

1.监控软件安装部署
  yum -y install inotify-tools
2.软件命令应用
  rpm -ql inotify-tools
  rpm -qc 服务	---查看服务程序配置文件保存路径
  
  inotifywait	---监控目录变化的数据信息
  inotifywatch	---监控变化事件次数
  监控事件信息:增加信息 删除信息 修改信息 移动数据
  
  inotifywait参数说明:
  --exclude <pattern>    --- 排除指定数据信息,不做实时同步
  --excludei <pattern>   --- 排除指定数据信息(数据信息忽略大小写),不做实时同步
  -m|--monitor           --- 实时一直进行监控(默认只监控一次)
  -r|--recursive	       --- 递归监控目录
  --format <fmt>	       --- 设置监控输出信息的格式 (了解)
  --timefmt <fmt>        --- 时间格式设定
  -e|--event	           --- 指定监控事件  (只监控目录中是否有新的数据创建)
  -q|--quiet    	       --- 减少命令输出的信息
  
  inoyify事件信息:
  	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
	                  文件或目录在指定监控目录中进行删除

3.监控软件操作实例

[root@nfs01 data]# inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f 事件:%e'  /data
24/06/19 09:41 /data/oldboy06.txt 事件:CREATE
24/06/19 09:41 /data/oldboy06.txt 事件:OPEN
24/06/19 09:41 /data/oldboy06.txt 事件:ATTRIB
24/06/19 09:41 /data/oldboy06.txt 事件:CLOSE_WRITE,CLOSE

sed命令替换修改内容
24/06/19 09:44 /data/oldboy01.txt 事件:OPEN    打开源文件信息
24/06/19 09:44 /data/sedLDr3BA 事件:CREATE     创建一个临时文件
24/06/19 09:44 /data/sedLDr3BA 事件:OPEN       将临时文件打开
24/06/19 09:44 /data/oldboy01.txt 事件:ACCESS  访问源文件信息
24/06/19 09:44 /data/sedLDr3BA 事件:MODIFY     修改临时文件
24/06/19 09:44 /data/sedLDr3BA 事件:ATTRIB     修改临时文件属性
24/06/19 09:44 /data/oldboy01.txt 事件:CLOSE_NOWRITE,CLOSE   源文件不做任何改动
24/06/19 09:44 /data/sedLDr3BA 事件:CLOSE_WRITE,CLOSE        临时文件修改完毕保存
24/06/19 09:44 /data/sedLDr3BA 事件:MOVED_FROM               临时文件进行重命名操作             
24/06/19 09:44 /data/oldboy01.txt 事件:MOVED_TO

4.脚本如何实现实时同步

#!/bin/bash
inotifywait /data -mrq --format '%w%f' -e "modify,close_write,move,create,delete"|\
while read line
do 
  #将数据进行推送
  rsync -avz --delete /data/ [email protected]::backup --password-file=/etc/rsync.password
done

5.脚本执行的问题

1.脚本执行,有可能停不下来
  ctrl+z	暂停脚本
  停止脚本进程
  kill -9	强制停止脚本
  kill 进程号	停止进程
  killall	进程名	停止进程后会有提示
  pkill	进程名	停止进程,模糊匹配进程停止后没有提示
  pkill -f 进程名	停止进程,精准配置
  fg	江金城放入前台
2.脚本执行.远程xshell断开连接,脚本即停止
sh inotify.sh &	将脚本放入后台运行

6.利用sersync软件实现实时同步

1.sersync软件下载安装	二进制(解压后直接只用)
  官方资料:https://github.com/wsgzao/sersync
  mkdir /server/tools #创建存储软件目录
  unzip sersync包名.zip #解压软件包
  mv sersync/ /usr/local #把解压出来的软件 移动到/usr/local
2.编写sersync服务配置文件
  cd /usr/local/sersync/conf #进入配置文件目录
  vim /confxml.xml #编写配置文件
  
  <debug start="true"/>
  #将debug修改为true,表示显示sersync程序执行过程
  6     <filter start="false">
  7         <exclude expression="(.*)\.svn"></exclude>
  8         <exclude expression="(.*)\.gz"></exclude>
  9         <exclude expression="^info/*"></exclude>
  10         <exclude expression="^static/*"></exclude>
  11     </filter>
  #说明:排除指定信息不需要进行同步
  
  12     <inotify>
  13         <delete start="true"/>
  14         <createFolder start="true"/>
  15         <createFile start="false"/>
  16         <closeWrite start="true"/>
  17         <moveFrom start="true"/>
  18         <moveTo start="true"/>
  19         <attrib start="false"/>
  20         <modify start="false"/>
  21     </inotify>
  #说明:指定监控事件信息

  24         <localpath watch="/data/">
  25             <remote ip="172.16.1.41" name="backup"/>
  26             <!--<remote ip="192.168.8.39" name="tongbu"/>-->
  27             <!--<remote ip="192.168.8.40" name="tongbu"/>-->
  28         </localpath>
  29         <rsync>
  30             <commonParams params="-az"/>
  31             <auth start="false" users="root" passwordfile="/etc/rsync.password"/>
  32             <userDefinedPort start="false" port="874"/><!-- port=874 -->
  33             <timeout start="false" time="100"/><!-- timeout=100 -->

7.sersync服务启动

cd /usr/local/sersync/bin/ #进入目录
chmod a+x sersync #增加执行权限

/usr/local/sersync/bin/sersync -help #查看帮助
参数信息:
-d(daemon)  --- 让服务以守护进程方式运行
-r            --- 递归复制同步数据
-o            --- 读取加载指定同步文件
			 -o 配置文件(confxml.xml)  --- watch "/data"  --- /usr/local/sersync/conf/confxml.xml
			 -o 配置文件(confxml01.xml)--- watch "/data01"--- /usr/local/sersync/conf/confxml01.xml

sersync -dro  /usr/local/sersync/conf/confxml.xml #执行脚本 如果不在相对路径下 不要用绝对路径执行

8.inotify服务优化说明

在/proc/sys/fs/inotify/目录下有三个文件,对inotify机制有一定的限制
max_queued_events:	设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)
327679
max_user_instances: 设置每个用户可以运行inotifywait或inotifywatch命令进程数
128                  
max_user_watches:	设置inotify实例事件(event)队列可容纳的事件数量
root ---/data   oldboy01.txt  --- create事件 
root ---/data   oldboy02.txt  --- create事件    -- 内存
oldboy ---/data   oldboy03.txt  --- delete事件  -- 内存
50000000

9.NFS怎么解决单点问题

1.可以使用分布式存储
2.可以使用keeaplived 脚本
3.可以使用启用nfs方案(实时同步)

day12

de>
10
11
#说明:排除指定信息不需要进行同步

12
13
14
15
16
17
18
19
20
21
#说明:指定监控事件信息

24
25
26
27
28
29
30
31
32
33


### 7.sersync服务启动

```bash
cd /usr/local/sersync/bin/ #进入目录
chmod a+x sersync #增加执行权限

/usr/local/sersync/bin/sersync -help #查看帮助
参数信息:
-d(daemon)  --- 让服务以守护进程方式运行
-r            --- 递归复制同步数据
-o            --- 读取加载指定同步文件
			 -o 配置文件(confxml.xml)  --- watch "/data"  --- /usr/local/sersync/conf/confxml.xml
			 -o 配置文件(confxml01.xml)--- watch "/data01"--- /usr/local/sersync/conf/confxml01.xml

sersync -dro  /usr/local/sersync/conf/confxml.xml #执行脚本 如果不在相对路径下 不要用绝对路径执行

8.inotify服务优化说明

在/proc/sys/fs/inotify/目录下有三个文件,对inotify机制有一定的限制
max_queued_events:	设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)
327679
max_user_instances: 设置每个用户可以运行inotifywait或inotifywatch命令进程数
128                  
max_user_watches:	设置inotify实例事件(event)队列可容纳的事件数量
root ---/data   oldboy01.txt  --- create事件 
root ---/data   oldboy02.txt  --- create事件    -- 内存
oldboy ---/data   oldboy03.txt  --- delete事件  -- 内存
50000000

9.NFS怎么解决单点问题

1.可以使用分布式存储
2.可以使用keeaplived 脚本
3.可以使用启用nfs方案(实时同步)

猜你喜欢

转载自blog.csdn.net/qq_31300229/article/details/94592006
今日推荐