RSync 与 zabbix

rsync是一款实现远程同步功能的软件,可以镜像保存整个目录树和文件系统,保持原有文件的权限、时间(修改时间,modify time)、软硬链接等附加信息。
 
rsync的安装:
# yum install rsync -y
 
配置文件:
rsync的主要有以下三个配置文件,后面两个文件默认不存在,需手动创建它。
1.rsyncd.conf(主配置文件)
2.rsyncd.secrets(密码文件)
3.rsyncd.motd(rysnc服务器信息)
 
rsync 常用选项:
-v         冗长模式(显示过程)
-a         归档模式,递归的方式传输文件(-a = -rlptgoD)
     -r     递归
     -l     保留软链接
     -p     权限
     -t     文件修改时间
     -g     属组,保留特殊设备文件
     -o     属主
     -D     等于--devices  --specials    表示支持b,c,s,p类型的文件
-R     保留相对路径
-H  保留硬链接
-A  保留acl权限
--delete     监控文件的删除
 
rsync命令的普通用法:
rsync -av /home/ /backup                         --把/home目录下的内容同步到/backup目录下(包括隐藏文件)
rsync -av /home/ 192.168.1.10:/backup          --把本地的/home目录内容,同步到远端10的/backup目录下
rsync -av 192.168.1.20:/backup/ /backup/     --把远端20的/backup目录下的内容同步到本地的/backup目录
(注意:路径写法的区别!源目录后面加不加/也影响你的同步目录;没加/,就是将目录本身同步过去;目录加/,就是将目录里的内容同步过去!)
 
最简单的目录同步方法:
如果远程主机的目录中有一个文件被删除了,可使用命令将本机目录中内容进行同步!
# rsync  -aHAXv --delete /test/ /test2/
 
 

服务器端的配置:

第一步:
# iptables -F                                --关闭防火墙
 
# vim /etc/rsyncd.conf
 
motd file=/etc/rsyncd.welcome          --定义欢迎页面文件(不一定要)
[test]                                        --参数组名称
path=/test                                   --指定同步目录路径
 
# vim /etc/rsyncd.welcome          --自定义欢迎信息
*******************************************
****** ^_^ Welcome to use rsync!^_^ ******
*******************************************
 
 
第二步:
# systemctl restart rsyncd     --启动rsync
 
# netstat -ntlup |grep 873               --服务端就会有873的端口在监听了
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      15674/rsync        
tcp6       0      0 :::873                  :::*                    LISTEN      15674/rsync
 
第四步:
# mkdir /test
# touch /test/{1..5}.txt          --创建测试文件
 
 

客户端的操作:

# rsync -v 192.168.1.10::          --查看10这个服务器同步路径名
*******************************************
****** ^_^ Welcome to use rsync!^_^ ******
*******************************************     --这就是你rsyncd.welcome里写的欢迎内容
 
test                                --这个就是同步路径名                     
 
 
# rsync -a 192.168.1.10::test /back/
--这样同步,是不需要密码的;注意notes为共享路径名称,语法上在该名称前面有两个“:”!
 
没有密码有好处也有坏处,好处是不需要密码方便写脚本做远程同步。如果要密码写脚本就要用到expect自动应答。坏处就是不安全,但你可以使用iptables等来加强安全。如果你希望有密码,也不用传密码的话,可以用rsyncd本身自带的secrets file来做验证的用户
(secrets file = /etc/rsyncd/rsyncd.secrets)
 
******************************
如果同步报permission denied这种错误,可能是服务端selinux没有关闭
# vim /etc/selinux/config
SELINUX=disabled          --找到这行,将后面的值改为disabled即可
 
# setenforce 0               --临时关闭selinux,否则将要重启系统才能生效
 
# iptables -F               --清空防火墙规则
******************************
 
在上面的基础上加上一些更强大的功能
 
要求:
1. 把日志记录到/var/log/rsyncd.log
     --4种方式,xinetd:log_type(SYSLOG/FILE) rsyncd:log file和syslog facility
2. 共享模块要求隐藏(也就是说客户端查看不到这个模块名(test))
     --list
3. 同时只能1个客户端连接进行同步这个module(test)
     --2种方式,xinetd:instances rsyncd:max connections
4. 只能允许192.168.1.107(ip你自定义)同步这个module
     --2种方式,xinetd:only_from rsyncd:hosts allow
5. 只能早上9点到下午5点同步
     --xinetd:access_times
 
# vim /etc/rsyncd.conf
motd file=/etc/rsyncd.welcome
 
[test]                                             --参数组名称
path=/var/www/html                              --设置rsync同步文件路径
list=false                                        --隐藏共享模块名称(test)
max connections=1                              --设置同一时间内最大的链接数
log file=/var/log/rsyncd.log               --设置指定的日志文件路径
hosts allow=192.168.1.107 192.168.1.109 --设置限定的ip或网段192.168.1.0/24
 
----------------------------------------------------------------
 
 
实时同步
实现实时同步(也就是源目录中的内容发生变化,它就会触发同步,实现两边目录中内容完全相同)
inotify + rsync
 
软件名称:
inotify-tools-3.13.tar.gz
软件下载路径:(直接输入以下命令)
# wget https://jaist.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz
 
# yum install -y gcc gcc gcc-c++
# tar xf inotify-tools-3.13.tar.gz -C /usr/src/
# cd /usr/src/inotify-tools-3.13/
# ./configure
# make
# make install
 
--安装完后,就会产生下面两个命令
/usr/local/bin/inotifywait
/usr/local/bin/inotifywatch
 
 
# inotifywait --help    
inotifywait: error while loading shared libraries: libinotifytools.so.0: cannot open shared object file: No such file or directory
--如果报错,找不到那个库,但这个库实际上是在/usr/local/lib下的,所以解决方法,把/usr/local/lib/加到ldconfig里
 
 
常用命令选项:
-m   --monitor                         --监控
-r   --recursive                    --递归监控,目录和子目录都监控
-q   --quiet                         --安静模式,尽可能少输出信息
-e   --event                         --监控的事件,包含以下几类    
     modify     修改
     attrib     改变
     delete     删除
     create     创建
     move      移动
 
测试inotifywait命令:
# inotifywait -mrq -e modify,delete,create,attrib,move /test
 
 
做测试:
测试本机/test目录里一有(增,删,改,属性改变),就会同步到/test2目录
 
--使用下面的脚本来做
 
 
# vim /tmp/1.sh
 
#!/bin/bash
inotifywait -mrq  -e modify,delete,create,attrib,move /test |while read files
do
     rsync -a --delete /test/ /test2/
done
 
 
输入以下命令,执行上面写的脚本!
# nohup sh /tmp/1.sh &
 
 
再然后对/test进行各种操作,验证可以实时同步到/test2
 
--实现双向的实时同步
也有相关的软件(比如unison)可以专门来做双向的实时同步
但我们就可以用inotify反向再做一次再写一个脚本也一样可以简单去实现
# vim /tmp/2.sh
#!/bin/bash
inotifywait -mrq  -e modify,delete,create,attrib,move /test2 |while read files
do
     rsync -a --delete /test2/ /test/
done

使用rsync实现远程实时同步

远程被同步端     本地同步端
192.168.1.107     192.168.1.109
我要实现把192.168.1.109上的/localtest/目录里的内容实时同步到192.168.1.107的/remotetest/目录
  
实现过程
第一大步:在远程被同步端192.168.1.107上操作
# iptables -F
# setenforce 0
 
# mkdir /remotetest/     --创建测试的同步目录
# yum install -y rsync      --安装rsync
 
# rsync --version               查看版本是否一致
 
# vim /etc/rsyncd.conf
uid=root         
gid=root          --这里指定使用root身份同步,否则默认使用nobody用户(这样你需要把/remotetest/目录改成757的权限,才有权限写)
 
[testsource]
path=/remotetest/
ignore errors
read only=no          --是否只读
auth users=abc          --验证的用户名为abc
secrets file=/etc/rsyncd.secrets     --验证用户abc的用户名和密码的存放文件,此文件需要同步端和被同步端都要有(这样我们就可以用这种方式来进行验证,而不需要远程的ssh密码验证了)
hosts allow=192.168.1.109          --进一步加强安全,只允许192.168.1.109同步
 
# vim /etc/rsyncd.secrets          --创建这个密码文件,用户名要与上面的auth users指定的一致,密码随意(我这里以321来测试)
abc:321
 
# chmod 600 /etc/rsyncd.secrets     --为了安全性,把权限改成600,只让root读写(很多其它软件的密码文件也会要求你改成600权限)
 
# systemctl restart rsyncd          --重启rsyncd服务
 
第二大步:在本地同步端192.168.1.109上操作
先安装inotify软件,步骤参照上面过程,这里省略
 
# yum install -y rsync
 
# rsync --version               查看版本是否一致
 
# mkdir /localtest/     --创建测试的同步目录
# vim /etc/rsyncd.secrets     --也要创建这个密码文件,里面只写密码就可以了。用户我们在后面的脚本里的命令里指定
321
# chmod 600 /etc/rsyncd.secrets  --也改成600的权限
 
# vim /tmp/rsync.sh               --脚本及其内容
 
#!/bin/bash
inotifywait -mrq  -e modify,delete,create,attrib,move /localtest |while read files
do
     rsync -a --delete  --password-file=/etc/rsyncd.secrets /localtest/ abc@192.168.1.107::testsource
done
 
# chmod 755 /tmp/rsync.sh   --给执行权限,方便执行
 
# nohup sh /tmp/rsync.sh &   --后面挂起执行
 
如果搭建完成后无法同步,可以在本地同步端查看当前目录下的nohup.out文件,如果文件是空的,则说明没问题,如果有问题,系统会将报错信息写入该文件!
# cat nohup.out
 
# vim /etc/rc.local          --加到rc.local里让其开机自动启动同步
nohup sh /root/rsync.sh &
 
第三步:测试
在192.168.1.109的/localtest目录中进行任何的操作,然后去192.168.1.107的/remotetest目录中查看是否成功同步!
 

客户端配置zabbix官方源

# rpm -ivh zabbix-release-3.2-1.el7.noarch.rpm
 
服务端操作
第一步:
    安装zabbix和mariadb数据库
    # yum install zabbix-server-mysql zabbix-web-mysql mariadb-server -y
 
第二步:
    在mysql里建立存放数据的库并授权,然后导入zabbix所需要用的表和数据
    # systemctl restart mariadb.service
    # systemctl status mariadb.service
    # systemctl enable mariadb.service
 
    # mysql
    MariaDB [(none)]> create database zabbix default charset utf8;
    MariaDB [(none)]> grant all on zabbix.* to zabbix@'localhost' identified by '123';
    MariaDB [(none)]> flush privileges;
    MariaDB [(none)]> use zabbix;
    MariaDB [(none)]> show tables;
    MariaDB [(none)]> quit
 
第三步:
    导入表数据
    # zcat /usr/share/doc/zabbix-server-mysql-3.2.7/create.sql.gz |mysql -u zabbix -p123 zabbix
 
第四步:
    配置zabbix主配置文件,并启动服务
    # vim /etc/zabbix/zabbix_server.conf     --找到并确认如下参数(默认值正确的可以打开注释也可以不打开.默认值不对的,要修改正确并打开注释)
 
    12 ListenPort=10051
    81 DBHost=localhost
    91 DBName=zabbix
    107 DBUser=zabbix
    115 DBPassword=123            --这里要对应上面的授权进行修改
    122 DBSocket=/var/lib/mysql/mysql.sock     --这里默认的socket路径不对,改成我这个路径
    303 ListenIP=0.0.0.0
 
    # systemctl restart zabbix-server.service
    # systemctl status zabbix-server.service
    # systemctl enable zabbix-server.service
    # lsof -i:10051
 
第五步:
    配置zabbix的httpd子配置文件,并启动httpd
    # vim /etc/httpd/conf.d/zabbix.conf     --打开时区注释,并修改成你的时区
    php_value date.timezone Asia/Shanghai
 
    # systemctl restart httpd.service
    # systemctl status httpd.service
    # systemctl enable httpd.service
 
第六步:
    打开浏览器输入你的IP地址 http://IP/zabbix,按照图示过程安装 
============================================================================
 
例二,使用zabbix-agent方式监控(被动监控方式:这里的被动是相对于客户端而言,客户端被动接收服务器的监控)
# yum install zabbix-agent -y    --本机安装agent包
    # vim /etc/zabbix/zabbix_agentd.conf    --下面几个常见选项都为默认值,不用配置
    95 Server=127.0.0.1        --zabbix服务器的IP,这里是本机
    103 ListenPort=10050        --监控服务器连接被监控客户端的端口
 
    # systemctl restart zabbix-agent
    # systemctl status zabbix-agent
    # systemctl enable zabbix-agent
    # lsof -i:10050
 
    回到web管理界面--》点配置--》点主机--》默认看到叫Zabbix server的本机,但状态是停用的--》点击并启用. 在可用性中ZBX开始为灰色,等待变成绿色状态,大约几分钟。
 
例三,监控远程linux
 
            zabbix服务器    --》 zabbix agent(被监控端)
 
            192.168.224.10        192.168.224.11
 
第一大步:
    在被监控客户端上192.168.224.11安装zabbix-agent并配置
 
    1,配置主机名
    2,关闭iptables,selinux
    3,时间同步
    4,配置yum(需要zabbix官方yum源)
    5,安装zabbix-agent
    # yum install zabbix-agent -y
 
    # vim /etc/zabbix/zabbix_agentd.conf
    95 Server=192.168.224.10    --写上zabbix监控服务器的IP(被动监控)
    103 ListenPort=10050        --被动监控的端口
    147 Hostname=node1.com        --写上你的被监控客户端的主机名
 
    # systemctl restart zabbix-agent
    # systemctl status zabbix-agent
    # systemctl enable zabbix-agent
    # lsof -i:10050
 
第二大步:
回到zabbix服务器的web管理界面--》点配置--》点主机 --》 点创建主机
 
主机名称: agent1.cluster.com
可见的名称:agent1     --这个名是优先显示在监控web页面的host页面
群组: Linux servers    --或者自己新建一个群组名都可以
IP地址: 192.168.224.11
 
点模版,点选择,把 Template OS Linux 前面打勾(其它模版随意加) --》点选择 --》点添加 --最后点右下角的添加
 
OK之后,就能看到一共监控了两台机器了
 
=====================================================
 
基本概念解析:
  主机(hosts)代表被监控的一台机器
  主机组(hostgroups)代表被监控的一组机器(主要在特别多的机器情况,方便分组区分)
       监控项(items)代表搜集数据或监控的一个最小单位
       应用集(applications)代表多个监控项目合成的组
 
例四、实现分布式监控:
            机房一                    机房二
 
                    zabbix核心服务器
 
            机房三                    机房四
            
    zabbix server ------ zabbix proxy ---- 被代理和被监控的机器(agent)
    zabbix_server ---- zabbix_proxy    ----- zabbix_agent1
    192.168.224.10         192.168.224.12                192.168.224.11
                            
    准备:
    我这里把原来的agent2用来模拟zabbix_proxy
    1,先在zabbix_server的web界面把agent2的配置删除(并把先前做的自动发现规则禁用)
    2,主机名改成proxy.com
    3, systemctl stop zabbix-agent
 
    第一大步:zabbix_proxy上的配置(需要本地yum源和zabbix源)(192.168.224.12)
    # yum install mariadb\* zabbix-proxy zabbix-proxy-mysql zabbix-agent -y
 
    # systemctl restart mariadb
    # systemctl enable mariadb
    # mysql
    MariaDB [(none)]> create database zabbix_proxy default charset utf8;
    MariaDB [(none)]> grant all privileges on zabbix_proxy.* to 'zabbix'@'localhost' identified by '123';
    MariaDB [(none)]> flush privileges;
 
    # zcat /usr/share/doc/zabbix-proxy-mysql-3.2.7/schema.sql.gz |mysql zabbix_proxy -u zabbix -p123
 
    # vim /etc/zabbix/zabbix_proxy.conf
    13 ProxyMode=0                 --zabbix_proxy的代理方式为主动(zabbix_proxy主动发数据给zabbix_server)
    24 Server=192.168.224.10     --zabbix_server的ip
    43 Hostname=proxy.com --这个名字一定要和你的主机名还有后面在web界面配置代理的名字保持一致
    128 DBHost=localhost
    139 DBName=zabbix_proxy
    154 DBUser=zabbix
    162 DBPassword=123
    216 ConfigFrequency=60            --主动模式下zabbix_proxy多久从zabbix_server接收一次配置数据
    225 DataSenderFrequency=5        --主动模式下zabbix_proxy多久发送一次收集的数据给zabbix_server
 
    # vim /etc/zabbix/zabbix_agentd.conf
    64 SourceIP=192.168.224.12        --代理服务器IP地址
    95 Server=192.168.224.12        --代理服务器IP地址
    136 ServerActive=192.168.224.12    --代理服务器IP地址
    147 Hostname=zabbix_proxy.com
 
    # systemctl restart zabbix-proxy
    # systemctl restart zabbix-agent
    # systemctl enable zabbix-agent
    # systemctl enable zabbix-proxy
 
    第二大步:zabbix_agent的配置(192.168.224.11)
    # vim /etc/zabbix/zabbix_agentd.conf        --把服务器的ip改成zabbix_proxy的ip,而不是zabbix_server的ip
    95 Server=192.168.224.12            -- 代理服务器IP地址
    136 ServerActive=192.168.224.12        -- 代理服务器IP地址
    147 Hostname=agent1.cluster.com -- 代表本机器的hostname
 
    # systemctl restart zabbix-agent
 
    第三大步:回到zabbix_server的图形管理界面
 
    1,代理机器zabbix proxy 加入到监控的主机中
    配置-》主机-》创建主机
    主机名称:proxy.com
    群组: 随意加一个组
    IP地址:192.168.224.12     端口:10050        
 
    2,加一个代理程序
    管理-》agent代理程序-》创建代理
 
    agent代理程序名称:proxy.com    --名字要和配置里的主机名一致
    系统代理程序模式: 主动式
    agent代理程序的主机: agent1
             proxy.com
 
    加完后,agent1和proxy.com就自动被代理了
 
    第四大步:
    测试
    在agent1(192.168.224.11)上找一个监控项做改变(比如登录用户数),然后在192.168.224.10上的zabbix_server的图形界面能看到这个改变,说明proxy成功
posted @ 2020-05-02 01:07  兰昌  阅读(451)  评论(0)    收藏  举报