第十章 日常运维-系统管理(4)

一、rsync工具介绍
二、rsync常用选项
三、rsync通过ssh同步
四、 rsync通过服务同步
五、linux系统日志
六、screen工具
七、扩展

一、rsync工具介绍

Rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,同时可以对
上传部分先进行压缩,因此rsync效率很高。rsync可以复制显示目录属性及文件,而且可以选择性地压缩及递归复制。但是rsync每次执行rsync命令都会遍历目标目录,如果文件数达到了一定规模,每次遍历就会消耗很多资源。Rsync 可以搭配 rsh 或 ssh 甚至使用 daemon 模式。 Rsync server 会打开一个873 的服务通道 (port) ,等待对方 Rsync 连接。连接时, Rsync server 会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份(增值同步更新)。Rsync 支持大多数的类 Unix 系统,无论是 Linux 、 Solaris 还是 BSD 上都经过了良好的测试。此外,它在 windows 平台下也有相应的版本,比较知名的有cwRsync 和 Sync2NAS 。
Rsync 的基本特点如下:

  • 1.可以镜像保存整个目录树和文件系统;
  • 2.可以很容易做到保持原来文件的权限、时间、软硬链接等;
  • 3.无须特殊权限即可安装;
  • 4.优化的流程,文件传输效率高;
  • 5.可以使用 rcp 、 ssh 等方式来传输文件,当然也可以通过直接的 socket 连接;
  • 6.支持匿名传输。

核心算法介绍:
假定在名为α和β的两台计算机之间同步相似的文件 A 与 B ,其中α对文件 A 拥有访问权,β对文件 B 拥有访问权。并且假定主机α与β之间的网络带宽很小。那么 rsync 算法将通过下面的五个步骤来完成:

  1. 1.β将文件 B 分割成一组不重叠的固定大小为 S 字节的数据块。最后一块可能会比 S 小。
  2. 2.β对每一个分割好的数据块执行两种校验:一种是 32 位的滚动弱校验,另一种是 128 位的 MD4 强校验。
  3. 3.β将这些校验结果发给α。
  4. 4.α通过搜索文件 A 的所有大小为 S 的数据块 ( 偏移量可以任选,不一定非要是S 的倍数 ) ,来寻找与文件 B 的某一块有着相同的弱校验码和强校验码的数据块。这项工作可以借助滚动校验的特性很快完成。
  5. 5.α发给β一串指令来生成文件 A 在β上的备份。这里的每一条指令要么是对文件B 经拥有某一个数据块而不须重传的证明,要么是一个数据块,这个数据块肯定是没有与文件 B 的任何一个数据块匹配上的。

1.1 如系统中不存在rsync命令,需要安装rsync包。
# yum -y install rsync

1.2 rsync命令格式

  • 1.rsync [OPTION]... SRC DEST
  • 2.rsync [OPTION]... SRC [USER@]host:DEST
  • 3.rsync [OPTION]... [USER@]HOST:SRC DEST
  • 4.rsync [OPTION]... [USER@]HOST::SRC DEST
  • 5.rsync [OPTION]... SRC [USER@]HOST::DEST
  • 6.rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

对应于以上六种命令格式, rsync 有六种不同的工作模式:
1) 拷贝本地文件。当 SRC 和 DES 路径信息都不包含有单个冒号 ":" 分隔符时就启动这种工作模式。
2) 使用一个远程 shell 程序 ( 如 rsh 、 ssh) 来实现将本地机器的内容拷贝到远程机器。当 DST 路径地址包含单个冒号 ":" 分隔符时启动该模式。
3) 使用一个远程 shell 程序 ( 如 rsh 、 ssh) 来实现将远程机器的内容拷贝到本地机器。当 SRC 地址路径包含单个冒号 ":" 分隔符时启动该模式。
4) 从远程 rsync 服务器中拷贝文件到本地机。当 SRC 路径信息包含 "::" 分隔符时启动该模式。
5) 从本地机器拷贝文件到远程 rsync 服务器中。当 DST 路径信息包含 "::" 分隔符时启动该模式。
6) 列远程机的文件列表。这类似于 rsync 传输,不过只要在命令中省略掉本地机信息即可。

二、rsync常用选项

rsync常用选项
-a   归档模式,表示以递归方式传输文件,并保持所有文件属性。包含rtplgoD参数选项
-r   同步目录时要加上,类似cp时的-r选项
-v   可视化,显示详细输出模式,传输时的进度等信息
-l    保留软连接(若是拷贝的原目录里面有一个软链接文件,那这个软链接文件指向到了另外一个目录下,加上-l,它会把软链接文件本身拷贝到目标目录里面去)
-L   加上该选项后,同步软链接时会把源文件给同步
-p   保持文件的权限属性
-o   保持文件的属主
-g   保持文件的属组
-D   保持设备文件信息(/dev/sdb1 这样的设备文件有它的特殊性,如果不加-D可能拷贝过去就是一个非常普通的文件,不能当设备来用)
-t   保持文件的时间属性
--delete   删除DEST中SRC没有的文件
--exclude   过滤指定文件,如--exclude “logs”会把文件名包含logs的文件或者目录过滤掉,不同步
-P   显示同步过程,比如速率,比-v更加详细
-u   (update)加上该选项后,如果DEST中的文件比SRC新(以mtime作为标准),则不同步
-z   传输时压缩(同步时传输数据可以节约带宽,节省时间)

三、rsync通过ssh同步
3.1 将本地文件传输到远程主机。两台主机均需安装rsync工具(推/push)

 

3.2 将远程主机主机上的文件复制到本地(拉/pull)

3.3 参数-e
指定端口传输文件   //指定对方侦听的22端口,就可以连接对面的22端口。

3.4 ssh免密同步(密钥验证)
//如192.168.239.128需要免密码实现到192.168.239.130的rsync复制,可以通过密钥认证的方式
//生成密钥对

四、 rsync通过服务同步(::
4.1 服务端配置
4.1.1 新建rsync的配置文件
//以192.168.239.130作为服务端,192.168.239.128作为客户端
//在192.168.239.130上新建rsync服务端的配置文件
# touch /etc/rsyncd.conf
# ls -l /etc/rsyncd.conf
# vim /etc/rsyncd.conf
添加如下内容:
uid = rsync
gid = rsync
use chroot = no
timeout = 600
max connections = 2000
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
host allow = 192.168.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
path = /backup
comment = for data backup by kennminn

4.1.2 创建rsync用户及共享目录/backup
# useradd rsync -M -s /sbin/nologin
# id rsync
uid=5004(rsync) gid=5004(rsync) groups=5004(rsync)
# mkdir /backup
# chown -R rsync /backup
4.1.3 创建密码文件
# echo "rsync_backup:123456" > /etc/rsync.password
# chmod 600 /etc/rsync.password
# cat /etc/rsync.password
rsync_backup:123456
4.1.4 以守护进程方式启动:rsync --daemon
# rsync --daemon
//验证是否启动,rsync守护进程默认监听873端口
# netstat nltup| grep :873

# ps aux|grep rsync
4.1.5 加入开机自启动
# echo "rsync --daemon">> /etc/rc.local
# cat /etc/rc.local

touch /var/lock/subsys/local
rsync daemon
至此,服务器端设置完毕

4.2 客户端设定
4.2.1 创建密码文件
# echo "123456" >>/etc/rcync.password
# cat /etc/rcync.password
123456
# chmod 600 /etc/rsync.password
客户端设置完成。
验证
//在客户端192.168.239.128上往服务器推送目录dir2
# rsync -avz dir2/  [email protected]::backup --passwordfile=/etc/rsync.password

//在服务端查看
# ls /backup/
1.sh 2.sh iptables_cmd.sh


//从服务端往下拉文件
# rsync -avz [email protected]::backup  /tmp/backup/ --passwordfile=/etc/rsync.password

# ls /tmp/backup/

4.3 QA
//错误:no route to host
# rsync -avz [email protected]::backup /tmp/backup/ --passwordfile=/etc/rsync.password
rsync: failed to connect to 192.168.239.130 (192.168.239.130): No route to host(113)
//解决,在firewalld防火墙添加规则即可
# firewall-cmd --zone=public --add-service=rsyncd

# telnet 192.168.239.130 873
# rsync -avz [email protected]::backup /tmp/backup/ --passwordfile=/etc/rsync.password

4.4  rsyncd.conf配置文件详解 
 port:指定在哪个端口启动rsyncd服务,默认是873端口。
 log file:指定日志文件。
 pid file:指定pid文件,这个文件的作用涉及服务的启动、停止等进程管理操作。
 address:指定启动rsyncd服务的IP。假如你的机器有多个IP,就可以指定由其中一个启动rsyncd服务,如果不指定该参数,默认是在全部IP上启动。
 []:指定模块名,里面内容自定义。
 path:指定数据存放的路径。
 use chroot true|false:表示在传输文件前首先chroot到path参数所指定的目录下。这样做的原因是实现额外的安全防护,但缺点是需要以roots权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下chroot值为true,如果你的数据当中有软连接文件,建议你设置成false。
 max connections:指定最大的连接数,默认是0,即没有限制。
 read only ture|false:如果为true,则不能上传到该模块指定的路径下。
 list:表示当用户查询该服务器上的可用模块时,该模块是否被列出,设定为true则列出,false则隐藏。
 uid/gid:指定传输文件时以哪个用户/组的身份传输。
 auth users:指定传输时要使用的用户名。
 secrets file:指定密码文件,该参数连同上面的参数如果不指定,则不使用密码验证。注意该密码文件的权限一定要是600。格式:用户名:密码
 hosts allow:表示被允许连接该模块的主机,可以是IP或者网段,如果是多个,中间用空格隔开。 
 当设置了auth users和secrets file后,客户端连服务端也需要用用户名密码了,若想在命令行中带上密码,可以设定一个密码文件
 rsync -avL [email protected]::test/test1/  /tmp/test8/ --password-file=/etc/pass 
 其中/etc/pass内容就是一个密码,权限要改为600

五、linux系统日志
Linux系统中会有很多的日志文件,这些文件可以帮助我们了解很多系统的重要事件。这些文件一般都存放在/var/log目录中。常见的日志文件有:
1./var/log/messages:这个文件相当重要,几乎系统发生的所有错误信息或重要信息都会记录在这个文件中,包含系统启动时的引导消息及系统运行时的其他状态消息。
2./var/log/secure:记录系统的安全信息,如ssh、ftp、pop3
3./var/log/dmesg:记录系统在启动时核心检测过程所生产的各项信息
4./var/log/lastlog:记录系统上所有用户最后一次登录系统的信息,lastlog命令就是利用该文件的内容来显示数据的。
5./var/log/wtmp:记录用户登录系统及退出系统的信息,该文件是经过处理的,无法直接查看,可以使用相关命令来查看,如last和ac命令
6./var/log/boot.log:记录守护进程启动和停止相关的日志信息
7./var/log/faillog:记录登录失败时的用户信息
8./var/log/cron:记录与定时任务crontab相关的日志信息
9./var/log/httod/,/var/log/news/,/var/log/samba/*:各个服务的日志文件,记录各自的服务产生的日志信息
syslogd服务可以帮助我们主动收集到设备的各种信息,并将其保存在服务器上,当出现问题时可以省去手动收集信息的麻烦,方便快捷的从syslogd服务中读取各种信息进行分析排错。
在centos7中已经用rsyslogd取代了syslogd。rsyslod是加强版的syslogd,且完美兼容syslogd。

5.1 rsyslogd的主要配置文件:/etc/rsyslog.conf
# cat /etc/rsyslog.conf


5.2 配置日志记录的规则语法格式如下
服务名[.=!]信息等级 记录方式
服务名:
ID 服务名 说明
0 kern 内核日志信息
1 user 用户日志信息
2 mail 邮件系统日志信息
3 daemon 系统守护进程日志信息
4 auth 安全管理日志信息
5 syslog syslogd守护进程日志信息
6 lpr 打印服务日志信息
7 news 新闻组服务日志信息
8 uucp uucp系统日志信息
9 cron cron守护进程日志信息
10 authpriv 私有的安全管理日志信息
11 ftp ftp守护进程
12-15 local0-local7 系统保留
16-23 保留给系统本地使用
信息等级:
ID 信息等级 说明
0 emerg或panic 系统不可用,死机
1 alert 警告事件,可能会影响到系统的运行,必须立即采取行动纠正事件
2 cri 严重错误,比error更严重的错误,如硬件故障
3 error或err 错误信息,如某些服务无法启动。需仔细检查错误原因
4 warning 警告信息,但不会影响系统的进程
5 notice 比info更应注意的信息,需特别处理
6 info 基本信息,主要是一些提示信息
7 debug 程序调试信息
连接符
服务名与信息等级之间有一个连接符。与后面的信息等级结合使用可以表示服务要记录哪些级别的日志信息。
1.:记录高于等于该等级的信息
2.=:只记录等于该等级的信息
3.!:记录除了该等级外的所有信息
配置文件/etc/sysconfig/rsyslog主要用来配置是否接收其他主机的日志信息。
# cat /etc/sysconfig/syslog

[root@Linux02 ~]# cat /etc/sysconfig/rsyslog
# Options for rsyslogd
# Syslogd options are deprecated since rsyslog v3.
# If you want to use them, switch to compatibility mode 2 by "-c 2"
# See rsyslogd(8) for more details SYSLOGD_OPTIONS=""
//若想要让本机接收其他主机发送的日志文件,可以将SYSLOGD_OPTION的内容设为"-c 0 -r"
//SYSLOGD_OPTION="-c 0 -r"

5.3 日志文件如果不定期清理,可能会导致出现内容过多,容量过大,甚至填满整个磁盘空间的问题。Linux系统提供了一个logrotate工具,与cron配合使用可以很方便地管理日志信息。
logrotate是按计划运行的。配置文件:/etc/logrotate.conf(主配置文件)
和/etc/logrotate.d目录下的文件
[root@Linux02 ~]# cat /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
# 所有的文件每星期进行一次rotate的工作
weekly
# keep 4 weeks worth of backlogs
# 转储的文件保留4个
rotate 4
# create new (empty) log files after rotating old ones
# 自动建立新的日志文件,新建立的日志与原文件拥有相同的权限
create
# use date as a suffix of the rotated file
dateext
# uncomment this if you want your log files compressed
# 不压缩转储后的文件,如果需要压缩可以去掉注释
#compress
# RPM packages drop log rotation information into this directory
# 读取/etc/lorotate.d目录下的文件来执行rotate工作
include /etc/logrotate.d
# no packages own wtmp and btmp we'll
rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
minsize 1M
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
# systemspecific
logs may be also be configured here.

5.4 logrotate配置文件的相关参数说明
参数  说明
compress 通过gzip压缩转储后的文件
nocompress 不需要压缩时,使用这个参数
copytruncate 用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate 备份日志文件但是不截断
create mode owner group   转储文件,使用指定的文件模式创建新的日志文件
nocreate 不建立新的日志文件
delaycompress 和compress一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress 覆盖delaycompress选项,转储同时压缩
errors address 转储时错误信息发送到指定的email
ifempty 即使是空文件也转储,这个是logrotate的默认选项
noifempty 如果是空文件,则不转储
mail address 把转储的日志文件发送到指定的email地址
nomail 转储时不发送日志文件
olddir directory 转存后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统中
noolddir 转储后的日志文件和当前日志放在一个目录下
prerotate/endscript 在转储以前需要执行的命令可以放入这两个关键字之间,这两个关键字必须单独成行
postrotate/endscript   在转储以后需要执行的命令可以放入这两个关键字之间,这两个关键字必须单独成行
daily 指定转储周期为每天
weekly 指定转储周期为每周
monthly 指定转储周期为每月
rotate count 日志文件删除之前转储的次数,0指没有备份,5指保留5个备份
tabootex[+]list 让logrotate不转储指定扩展名的文件,默认扩展名是.rpmorig,.rpmsave,v和~
size 当日志文件达到指定大小才转储,size可指定byte(默认)及KB或MB

5.5 dmesg命令
5.5.1 dmesg命令,会把系统硬件相关的日志列出来。这个日志是保存在内存中的,并不是一个文件
假如你的网卡有问题了,硬盘损坏了,都会记录在这个日志中
5.5.2 dmesg -c   //清空当前日志,但是一重启这个系统,又会生成这些日志
5.5.3 /var/log/dmesg日志文件   //这个日志文件和 dmesg命令 没有任何关联
它是系统启动的一个日志,记录的信息
5.5.4 last命令
默认情况下last读取/var/log/wtmp文件中的信息。

-n参数指定记录数

5.5.5 lastb命令,查看登录失败的用户,对应的文件时/var/log/btmp 日志
/var/log/btmp是二进制文件,不能直接cat

lastlog显示当前系统上的所有用户最后一次登录系统的时间。(读
取/var/log/lastlog)

六、screen工具
Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。
会话恢复:
只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。这一点和图形界面下的VNC很相似。
多窗口:
在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。Screen实现了基本的文本操作,如复制粘贴等;还提供了类似滚动条的功能,可以查看窗口状况的历史记录。窗口还可以被分区和命名,还可以监视后台窗口的活动。 会话共享 Screen可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,可以对窗口进行密码保护。
6.1 系统默认没有安装screen工具,可用yum工具安装
# yum install -y screen
常见用法
screen直接回车就进入了虚拟终端
ctrl a组合键再按d退出虚拟终端,但不是结束
screen -ls   查看虚拟终端列表
screen -r id 进入指定的终端
screen -S w1  自定义虚拟终端名称
screen -r w1

6.2 Sockets in /var/run/screen/Sroot.
需求,执行一个脚本,需要一天一夜,而且脚本会输出一些东西出来,这就意味着这个脚本不能中途断开,保证脚本不中断,有两种方法:
方法一:把这个任务丢到后台去,然后加一个日志的输出命令nohup command &——>nohup 加执行命令 加日志 再加一个&符号
这时即使你的终端断开,依旧会在后台执行——>但虽然解决了任务中断的问题,但是没有办法实时查看输出的内容
方法二:screen工具,可以把要执行的命令,放到这个终端里,然后在退出pts/0之前,可以把screen丢到后台去,随时用, 随时查看

6.3 screen可以执行多个虚拟终端,同时运行,若想进入到其中一个,指定id即可
但是时间久了,有可能会忘记某一个screen是运行的是什么(因为名字是相同的)
我们可以给screen自定义名称:
screen -S "test_screen"
screen -r 后可以加id号,可以是screen作业的名称


七、扩展
扩展
1. Linux日志文件总管logrotate http://linux.cn/article41261.html
2. xargs用法详解 http://blog.csdn.net/zhangfn2011/article/details/6776925

猜你喜欢

转载自blog.csdn.net/dwy2018/article/details/82264729
今日推荐