Category Archive: linux

五月 15th, 2019

在前一篇文章中,已经介绍了什么是SSH密钥,以及它们是如何工作来帮助提高使用SSH管理服务器的安全性的。此外,还研究了如何在Linux或Mac OSX上创建一个SSH密钥,并将公钥复制到服务器上。这一次,HostGator美国服务器商将为大家介绍如何在使用PuTTY客户端时在Windows中生成密钥,以及如何配置服务器,使其只允许使用密钥作为身份验证方法。

安装PuTTY

当安装PuTTY时,它附带了许多应用程序,以及用于连接到服务器的PuTTY主客户端。其中之一是PuTTYgen,这是用于创建SSH密钥的工具。转到“开始”菜单,滚动到菜单中的PuTTY文件夹并单击PuTTYGen,打开它。该接口很简单,并且在大多数情况下实际上不需要进行任何更改。屏幕底部有要生成的任何键的参数,RSA和2048位都没问题。单击“生成”按钮以创建密钥。它要求滚动鼠标,为随机数发生器创建一些随机数据种子,然后生成密钥。将有一些字段供根据需要向私钥添加密码短语。然后,可以“保存私钥”按钮将私钥保存到计算机,使用“保存公钥”按钮保存公钥。在页面的顶部,还可以在文本框中使用公钥,可以将其复制并粘贴到服务器上。

 为SSH密钥配置PuTTY

现在需要配置PuTTY来使用密钥登录。所以,启动PuTTY,并从将服务器的IP地址或域名放到Host Name(主机名)字段开始。接下来,在左边的菜单中,选择Connection(连接)-》Data(数据)选项,并在打开的屏幕上,在“Auto-login username(自动登录用户名)”字段中填入用户名。现在转到SSH-》Auth部分并单击“浏览”按钮,并选择先前保存的私钥。最后,返回菜单顶部的会话部分,在“保存的会话”部分输入此会话的名称。服务器名是个不错的选择。单击“保存”。以后可以通过在下面的框中选择名称来加载会话详细信息。完成后,就可以像以前一样使用密码连接到服务器,以便在该终端配置SSH密钥。

连接到服务器后,需要更改主目录中的.ssh目录,如果目录不存在,则需要先创建,使用创建的文件,现在可以添加密钥。首先打开authorized_keys文件,然后进行编辑,粘贴之前从PuTTYgen复制的公钥,然后保存并退出文件。现在应该能够断开与服务器的连接,然后重新连接。这一次会提示输入私钥的密码短语(如果设置了),然后连接到服务器

用户设置了要连接的SSH密钥,以及服务器的其他用户之后,最后要做的就是禁用密码登录。如果不这样做,服务器会受到比之前更严重的暴力攻击,在禁用密码登录之前,需要编辑SSH配置文件,这些步骤已经完成了。建议期间不要断开与服务器的连接,但是首先要创建一个到服务器的新连接,以确保一切都能正常工作,如果在发现有问题时立刻断开连接,可能无法重新连接上服务器。

现在一切都就绪了,服务器现在使用SSH密钥进行安全保护,这意味着只有拥有有效私钥和密码的人才能访问服务器。以上就是关于SSH密钥的全部介绍,如果还有疑问,可以访问Hostease美国服务器官网咨询客服。

五月 15th, 2019

近年来的各种研究强调了一个事实,即人们平时有太多的密码需要记住。此外,建议使用更长更复杂的密码,这更像是随机的文本字符串,但会使记忆起来变得更加困难。密码分析表明,大多数密码的长度在七到十个字符之间,现代计算机的处理能力使得暴力攻击这些密码相对容易。当依靠密码来保护服务器的管理时,这可能是一个很大的风险。SSH密钥是长、难的密码的解决方案。

增强安全性:SSH密钥

更长、更复杂的密码来的安全性更高。然而,SSH有另一种解决方案:SSH密钥。钥匙是成对的,一个私人的,一个公共的。公钥可以在任何地方自由共享,而私钥则需要保持安全。只要是正确产生的算法,就不可能从公钥反向破解出私钥。这两个密钥基本上是很长的字符串,它们在数学上是相互联系的,使用私钥加密的消息只能使用公钥解密。同样,使用公钥加密的消息只能使用私钥解密。当使用SSH密钥时,要在本地计算机上保证私钥的安全和安全,私钥要连接到的服务器。密钥用于身份认证,如果使用者愿意,可以在多个服务器上使用相同的密钥对。由于私钥中字符串的长度,计算机几乎不可能使用密钥暴力攻击服务器。当连接到服务器时,服务器将检查正在连接用户的授权密钥文件,并向使用授权公钥加密的连接客户端发送消息。如果客户端具有匹配的私钥,那么它将能够成功地解密消息并响应服务器。这将验证正确,成功连接用户的身份。黑客攻击是一直存在的,安全性相关的内容推荐阅读 怎样保护服务器不受黑客入侵

安装SSH密钥

如果使用的是Linux或Apple Mac OSX,可以轻松地生成一个SSH密钥,并使用几个命令将其安装到远程服务器上。首先,需要生成密钥。要在桌面上执行此操作,请打开终端窗口并使用以下命令:

系统将提示为密钥设置密码短语。密码短语可用于防止未经授权的个人使用私钥。这可以设置为空,并且与服务器的连接将与设置的连接一样安全。如果有人持有私钥,而有一个空白的密码短语,那么他们可以使用密钥连接到使用它的服务器,而不会有任何问题。如果确实设置了密码短语,那么在使用私钥之前,他们需要强制执行该密码。因此,如果发现私钥已被泄露,在被盗的私钥用来攻击服务器之前,密码短语将争取在服务器上更改密钥的时间。

设置好密码后,将生成密钥,通常为私钥的id_rsa和公钥的id_rsa.pub,下一步是将公钥复制到目标服务器,Linux用户可以轻松做到这一点。在这种情况下,将“用户”替换为在服务器上使用的用户名,将“server.example.com”替换为要连接的服务器的域名或IP地址,复制默认公钥。对于Mac OSX用户来说,这并不简单,但是可以通过这一行程序实现同样的效果。与前面一样,将用户名的“用户”改为“server.example.com”,将其改为服务器的域名或IP地址。它将获取公钥文件的内容,并通过管道连接到ssh命令,该命令将为用户创建一个.ssh目录,然后将公钥的内容添加到authorized_keys文件中。

本文还没有完全结束。下一次的内容Hostease美国服务器商将研究如何通过阻止使用密码登录来提高服务器端的安全性,同时还将研究Windows用户如何使用PuTTY的密钥连接到服务器。更多关于Linux服务器的安全性问题,有兴趣的朋友可以了解 Linux虚拟主机在安全性方面怎么样

五月 10th, 2019

linux虚拟主机的操作系统是linux,它的资源来自服务器上,通过划分多个独立访问权限的资源供不同的用户使用,不同的用户独立操作和访问账号下的各类数据类型文件(包含证书,邮件,数据库,网站代码),每个用户只能操作自己家目录下的文件和目录。主机分配给用户的资源是隔离的,独立的,互相不干扰。

Linux虚拟主机系统高稳定

linux虚拟主机具备linux系统的诸多优点:运行稳定,它的代码都是透明可见的,通过ssh登陆访问,执行shell命令查看日志输出,检查服务日志中记录的错误,保证系统正常运行。

Linux虚拟主机兼容各类软件

windows系统在安装各种软件时候,先选择软件版本才可以安装和部署,一旦安装报错可能出现蓝屏或其他致命错误引起系统崩溃,更有主机重启无法正常引导的问题。

linux虚拟主机,使用开源linux操作系统,应用软件安装与部署通过shell命令执行完成。

Linux虚拟主机具备可靠的安全性

除了稳定、兼容外,linux虚拟主机还有一个十分显著的优势,就是安全。目前市面上绝大多数病毒和恶意程序都是针对win系统开发,而Linux系统对此先天免疫;又由于代码开源,即使linux不幸感染病毒,维护人员也容易查出运行异常之处,并加以解决。同时,linux系统利用防火墙、入侵检测和安全认证工具,修补系统漏洞,达到系统安全性提升。更多关于Linux虚拟主机安全性的介绍可以参考阅读 Linux虚拟主机在安全性方面怎么样?

Linux虚拟主机具备网络功能

Linux虚拟主机支持如Apache、Sendmail、VSFtp、SSH、MySQL、PHP。

Linux虚拟主机支持多用户多任务并行处理

Linux虚拟主机是支持多用户的,每个用户都有独立的用户家目录;每个任务就是一个进程,Linux调度每一个进程以平等的方式访问处理器,并行处理多个任务,使各程序同时并行处理而运行时互相独立。

以上就是Hostease美国服务器商介绍关于Linux操作系统虚拟主机的一些内容,顺便推荐一篇相关内容 Linux虚拟主机为什么比较受欢迎

四月 26th, 2019

几十年来,微软Windows一直是桌面计算和办公网络的首选操作系统,而Linux发行版已成为最常用的虚拟主机或独立服务器服务器的操作系统,本文Hostease美国服务器商主要就Linux操作系统的发行版本做一个相关介绍。Windows有很多不同的版本,如服务器版、主页版、专业版和企业版,每个版本都以其功能进行命名。但是,当考虑Linux操作系统时,有许多选项可以选择,称为发行版。对于初学者来说,各种各样的Linux版本可能非常令人困惑。

什么是Linux?

Linux只是从Linux发行版获得的内容的一小部分。对于每个Linux发行版,Linux部分是操作系统内核,充当正在运行的软件和计算机硬件之间的接口。就其本身而言,Linux是相当无用的,而且在早期,它只是作为源代码发布的。Linux发行版的出现是为了使Linux更易于使用,它包括一个编译好的Linux内核和一系列使用该计算机所需的其他软件。这些发行版使Linux从学术上的兴趣转向成为Unix可行的替代操作系统的一部分。

了解Linux发行版

随着时间的推移,这些发行版从一个便利版本变成了用户获得Linux的主要方式,同时提供了一个可随时使用的发行版的精选软件。Linux发行版使用包管理器来处理存储在存储库中的软件的安装。现在有数百个Linux发行版,其中大部分基于三个最古老的发行版之一:Slackware、Debian和Red Hat。这就引出了Linux新手通常会问的一个问题:“为什么会有这么多发行版本?”

Linux发行版成为获取和安装Linux以及获取许多有用的软件工具的快捷方式后,用户就开始定制发行版以更好地满足他们的需要。当用户建立了不同的目标时,发行版也变得不同。例如,Debian专注于提供一个稳定且经过良好测试的操作系统和相关软件。Ubuntu从Debian分离开来以维护Debian基础,但也提供了更多最新的软件,以便在默认情况下提供更安全、更易于使用的操作系统。

虽然Debian提供了一个Linux发行版的单一下载,但Ubuntu提供了不同的桌面和服务器下载,其软件包主要针对不同的角色。例如,桌面版本带有图形用户界面,而服务器版本只有命令行界面。虽然核心的Debian分布和Ubuntu分布之间存在一些强烈的差异,但Ubuntu推出了许多发行版。主要区别在于Ubuntu使用了各种默认的图形用户界面和相关软件。

软件包并不是发行版之间的唯一区别。实际上,不同的发行版可以将配置文件存储在不同的位置,甚至可以在配置文件中使用不同的格式来实现相同的目的。这在设置运行Debian的服务器和运行CentOS的服务器时非常明显。两个发行版之间的另一个显著区别是它们都使用不同的包管理系统,这意味着简单地安装软件可能会有些不同。

Linux发行版可用于托管

在选择托管服务器的Linux发行版时,最常用的是Debian、Ubuntu和CentOS。不过,任何用于服务器使用的Linux发行版都满足用户需求,并将提供在发行版的存储库中可能需要的软件包。所有发行版通常都可以实现相同的目的,但是在选择发行版之前,请考虑使用这些教程。如果是第一次使用Linux,那么可能需要使用教程或入门指南指南。由于发行版的差异,指南往往是特定的。因此,最好选择一个拥有丰富且实用指南的发行版。

更多关于Linux相关的内容可以访问Hostease美国服务器官网,我们有专业的团队为您解答疑惑。此外,推荐阅读 Linux操作系统虚拟主机安全性到底怎么样

八月 7th, 2018

如何在Linux下链接VPN

VPN的搭建是非常普遍的,因为很多外贸企业,需要了解网站在当地的运行和SEO优化情况,以更好地把握广告投放及营销方案的制定。这样以来VPN的搭建就非常必要了。今天,小编就为大家讲述下如何在Linux操作系统服务器下链接VPN,在这里我们以CentOS为例。

HE vpn

第一步:安装PPTP协议:

yum -y install ppp pptp pptp-setup

第二步:安装后,添加一个VPN的配置:

pptpsetup –create pptpd –server 103.195.187.206 –username juanhao.z –password Adjlsk@123 –encrypt –start

–create是创建的连接名称

–server是vpn的ip地址

–username是用户名

–password是密码,也可以没这个参数,命令稍后会自动询问。这样可以保证账号安全

–encrypt 是表示需要加密,不必指定加密方式,命令会读取配置文件中的加密方式

–start是表示创建连接完后马上连接

vpn建立好之后,可以通过 pon 和 poff 连接和断开vpn服务

一、创建bash命令:

cp /usr/share/doc/ppp-2.4.5/scripts/pon /usr/sbin/

cp /usr/share/doc/ppp-2.4.5/scripts/poff /usr/sbin/

chmod +x /usr/sbin/pon

chmod +x /usr/sbin/poff

二、在创建好以后,通过命令直接快捷打开/关闭VPN:

pon pptpd /连接名称为vpntest,vpn服务

poff pptpd /断开名称为vpntest,vpn服务

三、删除VPN连接通道:

pptpsetup –delete pptpd

四、通过刚才的创建脚本,在/etc/ppp/peers目录下面,会生成一个叫myvpn的文件。

cat /etc/ppp/peers/pptpd

五、在/etc/ppp目录下面,用户名和密码会写在chap-secrets文件中。

cat /etc/ppp/chap-secrets

通过以上步骤便可以在Linux操作系统服务器成功链接VPN,在搭建的过程中,注意仔细认真,以防出现细节错误,导致链接失败。想要更好地运营网站和VPN的正常搭建,还是需要有一个良好的Linux主机做基础。有关Linux主机,小编使用很多品牌,感觉用着性价比比较高、服务态度好的还数Bluehost(https://cn.bluehost.com),毕竟是老品牌主机商,服务器管理经验丰富,在安全、稳定性方面做的还是比较好的。

有关Linux下链接VPN的讲述大致就是这些,后面小编还会为大家介绍一些有关服务器及网站搭建方面的技术知识,如果有兴趣,欢迎继续关注小编哦。

相关阅读:Windows2003服务器怎样配置VPN

七月 17th, 2018

lsof命令是什么?

可以列出被进程所打开的文件的信息。被打开的文件可以是

1.普通的文件,2.目录 3.网络文件系统的文件,4.字符设备文件 5.(函数)共享库 6.管道,命名管道 7.符号链接

8.底层的socket字流,网络socket,unix域名socket

9.在linux里面,大部分的东西都是被当做文件的…..还有其他很多

怎样使用lsof

这里主要用案例的形式来介绍lsof 命令的使用

1.列出所有打开的文件:

lsof

备注: 如果不加任何参数,就会打开所有被打开的文件,建议加上一下参数来具体定位

2. 查看谁正在使用某个文件

lsof /filepath/file

3.递归查看某个目录的文件信息

lsof +D /filepath/filepath2/

备注: 使用了+D,对应目录下的所有子目录和文件都会被列出

4. 比使用+D选项,遍历查看某个目录的所有文件信息 的方法

lsof | grep ‘/filepath/filepath2/’

5. 列出某个用户打开的文件信息

lsof -u username

备注: -u 选项,u其实是user的缩写

6. 列出某个程序所打开的文件信息

lsof -c mysql

备注: -c 选项将会列出所有以mysql开头的程序的文件,其实你也可以写成lsof | grep mysql,但是第一种方法明显比第二种方法要少打几个字符了

7. 列出多个程序多打开的文件信息

lsof -c mysql -c apache

8. 列出某个用户以及某个程序所打开的文件信息

lsof -u test -c mysql

9. 列出除了某个用户外的被打开的文件信息

lsof -u ^root

备注:^这个符号在用户名之前,将会把是root用户打开的进程不让显示

10. 通过某个进程号显示该进行打开的文件

lsof -p 1

11. 列出多个进程号对应的文件信息

lsof -p 123,456,789

12. 列出除了某个进程号,其他进程号所打开的文件信息

lsof -p ^1

13 . 列出所有的网络连接

lsof -i

14. 列出所有tcp 网络连接信息

lsof -i tcp

15. 列出所有udp网络连接信息

lsof -i udp

16. 列出谁在使用某个端口

lsof -i :3306

17. 列出谁在使用某个特定的udp端口

lsof -i udp:55

特定的tcp端口

lsof -i tcp:80

18. 列出某个用户的所有活跃的网络端口

lsof -a -u test -i

19. 列出所有网络文件系统

lsof -N

20.域名socket文件

lsof -u

21.某个用户组所打开的文件信息

lsof -g 5555

22. 根据文件描述列出对应的文件信息

lsof -d description(like 2)

23. 根据文件描述范围列出文件信息

lsof -d 2-3

TAGS:
七月 17th, 2018

第一步要做的是通过 SSH 连接到你的 Linux。在 Linux 中查找文件有两种方法。一种是使用find 命令,另外一种是使用locate 命令。

如何在 Linux 中查找一个文件如何在 Linux 中查找一个文件
find 命令

使用 Linux find 命令可以用不同的搜索标准如名字、类型、所属人、大小等来搜索目录树。基本语法如下:

# find path expression search-term

下面是使用 find 命令根据文件名来查找特定文件的一个例子:

# find -name test.file

命令会搜索整个目录树来查找名为test.file 的文件,并且会提供其存放位置。你可以使用你 Linux 上一个存在的文件名来尝试一下。

find 命令有时会花费几分钟来查找整个目录树,尤其是如果系统中有很多文件和目录的话。要显著减少时间,你可以指定搜索的目录。比如,如果你知道 /var中存在 test.file,那就没有必要搜索其它目录。这样,你可以使用下面的命令:

# find /var -name test.file

find 还可以根据时间、大小、所属人、权限等选项搜索文件。要了解更多关于这些选项的信息,你可以使用查看Linux find 命令的手册。

# man find

locate 命令

要在Linux中使用locate命令,首先需要安装它。

如果你正在使用 Ubuntu,运行下面的命令来安装 locate:

# apt-get update# apt-get install mlocate

如果你使用的是 CentOS ,运行下面的命令来安装 locate:

# yum install mlocate

locate 是一种比 find 更快的方式,因为它在数据库中查找文件。要更新搜索数据库,运行下面的命令:

# updatedb

使用 locate 查找文件的语法:

# locate test.file

就像 find 命令一样,locate 也有很多选项来过滤输出。要了解更多你可以查看Linux Locate 命令的手册。

# man locate

希望这篇文能够帮到您,谢谢。

原文来自:https://linux.cn/article-8016-1.html

本文地址:http://www.linuxprobe.com/how-linux-find.html

TAGS:
七月 17th, 2018

查看时区列表: timedatectl list-timezones|grep Asia

设置中国时区: timedatectl set-timezone Asia/Shanghai 执行完后时间就变为北京时间了

查看当前时间: date

查看当前设置:

[root@localhost ~]# timedatectl

Local time: Mon 2017-10-09 16:44:08 CST

Universal time: Mon 2017-10-09 08:44:08 UTC

RTC time: Mon 2017-10-09 08:44:08

Time zone: Asia/Shanghai (CST, +0800)

NTP enabled: yes

NTP synchronized: yes

RTC in local TZ: no

DST active: n/a

如果没有系统没有安装ntp服务器的话可以安装yum install ntp -y

然后编辑ntp的配置文件vi /etc/ntp.conf (日志文件默认在/var/log/messages中),添加以下几个服务器域名,如果原配置文件没有的话

server 0.centos.pool.ntp.org iburst

server 1.centos.pool.ntp.org iburst

server 2.centos.pool.ntp.org iburst

server 3.centos.pool.ntp.org iburst

systemctl restart ntpd

systemctl enable ntpd

这样,服务器端就配置得差不多了,但我为了让效果更明显,把服务器修改为纽约时区,另一台需要同步的linux客户端的时区修改为非洲时间,结果导致,客户端ntpdate之后没有同步,后来才发现,需要在同一时区内才能同步时间,也就是说,服务端和客户端的时区必须在中国这个时区内才可以

下面来测试我们的ntp服务器配置有没有成功

在服务器端(ip:10.0.3.66)上

使用date -s 23:30:30 (时间可以随便改,反正改一个跟客户端时间不一样的就可以了),然后date可以看到时间变成了23:30:30

在客户端上

ntpdate 10.0.3.66 执行后发现,时间也变成了23:30:30

TAGS: ,
七月 17th, 2018

#!/bin/bash
export PATH=/sbin:/usr/sbin:/bin:/usr/bin

iptables -F
iptables -X
iptables -Z

#远程SSH登陆,我们要开启22端口
iptables -A INPUT -p tcp –dport 22 -j ACCEPT

#WEB服务器,开启80端口
iptables -A INPUT -p tcp –dport 80 -j ACCEPT

#邮件服务器,开启25,110端口.
iptables -A INPUT -p tcp –dport 110 -j ACCEPT
iptables -A INPUT -p tcp –dport 25 -j ACCEPT

#FTP服务器,开启20,21端口

iptables -A INPUT -p tcp -m multiport –dport 21,60000:60050 -j ACCEPT
#如果做了DNS服务器,开启53端口

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p udp –sport 53 -j ACCEPT
iptables -A INPUT -p udp –dport 53 -j ACCEPT
#对PING做设置
#iptables -A INPUT -p icmp –icmp-type 8 -s 0/0 -j DROP
#所以对别人的请求丢弃应该就可以达到别人无法PING的
#iptables -A OUTPUT -p icmp –icmp-type 0 -s localip -j DROP
#其实可以不要 包都丢弃了 还怎么会发出响应的包呢

iptables -A INPUT -p icmp –icmp-type 8 -s 0/0 -j ACCEPT
iptables -A INPUT -p icmp –icmp-type 0 -s 0/0 -j ACCEPT
iptables -A OUTPUT -p icmp –icmp-type 0 -s $FW_IP -j ACCEPT
iptables -A OUTPUT -p icmp –icmp-type 8 -s $FW_IP -j ACCEPT

#开放本机对外部80端口
iptables -A INPUT -p tcp ! –syn -s any/0 –sport 80 –dport 1024:65535 -j ACCEPT
iptables -P INPUT DROP

/etc/rc.d/init.d/iptables save
service iptables restart

TAGS:
七月 17th, 2018

Sersync简介

Sersync利用inotify与rsync对服务器进行实时同步,其中inotify用于监控文件系统事件,rsync是目前广泛使用的同步算法,其优点是只对文件不同的部分进行操作,所以其优势大大超过使用挂接文件系统的方式进行镜像同步。由金山的周洋开发完成,是目前使用较多的文件同步工具之一。该工具和其他的工具相比有如下优点:

sersync是使用c++编写,由于只同步发生更改的文件,因此比其他同步工具更节约时间、带宽;

安装方便、配置简单;

使用多线程进行同步,能够保证多个服务器实时保持同步状态;

自带出错处理机制,通过失败队列对出错的文件重新出错,如果仍旧失败,则每10个小时对同步失败的文件重新同步;

自带crontab功能,只需在xml配置文件中开启,即可按您的要求,隔一段时间整体同步一次;

自带socket与http协议扩展,你可以方便的进行二次开发;

rsync+sersync与rsync+Inotify-tools区别

Inotify-tools只能记录下被监听的目录发生了变化(包括增加、删除、修改),并没有把具体是哪个文件或者哪个目录发生了变化记录下来;

rsync在同步的时候,并不知道具体是哪个文件或者哪个目录发生了变化,每次都是对整个目录进行同步,当数据量很大时,整个目录同步非常耗时(rsync要对整个目录遍历查找对比文件),因此,效率很低。

sersync是基于Inotify开发的,类似于Inotify-tools的工具;

sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或某一个目录的名字;

rsync在同步的时候,只同步发生变化的这个文件或者这个目录(每次发生变化的数据相对整个同步目录数据来说是很小的,rsync在遍历查找比对文件时,速度很快),因此,效率很高。

所以,当同步的目录数据量不大时,建议使用Rsync+Inotify-tools;当数据量很大(几百G甚至1T以上)、文件很多时,建议使用Rsync+sersync。

地址:http://code.google.com/p/sersync/,要翻墙才能下载

http://download.csdn.net/detail/hellopengyl/9918625

安装、配置

和Inotify-tools一样,只需要在数据源端安装

1、查看服务器内核是否支持inotify
[root@localhost src]# ll /proc/sys/fs/inotify #查看服务器内核是否支持inotify,出现下面的内容,说明服务器内核支持inotify
total 0
-rw-r–r– 1 root root 0 Jul 27 10:32 max_queued_events
-rw-r–r– 1 root root 0 Jul 27 10:32 max_user_instances
-rw-r–r– 1 root root 0 Jul 27 10:32 max_user_watches
[root@localhost src]# uname -r #Linux下支持inotify的内核最小为2.6.13
2.6.32-642.el6.x86_64
[root@localhost src]# sysctl -a|egrep -i “max_queued_events|max_user_watches|max_user_instances” #修改inotify默认参数(inotify默认内核参数值太小)
fs.inotify.max_user_instances = 128
fs.inotify.max_user_watches = 8192
fs.inotify.max_queued_events = 16384
fs.epoll.max_user_watches = 201420
[root@localhost src]# vim /etc/sysctl.conf
fs.inotify.max_user_instances = 65535
fs.inotify.max_user_watches = 99999999
fs.inotify.max_queued_events = 99999999
[root@localhost src]# cat /proc/sys/fs/inotify/{max_user_instances,max_user_watches,max_queued_events}
65535
99999999
99999999
[root@localhost src]#

max_queued_events inotify队列最大长度,如果值太小,会出现”** Event Queue Overflow **”错误,导致监控文件不准确

max_user_watches 要同步的文件包含多少目录,可以用:find /home/www.osyunwei.com -type d | wc -l统计,必须保证max_user_watches值大于统计结果(这里/home/www.osyunwei.com为同步文件目录)

max_user_instances 每个用户创建inotify实例最大值

2、安装、配置sersync
[root@localhost src]# tar zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@localhost src]# mv GNU-Linux-x86 /app/sersync
[root@localhost src]# cd /app/sersync/
[root@localhost sersync]# ls
confxml.xml sersync2
[root@localhost sersync]# cp confxml.xml{,.default}
[root@localhost sersync]# vim confxml.xml

#针对插件的保留字段,保留默认即可。
#在sersync正在运行的控制台,打印inotify,rsync同步命令
#对于xfs文件系统用户,需要将这个选项开启才正常工作
#过滤系统的临时文件,被过滤的文件不会被监控提高,默认过滤系统的临时文件(以“.”开头,以“~”结尾)

#inotify监控文件模块
#如果本地文件删除,不需要删除远程段的文件可以设置成false
#如果将createFolder设为false,则不会对产生的目录进行监控,该目录下的子文件与子目录也不会被监控;
#把createFile(监控文件事件选项)设置为false来提高性能,减少rsync通讯;因为拷贝文件到监控目录会产生create事件与close_write事件,所以如果关闭create事件,只监控文件拷贝结束时的时间close_write,同样可以实现文件完整同步;

#进行数据同步的模块
#定义本地要同步的目录
#远程接受同步的IP和rsync模块名
<!—->
<!—->

#自定义rsync参数,默认是-artuz
#开启用户认证,定义用户名密码


#开启会使用rsync -e ssh的方式进行传输

#对于失败的传输,会进行重新传送,再次同步失败后日志记录到/tmp/rsync_fail_log.sh,并且每60分钟对失败的log进行重新同步
#每隔600s会做一次完全同步
#如果开启了filter文件过滤功能,那么crontab整体同步也需要设置过滤,否则虽然实时同步的时候文件被过滤了,但crontab整体同步的时候 如果不单独设置crontabfilter,还会将需过滤的文件同步到远程,
 #crontab的过滤正则与filter过滤的不同,果同时开启了filter与crontab,则要开启crontab的crontabfilter,并按示例设置使其与filter的过滤一一对应。

#当设置为true的时候,将文件同步到远程服务器后会调用name参数指定的插件。

#name指定的插件
#当文件同步完成后,会调用command插件,例如同步文件是file.txt,file.txt文件在改动之后,调用rsync同步到远程服务器后,调用command插件,执行/bin/sh file.txt suffix >/dev/null 2>&1
#如果suffix 设置了,则会放在inotify事件file.txt之后,如果ignoreError为true,则会添加>/dev/null 2>&1

#当filter为ture,include可以只对正则匹配到的文件,调用command。

#http插件,可以向指定域名的主机post,inotify监控的事件。
#socket插件,开启该模块,则向指定ip与端口发送inotify所产生的文件路径信息

#在同步过程中将文件发送到目的服务器后刷新cdn接口。如果不想使用,则设置
#该模块根据chinaCDN的协议,进行设计,当有文件产生的时候,就向cdn接口发送需要刷新的路径位置

#需要监控的目录
#cdnifo标签制定了cdn接口的域名,端口号,以及用户名与密码。

#sendurl标签是需要刷新的url的前缀
<sendurl base="
#regexurl标签中的,regex属性为true时候,使用match属性的正则语句匹配inotify返回的路径信息,并将正则匹配到的部分作为url一部分,

#如果产生文件事件为:/data0/htdoc/cms.xoyo.com/site/jx3.xoyo.com/image/a/123.txt
#经过上面的match正则匹配后,最后刷新的路径是:http://pic.xoyo.com/cms/jx3/a/123.txt;
#如果regex属性为false,最后刷新的路径是http://pic.xoyo.com/cms/jx3.xoyo.com/images/a/123.txt;

[root@localhost sersync]# /app/sersync/sersync2 -d -r -n 8 -o /app/sersync/confxml.xml
set the system param
execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
parse the command param
option: -d run as a daemon
option: -r rsync all the local files to the remote servers before the sersync work
option: -n thread num is: 8
option: -o config xml name: /app/sersync/confxml.xml
parse xml config file
host ip : localhost host port: 8008
Open debug, you will see debug infomation
daemon start,sersync run behind the console
Start the crontab Every 600 minutes rsync all the files to the remote servers entirely
use rsync password-file :
user is rsync
passwordfile is /etc/rsyncd.secret
config xml parse success
please set /etc/rsyncd.conf max connections=0 Manually
sersync working thread 10 = 1(primary thread) + 1(fail retry thread) + 8(daemon sub threads)
Max threads numbers is: 18 = 10(Thread pool nums) + 8(Sub threads)
please according your cpu ,use -n param to adjust the cpu rate
——————————————
rsync the directory recursivly to the remote servers once
working please wait…
execute command: cd /app/rsync_client && rsync -artuz -R –delete ./ rsync@10.15.43.100::app_rsync_server –password-file=/etc/rsyncd.secret
crontab command:cd /app/rsync_client && rsync -artuz -R –delete ./ rsync@10.15.43.100::app_rsync_server –password-file=/etc/rsyncd.secret
run the sersync:
watch path is: /app/rsync_client
add watch: /app/rsync_client return wd is: 1
add watch: /app/rsync_client/test return wd is: 2
[root@localhost sersync]#

-d 后台启动

-r 同步前将已存在的文件全部同步过去,如果设置了过滤器,即在xml文件中,filter为true,则暂时不能使用-r参数进行整体同步;

-n 开启的线程总数默认10

-o 指定配置文件,指定 -o 参数可以指定多个不同的配置文件,从而实现sersync多进程多实例的数据同步

-m 不进行同步,只运行插件 ./sersync -m pluginName 例如:./sersync -m command,则在监控到事件后,不对远程目标服务器进行同步,而是直接运行command插件

[root@localhost sersync]# cat monitor_sersync.sh #监控Sersync运行状态的脚本,如果服务停止了就重启服务
#!/bin/bash
server_file=”/app/sersync/sersync2″
conf_file=”/app/sersync/confxml.xml”
options=”-d -r -n 8 -o”
proc_num=$(ps -ef|grep -i sersync2|grep -v “grep”|wc -l)
if [ $proc_num -lt 1 ];then
cd $(dirname $server_file)
nohup $server_file $options $conf_file &
else
exit 0;
fi
[root@localhost sersync]# chmod +x monitor_sersync.sh
[root@localhost sersync]# crontab -l
*/5 * * * * /app/sersync/monitor_sersync.sh
[root@localhost sersync]# /etc/init.d/crond restart
[root@localhost sersync]# vim /etc/rc.d/rc.local #设置开机自动运行脚本
/app/sersync/sersync2 -d -r -n 8 -o /app/sersync/confxml.xml
[root@localhost sersync]#

测试

在客户端监控的目录/app/rsync_client创建文件,然后查看服务器端app_rsync_server模块对应的目录是否同步更新
[root@localhost rsync_client]# touch file{1..9}
inotify wd:1 name:file1 mask:256
inotify wd:1 name:file1 mask:8
inotify wd:1 name:file2 mask:256
inotify wd:1 name:file2 mask:8
inotify wd:1 name:file3 mask:256
inotify wd:1 name:file3 mask:8
inotify wd:1 name:file4 mask:256
inotify wd:1 name:file4 mask:8
inotify wd:1 name:file5 mask:256
[root@localhost rsync_client]# cd /app/rsync_client && rsync -artuz -R “./file2” rsync@10.15.43.100::app_rsync_server –password-file=/etc/rsyncd.secret
inotify wd:1 name:file5 mask:8
inotify wd:1 name:file6 mask:256
inotify wd:1 name:file6 mask:8
inotify wd:1 name:file7 mask:256
inotify wd:1 name:file7 mask:8
inotify wd:1 name:file8 mask:256
inotify wd:1 name:file8 mask:8
inotify wd:1 name:file9 mask:256
inotify wd:1 name:file9 mask:8
cd /app/rsync_client && rsync -artuz -R “./file1” rsync@10.15.43.100::app_rsync_server –password-file=/etc/rsyncd.secret
cd /app/rsync_client && rsync -artuz -R “./file3” rsync@10.15.43.100::app_rsync_server –password-file=/etc/rsyncd.secret
cd /app/rsync_client && rsync -artuz -R “./file4” rsync@10.15.43.100::app_rsync_server –password-file=/etc/rsyncd.secret
cd /app/rsync_client && rsync -artuz -R “./file5” rsync@10.15.43.100::app_rsync_server –password-file=/etc/rsyncd.secret
cd /app/rsync_client && rsync -artuz -R “./file6” rsync@10.15.43.100::app_rsync_server –password-file=/etc/rsyncd.secret
cd /app/rsync_client && rsync -artuz -R “./file7” rsync@10.15.43.100::app_rsync_server –password-file=/etc/rsyncd.secret
cd /app/rsync_client && rsync -artuz -R “./file8” rsync@10.15.43.100::app_rsync_server –password-file=/etc/rsyncd.secret
cd /app/rsync_client && rsync -artuz -R “./file9” rsync@10.15.43.100::app_rsync_server –password-file=/etc/rsyncd.secret
[root@localhost rsync_client]# touch file1
inotify wd:1 name:file1 mask:8
[root@localhost rsync_client]# cd /app/rsync_client && rsync -artuz -R “./file1″ rsync@10.15.43.100::app_rsync_server –password-file=/etc/rsyncd.secret

[root@localhost sersync]#

压测

写入10K个文件批量同步测试结果:

[root@localhost rsync_client]# for n in {1..10000};do dd if=/dev/zero of=/app/rsync_client/”$n”.txt bs=1M count=5;done

查看同步速度,当10K个文件同步完后,在/app/rsync_server里发现才同步了600多个文件

多实例情况

配置多个confxml.xml文件(比如:www、bbs、blog….等等),根据不同的需求同步对应的实例文件
[root@localhost rsync_client]# /app/sersync/sersync2 -d -r -n 8 -o /app/sersync/www_confxml.xml
[root@localhost rsync_client]# /app/sersync/sersync2 -d -r -n 8 -o /app/sersync/bbs_confxml.xml
[root@localhost rsync_client]# /app/sersync/sersync2 -d -r -n 8 -o /app/sersync/blog_confxml.xml

文章链接:https://www.centoschina.cn/shell/programming/9368.html