智慧运维

智慧运维

[Errno 14] problem making ssl connection Trying other mirror

运维技术采菊篱下 回复了问题 • 2 人关注 • 1 个回复 • 27 次浏览 • 4 天前 • 来自相关话题

NetSarang旗下XShell和Xmanager多款软件被植入后门

运维技术OS小编 发表了文章 • 0 个评论 • 45 次浏览 • 6 天前 • 来自相关话题

近日,境内外多家安全公司爆料称NetSarang旗下Xmanager和Xshell等产品的多个版本被植入后门代码,由于相关软件在国内程序开发和运维人员中被广泛使用,可能导致大量用户服务器账号密码泄露。请及时检查您所使用的版本是否受影响,并采取安全防御措施。
 

影响范围

使用了nssock2.dll 5.0.0.26的版本会受到影响,其中包括:
 Xmanager Enterprise 5.0 Build 1232 Xmanager 5.0 Build 1045 Xshell 5.0 Build 1322 Xshell 5.0 Build 1325 Xftp 5.0 Build 1218 Xlpd 5.0 Build 1220
 

修复方案

 1、从官网下载最新版本进行升级:https://www.netsarang.com/download/software.html  ;
 
2、排查2017年的DNS访问日志,如出现如下子域名相关访问记录,建议修改对应员工使用过Xmanager 、XShell、Xftp等相关的登录账号密码:
vwrcbohspufip.comribotqtonut.comnylalobghyhirgh.comjkvmdmjyfcvkf.combafyvoruzgjitwr.comxmponmzmxkxkh.comtczafklirkl.com
 

漏洞详情

某安全公司发现NetSarang的Xmanager, Xshell, Xftp, Xlpd等产品中,发布的nssock2.dll模块中存在恶意代码远程漏洞,存在后门的XShell等程序会在启动时发起大量请求DNS域名请求,并根据使用者系统时间生成不同的请求链接。有媒体报道,带后门的Xshell会向服务器传输敏感信息。
 
参考链接:https://www.netsarang.com/news/security_exploit_in_july_18_2017_build.html  。 查看全部
近日,境内外多家安全公司爆料称NetSarang旗下Xmanager和Xshell等产品的多个版本被植入后门代码,由于相关软件在国内程序开发和运维人员中被广泛使用,可能导致大量用户服务器账号密码泄露。请及时检查您所使用的版本是否受影响,并采取安全防御措施。
 


影响范围


使用了nssock2.dll 5.0.0.26的版本会受到影响,其中包括:
  •  Xmanager Enterprise 5.0 Build 1232
  •  Xmanager 5.0 Build 1045
  •  Xshell 5.0 Build 1322
  •  Xshell 5.0 Build 1325
  •  Xftp 5.0 Build 1218
  •  Xlpd 5.0 Build 1220

 


修复方案


 1、从官网下载最新版本进行升级:https://www.netsarang.com/download/software.html  ;
 
2、排查2017年的DNS访问日志,如出现如下子域名相关访问记录,建议修改对应员工使用过Xmanager 、XShell、Xftp等相关的登录账号密码:
  • vwrcbohspufip.com
  • ribotqtonut.com
  • nylalobghyhirgh.com
  • jkvmdmjyfcvkf.com
  • bafyvoruzgjitwr.com
  • xmponmzmxkxkh.com
  • tczafklirkl.com

 


漏洞详情


某安全公司发现NetSarang的Xmanager, Xshell, Xftp, Xlpd等产品中,发布的nssock2.dll模块中存在恶意代码远程漏洞,存在后门的XShell等程序会在启动时发起大量请求DNS域名请求,并根据使用者系统时间生成不同的请求链接。有媒体报道,带后门的Xshell会向服务器传输敏感信息。
 
参考链接:https://www.netsarang.com/news/security_exploit_in_july_18_2017_build.html  。

有道笔记你挂了,你知道吗?

互联网资讯Nock 回复了问题 • 2 人关注 • 1 个回复 • 411 次浏览 • 6 天前 • 来自相关话题

Linux下怎么查看某个目录正在被哪个程序使用?

运维技术采菊篱下 回复了问题 • 2 人关注 • 1 个回复 • 51 次浏览 • 2017-08-10 21:39 • 来自相关话题

VMware克隆Centos主机后网卡信息配置详解

运维技术push 发表了文章 • 0 个评论 • 74 次浏览 • 2017-07-30 17:21 • 来自相关话题

在很多时候,我们利用VMware创建虚拟机做实验,我们一般都是需要多台主机的,这时候我们可以基于已经创建好的系统进行克隆。但是克隆之后我发现一个问题,那就是克隆出来的主机的网卡信息还是母机的信息,比如mac地址、UUID,而且会出现一块新网卡的信息,比如母机只有eth0网卡信息,而克隆出来的会多出eth1网卡的信息,但是实际克隆出来的主机也只有一块物理网卡eth0,下面我们就说说做可以让克隆出来的主机网卡信息正常,然后配置静态ip地址或者通过DHCP获取ip地址正常工作。
 

1、修改udev规则文件获取Mac地址

/etc/udev/rules.d/70-persistent-net.rules 这个文件跟你的网卡mac地址有关系,当你的网卡启动的时候这个文件会分配一个网卡名称给你的网卡。
 
# vim /etc/udev/rules.d/70-persistent-net.rules
该文件中正常此时应该有两行信息在文件中把 NAME="eth0″ 的这一行注释掉对于另一行,把 NAME=”eth1″ 的这一行,把 NAME=”eth1″ 改为 NAME=”eth0″,并且把该行:ATTRS{address}=="00:0c:29:58:0d:5a″ 这个属性信息记下来,后面修改Mac地址就使用这个。




 

2、修改eth0网卡Mac地址配置

为什么要修改,因为跟克隆母机的Mac地址一样,在同一个内网内会冲突,修改前:



# vim /etc/sysconfig/network-scripts/ifcfg-eth0把 HWADDR 的值改为上面要求记下来的:00:0c:29:58:0d:5a




到这里网卡的Mac地址已经修改完成,跟母机的不一样了,这样就不会冲突了。
 

3、获取并修改UUID

维基百介绍UUID:
通用唯一识别码(英语:Universally Unique Identifier,简称UUID)是一种软件建构的标准,亦为自由软件基金会组织在分散式计算环境领域的一部份。

UUID的目的,是让分散式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。如此一来,每个人都可以创建不与其它人冲突的UUID。在这样的情况下,就不需考虑数据库创建时的名称重复问题。目前最广泛应用的UUID,是微软公司的全局唯一标识符(GUID),而其他重要的应用,则有Linux ext2/ext3文件系统、LUKS加密分区、GNOME、KDE、Mac OS X等等。另外我们也可以在e2fsprogs包中的UUID库找到实现。
 
获取UUID:获取UUid我们可以通过两种方式,1是通过uuidgen命名,二是通过读取文件/proc/sys/kernel/random/uuid
 
我们这里功能uuidgen命名获取:
# a=`uuidgen eth1`
# sed -i "s@UUID.*@UUID=${a}@g" ifcfg-eth0



到这里就Mac地址和UUID都全部替换完成,跟母机的完全不一样了。
 

4、重启网卡获取IP地址

# /etc/init.d/network restart



如上图可以看出获取IP地址正常,Mac地址也是我们修改后的,好了到这里就都完成了,完成后,方便后面实验,最好新建的主机都创建初始的快照。 查看全部
在很多时候,我们利用VMware创建虚拟机做实验,我们一般都是需要多台主机的,这时候我们可以基于已经创建好的系统进行克隆。但是克隆之后我发现一个问题,那就是克隆出来的主机的网卡信息还是母机的信息,比如mac地址、UUID,而且会出现一块新网卡的信息,比如母机只有eth0网卡信息,而克隆出来的会多出eth1网卡的信息,但是实际克隆出来的主机也只有一块物理网卡eth0,下面我们就说说做可以让克隆出来的主机网卡信息正常,然后配置静态ip地址或者通过DHCP获取ip地址正常工作。
 


1、修改udev规则文件获取Mac地址


/etc/udev/rules.d/70-persistent-net.rules 这个文件跟你的网卡mac地址有关系,当你的网卡启动的时候这个文件会分配一个网卡名称给你的网卡。
 
# vim /etc/udev/rules.d/70-persistent-net.rules

  • 该文件中正常此时应该有两行信息
  • 在文件中把 NAME="eth0″ 的这一行注释掉
  • 对于另一行,把 NAME=”eth1″ 的这一行,把 NAME=”eth1″ 改为 NAME=”eth0″,并且把该行:ATTRS{address}=="00:0c:29:58:0d:5a″ 这个属性信息记下来,后面修改Mac地址就使用这个。

rules.png

 


2、修改eth0网卡Mac地址配置


为什么要修改,因为跟克隆母机的Mac地址一样,在同一个内网内会冲突,修改前:
ethago.png
# vim /etc/sysconfig/network-scripts/ifcfg-eth0
把 HWADDR 的值改为上面要求记下来的:00:0c:29:58:0d:5a
ethafter.png

到这里网卡的Mac地址已经修改完成,跟母机的不一样了,这样就不会冲突了。
 


3、获取并修改UUID


维基百介绍UUID
通用唯一识别码(英语:Universally Unique Identifier,简称UUID)是一种软件建构的标准,亦为自由软件基金会组织在分散式计算环境领域的一部份。

UUID的目的,是让分散式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。如此一来,每个人都可以创建不与其它人冲突的UUID。在这样的情况下,就不需考虑数据库创建时的名称重复问题。目前最广泛应用的UUID,是微软公司的全局唯一标识符(GUID),而其他重要的应用,则有Linux ext2/ext3文件系统、LUKS加密分区、GNOME、KDE、Mac OS X等等。另外我们也可以在e2fsprogs包中的UUID库找到实现。
 
获取UUID:获取UUid我们可以通过两种方式,1是通过uuidgen命名,二是通过读取文件/proc/sys/kernel/random/uuid
 
我们这里功能uuidgen命名获取:
# a=`uuidgen eth1`
# sed -i "s@UUID.*@UUID=${a}@g" ifcfg-eth0
uuid.png

到这里就Mac地址和UUID都全部替换完成,跟母机的完全不一样了。
 


4、重启网卡获取IP地址


# /etc/init.d/network restart
ipaddr.png

如上图可以看出获取IP地址正常,Mac地址也是我们修改后的,好了到这里就都完成了,完成后,方便后面实验,最好新建的主机都创建初始的快照。

2017 GOPS全球运维大会深圳北京PPT分享

回复

运维技术OS小编 发起了问题 • 1 人关注 • 0 个回复 • 100 次浏览 • 2017-07-30 14:54 • 来自相关话题

7款不错的网站数据分析工具

运维技术koyo 发表了文章 • 1 个评论 • 75 次浏览 • 2017-07-29 14:48 • 来自相关话题

拥有并运营一个很棒的网站不是一件简单的事情。除了需要决定网站的类型之外,你还需要运营网站,关注网站的各项数据并且决定使用何种手段增加流量。

你应该感到庆幸的是,这其实并没有那么复杂,但需要付出一些努力以及使用正确的工具。在这之后,你可以尝试使用各种不同的工具让工作流程更高效。

单靠一个工具是不可能完成所有事情的。所以要点在于要涉及各种不同的选择,比如分析工具、任务管理、流程自动化以及图形设计等。下面就列出了一些可以帮助站长提升品牌的最有价值的工具。
 

1、SE Ranking

SE Ranking 是一个基于云端的大而全的 SEO 服务。它帮站长减轻了不少负担,节约了生成报表的时间,同时在市场战略和发展计划的准备、分析以及调整等各个环节都很有帮助。

这个服务不仅仅是用来跟踪网站的排名,而且也可以用于各种复杂度的营销推广计划上。




SE Ranking 对这一代站长来说确实是一个非常有用也有很前景的 SEO 工具。尽管它在市场上还很新颖,但在实践中用起来还不错。

它里面有一系列很棒的功能,包括像关键词推荐、反向链接的监控,社交管理以及网站审计。我还没发现什么 SE Ranking的弱点,但我还是建议你尝试一下,也验证下所列出的各个功能的有效性。




 

2、Piktochart

Piktochart 是我最喜欢的在线信息图生成器,它可以让非专业设计师也能创建一些基本的设计图。如果没有时间或预算设计很好的信息图,那么就可以使用 Piktochart 把几个很赞的元素拼接起来生成想要快速进行病毒式传播的设计图。

Piktochart 是一个傻瓜式的工具,可创建不同的图表、地图和视频,而且它还有自动保存的功能。




基础版是免费的,但是只有一些有限的功能。你也可以使用解锁了所有功能的高级版。

如果你需要搜寻灵感和想法来创造出一些独特的东西,那么 Piktochart 就是你需要的工具。Piktochart 本身就充满了灵感,而且导航非常清晰易用。
 

3、Google Analytics

Google Analytics 是市场上最强大的分析服务之一。它可以让你分析流量,展示人口统计信息(年龄,性别等),另外也可以看到访客信息,包括新访客和回访访客。

不仅可以看到访客的地理位置,还可以发现他们在网站上做了什么。这样详细的人群统计信息也会帮助你预先计划网站未来的内容。




Google Analytics 是一个免费的网页版应用,只要有网络连接就可以随时随地使用。它的图表好看,而提供的结果也相当准确。另外它还可以在很多方面提供帮助,比如 A/B 测试和 Adwords 接入,这些都可以帮助提升用户体验。
 

4、Mention

Mention 是一个很不错的网络和社交媒体监控工具,其用户友好的界面非常简单易用。

该工具提供的免费套餐允许你每个月追踪最多500次品牌名字提及(@的次数)。如果你想追踪的提及次数超过500次,那么可以试试每月29美元起的高级套餐。




Mention 对于任何站长都绝对是节省时间的利器,因为你还可以再次转发这些推文,在 Facebook 页面上点赞或者分享积极的分享推文,以及通过 Email 发送推特文章。与其他工具相比,Mention 推送的通知非常地快,而且它还有一个很棒的功能就是可以在屏幕上预览结果。
 

5、Work Examiner

Work Examiner 可以帮助网站管理员管理很多项目。尽管有人会认为这侵犯了隐私,但是它作为一种监控员工的日常职责和收集员工工作时间的分配数据的方式还是相当有效的。通过这个工具,你可以限制员工访问某些可能会让他们分心的内容。




 

6、Ahrefs

Ahrefs 是从我开始 SEO 职业生涯以来就最喜欢的一个链接生成工具。该工具为站长分析链接信息提供了多个选项,可以让你知道一个网站的当前链接状态,并且可以帮助你理解网站内容和竞争对手。




在 Ahref 套装里,可以看到关键词分析,批量分析,站点探索,反向链接报表,域名比较以及竞争分析的工具。它高速的性能和图形化的展示甚至可以让SEO 新手都很容易地理解。




 

7、SEMrush

SEMrush 是一个为 SEO 专家和站长设计的多功能 SEO 工具,可用来研究客户的相关信息。该工具可让你全面了解客户,找到最佳关键词,排名超过竞争对手,检查他们的网站流量情况,找到所有的网站问题等等。

SEMrush 是一个一应俱全的 SEO 工具,提供了很多其他工具所没有的一系列有用的功能特性。




若想获得一份竞争对手网站全面又细致的分析数据,SEMrush 的高级账号会更好用些。 如果你是一个 SEO 初学者,你可以从免费试用账号开始,把 SEMrush 的所有有价值的功能全部体验一遍。




 

总结

网络上有很多为站长和网络营销人员提供的 SEO 工具。不管你是已经拥有了一堆网站,还是在创建一个网站的过程中,亦或是有了启动下一个大项目的计划,你都应该从上述7个工具里获得显著的好处。
 
分享英文原文:http://marketingland.com/top-7-must-tools-website-owners-165538 
 
  查看全部
WebSiteTools.png

拥有并运营一个很棒的网站不是一件简单的事情。除了需要决定网站的类型之外,你还需要运营网站,关注网站的各项数据并且决定使用何种手段增加流量。

你应该感到庆幸的是,这其实并没有那么复杂,但需要付出一些努力以及使用正确的工具。在这之后,你可以尝试使用各种不同的工具让工作流程更高效。

单靠一个工具是不可能完成所有事情的。所以要点在于要涉及各种不同的选择,比如分析工具、任务管理、流程自动化以及图形设计等。下面就列出了一些可以帮助站长提升品牌的最有价值的工具。
 


1、SE Ranking


SE Ranking 是一个基于云端的大而全的 SEO 服务。它帮站长减轻了不少负担,节约了生成报表的时间,同时在市场战略和发展计划的准备、分析以及调整等各个环节都很有帮助。

这个服务不仅仅是用来跟踪网站的排名,而且也可以用于各种复杂度的营销推广计划上。
Ranking.png

SE Ranking 对这一代站长来说确实是一个非常有用也有很前景的 SEO 工具。尽管它在市场上还很新颖,但在实践中用起来还不错。

它里面有一系列很棒的功能,包括像关键词推荐、反向链接的监控,社交管理以及网站审计。我还没发现什么 SE Ranking的弱点,但我还是建议你尝试一下,也验证下所列出的各个功能的有效性。
filter.png

 


2、Piktochart


Piktochart 是我最喜欢的在线信息图生成器,它可以让非专业设计师也能创建一些基本的设计图。如果没有时间或预算设计很好的信息图,那么就可以使用 Piktochart 把几个很赞的元素拼接起来生成想要快速进行病毒式传播的设计图。

Piktochart 是一个傻瓜式的工具,可创建不同的图表、地图和视频,而且它还有自动保存的功能。
Piktochart.png

基础版是免费的,但是只有一些有限的功能。你也可以使用解锁了所有功能的高级版。

如果你需要搜寻灵感和想法来创造出一些独特的东西,那么 Piktochart 就是你需要的工具。Piktochart 本身就充满了灵感,而且导航非常清晰易用。
 


3、Google Analytics


Google Analytics 是市场上最强大的分析服务之一。它可以让你分析流量,展示人口统计信息(年龄,性别等),另外也可以看到访客信息,包括新访客和回访访客。

不仅可以看到访客的地理位置,还可以发现他们在网站上做了什么。这样详细的人群统计信息也会帮助你预先计划网站未来的内容。
googlea.png

Google Analytics 是一个免费的网页版应用,只要有网络连接就可以随时随地使用。它的图表好看,而提供的结果也相当准确。另外它还可以在很多方面提供帮助,比如 A/B 测试和 Adwords 接入,这些都可以帮助提升用户体验。
 


4、Mention


Mention 是一个很不错的网络和社交媒体监控工具,其用户友好的界面非常简单易用。

该工具提供的免费套餐允许你每个月追踪最多500次品牌名字提及(@的次数)。如果你想追踪的提及次数超过500次,那么可以试试每月29美元起的高级套餐。
mention.png

Mention 对于任何站长都绝对是节省时间的利器,因为你还可以再次转发这些推文,在 Facebook 页面上点赞或者分享积极的分享推文,以及通过 Email 发送推特文章。与其他工具相比,Mention 推送的通知非常地快,而且它还有一个很棒的功能就是可以在屏幕上预览结果。
 


5、Work Examiner


Work Examiner 可以帮助网站管理员管理很多项目。尽管有人会认为这侵犯了隐私,但是它作为一种监控员工的日常职责和收集员工工作时间的分配数据的方式还是相当有效的。通过这个工具,你可以限制员工访问某些可能会让他们分心的内容。
workex.png

 


6、Ahrefs


Ahrefs 是从我开始 SEO 职业生涯以来就最喜欢的一个链接生成工具。该工具为站长分析链接信息提供了多个选项,可以让你知道一个网站的当前链接状态,并且可以帮助你理解网站内容和竞争对手。
ahrefs.png

在 Ahref 套装里,可以看到关键词分析,批量分析,站点探索,反向链接报表,域名比较以及竞争分析的工具。它高速的性能和图形化的展示甚至可以让SEO 新手都很容易地理解。
SiteEx.png

 


7、SEMrush


SEMrush 是一个为 SEO 专家和站长设计的多功能 SEO 工具,可用来研究客户的相关信息。该工具可让你全面了解客户,找到最佳关键词,排名超过竞争对手,检查他们的网站流量情况,找到所有的网站问题等等。

SEMrush 是一个一应俱全的 SEO 工具,提供了很多其他工具所没有的一系列有用的功能特性。
semrush.png

若想获得一份竞争对手网站全面又细致的分析数据,SEMrush 的高级账号会更好用些。 如果你是一个 SEO 初学者,你可以从免费试用账号开始,把 SEMrush 的所有有价值的功能全部体验一遍。
trial.png

 


总结


网络上有很多为站长和网络营销人员提供的 SEO 工具。不管你是已经拥有了一堆网站,还是在创建一个网站的过程中,亦或是有了启动下一个大项目的计划,你都应该从上述7个工具里获得显著的好处。
 
分享英文原文:http://marketingland.com/top-7-must-tools-website-owners-165538 
 
 

清除wnTKYg挖矿木马过程详解

运维技术chris 发表了文章 • 0 个评论 • 91 次浏览 • 2017-07-27 23:02 • 来自相关话题

 杀wnTKYg病毒分两步,第一是找到它的来源,切断入口,第二步,找到它的守护进程并杀死,然后再去杀死病毒进程,有的守护进程很隐蔽,唤醒病毒之后,自动消亡,这时候top就看不到了,要留心。
由于工作需要,我由一个专业java开发工程师,渐渐的也成为了不专业的资深的运维工程师了。最近项目在做性能测试,发现CPU使用率异常,无人访问时CPU也一直保持75%,然后在xShell上top了一下,发现wnTKYg这个程序CPU占用率300%.




很明显是病毒进程,下意识的把它kill了,但是一分钟之后又自动重启了,于是百度了一下,发现这个东西叫做挖矿工,简单的说,就是别人用你的服务器去做它自己的事,然后赚钱。       
 
知道wnTKYg是什么鬼之后,我不急着杀死它,先百度了一下它怎么进来的,百度上关于它的帖子特别少,说是钻了redis的空子进来的,我基本上赞同这个说法,第一步就是对redis进行了配置上的修改:
把默认的端口号6379给改了把密码改的更复杂了把bind xx.xx.x.x xx.xx.xx.xx改了
修改redis是防止这熊孩子再进来,第二步就是把已经入驻的木马杀死,它不仅使用我的服务器,它还登录我的账号,所以查看了 /root/.ssh 下的文件,在/root/.ssh/known_hosts中发现了我不认识的IP,绝对有问题,于是干脆把 /root/.ssh 下的文件都删了,省事了。
 
第三步就是要找到所有关于病毒的文件, 执行命令  find / -name wnTKYg*,只有/tmp下有这个文件,删了,然后就去kill wnTKYg进程,你以为这样它就可以死了吗?Never!一分钟之后它又复活了,我猜测一定有守护进程在唤醒它,于是我再kill  然后top观察进行变化,终于被我发现了,有一个/tmp/ddg.1007进程很可疑,于是百度这个东东验证了一下,果然,就是挖矿工的守护进程,用ps -aux|grep ddg 命令把所有ddg进程找出来杀掉,并删除/tmp目录下的所有的对应ddg文件,至此,病毒被解决了,异地登录,安全扫描什么的也被我解决了。
 
很多哥们也遇到了这个问题,加了我好友,并且描述了他们的一些情况,我会把他们的改进和补充也写在此贴里,有的哥们会有个定时任务下载这些东西,目录 /var/spool/cron,记得留意这个文件夹,如果遇到,就把它干掉。
 
安全问题依然严峻,于是找了一家安全公司--安全狗咨询了下相关的安全业务,发现蛮贵的,都是万开头的,而且我也不知道他们水平怎么样,于是把我遇到的问题跟业务员说了,看看他们怎么解决,怎么收费,谈判了一下午,定价3500,没的再低了,哎,还是我好,又为公司省了3500。
 
因为发了这篇帖子,一位和我情况差不多的网友也提供了一种解决方案,我把他的也贴进来与大家分享谢谢这位网友:首先关闭挖矿的服务器访问 :iptables -A INPUT -s xmr.crypto-pool.fr -j DROP
iptables -A OUTPUT -d xmr.crypto-pool.fr -j DROP然后删除yam 文件   用find / -name yam查找yam 文件    之后 找到wnTKYg 所在目录 取消掉其权限  并删除 然后再取消掉 tmp 的权限并删除  之后 pkill  wnTKYg就OK了。
 
当然,我也咨询了阿里的解决方案,有两个,①找第三方安全公司杀②把数据备份一下,重置系统 。  坑爹的阿里啊。
 
分享阅读:点击原文。 查看全部
 杀wnTKYg病毒分两步,第一是找到它的来源,切断入口,第二步,找到它的守护进程并杀死,然后再去杀死病毒进程,有的守护进程很隐蔽,唤醒病毒之后,自动消亡,这时候top就看不到了,要留心。
由于工作需要,我由一个专业java开发工程师,渐渐的也成为了不专业的资深的运维工程师了。最近项目在做性能测试,发现CPU使用率异常,无人访问时CPU也一直保持75%,然后在xShell上top了一下,发现wnTKYg这个程序CPU占用率300%.
wntky.png

很明显是病毒进程,下意识的把它kill了,但是一分钟之后又自动重启了,于是百度了一下,发现这个东西叫做挖矿工,简单的说,就是别人用你的服务器去做它自己的事,然后赚钱。       
 
知道wnTKYg是什么鬼之后,我不急着杀死它,先百度了一下它怎么进来的,百度上关于它的帖子特别少,说是钻了redis的空子进来的,我基本上赞同这个说法,第一步就是对redis进行了配置上的修改:
  1. 把默认的端口号6379给改了
  2. 把密码改的更复杂了
  3. 把bind xx.xx.x.x xx.xx.xx.xx改了

修改redis是防止这熊孩子再进来,第二步就是把已经入驻的木马杀死,它不仅使用我的服务器,它还登录我的账号,所以查看了 /root/.ssh 下的文件,在/root/.ssh/known_hosts中发现了我不认识的IP,绝对有问题,于是干脆把 /root/.ssh 下的文件都删了,省事了。
 
第三步就是要找到所有关于病毒的文件, 执行命令  find / -name wnTKYg*,只有/tmp下有这个文件,删了,然后就去kill wnTKYg进程,你以为这样它就可以死了吗?Never!一分钟之后它又复活了,我猜测一定有守护进程在唤醒它,于是我再kill  然后top观察进行变化,终于被我发现了,有一个/tmp/ddg.1007进程很可疑,于是百度这个东东验证了一下,果然,就是挖矿工的守护进程,用ps -aux|grep ddg 命令把所有ddg进程找出来杀掉,并删除/tmp目录下的所有的对应ddg文件,至此,病毒被解决了,异地登录,安全扫描什么的也被我解决了。
 
很多哥们也遇到了这个问题,加了我好友,并且描述了他们的一些情况,我会把他们的改进和补充也写在此贴里,有的哥们会有个定时任务下载这些东西,目录 /var/spool/cron,记得留意这个文件夹,如果遇到,就把它干掉
 
安全问题依然严峻,于是找了一家安全公司--安全狗咨询了下相关的安全业务,发现蛮贵的,都是万开头的,而且我也不知道他们水平怎么样,于是把我遇到的问题跟业务员说了,看看他们怎么解决,怎么收费,谈判了一下午,定价3500,没的再低了,哎,还是我好,又为公司省了3500
 
因为发了这篇帖子,一位和我情况差不多的网友也提供了一种解决方案,我把他的也贴进来与大家分享谢谢这位网友:首先关闭挖矿的服务器访问 :
iptables -A INPUT -s  xmr.crypto-pool.fr -j DROP
iptables -A OUTPUT -d xmr.crypto-pool.fr -j DROP
然后删除yam 文件   用find / -name yam查找yam 文件    之后 找到wnTKYg 所在目录 取消掉其权限  并删除 然后再取消掉 tmp 的权限并删除  之后 pkill  wnTKYg就OK了。
 
当然,我也咨询了阿里的解决方案,有两个,①找第三方安全公司杀②把数据备份一下,重置系统 。  坑爹的阿里啊。
 
分享阅读:点击原文

Nginx的五种负载均衡策略

运维技术chris 发表了文章 • 0 个评论 • 141 次浏览 • 2017-07-03 23:36 • 来自相关话题

Nginx可以根据客户端IP进行负载均衡,在upstream里设置ip_hash,就可以针对同一个C类地址段中的客户端选择同一个后端服务器,除非那个后端服务器宕了才会换一个。
 
nginx的upstream目前支持的5种方式的分配

1、轮询(默认)​

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。upstream backserver {
server 192.168.0.14;
server 192.168.0.15;
}

2、指定权重

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 upstream backserver {
server 192.168.0.14 weight=10;
server 192.168.0.15 weight=10;
}

3、 ip_hash(ip绑定)

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。upstream backserver {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}

4、fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。upstream backserver {
server server1;
server server2;
fair;
}

5、url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 upstream backserver {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
} 在需要使用负载均衡的server中增加 proxy_pass http://backserver/;

upstream backserver{
ip_hash;
server 127.0.0.1:9090 down; (down 表示单前的server暂时不参与负载)
server 127.0.0.1:8080 weight=2; (weight 默认为1.weight越大,负载的权重就越大)
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup; (其它所有的非backup机器down或者忙的时候,请求backup机器)
} max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误 

fail_timeout:max_fails次失败后,暂停的时间 查看全部
Nginx可以根据客户端IP进行负载均衡,在upstream里设置ip_hash,就可以针对同一个C类地址段中的客户端选择同一个后端服务器,除非那个后端服务器宕了才会换一个。
 
nginx的upstream目前支持的5种方式的分配


1、轮询(默认)​


每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
upstream backserver { 
server 192.168.0.14;
server 192.168.0.15;
}


2、指定权重


指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 
upstream backserver { 
server 192.168.0.14 weight=10;
server 192.168.0.15 weight=10;
}


3、 ip_hash(ip绑定)


每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream backserver { 
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}


4、fair(第三方)


按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backserver { 
server server1;
server server2;
fair;
}


5、url_hash(第三方)


按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 
upstream backserver { 
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
在需要使用负载均衡的server中增加 
proxy_pass http://backserver/; 

upstream backserver{
ip_hash;
server 127.0.0.1:9090 down; (down 表示单前的server暂时不参与负载)
server 127.0.0.1:8080 weight=2; (weight 默认为1.weight越大,负载的权重就越大)
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup; (其它所有的非backup机器down或者忙的时候,请求backup机器)
}
max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误 

fail_timeout:max_fails次失败后,暂停的时间

不仅是 Linux 运维最佳实践

运维技术OS小编 发表了文章 • 0 个评论 • 112 次浏览 • 2017-06-30 00:07 • 来自相关话题

我们面对的是一个不断变化的世界,业务需求在变,技术架构在变,开源工具与商业系统异构部署,新工具和技术概念层出不穷,唯有一套科学的技术方法论才能应对这些变化。很多时候,我们在面对新的问题时,会束手无措。因此,在 OSC 第 132 期高手问答中,我们策划了“Linux 运维最佳实践”的主题,并邀请了@xufengnju(胥峰)作为高手嘉宾。

@xufengnju(胥峰),资深运维专家,有 10 年运维经验,在业界颇具威望和影响力。也是盛大游戏高级研究员,2006 年毕业于南京大学,2011 年加入盛大游戏,工作至今,曾参与盛大游戏多款大型端游和手游的上线运维,主导运维自动化平台的功能设计和实施。拥有工信部认证高级信息系统项目管理师资格。

自动化运维在近几年一直都是很火热的话题,技术也一直在进步,因此对于技术人员来说,最重要的思维上、思想上的适应与转变。毕竟技术不是运维的终极追求,思想才是运维人员应该毕生修炼的目标!本次高手问答的高手嘉宾对运维服务体系有着深度的思考,因此问答中产生的内容也是十分有质量。

本文从多个角度整理了与运维相关的内容,包括工具的选择、运维中遇到的问题、自动化运维相关等等。
 
Q&A​
 一、工欲善其事必先利其器,如何选择工具? 
1. 对服务器安全和监控,可以推荐一些开源工具吗?监控好像也就 nagios, cacti, zabbix,还有其他可以推荐的吗?安全方面如何监控?

监控工具各有侧重点,zabbix 同时支持 snmp 和自己的 agent,也支持自定义模板,在大部分场景下都是不错的选择。

另外,不要把 zabbix 视为只能监控服务器信息,通过自定义模板,也可以监控业务层面的指标。安全监控分为主动检测,如 Tenable Nessus,以及 IDS、IPS。

2. Linux 运维中,服务器版本都用什么版本?CentOS 5 还是 CentOS 6、Ubuntu?为什么选择这个版本?有做哪些测试?

目前我们以 CentOS6.X 为主。不同 Linux 分支各有特点,比如 Ubuntu 新版本发布较快,如果追求内核版本升级速度的话,可以考虑。CentOS 一直是我们的主要 Linux 发行版,主要是考虑到它的稳定性以及熟悉程度最高。

3. 对于使用缓存有什么推荐吗?一般就 Redis, Codis。还有那些比较好用的开源软件?

对于类似 session-id 这样的可以非持久存储的数据,可以考虑 memcached,使用一致性哈希算法分布式存储。

4. 做自动化发布,除了 Jenkins 持续集成工具,还有那些好用的工具呢?

目前我所知道的,一般都是 Hudson 或者 Jenkins,后者是前者分支出来的。这些工具都有丰富的插件,灵活使用这些插件是关键所在。

5. 问个 MySQL 问题,三个版本(MySQL(官方版本)、Percona Server 、MariaDB)您建议使用哪个版本,原因是?

我们团队一般使用的是官方版本。主要是考虑到支持和生态。

6. 服务器日志收集和分析有什么好工具推荐吗?ELK 貌似有点复杂,不太会用,有其他的推荐么?

ELK 确实是目前使用比较广泛的日志收集和分析的工具。虽然有些学习成本,但还是值得去研究和尝试的。

7. 书里有开源出一些工具和脚本吗,哪里可以下载到?

书上的脚本我正在整理,其中一部分通过 git 可以下载 https://github.com/xufengnju/books.git  

8. 请问你们现在运维都是基于 Ansible 吗?我们之前都是用 chef puppt 来管理。最近感觉 Ansible 很火,还没实践用过,请问这个用起来差别大吗?

各种不同的批量管理工具各具特点,根据自己的熟悉程度和实际业务需要选择一个完全掌握即可
目前 IaaS 平台是自研的,基于 KVM

二、绝知此事要躬行,运维中遇到问题?1. LVS 和 HAPROXY 后端服务器规模可以到什么程度,比如有多少个应用,多少台后端服务器?

这个取决于应用的类型,在实际的业务场景下,需要关注 LVS 等负载均衡器本身的连接数、PPS 数据以及延迟。如果后端吞吐量比较大,可以考虑 LVS 的 DR 模式。一般情况下,负载均衡器不太会成为瓶颈。

负载均衡器本身的连接数、PPS 数据以及延迟如何进行计算和统计?
通过开源的 Zabbix 模板或者自定义模板,这些都不难实现。有没有相关的命令集进行统计,或者详细的统计实例?

针对 HAProxy 建议参考咱们书中 P76 页最佳实践 29 HAProxy 监控的内容。Zabbix 模板技术,建议参考下咱们书中第 12 章的内容。可以使用的命令包括 ipvsadm,netstat 等。

2. 对于涉及多个平台(Unix, Linux, Windows)的统一管理(认证,配置,服务)有什么好的解决方案或者思路么?

先说下认证这一块吧。Unix、Linux 都支持 OpenLDAP 认证,可以考虑,这个和 Windows 下的 AD 是兼容的。配置和服务可以考虑下开源的通用产品,比如 Ansible 或者 Salt。目前我们用的自研系统,思路和 Ansible 类似。

3. 如何监控服务,业务运行状态监控你是怎么做的?

我们的监控系统是自研的,对游戏来说,很重要的一个业务指标是在线人数,它是通过监控系统周期性轮询游戏服务器来进行收集和绘制图表的。

4. 你们是如何批量管理各个业务模块的机器系统及配置的。我们目录使用 Ansible 使用批量命令和脚本,业务上使用上线平台 SVN 管理业务程序及配置。是否开发了 CMDB 平台?

我们批量管理服务器的方式是 ssh,思路和 Ansible 类似。CMDB 提供基础数据的管理,是自研的。

5. 请问有使用过流量镜像吗?就是把线上的流量镜像一份,引到测试环境,用真实的用户数据测试,想了解下从 0 开始实施的过程。

关于流量镜像的原理,可以参考《Linux 运维最佳实践》第 15 章中网卡混杂模式和 RawSocket 技术。看了这一部分后,你应该可以自己写一套。我没有亲自实践过,你可以自己关注下 tcpcopy 这个项目。

6. CentOS 6 要如何做系统和网络优化?/etc/sysctl.conf 中的这个参数
net.ipv4.tcp_max_tw_buckets = 6000要如何设置,是越多越好吗?设置成 16000?
net.ipv4.tcp_max_tw_buckets = 16000

对于系统优化来说,要有针对性。tcp_max_tw_buckets 针对的是 time wait bucket,如系统中 timewait 状态较多,可以考虑 net.ipv4.tcp_tw_reuse 和 net.ipv4.tcp_tw_recycle 这 2 个值调整。另外,如果使用长连接对于减少该状态的连接数有效。

7. 如果有 100 多台服务器,大部分都是在提供业务的服务器,如何升级呢?除了停机维护,现在有什么比较好的解决方案吗?

如果本身业务切分比较好,例如采用无状态的微服务等架构,可以通过前端负载均衡器进行灰度升级。如果应用做的不好,只有单台的这种,或者集中数据库,就比较麻烦了。

8. LVS 和 HAPROXY 分别能支持多少类似 FARM 的概念?

你说的 FARM 应该是某硬件负载均衡设备的专有名词,应该是负载均衡组的概念。在 LVS 和 HAProxy 里面,负载均衡组的数量上没有硬限制,但实践中一般不会配置太多,因为这涉及到维护成本以及 HA 环境下主备切换时的开销。

9. 系统是 CentOS release 6.5 (Final), 系统没有自动回收内存,16G,我自己写了个 Shell 脚本,每次执行判断小于 1G 的时候回收内存

可以关注下 sysctl 中 swap 以及 swappiness 的一些配置

10. 请问如果是有很多 ECS/VPS,系统一般是 CentOS。目前很多堡垒机也有类似的 SSH 同步密钥下发命令等功能,但是如果还有 Win的堡垒机支持很少。有别的开源工具或者办法来混合管理所有的 Linux, Windows 机器吗? 

在我的这个演讲里面讲到了异构系统的批量管理方法,你可以参考下。

http://www.build.net/greatops/453250.html  。另外,你可以参考下 Ansible 或者 salt。

三、自动化运维相关,工程师思维?
1. 可以说下什么是自动化运维,如何才算服务器做了自动化运维?包括哪些?自动化发布,有问题可以回滚?

运维自动化是一个仁者见仁智者见智的概念。我的理解是,运维自动化要打通从代码开发完到正式上线的所有环节,包括版本构建、打通自动测试、自动化上线以及自动化监控。

在这个大命题下,可以根据自己工作环境和自动化水平的不同,选择一两个痛点开始进行自动化实践。最后形成完整体系。

2. 想请问一下自动化运维怎么做的?需要从那些方面考虑?我所考虑到的有实施运维,日常巡检维护,以及故障自动化处理,和提醒。除了这些请问还要注意那些方面?另外,随着 IT 技术的日新月异,涌现了很多新的应用,请问该如果有一个基本的路子来做运维,或者规律,流程来达到运维需求?例如现在比较火的OpenStack Docker 大数据。这些技术实现功能只是很小的一步,更多的是上线后的运维。更多是想要一种思路,能列举大家遇到过的问题,以及问题如何处理? 

你的问题很好,但这个话题比较大。我先说下我的理解吧。传统的运维服务流程 ITIL 还有一定的价值,但需要结合一些 DevOps 思想来进行适当的改造,融合两者的长处。从拥抱变化开始,以一种开放的态度来进行运维。但不变的一点是,以为业务创造价值为最终目标,这就是运维的目标。

3. 实现运维自动化,最主要就是配置管理、状态管理和变更管理,其中配置管理要如何来做,有什么好的方法分享下吗?

对配置管理,我认为应该分为“基础架构资源配置管理”和“软件/应用配置管理”。

前者是一般意义上的 CMDB 的范畴,这个可以根据自己业务特点在开源 CMDB 方案的基础上做一定的适配;

对于后者,一方面是系统(例如版本控制系统的结合),一方面是流程(例如和变更管理挂钩)。在我们的实践中,这 2 个方面都有涉及。

4. 请问你主导运维自动化平台的功能设计和实施,是通过 Python 开发管理工具吗?另外,你们是重新开发,还是根据 Saltstack 之类的进行二次开发。

底层使用 SSH 协议建立服务器管理通道,上层使用 PHP 开发管理界面以及封装一些常用操作,比如密码修改、脚本下发和执行等。完全自主开发。

 
四、做好安全措施很重要,安全相关的问题1. 运维离不开安全,服务器的安全也很重要,书中有讲运维安全这块吗,如何把控安全这块?

书中有安全主题。安全是一个庞大的体系,书中主要讲了保障 Linux 系统安全的一些措施。其他安全主题,比如社会工程和入侵检测,可能需要看更专业的书。你可以先看看咱们《Linux 运维最佳实践》是否能满足你的基本安全需求。谢谢支持。

2. Web 安全监控有开源解决方案吗,能否做到在接入层就把一些可能的漏洞拦掉?Suricata?

Suricata 没有研究和实践过。《Linux 运维最佳实践》中第 11 章 Web 服务器安全部分提到了几个工具,你可以参考下。但 ModSecurity 规则在上线前要进行严格详细测试,不要出现误判。另外,建议对生产环境进行定期的安全扫描,例如使用 Tenable Nessus 工具等。安全专家的人工渗透测试也是必须的。

 
五、Docker 很火热,在运维中结合使用?1. 在网易游戏运维中是否用到了最近很火的 Docker 技术以及应用在哪,存在什么问题,如何解决?

目前我们在调研 Docker 技术,只有少量游戏测试使用。需要根据不同的业务模型选择对应的网络模型和存储方案。Docker 技术会改变传统的运维方式,要考虑和原有运维系统整合以及运维习惯的调整所带来的挑战。另外,我不是网易公司的,我目前在盛大游戏工作。 

2. Docker 化对运维影响深远吗?

Docker 化对运维有影响,它带来的影响包括:持续交付、微服务以及 DevOps 理念的冲击。作为运维,我们要拥抱这个变化,通过不断学习和实践来迎接这些挑战。

3. 为何国内没有一家成熟的 Docker 方案公布细节呢?

Docker 还是一个新生事物,各家使用的场景和模式有所不同,而且会有一些二次开发的管理系统和调度系统。

 
六、不是所有对比都会产生伤害,工程师想的只是最优方案1. 游戏服务器运维和网站服务器运维以及 APP 服务器运维,有哪些不同点和相同点?

这个问题很有代表性。不同点是,网站和 APP 运维接触的通用开源软件比较多,游戏运维接触的大部分都是自研的程序。

共同点是,都需要掌握操作系统知识、软件硬件以及网络知识,还有排查问题的思路和容量规划等。两者都需要引入运维自动化的思维和体系。《Linux 运维最佳实践》最后 2 章描述了游戏运维的相关体系和技术。

2. 作为运维人员,Python 这样的脚本在进行系统管理和监控的时候相比 Shell 有怎样的优势呢?

作为高级编程语言,Python 有非常丰富的库,包括核心库和第三方库,很多时候不需要自己造轮子;

相比 Shell,它有更好的控制力、重试机制,比如对 Socket 设置超时等等。

3. CentOS 比起 Ubuntu 来说有啥优势?为什么服务器大多用 CentOS?

不同 Linux 分支各有特点,比如 Ubuntu 新版本发布较快,如果追求内核版本升级速度的话,可以考虑。CentOS 一直是我们的主要 Linux 发行版,稳定性以及熟悉程度最高。

选择某个发行版时,要考虑它的生态,比如上下游的支持,还有一点,就是运维人员招聘的方便程度,国内熟悉 CentOS 的稍多一些。

4. 想问下只有一台服务器,有多个应用,是用 LVS 做负载好还是 Nginx?差别大吗?

你说的后端应用是基于 HTTP 或者 HTTPS 的吗?如果是的话,并且吞吐量不大的情况下,使用 Nginx 即可;如果非 HTTP 或者 HTTPS 的 TCP 应用,建议使用 LVS;如果 HTTP 或者 HTTPS 吞吐量特别大的情况下,使用 LVS DR 模式。

七、You Need Backup,与备份相关的一些问题1. 1000 台机器规模,备份系统应该要做到什么程度?

1000 台服务器,要区分业务类型,如果类型单一,备份就比较好做。如果类型多,那么要考虑的地方包括:数据库更新的频率(全备+增量备份?还是只使用全备)、数据备份的大小、数据集中归档的要求。

2. 备份是怎么做的?上百 T 的图片、附件有什么高雅的备份方案?

在线备份这一块,可以考虑使用 erasure coding 算法,在增加一定可靠性的能力下,不至于导致备份存储的成本过高。同时要考虑离线备份,比如磁带。

八、路漫漫其修远兮,运维工程师的职业生涯1. 你觉得在未来,运维的核心会是什么,自动化,预判或是其他?

我觉得,未来的运维应该是智能化的。把现在需要人做的容量规划、扩缩容、排障全部实现智能化。运维的任务就是编程,把自己的能力灌输到机器上。当然,理想很丰满,现实很骨感。这需要我们的不懈努力。

2. 作为工作 4 年多的测试工作者,在运维方面也是有一定的涉猎,在公司维护自己的测试环境,有时候也需要一定运维功底,从 Windows Server 到 Linux,学习很多,也总结了很多。上家公司着手 Docker 部署的时候刚好离开公司了。真是有点遗憾,后续工作也没时间去实践,目前使用的是 ng 负载,采用 Tomcat 部署方案,工作实在比较忙,很想在运维方面也有一定的提升!不知道从何入手好,求大神指教。

从你的描述来看,目前是兼职运维。我建议是否可以考虑,在搭建环境之外,多多研究下其中的原理,同时用自动化脚本维护这些环境呢。相信你也有一些编程经验,这些对于你后续实践运维也是有帮助的。另外,就是可以多看看别人总结的运维案例,少走一些弯路。

3. 运维技术挺杂的,如何看待这种杂?给人感觉好像什么都会点,对于工作 5-6 年的运维来说,有什么好的学习建议?

如你所说,运维技术要求范围确实蛮广的。我觉得,对于工作了一定时间的运维同学来说,可以考虑的方向有以下几个:
DevOps 实践(加强自己的编程能力,系统学习一门高级编程语言,运维自动化)对自己的技术薄弱点重点学习,比如系统学习网络知识看一些比较好的运维技术书籍,学习别人的干货

4. 由于运维系统有全面的数据收集、自动处理、报警和自动恢复的机制,我们这里将运维和 BI 结合在一起。扩展运维工具和架构,将已成熟的 BI 接入运维体系,解放业务专员的工作,常规的业务分析、报表、数据监控都可依赖这套运维系统。在我们这里,运维从一层平台逐渐变成一种框架,有需要的场景都可以套用。技术一直在变,但最重要的不是技术,而是用技术提供服务的思想。
 
除了和 BI 结合,运维思维还可以和哪些相关业务场景结合,可以在新的方向上产生价值呢?

我很赞同你的想法和实践,“用技术提供服务的思想”。我个人认为,运维的终极目标可能是“没有运维工程师的”自运维,或者叫智能运维,是 AI 在运维领域的深度融合和实践。容量规划算法的不断优化、基于公有云的资源自动调度都应该是智能化的。当然,实现这个目标还有很长的路要走。

5. Devops 对运维有那些改变,能简单说下嘛?

Devops 从概念提出到现在已经有一段比较长的时间了,总体来说,我认为它带来的变化是:持续交付能力需要打通研发、测试和部署运维的整个链路,它对运维自动化的能力要求更高了。我们必须通过掌握一些运维自动化框架加上一定的编程能力才能根据业务场景来应对这种变化。另外,对运维来说,就是要拥抱变化,以开放的态度进行协作。

6. 现在哪个版本的 Linux 使用最广泛,还有 Linux 运维,我们需要学习一些语言吗,比如 Python 之类,这样才能算是一个真正的好运维?

不要犹豫了,立即开始学习编程吧,不管 Perl 还是 Python,熟悉哪一种都行。在这里,我不对比 Perl 和 Python 的优缺点。坚持用自己的代码(加上别人的框架和库)来解决重复的运维问题,你会成长的更快。CentOS 用的比较多。

《Linux 运维最佳实践》第 18 章是使用 Perl 进行系统自动化编程的内容,你可以先看看。如果感兴趣的话,立即开始吧。

7. 请问您写书,是怎么坚持写下来的?是把平时工作重点的问题,记录下来,每天写一点,再总结吗?写书有什么工具软件吗,还是只是用 Word 来写?能分享下写运维书籍的方法吗?

这个问题非常好,也是我想分享的。写书的素材依赖于平时的积累,建议大家平时多写写标准的文档,word 格式可以参考咱们这本书的编排。比较重要的 3 点是:
visio 图要保留下来,不能只存图片,因为可能还要调整排版有些故障现场,尽量记录详细,现象和分析过程、辅助的日志和抓包文件等,建议都保留下来脚本按照分类保存下来,以便查找

有关 Linux 运维最佳实践的问答内容至此结束,各位读者可以转到原帖浏览更多内容。
原文:运维技术干货 — 不仅是 Linux 运维最佳实践 。 查看全部
我们面对的是一个不断变化的世界,业务需求在变,技术架构在变,开源工具与商业系统异构部署,新工具和技术概念层出不穷,唯有一套科学的技术方法论才能应对这些变化。很多时候,我们在面对新的问题时,会束手无措。因此,在 OSC 第 132 期高手问答中,我们策划了“Linux 运维最佳实践”的主题,并邀请了@xufengnju(胥峰)作为高手嘉宾。

@xufengnju(胥峰),资深运维专家,有 10 年运维经验,在业界颇具威望和影响力。也是盛大游戏高级研究员,2006 年毕业于南京大学,2011 年加入盛大游戏,工作至今,曾参与盛大游戏多款大型端游和手游的上线运维,主导运维自动化平台的功能设计和实施。拥有工信部认证高级信息系统项目管理师资格。

自动化运维在近几年一直都是很火热的话题,技术也一直在进步,因此对于技术人员来说,最重要的思维上、思想上的适应与转变。毕竟技术不是运维的终极追求,思想才是运维人员应该毕生修炼的目标!本次高手问答的高手嘉宾对运维服务体系有着深度的思考,因此问答中产生的内容也是十分有质量。

本文从多个角度整理了与运维相关的内容,包括工具的选择、运维中遇到的问题、自动化运维相关等等。
 
Q&A​
 
一、工欲善其事必先利其器,如何选择工具?
 
1. 对服务器安全和监控,可以推荐一些开源工具吗?监控好像也就 nagios, cacti, zabbix,还有其他可以推荐的吗?安全方面如何监控?


监控工具各有侧重点,zabbix 同时支持 snmp 和自己的 agent,也支持自定义模板,在大部分场景下都是不错的选择。

另外,不要把 zabbix 视为只能监控服务器信息,通过自定义模板,也可以监控业务层面的指标。安全监控分为主动检测,如 Tenable Nessus,以及 IDS、IPS。


2. Linux 运维中,服务器版本都用什么版本?CentOS 5 还是 CentOS 6、Ubuntu?为什么选择这个版本?有做哪些测试?


目前我们以 CentOS6.X 为主。不同 Linux 分支各有特点,比如 Ubuntu 新版本发布较快,如果追求内核版本升级速度的话,可以考虑。CentOS 一直是我们的主要 Linux 发行版,主要是考虑到它的稳定性以及熟悉程度最高。


3. 对于使用缓存有什么推荐吗?一般就 Redis, Codis。还有那些比较好用的开源软件?


对于类似 session-id 这样的可以非持久存储的数据,可以考虑 memcached,使用一致性哈希算法分布式存储。


4. 做自动化发布,除了 Jenkins 持续集成工具,还有那些好用的工具呢?


目前我所知道的,一般都是 Hudson 或者 Jenkins,后者是前者分支出来的。这些工具都有丰富的插件,灵活使用这些插件是关键所在。


5. 问个 MySQL 问题,三个版本(MySQL(官方版本)、Percona Server 、MariaDB)您建议使用哪个版本,原因是?


我们团队一般使用的是官方版本。主要是考虑到支持和生态。


6. 服务器日志收集和分析有什么好工具推荐吗?ELK 貌似有点复杂,不太会用,有其他的推荐么?


ELK 确实是目前使用比较广泛的日志收集和分析的工具。虽然有些学习成本,但还是值得去研究和尝试的。


7. 书里有开源出一些工具和脚本吗,哪里可以下载到?


书上的脚本我正在整理,其中一部分通过 git 可以下载 https://github.com/xufengnju/books.git  


8. 请问你们现在运维都是基于 Ansible 吗?我们之前都是用 chef puppt 来管理。最近感觉 Ansible 很火,还没实践用过,请问这个用起来差别大吗?


各种不同的批量管理工具各具特点,根据自己的熟悉程度和实际业务需要选择一个完全掌握即可
目前 IaaS 平台是自研的,基于 KVM


二、绝知此事要躬行,运维中遇到问题?
1. LVS 和 HAPROXY 后端服务器规模可以到什么程度,比如有多少个应用,多少台后端服务器?


这个取决于应用的类型,在实际的业务场景下,需要关注 LVS 等负载均衡器本身的连接数、PPS 数据以及延迟。如果后端吞吐量比较大,可以考虑 LVS 的 DR 模式。一般情况下,负载均衡器不太会成为瓶颈。


负载均衡器本身的连接数、PPS 数据以及延迟如何进行计算和统计?
通过开源的 Zabbix 模板或者自定义模板,这些都不难实现。
有没有相关的命令集进行统计,或者详细的统计实例?


针对 HAProxy 建议参考咱们书中 P76 页最佳实践 29 HAProxy 监控的内容。Zabbix 模板技术,建议参考下咱们书中第 12 章的内容。可以使用的命令包括 ipvsadm,netstat 等。


2. 对于涉及多个平台(Unix, Linux, Windows)的统一管理(认证,配置,服务)有什么好的解决方案或者思路么?


先说下认证这一块吧。Unix、Linux 都支持 OpenLDAP 认证,可以考虑,这个和 Windows 下的 AD 是兼容的。配置和服务可以考虑下开源的通用产品,比如 Ansible 或者 Salt。目前我们用的自研系统,思路和 Ansible 类似。


3. 如何监控服务,业务运行状态监控你是怎么做的?


我们的监控系统是自研的,对游戏来说,很重要的一个业务指标是在线人数,它是通过监控系统周期性轮询游戏服务器来进行收集和绘制图表的。


4. 你们是如何批量管理各个业务模块的机器系统及配置的。我们目录使用 Ansible 使用批量命令和脚本,业务上使用上线平台 SVN 管理业务程序及配置。是否开发了 CMDB 平台?


我们批量管理服务器的方式是 ssh,思路和 Ansible 类似。CMDB 提供基础数据的管理,是自研的。


5. 请问有使用过流量镜像吗?就是把线上的流量镜像一份,引到测试环境,用真实的用户数据测试,想了解下从 0 开始实施的过程。


关于流量镜像的原理,可以参考《Linux 运维最佳实践》第 15 章中网卡混杂模式和 RawSocket 技术。看了这一部分后,你应该可以自己写一套。我没有亲自实践过,你可以自己关注下 tcpcopy 这个项目。


6. CentOS 6 要如何做系统和网络优化?/etc/sysctl.conf 中的这个参数
net.ipv4.tcp_max_tw_buckets = 6000
要如何设置,是越多越好吗?设置成 16000?
net.ipv4.tcp_max_tw_buckets = 16000


对于系统优化来说,要有针对性。tcp_max_tw_buckets 针对的是 time wait bucket,如系统中 timewait 状态较多,可以考虑 net.ipv4.tcp_tw_reuse 和 net.ipv4.tcp_tw_recycle 这 2 个值调整。另外,如果使用长连接对于减少该状态的连接数有效。


7. 如果有 100 多台服务器,大部分都是在提供业务的服务器,如何升级呢?除了停机维护,现在有什么比较好的解决方案吗?


如果本身业务切分比较好,例如采用无状态的微服务等架构,可以通过前端负载均衡器进行灰度升级。如果应用做的不好,只有单台的这种,或者集中数据库,就比较麻烦了。


8. LVS 和 HAPROXY 分别能支持多少类似 FARM 的概念?


你说的 FARM 应该是某硬件负载均衡设备的专有名词,应该是负载均衡组的概念。在 LVS 和 HAProxy 里面,负载均衡组的数量上没有硬限制,但实践中一般不会配置太多,因为这涉及到维护成本以及 HA 环境下主备切换时的开销。


9. 系统是 CentOS release 6.5 (Final), 系统没有自动回收内存,16G,我自己写了个 Shell 脚本,每次执行判断小于 1G 的时候回收内存


可以关注下 sysctl 中 swap 以及 swappiness 的一些配置


10. 请问如果是有很多 ECS/VPS,系统一般是 CentOS。目前很多堡垒机也有类似的 SSH 同步密钥下发命令等功能,但是如果还有 Win的堡垒机支持很少。有别的开源工具或者办法来混合管理所有的 Linux, Windows 机器吗? 


在我的这个演讲里面讲到了异构系统的批量管理方法,你可以参考下。

http://www.build.net/greatops/453250.html  。另外,你可以参考下 Ansible 或者 salt。


三、自动化运维相关,工程师思维?

1. 可以说下什么是自动化运维,如何才算服务器做了自动化运维?包括哪些?自动化发布,有问题可以回滚?


运维自动化是一个仁者见仁智者见智的概念。我的理解是,运维自动化要打通从代码开发完到正式上线的所有环节,包括版本构建、打通自动测试、自动化上线以及自动化监控。

在这个大命题下,可以根据自己工作环境和自动化水平的不同,选择一两个痛点开始进行自动化实践。最后形成完整体系。


2. 想请问一下自动化运维怎么做的?需要从那些方面考虑?我所考虑到的有实施运维,日常巡检维护,以及故障自动化处理,和提醒。除了这些请问还要注意那些方面?另外,随着 IT 技术的日新月异,涌现了很多新的应用,请问该如果有一个基本的路子来做运维,或者规律,流程来达到运维需求?例如现在比较火的OpenStack Docker 大数据。这些技术实现功能只是很小的一步,更多的是上线后的运维。更多是想要一种思路,能列举大家遇到过的问题,以及问题如何处理? 


你的问题很好,但这个话题比较大。我先说下我的理解吧。传统的运维服务流程 ITIL 还有一定的价值,但需要结合一些 DevOps 思想来进行适当的改造,融合两者的长处。从拥抱变化开始,以一种开放的态度来进行运维。但不变的一点是,以为业务创造价值为最终目标,这就是运维的目标。


3. 实现运维自动化,最主要就是配置管理、状态管理和变更管理,其中配置管理要如何来做,有什么好的方法分享下吗?


对配置管理,我认为应该分为“基础架构资源配置管理”和“软件/应用配置管理”。

前者是一般意义上的 CMDB 的范畴,这个可以根据自己业务特点在开源 CMDB 方案的基础上做一定的适配;

对于后者,一方面是系统(例如版本控制系统的结合),一方面是流程(例如和变更管理挂钩)。在我们的实践中,这 2 个方面都有涉及。


4. 请问你主导运维自动化平台的功能设计和实施,是通过 Python 开发管理工具吗?另外,你们是重新开发,还是根据 Saltstack 之类的进行二次开发。


底层使用 SSH 协议建立服务器管理通道,上层使用 PHP 开发管理界面以及封装一些常用操作,比如密码修改、脚本下发和执行等。完全自主开发。


 
四、做好安全措施很重要,安全相关的问题
1. 运维离不开安全,服务器的安全也很重要,书中有讲运维安全这块吗,如何把控安全这块?


书中有安全主题。安全是一个庞大的体系,书中主要讲了保障 Linux 系统安全的一些措施。其他安全主题,比如社会工程和入侵检测,可能需要看更专业的书。你可以先看看咱们《Linux 运维最佳实践》是否能满足你的基本安全需求。谢谢支持。


2. Web 安全监控有开源解决方案吗,能否做到在接入层就把一些可能的漏洞拦掉?Suricata?


Suricata 没有研究和实践过。《Linux 运维最佳实践》中第 11 章 Web 服务器安全部分提到了几个工具,你可以参考下。但 ModSecurity 规则在上线前要进行严格详细测试,不要出现误判。另外,建议对生产环境进行定期的安全扫描,例如使用 Tenable Nessus 工具等。安全专家的人工渗透测试也是必须的。


 
五、Docker 很火热,在运维中结合使用?
1. 在网易游戏运维中是否用到了最近很火的 Docker 技术以及应用在哪,存在什么问题,如何解决?


目前我们在调研 Docker 技术,只有少量游戏测试使用。需要根据不同的业务模型选择对应的网络模型和存储方案。Docker 技术会改变传统的运维方式,要考虑和原有运维系统整合以及运维习惯的调整所带来的挑战。另外,我不是网易公司的,我目前在盛大游戏工作。 


2. Docker 化对运维影响深远吗?


Docker 化对运维有影响,它带来的影响包括:持续交付、微服务以及 DevOps 理念的冲击。作为运维,我们要拥抱这个变化,通过不断学习和实践来迎接这些挑战。


3. 为何国内没有一家成熟的 Docker 方案公布细节呢?


Docker 还是一个新生事物,各家使用的场景和模式有所不同,而且会有一些二次开发的管理系统和调度系统。


 
六、不是所有对比都会产生伤害,工程师想的只是最优方案
1. 游戏服务器运维和网站服务器运维以及 APP 服务器运维,有哪些不同点和相同点?


这个问题很有代表性。不同点是,网站和 APP 运维接触的通用开源软件比较多,游戏运维接触的大部分都是自研的程序。

共同点是,都需要掌握操作系统知识、软件硬件以及网络知识,还有排查问题的思路和容量规划等。两者都需要引入运维自动化的思维和体系。《Linux 运维最佳实践》最后 2 章描述了游戏运维的相关体系和技术。


2. 作为运维人员,Python 这样的脚本在进行系统管理和监控的时候相比 Shell 有怎样的优势呢?


作为高级编程语言,Python 有非常丰富的库,包括核心库和第三方库,很多时候不需要自己造轮子;

相比 Shell,它有更好的控制力、重试机制,比如对 Socket 设置超时等等。


3. CentOS 比起 Ubuntu 来说有啥优势?为什么服务器大多用 CentOS?


不同 Linux 分支各有特点,比如 Ubuntu 新版本发布较快,如果追求内核版本升级速度的话,可以考虑。CentOS 一直是我们的主要 Linux 发行版,稳定性以及熟悉程度最高。

选择某个发行版时,要考虑它的生态,比如上下游的支持,还有一点,就是运维人员招聘的方便程度,国内熟悉 CentOS 的稍多一些。


4. 想问下只有一台服务器,有多个应用,是用 LVS 做负载好还是 Nginx?差别大吗?


你说的后端应用是基于 HTTP 或者 HTTPS 的吗?如果是的话,并且吞吐量不大的情况下,使用 Nginx 即可;如果非 HTTP 或者 HTTPS 的 TCP 应用,建议使用 LVS;如果 HTTP 或者 HTTPS 吞吐量特别大的情况下,使用 LVS DR 模式。


七、You Need Backup,与备份相关的一些问题
1. 1000 台机器规模,备份系统应该要做到什么程度?


1000 台服务器,要区分业务类型,如果类型单一,备份就比较好做。如果类型多,那么要考虑的地方包括:数据库更新的频率(全备+增量备份?还是只使用全备)、数据备份的大小、数据集中归档的要求。


2. 备份是怎么做的?上百 T 的图片、附件有什么高雅的备份方案?


在线备份这一块,可以考虑使用 erasure coding 算法,在增加一定可靠性的能力下,不至于导致备份存储的成本过高。同时要考虑离线备份,比如磁带。


八、路漫漫其修远兮,运维工程师的职业生涯
1. 你觉得在未来,运维的核心会是什么,自动化,预判或是其他?


我觉得,未来的运维应该是智能化的。把现在需要人做的容量规划、扩缩容、排障全部实现智能化。运维的任务就是编程,把自己的能力灌输到机器上。当然,理想很丰满,现实很骨感。这需要我们的不懈努力。


2. 作为工作 4 年多的测试工作者,在运维方面也是有一定的涉猎,在公司维护自己的测试环境,有时候也需要一定运维功底,从 Windows Server 到 Linux,学习很多,也总结了很多。上家公司着手 Docker 部署的时候刚好离开公司了。真是有点遗憾,后续工作也没时间去实践,目前使用的是 ng 负载,采用 Tomcat 部署方案,工作实在比较忙,很想在运维方面也有一定的提升!不知道从何入手好,求大神指教。


从你的描述来看,目前是兼职运维。我建议是否可以考虑,在搭建环境之外,多多研究下其中的原理,同时用自动化脚本维护这些环境呢。相信你也有一些编程经验,这些对于你后续实践运维也是有帮助的。另外,就是可以多看看别人总结的运维案例,少走一些弯路。


3. 运维技术挺杂的,如何看待这种杂?给人感觉好像什么都会点,对于工作 5-6 年的运维来说,有什么好的学习建议?


如你所说,运维技术要求范围确实蛮广的。我觉得,对于工作了一定时间的运维同学来说,可以考虑的方向有以下几个:

  • DevOps 实践(加强自己的编程能力,系统学习一门高级编程语言,运维自动化)
  • 对自己的技术薄弱点重点学习,比如系统学习网络知识
  • 看一些比较好的运维技术书籍,学习别人的干货


4. 由于运维系统有全面的数据收集、自动处理、报警和自动恢复的机制,我们这里将运维和 BI 结合在一起。扩展运维工具和架构,将已成熟的 BI 接入运维体系,解放业务专员的工作,常规的业务分析、报表、数据监控都可依赖这套运维系统。在我们这里,运维从一层平台逐渐变成一种框架,有需要的场景都可以套用。技术一直在变,但最重要的不是技术,而是用技术提供服务的思想。
 
除了和 BI 结合,运维思维还可以和哪些相关业务场景结合,可以在新的方向上产生价值呢?


我很赞同你的想法和实践,“用技术提供服务的思想”。我个人认为,运维的终极目标可能是“没有运维工程师的”自运维,或者叫智能运维,是 AI 在运维领域的深度融合和实践。容量规划算法的不断优化、基于公有云的资源自动调度都应该是智能化的。当然,实现这个目标还有很长的路要走。


5. Devops 对运维有那些改变,能简单说下嘛?


Devops 从概念提出到现在已经有一段比较长的时间了,总体来说,我认为它带来的变化是:持续交付能力需要打通研发、测试和部署运维的整个链路,它对运维自动化的能力要求更高了。我们必须通过掌握一些运维自动化框架加上一定的编程能力才能根据业务场景来应对这种变化。另外,对运维来说,就是要拥抱变化,以开放的态度进行协作。


6. 现在哪个版本的 Linux 使用最广泛,还有 Linux 运维,我们需要学习一些语言吗,比如 Python 之类,这样才能算是一个真正的好运维?


不要犹豫了,立即开始学习编程吧,不管 Perl 还是 Python,熟悉哪一种都行。在这里,我不对比 Perl 和 Python 的优缺点。坚持用自己的代码(加上别人的框架和库)来解决重复的运维问题,你会成长的更快。CentOS 用的比较多。

《Linux 运维最佳实践》第 18 章是使用 Perl 进行系统自动化编程的内容,你可以先看看。如果感兴趣的话,立即开始吧。


7. 请问您写书,是怎么坚持写下来的?是把平时工作重点的问题,记录下来,每天写一点,再总结吗?写书有什么工具软件吗,还是只是用 Word 来写?能分享下写运维书籍的方法吗?


这个问题非常好,也是我想分享的。写书的素材依赖于平时的积累,建议大家平时多写写标准的文档,word 格式可以参考咱们这本书的编排。比较重要的 3 点是:

  • visio 图要保留下来,不能只存图片,因为可能还要调整排版
  • 有些故障现场,尽量记录详细,现象和分析过程、辅助的日志和抓包文件等,建议都保留下来
  • 脚本按照分类保存下来,以便查找


有关 Linux 运维最佳实践的问答内容至此结束,各位读者可以转到原帖浏览更多内容。
原文:运维技术干货 — 不仅是 Linux 运维最佳实践 。
条新动态, 点击查看
采菊篱下

采菊篱下 回答了问题 • 2016-05-15 10:57 • 2 个回复 不感兴趣

Linux怎么查看磁盘UUID并挂载

赞同来自:

**1、查看磁盘分区结构**
lsblk命令可以清晰的获取全局的块设备布局
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 252:0 0 40G 0 disk
└─vda1 ... 显示全部 »
**1、查看磁盘分区结构**
lsblk命令可以清晰的获取全局的块设备布局
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 252:0 0 40G 0 disk
└─vda1 252:1 0 40G 0 part /
vdb 252:16 0 300G 0 disk
sr0 11:0 1 1024M 0 rom
#
**2、查看磁盘UUID**
一般服务器都有多个硬盘分区,在重启后,这些分区的逻辑位置加载时可能会发生变动,如果使用传统的设备名称(例如:/dev/sda)方式挂载磁盘,就可能因为磁盘顺序变化而造成混乱。

Linux环境中每个Block Device都有一个全局唯一的UUID,可以标识这个设备,我们可以在fstab中使用UUID替换设备名称,这样就不会产生上述混乱的情况了。
查看方法:
# blkid
/dev/vda1: UUID="94e4e384-0ace-437f-bc96-057dd64f42ee" TYPE="ext4"
/dev/vdb: UUID="9e6fc7ab-f624-4638-b757-b797176467e2" TYPE="ext4"
#
**3、编辑挂载磁盘**
# vim /etc/fstab在最后加上一行,然后:wq保存退出。
1197
 
_**重启查看/dev/vdb挂载情况:**_
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 1.4G 36G 4% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
/dev/vdb 296G 191M 281G 1% /data
#

开源分布式数据库Mysql中间件Mycat

开源项目chris 发表了文章 • 1 个评论 • 2738 次浏览 • 2016-01-09 19:54 • 来自相关话题

什么是MYCAT

[]一个彻底开源的,面向企业应用开发的大数据库集群[/][]支持事务、ACID、可以替代MySQL的加强版数据库[/][]一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群[/][]一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server[/][]结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品[/][]一个新颖的数据库中间件产品[/]

Mycat特性

[]支持SQL92标准[/][]遵守Mysql原生协议,跨语言,跨数据库的通用中间件代理。[/][]基于心跳的自动故障切换,支持读写分离,支持MySQL主从,以及galera cluster。[/][]支持Galera for MySQL集群,Percona Cluster或者MariaDB cluster[/][]基于Nio实现,有效管理线程,高并发问题。[/][]支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数。[/][]支持2表join,甚至基于caltlet的多表join。[/][]支持通过全局表,ER关系的分片策略,实现了高效的多表join查询。[/][]支持多租户方案。[/][]支持分布式事务(弱xa)。[/][]支持全局序列号,解决分布式下的主键生成问题。[/][]分片规则丰富,插件化开发,易于扩展。[/][]强大的web,命令行监控。[/][]支持前端作为mysq通用代理,后端JDBC方式支持Oracle、DB2、SQL Server 、 mongodb 、巨杉。[/][]支持密码加密[/][]支持IP白名单[/][]支持SQL黑名单、sql注入攻击拦截[/][]集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)。[/]

Mycat架构






Mycat高可用方案


















Mycat监控

[]支持对Mycat、Mysql性能监控[/][]支持对Mycat的JVM内存提供监控服务[/][]支持对线程的监控[/][]支持对操作系统的CPU、内存、磁盘、网络的监控[/]









目标

低成本的将现有的单机数据库和应用平滑迁移到“云”端,解决数据存储和业务规模迅速增长情况下的数据瓶颈问题。
1.5版本架构





长期规划2.0

[]完全实现分布式事务,完全的支持分布式。[/][]通过Mycat web(eye)完成可视化配置,及智能监控,自动运维。[/][]通过mysql 本地节点,完整的解决数据扩容难度,实现自动扩容机制,解决扩容难点。[/][]支持基于zookeeper的主从切换及Mycat集群化管理。[/][]通过Mycat Balance 替代第三方的Haproxy,LVS等第三方高可用,完整的兼容Mycat集群节点的动态上下线。[/][]接入Spark等第三方工具,解决数据分析及大数据聚合的业务场景。[/][]通过Mycat智能优化,分析分片热点,提供合理的分片建议,索引建议,及数据切分实时业务建议。[/]

优势

基于阿里开源的Cobar产品而研发,Cobar的稳定性、可靠性、优秀的架构和性能以及众多成熟的使用案例使得MYCAT一开始就拥有一个很好的起点,站在巨人的肩膀上,我们能看到更远。业界优秀的开源项目和创新思路被广泛融入到MYCAT的基因中,使得MYCAT在很多方面都领先于目前其他一些同类的开源项目,甚至超越某些商业产品。
MYCAT背后有一支强大的技术团队,其参与者都是5年以上资深软件工程师、架构师、DBA等,优秀的技术团队保证了MYCAT的产品质量。
MYCAT并不依托于任何一个商业公司,因此不像某些开源项目,将一些重要的特性封闭在其商业产品中,使得开源项目成了一个摆设。

Mycat关注

老外都开始关注Mycat了!





Mycat官方论坛:http://i.mycat.io/forum.php
Mycat Github:https://github.com/MyCATApache
Mycat权威指南第一版_V1.5.1:http://pan.baidu.com/s/1i3SFOpf 查看全部


什么是MYCAT


    []一个彻底开源的,面向企业应用开发的大数据库集群[/][]支持事务、ACID、可以替代MySQL的加强版数据库[/][]一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群[/][]一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server[/][]结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品[/][]一个新颖的数据库中间件产品[/]


Mycat特性


    []支持SQL92标准[/][]遵守Mysql原生协议,跨语言,跨数据库的通用中间件代理。[/][]基于心跳的自动故障切换,支持读写分离,支持MySQL主从,以及galera cluster。[/][]支持Galera for MySQL集群,Percona Cluster或者MariaDB cluster[/][]基于Nio实现,有效管理线程,高并发问题。[/][]支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数。[/][]支持2表join,甚至基于caltlet的多表join。[/][]支持通过全局表,ER关系的分片策略,实现了高效的多表join查询。[/][]支持多租户方案。[/][]支持分布式事务(弱xa)。[/][]支持全局序列号,解决分布式下的主键生成问题。[/][]分片规则丰富,插件化开发,易于扩展。[/][]强大的web,命令行监控。[/][]支持前端作为mysq通用代理,后端JDBC方式支持Oracle、DB2、SQL Server 、 mongodb 、巨杉。[/][]支持密码加密[/][]支持IP白名单[/][]支持SQL黑名单、sql注入攻击拦截[/][]集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)。[/]


Mycat架构


mycat_arch.png


Mycat高可用方案


mysql_ha1.png

mysql_ha2.png

mysql_ha3.png

mycat_ha4.png


Mycat监控


    []支持对Mycat、Mysql性能监控[/][]支持对Mycat的JVM内存提供监控服务[/][]支持对线程的监控[/][]支持对操作系统的CPU、内存、磁盘、网络的监控[/]

mycateye1.png

mycateye2.png


目标


低成本的将现有的单机数据库和应用平滑迁移到“云”端,解决数据存储和业务规模迅速增长情况下的数据瓶颈问题。
1.5版本架构
mycat2_0.png


长期规划2.0


    []完全实现分布式事务,完全的支持分布式。[/][]通过Mycat web(eye)完成可视化配置,及智能监控,自动运维。[/][]通过mysql 本地节点,完整的解决数据扩容难度,实现自动扩容机制,解决扩容难点。[/][]支持基于zookeeper的主从切换及Mycat集群化管理。[/][]通过Mycat Balance 替代第三方的Haproxy,LVS等第三方高可用,完整的兼容Mycat集群节点的动态上下线。[/][]接入Spark等第三方工具,解决数据分析及大数据聚合的业务场景。[/][]通过Mycat智能优化,分析分片热点,提供合理的分片建议,索引建议,及数据切分实时业务建议。[/]


优势


基于阿里开源的Cobar产品而研发,Cobar的稳定性、可靠性、优秀的架构和性能以及众多成熟的使用案例使得MYCAT一开始就拥有一个很好的起点,站在巨人的肩膀上,我们能看到更远。业界优秀的开源项目和创新思路被广泛融入到MYCAT的基因中,使得MYCAT在很多方面都领先于目前其他一些同类的开源项目,甚至超越某些商业产品。
MYCAT背后有一支强大的技术团队,其参与者都是5年以上资深软件工程师、架构师、DBA等,优秀的技术团队保证了MYCAT的产品质量。
MYCAT并不依托于任何一个商业公司,因此不像某些开源项目,将一些重要的特性封闭在其商业产品中,使得开源项目成了一个摆设。


Mycat关注


老外都开始关注Mycat了!
catmycat.png


Mycat官方论坛:http://i.mycat.io/forum.php
Mycat Github:https://github.com/MyCATApache
Mycat权威指南第一版_V1.5.1:http://pan.baidu.com/s/1i3SFOpf


监控软件对比选择

运维技术Rock 发表了文章 • 2 个评论 • 1029 次浏览 • 2016-01-03 04:18 • 来自相关话题

Cacti、Nagios、Zabbix功能对比




 
其他对比
Cacti、Nagios、Zabbix功能对比
function.png

 
其他对比
monitor_soft.png

Linux知识工具大全

运维技术OpenSkill 发表了文章 • 0 个评论 • 2689 次浏览 • 2015-12-03 23:19 • 来自相关话题

简介:
Linux is a Unix-ish POSIX-compliant OS family. Most of the distros are GPL or otherwise FOSS. The defining component of Linux is the Linux Kernel, first released on 5 October 1991 by Linus Torvalds.

新版本






开始






受欢迎的网站






著名发行版本






Grok Linux       






Linux Virt






可调参数






Linux日志






Book/ebooks






Kernel Matrix 






内核地图






In Production






Linux论坛






shell指南






Linux安全






Linux桌面






防火墙






linux NAS






最佳实践





http://openskill.cn  开源技术社区分享
只做技术的分享,欢迎关注微信订阅号:




QQ群交流:





分享英文原文链接:https://linux.zeef.com/paul.reiber 查看全部
简介:
Linux is a Unix-ish POSIX-compliant OS family. Most of the distros are GPL or otherwise FOSS. The defining component of Linux is the Linux Kernel, first released on 5 October 1991 by Linus Torvalds.


新版本


linux1.png


开始


Linux2.png


受欢迎的网站


Linux3.png


著名发行版本


Linux4.png


Grok Linux       


Linux5.png


Linux Virt


Linux6.png


可调参数


Linux7.png


Linux日志


Linux8.png


Book/ebooks


Linux9.png


Kernel Matrix 


Linux10.png


内核地图


linux11.png


In Production


linux12.png


Linux论坛


linux13.png


shell指南


linux14.png


Linux安全


linux15.png


Linux桌面


linux16.png


防火墙


Linux17.png


linux NAS


Linux18.png


最佳实践


Linux19.png

http://openskill.cn  开源技术社区分享
只做技术的分享,欢迎关注微信订阅号:
openskill.gif

QQ群交流:
qqun.png


分享英文原文链接:https://linux.zeef.com/paul.reiber


device "eth0" does not seem to be present问题解决

运维技术Ansible 发表了文章 • 2 个评论 • 1974 次浏览 • 2015-11-30 20:49 • 来自相关话题

VM下ESXI5.5平台下,一台虚拟机重启,报如下信息:device "eth0" does not seem to be present, delaying initialization通过分析,原因是Centos6使用udev动态管理设备文件将MAC地址和网卡名称对应记录在udev的规则脚本中,VMware升级后虚拟机网卡MAC会改变,这样系统会认为网卡是新增的并命名为eth1,查看如下:ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:0c:29:ce:c0:1e brd ff:ff:ff:ff:ff:ff
inet 192.168.1.13/24 brd 192.168.1.255 scope global eth1
inet6 fe80::20c:29ff:fece:c01e/64 scope link

解决方法1,修改网络配置文件设备eth0为eth1:

cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth1"
BOOTPROSTO=static
IPADDR=192.168.1.13
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
ONBOOT="yes"

解决方法2,修改udev记录的mac与网卡名称对应规则:

cat /etc/udev/rules.d/70-persistent-net.rules
# PCI device 0x1022:0x2000 (pcnet32)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?[i]", ATTR{address}=="00:0c:29:ce:c0:1e", ATTR{type}=="1", KERNEL=="eth[/i]", NA

解决方法3,删除规则文件,重启虚拟机

# rm -rf /etc/udev/rules.d/70-persistent-net.rules
# reboot 查看全部
VM下ESXI5.5平台下,一台虚拟机重启,报如下信息:
device "eth0" does not seem to be present, delaying initialization
通过分析,原因是Centos6使用udev动态管理设备文件将MAC地址和网卡名称对应记录在udev的规则脚本中,VMware升级后虚拟机网卡MAC会改变,这样系统会认为网卡是新增的并命名为eth1,查看如下:
ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:0c:29:ce:c0:1e brd ff:ff:ff:ff:ff:ff
inet 192.168.1.13/24 brd 192.168.1.255 scope global eth1
inet6 fe80::20c:29ff:fece:c01e/64 scope link


解决方法1,修改网络配置文件设备eth0为eth1:


cat /etc/sysconfig/network-scripts/ifcfg-eth0 
DEVICE="eth1"
BOOTPROSTO=static
IPADDR=192.168.1.13
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
ONBOOT="yes"


解决方法2,修改udev记录的mac与网卡名称对应规则:


cat /etc/udev/rules.d/70-persistent-net.rules 
# PCI device 0x1022:0x2000 (pcnet32)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?[i]", ATTR{address}=="00:0c:29:ce:c0:1e", ATTR{type}=="1", KERNEL=="eth[/i]", NA


解决方法3,删除规则文件,重启虚拟机


 # rm -rf /etc/udev/rules.d/70-persistent-net.rules
# reboot

Raid级别结构知识浅析

运维技术Ansible 发表了文章 • 1 个评论 • 2011 次浏览 • 2015-11-27 01:15 • 来自相关话题

一、Raid介绍

RAID是(Redundent Array of Inexpensive Disks)的缩写,直译为“廉价冗余磁盘阵列”,也简称为“磁盘阵列”。后来RAID中的字母I被改作了Independent,RAID就成了“独立冗余磁盘阵列”,但这只是名称的变化,实质性的内容并没有改变。可以把RAID理解成一种使用磁盘驱动器的方法,它将一组磁盘驱动器用某种逻辑方式联系起来,作为逻辑上的一个磁盘驱动器来使用。RAID 包含一组或者一个集合甚至一个阵列。使用一组磁盘结合驱动器组成 RAID 阵列或 RAID 集。将至少两个磁盘连接到一个 RAID 控制器,而成为一个逻辑卷,也可以将多个驱动器放在一个组中。一组磁盘只能使用一个 RAID 级别。使用 RAID 可以提高服务器的性能。不同 RAID 的级别,性能会有所不同。它通过容错和高可用性来保存我们的数据。RAID的优点:
[]传输速率高。在部分RAID模式中,可以让很多磁盘驱动器同时传输数据,而这些磁盘驱动器在逻辑上又是一个磁盘驱动器,所以使用RAID可以达到单个的磁盘驱动器几倍的速率。因为CPU的速度增长很快,而磁盘驱动器的数据传输速率无法大幅提高,所以需要有一种方案解决二者之间的矛盾。[/][]更高的安全性。相较于普通磁盘驱动器很多RAID模式都提供了多种数据修复功能,当RAID中的某一磁盘驱动器出现严重故障无法使用时,可以通过RAID中的其他磁盘驱动器来恢复此驱动器中的数据,而普通磁盘驱动器无法实现,这是使用RAID的第二个原因。[/]

二、Raid概念

软件 RAID 和硬件 RAID软件 RAID 的性能较低,因为其使用主机的资源。 需要加载 RAID 软件以从软件 RAID 卷中读取数据。在加载 RAID 软件前,操作系统需要引导起来才能加载 RAID 软件。在软件 RAID 中无需物理硬件。零成本投资。硬件 RAID 的性能较高。他们采用 PCI Express 卡物理地提供有专用的 RAID 控制器。它不会使用主机资源。他们有 NVRAM 用于缓存的读取和写入。缓存用于 RAID 重建时,即使出现电源故障,它会使用后备的电池电源保持缓存。对于大规模使用是非常昂贵的投资。硬件 RAID 卡如下所示:




几个重要Raid概念:
[]校验方式用在 RAID 重建中从校验所保存的信息中重新生成丢失的内容。 RAID 5,RAID 6 基于校验。[/][]条带化是将切片数据随机存储到多个磁盘。它不会在单个磁盘中保存完整的数据。如果我们使用2个磁盘,则每个磁盘存储我们的一半数据。[/][]镜像被用于 RAID 1 和 RAID 10。镜像会自动备份数据。在 RAID 1 中,它会保存相同的内容到其他盘上。[/][]热备份只是我们的服务器上的一个备用驱动器,它可以自动更换发生故障的驱动器。在我们的阵列中,如果任何一个驱动器损坏,热备份驱动器会自动用于重建 RAID。[/][]块是 RAID 控制器每次读写数据时的最小单位,最小 4KB。通过定义块大小,我们可以增加 I/O 性能。[/]

三、Raid级别

RAID有不同的级别,下面列举比较常用的模式:
[]RAID0 = 条带化[/][]RAID1 = 镜像[/][]RAID5 = 单磁盘分布式奇偶校验[/][]RAID6 = 双磁盘分布式奇偶校验[/][]RAID10 = 镜像 + 条带。(嵌套RAID)[/]
 
Raid 0



RAID 0,无冗余无校验的磁盘阵列。数据同时分布在各个磁盘上,没有容错能力,读写速度在RAID中最快,但因为任何一个磁盘损坏都会使整个RAID系统失效,所以安全系数反倒比单个的磁盘还要低。一般用在对数据安全要求不高,但对速度要求很高的场合,如:大型游戏、图形图像编辑等。此种RAID模式至少需要2个磁盘,而更多的磁盘则能提供更高效的数据传输。条带化有很好的性能。在RAID0(条带化)中数据将使用切片的方式被写入到磁盘。一半的内容放在一个磁盘上,另一半内容将被写入到另一个磁盘。 假设我们有2个磁盘驱动器,例如,如果我们将数据“TECMINT”写到逻辑卷中,“T”将被保存在第一盘中,“E”将保存在第二盘,'C'将被保存在第一盘,“M”将保存在第二盘,它会一直继续此循环过程。(LCTT 译注:实际上不可能按字节切片,是按数据块切片的。)


在这种情况下,如果驱动器中的任何一个发生故障,我们就会丢失数据,因为一个盘中只有一半的数据,不能用于重建 RAID。不过,当比较写入速度和性能时,RAID 0 是非常好的。创建 RAID 0(条带化)至少需要2个磁盘。如果你的数据是非常宝贵的,那么不要使用此 RAID 级别。特点:
[]高性能。[/][]RAID 0 中容量零损失。[/][]零容错。[/][]写和读有很高的性能。[/]
 
Raid 1



RAID 1,镜象磁盘阵列。每一个磁盘都有一个镜像磁盘,镜像磁盘随时保持与原磁盘的内容一致。RAID1具有最高的安全性,但只有一半的磁盘空间被用来存储数据。主要用在对数据安全性要求很高,而且要求能够快速恢复被损坏的数据的场合。此种RAID模式每组仅需要2个磁盘。镜像可以对我们的数据做一份相同的副本。假设我们有两个2TB的硬盘驱动器,我们总共有4TB,但在镜像中,但是放在RAID控制器后面的驱动器形成了一个逻辑驱动器,我们只能看到这个逻辑驱动器有2TB。当我们保存数据时,它将同时写入这两个2TB驱动器中。创建 RAID 1(镜像化)最少需要两个驱动器。如果发生磁盘故障,我们可以通过更换一个新的磁盘恢复 RAID 。如果在 RAID 1 中任何一个磁盘发生故障,我们可以从另一个磁盘中获取相同的数据,因为另外的磁盘中也有相同的数据。所以是零数据丢失。特点:
[]良好的性能。[/][]总容量丢失一半可用空间。[/][]完全容错。[/][]重建会更快。[/][]写性能变慢。[/][]读性能变好。[/][]能用于操作系统和小规模的数据库[/]
Raid 5



RAID 5, 无独立校验盘的奇偶校验磁盘阵列。同样采用奇偶校验来检查错误,但没有独立的校验盘,而是使用了一种特殊的算法,可以计算出任何一个带区校验块的存放位置。这样就可以确保任何对校验块进行的读写操作都会在所有的RAID磁盘中进行均衡,既提高了系统可靠性也消除了产生瓶颈的可能,对大小数据量的读写都有很好的性能。为了能跨越数组里的所有磁盘来写入数据及校验码信息,RAID 5设定最少需要三个磁盘,因此在这种情况下,会有1/3的磁盘容量会被备份校验码占用而无法使用,当有四个磁盘时,则需要1/4的容量作为备份,才能让最坏情况的发生率降到最低。当磁盘的数目增多时,每个磁盘上被备份校验码占用的磁盘容量就会降低,但是磁盘故障的风险率也同时增加了,一但同时有两个磁盘故障,则无法进行数据恢复。RAID 5多用于企业级。 RAID 5的以分布式奇偶校验的方式工作。奇偶校验信息将被用于重建数据。它从剩下的正常驱动器上的信息来重建。在驱动器发生故障时,这可以保护我们的数据。假设我们有4个驱动器,如果一个驱动器发生故障而后我们更换发生故障的驱动器后,我们可以从奇偶校验中重建数据到更换的驱动器上。奇偶校验信息存储在所有的4个驱动器上,如果我们有4个 1TB 的驱动器。奇偶校验信息将被存储在每个驱动器的256G中,而其它768GB是用户自己使用的。单个驱动器故障后,RAID 5依旧正常工作,如果驱动器损坏个数超过1个会导致数据的丢失。特点:
[]性能卓越[/][]读速度将非常好。[/][]写速度处于平均水准,如果我们不使用硬件 RAID 控制器,写速度缓慢。[/][]从所有驱动器的奇偶校验信息中重建。[/][]完全容错。[/][]1个磁盘空间将用于奇偶校验。[/][]可以被用在文件服务器,Web服务器,非常重要的备份中。[/]
Raid 6




RAID 6和RAID 5相似但它有两个分布式奇偶校验。大多用在大数量的阵列中。我们最少需要4个驱动器,即使有2个驱动器发生故障,我们依然可以更换新的驱动器后重建数据。它比RAID 5慢,因为它将数据同时写到4个驱动器上。当我们使用硬件 RAID 控制器时速度就处于平均水准。如果我们有6个的1TB驱动器,4个驱动器将用于数据保存,2个驱动器将用于校验。特点:
[]性能不佳。[/][]读的性能很好。[/][]如果我们不使用硬件 RAID 控制器写的性能会很差。[/][]从两个奇偶校验驱动器上重建。[/][]完全容错。[/][]2个磁盘空间将用于奇偶校验。[/][]可用于大型阵列。[/][]用于备份和视频流中,用于大规模。[/]
Raid 10



RAID 10可以被称为1 + 0或0 +1。它将做镜像+条带两个工作。在 RAID 10中首先做镜像然后做条带。在 RAID 01上首先做条带,然后做镜像。RAID 10比RAID 01好。假设,我们有4个驱动器。当我逻辑卷上写数据时,它会使用镜像和条带的方式将数据保存到4个驱动器上。

如果我在 RAID 10 上写入数据“TECMINT”,数据将使用如下方式保存。首先将“T”同时写入两个磁盘,“E”也将同时写入另外两个磁盘,所有数据都写入两块磁盘。这样可以将每个数据复制到另外的磁盘。

同时它将使用 RAID 0 方式写入数据,遵循将“T”写入第一组盘,“E”写入第二组盘。再次将“C”写入第一组盘,“M”到第二组盘。特点:
[]良好的读写性能。[/][]总容量丢失一半的可用空间。[/][]容错。[/][]从副本数据中快速重建。[/][]由于其高性能和高可用性,常被用于数据库的存储中。[/]
下面附录几张参考表:
针对不同RAID 模式在实际运用中可以使用的磁盘空间分别有多少,在用列表举例说明:




所有Raid级别的一些特性: 查看全部


一、Raid介绍


RAID是(Redundent Array of Inexpensive Disks)的缩写,直译为“廉价冗余磁盘阵列”,也简称为“磁盘阵列”。后来RAID中的字母I被改作了Independent,RAID就成了“独立冗余磁盘阵列”,但这只是名称的变化,实质性的内容并没有改变。可以把RAID理解成一种使用磁盘驱动器的方法,它将一组磁盘驱动器用某种逻辑方式联系起来,作为逻辑上的一个磁盘驱动器来使用。
RAID 包含一组或者一个集合甚至一个阵列。使用一组磁盘结合驱动器组成 RAID 阵列或 RAID 集。将至少两个磁盘连接到一个 RAID 控制器,而成为一个逻辑卷,也可以将多个驱动器放在一个组中。一组磁盘只能使用一个 RAID 级别。使用 RAID 可以提高服务器的性能。不同 RAID 的级别,性能会有所不同。它通过容错和高可用性来保存我们的数据。
RAID的优点:
    []传输速率高。在部分RAID模式中,可以让很多磁盘驱动器同时传输数据,而这些磁盘驱动器在逻辑上又是一个磁盘驱动器,所以使用RAID可以达到单个的磁盘驱动器几倍的速率。因为CPU的速度增长很快,而磁盘驱动器的数据传输速率无法大幅提高,所以需要有一种方案解决二者之间的矛盾。[/][]更高的安全性。相较于普通磁盘驱动器很多RAID模式都提供了多种数据修复功能,当RAID中的某一磁盘驱动器出现严重故障无法使用时,可以通过RAID中的其他磁盘驱动器来恢复此驱动器中的数据,而普通磁盘驱动器无法实现,这是使用RAID的第二个原因。[/]


二、Raid概念


软件 RAID 和硬件 RAID
软件 RAID 的性能较低,因为其使用主机的资源。 需要加载 RAID 软件以从软件 RAID 卷中读取数据。在加载 RAID 软件前,操作系统需要引导起来才能加载 RAID 软件。在软件 RAID 中无需物理硬件。零成本投资。
硬件 RAID 的性能较高。他们采用 PCI Express 卡物理地提供有专用的 RAID 控制器。它不会使用主机资源。他们有 NVRAM 用于缓存的读取和写入。缓存用于 RAID 重建时,即使出现电源故障,它会使用后备的电池电源保持缓存。对于大规模使用是非常昂贵的投资。
硬件 RAID 卡如下所示:
yraid.png

几个重要Raid概念:
    []校验方式用在 RAID 重建中从校验所保存的信息中重新生成丢失的内容。 RAID 5,RAID 6 基于校验。[/][]条带化是将切片数据随机存储到多个磁盘。它不会在单个磁盘中保存完整的数据。如果我们使用2个磁盘,则每个磁盘存储我们的一半数据。[/][]镜像被用于 RAID 1 和 RAID 10。镜像会自动备份数据。在 RAID 1 中,它会保存相同的内容到其他盘上。[/][]热备份只是我们的服务器上的一个备用驱动器,它可以自动更换发生故障的驱动器。在我们的阵列中,如果任何一个驱动器损坏,热备份驱动器会自动用于重建 RAID。[/][]是 RAID 控制器每次读写数据时的最小单位,最小 4KB。通过定义块大小,我们可以增加 I/O 性能。[/]


三、Raid级别


RAID有不同的级别,下面列举比较常用的模式:
    []RAID0 = 条带化[/][]RAID1 = 镜像[/][]RAID5 = 单磁盘分布式奇偶校验[/][]RAID6 = 双磁盘分布式奇偶校验[/][]RAID10 = 镜像 + 条带。(嵌套RAID)[/]

 
Raid 0
raid0.png
RAID 0,无冗余无校验的磁盘阵列。数据同时分布在各个磁盘上,没有容错能力,读写速度在RAID中最快,但因为任何一个磁盘损坏都会使整个RAID系统失效,所以安全系数反倒比单个的磁盘还要低。一般用在对数据安全要求不高,但对速度要求很高的场合,如:大型游戏、图形图像编辑等。此种RAID模式至少需要2个磁盘,而更多的磁盘则能提供更高效的数据传输。
条带化有很好的性能。在RAID0(条带化)中数据将使用切片的方式被写入到磁盘。一半的内容放在一个磁盘上,另一半内容将被写入到另一个磁盘。 
假设我们有2个磁盘驱动器,例如,如果我们将数据“TECMINT”写到逻辑卷中,“T”将被保存在第一盘中,“E”将保存在第二盘,'C'将被保存在第一盘,“M”将保存在第二盘,它会一直继续此循环过程。(LCTT 译注:实际上不可能按字节切片,是按数据块切片的。)


在这种情况下,如果驱动器中的任何一个发生故障,我们就会丢失数据,因为一个盘中只有一半的数据,不能用于重建 RAID。不过,当比较写入速度和性能时,RAID 0 是非常好的。创建 RAID 0(条带化)至少需要2个磁盘。如果你的数据是非常宝贵的,那么不要使用此 RAID 级别。
特点:
    []高性能。[/][]RAID 0 中容量零损失。[/][]零容错。[/][]写和读有很高的性能。[/]

 
Raid 1
raid1.png
RAID 1,镜象磁盘阵列。每一个磁盘都有一个镜像磁盘,镜像磁盘随时保持与原磁盘的内容一致。RAID1具有最高的安全性,但只有一半的磁盘空间被用来存储数据。主要用在对数据安全性要求很高,而且要求能够快速恢复被损坏的数据的场合。此种RAID模式每组仅需要2个磁盘。
镜像可以对我们的数据做一份相同的副本。假设我们有两个2TB的硬盘驱动器,我们总共有4TB,但在镜像中,但是放在RAID控制器后面的驱动器形成了一个逻辑驱动器,我们只能看到这个逻辑驱动器有2TB。
当我们保存数据时,它将同时写入这两个2TB驱动器中。创建 RAID 1(镜像化)最少需要两个驱动器。如果发生磁盘故障,我们可以通过更换一个新的磁盘恢复 RAID 。如果在 RAID 1 中任何一个磁盘发生故障,我们可以从另一个磁盘中获取相同的数据,因为另外的磁盘中也有相同的数据。所以是零数据丢失。
特点:
    []良好的性能。[/][]总容量丢失一半可用空间。[/][]完全容错。[/][]重建会更快。[/][]写性能变慢。[/][]读性能变好。[/][]能用于操作系统和小规模的数据库[/]

Raid 5
raid5.png
RAID 5, 无独立校验盘的奇偶校验磁盘阵列。同样采用奇偶校验来检查错误,但没有独立的校验盘,而是使用了一种特殊的算法,可以计算出任何一个带区校验块的存放位置。这样就可以确保任何对校验块进行的读写操作都会在所有的RAID磁盘中进行均衡,既提高了系统可靠性也消除了产生瓶颈的可能,对大小数据量的读写都有很好的性能。为了能跨越数组里的所有磁盘来写入数据及校验码信息,RAID 5设定最少需要三个磁盘,因此在这种情况下,会有1/3的磁盘容量会被备份校验码占用而无法使用,当有四个磁盘时,则需要1/4的容量作为备份,才能让最坏情况的发生率降到最低。当磁盘的数目增多时,每个磁盘上被备份校验码占用的磁盘容量就会降低,但是磁盘故障的风险率也同时增加了,一但同时有两个磁盘故障,则无法进行数据恢复。
RAID 5多用于企业级。 RAID 5的以分布式奇偶校验的方式工作。奇偶校验信息将被用于重建数据。它从剩下的正常驱动器上的信息来重建。在驱动器发生故障时,这可以保护我们的数据。
假设我们有4个驱动器,如果一个驱动器发生故障而后我们更换发生故障的驱动器后,我们可以从奇偶校验中重建数据到更换的驱动器上。奇偶校验信息存储在所有的4个驱动器上,如果我们有4个 1TB 的驱动器。奇偶校验信息将被存储在每个驱动器的256G中,而其它768GB是用户自己使用的。单个驱动器故障后,RAID 5依旧正常工作,如果驱动器损坏个数超过1个会导致数据的丢失。
特点:
    []性能卓越[/][]读速度将非常好。[/][]写速度处于平均水准,如果我们不使用硬件 RAID 控制器,写速度缓慢。[/][]从所有驱动器的奇偶校验信息中重建。[/][]完全容错。[/][]1个磁盘空间将用于奇偶校验。[/][]可以被用在文件服务器,Web服务器,非常重要的备份中。[/]

Raid 6

raid6.png
RAID 6和RAID 5相似但它有两个分布式奇偶校验。大多用在大数量的阵列中。我们最少需要4个驱动器,即使有2个驱动器发生故障,我们依然可以更换新的驱动器后重建数据。
它比RAID 5慢,因为它将数据同时写到4个驱动器上。当我们使用硬件 RAID 控制器时速度就处于平均水准。如果我们有6个的1TB驱动器,4个驱动器将用于数据保存,2个驱动器将用于校验。
特点:
    []性能不佳。[/][]读的性能很好。[/][]如果我们不使用硬件 RAID 控制器写的性能会很差。[/][]从两个奇偶校验驱动器上重建。[/][]完全容错。[/][]2个磁盘空间将用于奇偶校验。[/][]可用于大型阵列。[/][]用于备份和视频流中,用于大规模。[/]

Raid 10
raid10.png
RAID 10可以被称为1 + 0或0 +1。它将做镜像+条带两个工作。在 RAID 10中首先做镜像然后做条带。在 RAID 01上首先做条带,然后做镜像。RAID 10比RAID 01好。
假设,我们有4个驱动器。当我逻辑卷上写数据时,它会使用镜像和条带的方式将数据保存到4个驱动器上。

如果我在 RAID 10 上写入数据“TECMINT”,数据将使用如下方式保存。首先将“T”同时写入两个磁盘,“E”也将同时写入另外两个磁盘,所有数据都写入两块磁盘。这样可以将每个数据复制到另外的磁盘。

同时它将使用 RAID 0 方式写入数据,遵循将“T”写入第一组盘,“E”写入第二组盘。再次将“C”写入第一组盘,“M”到第二组盘。
特点:
    []良好的读写性能。[/][]总容量丢失一半的可用空间。[/][]容错。[/][]从副本数据中快速重建。[/][]由于其高性能和高可用性,常被用于数据库的存储中。[/]

下面附录几张参考表:
针对不同RAID 模式在实际运用中可以使用的磁盘空间分别有多少,在用列表举例说明:
raid_disk.png

所有Raid级别的一些特性:
raid_td.png

shell如何截取字符串中的数字

运维技术push 回复了问题 • 3 人关注 • 2 个回复 • 1284 次浏览 • 2015-10-28 11:11 • 来自相关话题

Apache Couldn't start ErrorLog process

运维技术Geek小A 回复了问题 • 2 人关注 • 2 个回复 • 1203 次浏览 • 2015-09-20 12:39 • 来自相关话题

zabbix怎么重置密码

运维技术koyo 回复了问题 • 2 人关注 • 1 个回复 • 1162 次浏览 • 2015-09-10 11:30 • 来自相关话题

为apache单独编译mod_rewrite.so

运维技术OpenSkill 发表了文章 • 1 个评论 • 1058 次浏览 • 2015-06-09 22:59 • 来自相关话题

问题描述:
在编译安装完了apache之后,发现需要rewrite功能,但是用/usr/local/apache2/bin/apachectl -M命令发现没有rewrite_module
解决办法:
1)重现编译apache
你可以查看/usr/local/apache2/build/config.nice 这个文件来查看你apache的编译参数,然后重新编译你只需要添加--enable-rewrite参数就行。
2)手动添加mod_rewrite模块
首先在apache的源码安装目录中寻找mod_rewrite.c文件# find / -name mod_rewrite.c
/usr/local/src/httpd-2.2.12/modules/mappers/mod_rewrite.c //apache的源码安装目录中的mod_rewrite.c文件

# cd /usr/local/src/httpd-2.2.12/modules/mappers/
# /usr/local/apache2/bin/apxs -c mod_rewrite.c //apxs应指定绝对路径,在你编译安装apache的bin目录里

# /usr/local/apache2/bin/apxs -i -a -n mod_rewrite mod_rewrite.la
如果这个过程中没有出错的话,在你的apache的modules目录中编译出一个mod_rewrite.so文件编辑httpd.conf文件,确认httpd.conf中已经包含mod_rewrite.so的加载语句,如下:
LoadModule rewrite_module modules/mod_rewrite.so
这时,你的apache应该已经支持rewrite了,    注:完成之后,记得重启服务器apache。
 
重启apache的过程中你可能还会遇到如下问题:httpd: Syntax error on line 54 of /usr/local/apache2/conf/httpd.conf: Can't locate API module structure `mod_rewrite_module' in file /usr/local/apache2/modules/mod_rewrite.so: /usr/local/apache2/modules/mod_rewrite.so: undefined symbol: mod_rewrite_module
或者
Syntax error on line 329 of /usr/local/apache2/conf/httpd.conf: Can`t loacte API module staructure `mod_rewrite_module` in file /usr/local/apache2/modules/mod_rewrite.so:/usr/local/apache2/lib/libapr-0.so.0:undefined symbol:mod_rewrite_module
解决方法如下:修改 httpd.conf,将
LoadModule mod_rewrite_module modules/mod_rewrite.so
改为
LoadModule rewrite_module modules/mod_rewrite.so如果重启apache出现这个错误  module rewrite_module is built-in and can`t be loaded
表示模块是内建的,不用再调入,注释掉#LoadModule rewrite_module modules/mod_rewrite.so语法检查:# /usr/local/apache2/bin/apachectl configtest
Syntax OK
这时,你的apache应该已经支持rewrite了。需要注意的配置,配置虚拟主机的时候要类似如下设置才可以生效:<VirtualHost *:80>
DocumentRoot /var/www/www/devopsh/
ServerName www.devopsh.com
<Directory /var/www/www/devopsh/>
Options FollowSymLinks
AllowOverride All
order allow,deny
Allow from all
</Directory>
</VirtualHost>

如果AllowOverride设置为none的话,apache会不读取网站的.htaccess文件!上面虚拟主机只是针对指定文件夹可以读取到.htaccess文件了,如果要针对所有的文件夹都支持.htaccess,修改主配置文件httpd.conf,修改如下:

<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from all
</Directory>

把AllowOverride None
"改成"
AllowOverride All
这样所有的文件夹都支持.htaccess了 查看全部
问题描述:
在编译安装完了apache之后,发现需要rewrite功能,但是用/usr/local/apache2/bin/apachectl -M命令发现没有rewrite_module
解决办法:
1)重现编译apache
你可以查看/usr/local/apache2/build/config.nice 这个文件来查看你apache的编译参数,然后重新编译你只需要添加--enable-rewrite参数就行。
2)手动添加mod_rewrite模块
首先在apache的源码安装目录中寻找mod_rewrite.c文件
# find / -name mod_rewrite.c
/usr/local/src/httpd-2.2.12/modules/mappers/mod_rewrite.c //apache的源码安装目录中的mod_rewrite.c文件

# cd /usr/local/src/httpd-2.2.12/modules/mappers/
# /usr/local/apache2/bin/apxs -c mod_rewrite.c //apxs应指定绝对路径,在你编译安装apache的bin目录里

# /usr/local/apache2/bin/apxs -i -a -n mod_rewrite mod_rewrite.la
如果这个过程中没有出错的话,在你的apache的modules目录中编译出一个mod_rewrite.so文件
编辑httpd.conf文件,确认httpd.conf中已经包含mod_rewrite.so的加载语句,如下:
LoadModule rewrite_module modules/mod_rewrite.so
这时,你的apache应该已经支持rewrite了,    注:完成之后,记得重启服务器apache。
 
重启apache的过程中你可能还会遇到如下问题:
httpd: Syntax error on line 54 of /usr/local/apache2/conf/httpd.conf: Can't locate API module structure `mod_rewrite_module' in file /usr/local/apache2/modules/mod_rewrite.so: /usr/local/apache2/modules/mod_rewrite.so: undefined symbol: mod_rewrite_module
或者
Syntax error on line 329 of /usr/local/apache2/conf/httpd.conf: Can`t loacte API module staructure `mod_rewrite_module` in file /usr/local/apache2/modules/mod_rewrite.so:/usr/local/apache2/lib/libapr-0.so.0:undefined symbol:mod_rewrite_module

解决方法如下:
修改 httpd.conf,将
LoadModule mod_rewrite_module modules/mod_rewrite.so
改为
LoadModule rewrite_module modules/mod_rewrite.so
如果重启apache出现这个错误  module rewrite_module is built-in and can`t be loaded
表示模块是内建的,不用再调入,注释掉
#LoadModule rewrite_module modules/mod_rewrite.so
语法检查:
# /usr/local/apache2/bin/apachectl configtest
Syntax OK
这时,你的apache应该已经支持rewrite了。
需要注意的配置,配置虚拟主机的时候要类似如下设置才可以生效:
<VirtualHost *:80>
DocumentRoot /var/www/www/devopsh/
ServerName www.devopsh.com
<Directory /var/www/www/devopsh/>
Options FollowSymLinks
AllowOverride All
order allow,deny
Allow from all
</Directory>
</VirtualHost>

如果AllowOverride设置为none的话,apache会不读取网站的.htaccess文件!
上面虚拟主机只是针对指定文件夹可以读取到.htaccess文件了,如果要针对所有的文件夹都支持.htaccess,修改主配置文件httpd.conf,修改如下:

<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from all
</Directory>

把AllowOverride None
"改成"
AllowOverride All
这样所有的文件夹都支持.htaccess了

Linux怎么查看磁盘UUID并挂载

回复

运维技术chris 回复了问题 • 3 人关注 • 2 个回复 • 1221 次浏览 • 2016-06-02 10:42 • 来自相关话题

Linux增加虚拟内存swap脚本

运维技术being 发表了文章 • 0 个评论 • 688 次浏览 • 2016-05-16 10:09 • 来自相关话题

#!/bin/bash

#增加1G的swap空间
dd if=/dev/zero of=/swapfile bs=1MB count=1024

#制作一个swap文件
mkswap /swapfile

#启动swap分区
swapon /swapfile

#添加开机自启
echo '/swapfile none swap defaults 0 0' >> /etc/fstab 查看全部
#!/bin/bash

#增加1G的swap空间
dd if=/dev/zero of=/swapfile bs=1MB count=1024

#制作一个swap文件
mkswap /swapfile

#启动swap分区
swapon /swapfile

#添加开机自启
echo '/swapfile none swap defaults 0 0' >> /etc/fstab

Linux下Json格式化神器jq

运维技术Geek小A 发表了文章 • 0 个评论 • 1239 次浏览 • 2016-05-13 00:14 • 来自相关话题

JSON是前端编程经常用到的格式,对于PHP或者Python,解析JSON都不是什么大事,尤其是PHP的json_encode和json_decode非常好用。然后Linux下也有这样的神器就是jq命令,对于运维平常处理json格式的文件有很大帮助!
 
   对于JSON格式而言,jq就像sed/awk/grep这些神器一样的方便,而且jq没有乱七八糟的依赖,只需要一个binary文件jq,就足矣。

一、安装

Centos:
# yum -y install jq

Ubuntu:
# apt-get -y install jq

二、使用

1、格式化Json
# cat json_test.txt
{"name":"WuDi","location":{"street":"ZhongShanLu","city":"BeiJing","age":"26","country":"CN"},"employees":[{"name":"Mark","division":"DevOps"},{"name":"Lucy","division":"HR"},{"name":"Elise","division":"Marketing"}]}上面的JSON是PHP json_encode之后,echo出来的字符串,很明显,可读性太差。前一阵子写文档,需要将前后段JSON写入文档,我当时是用是网上的JSON格式化工具做的。事实上,jq就可以检查JSON的合法性,并把JSON格式化成更友好更可读的格式:




看到上图,将一团乱麻的JSON格式化成个更可读的形式。其实背后另外检查了JSON的合法性。如果JSON不合法,jq .会报错。我故意写个错误的JSON:  




 
2、JSON解析
如上图json,jq是如何解析JSON,根据key获取value? 
{
“key_1”:"value_1",
“key_2”:"value_2",
}如何根据key获取value?
jq '.key'



解析不存在的元素,会返回null




 
3、JSON nested parse(嵌套解析) 
[root@workingh ~]# cat json_test.txt | jq '.location.city'
"BeiJing"4、JSON parse array
[root@workingh ~]# cat json_test.txt | jq '.employees[1].name'
"Lucy"5、内建函数
jq还有一些内建函数如 key,has
 
key是用来获取JSON中的key元素的:
[root@workingh ~]# cat json_test.txt | jq 'keys'
[
"employees",
"location",
"name"
]has是用来是判断是否存在某个key: 
[root@workingh ~]# cat json_test.txt | jq 'has("location")'
true
[root@workingh ~]# cat json_test.txt | jq 'has("xxoo")'
false与JSON相关的我就暂时介绍到这里,希望进一步了解jq并使用的可以去http://stedolan.github.io/jq/manual/.希望了解源码实现的,可以去https://github.com/stedolan/jq;意料之中的事情是作者用来flex和bison来parse json。我们的示例JSON来自参考文献第一篇。用google搜索,kernalpanic中有篇文章介绍了jshon和json.sh提供了另外的思路。
 
参考:
How to parse JSON string via command line on Linux
Parsing JSON with jq 查看全部
JSON是前端编程经常用到的格式,对于PHP或者Python,解析JSON都不是什么大事,尤其是PHP的json_encode和json_decode非常好用。然后Linux下也有这样的神器就是jq命令,对于运维平常处理json格式的文件有很大帮助!
 
   对于JSON格式而言,jq就像sed/awk/grep这些神器一样的方便,而且jq没有乱七八糟的依赖,只需要一个binary文件jq,就足矣。


一、安装


Centos:
# yum -y install jq

Ubuntu:
# apt-get -y install jq


二、使用


1、格式化Json
# cat json_test.txt
{"name":"WuDi","location":{"street":"ZhongShanLu","city":"BeiJing","age":"26","country":"CN"},"employees":[{"name":"Mark","division":"DevOps"},{"name":"Lucy","division":"HR"},{"name":"Elise","division":"Marketing"}]}
上面的JSON是PHP json_encode之后,echo出来的字符串,很明显,可读性太差。前一阵子写文档,需要将前后段JSON写入文档,我当时是用是网上的JSON格式化工具做的。事实上,jq就可以检查JSON的合法性,并把JSON格式化成更友好更可读的格式:
json1.png

看到上图,将一团乱麻的JSON格式化成个更可读的形式。其实背后另外检查了JSON的合法性。如果JSON不合法,jq .会报错。我故意写个错误的JSON:  
json_error.png

 
2、JSON解析
如上图json,jq是如何解析JSON,根据key获取value? 
 {
“key_1”:"value_1",
“key_2”:"value_2",
}
如何根据key获取value?
jq '.key'
json2.png

解析不存在的元素,会返回null
json3.png

 
3、JSON nested parse(嵌套解析) 
[root@workingh ~]# cat json_test.txt | jq '.location.city'
"BeiJing"
4、JSON parse array
[root@workingh ~]# cat json_test.txt | jq '.employees[1].name'
"Lucy"
5、内建函数
jq还有一些内建函数如 key,has
 
key是用来获取JSON中的key元素的:
[root@workingh ~]# cat json_test.txt | jq 'keys'
[
"employees",
"location",
"name"
]
has是用来是判断是否存在某个key: 
[root@workingh ~]# cat json_test.txt | jq 'has("location")'
true
[root@workingh ~]# cat json_test.txt | jq 'has("xxoo")'
false
与JSON相关的我就暂时介绍到这里,希望进一步了解jq并使用的可以去http://stedolan.github.io/jq/manual/.希望了解源码实现的,可以去https://github.com/stedolan/jq;意料之中的事情是作者用来flex和bison来parse json。我们的示例JSON来自参考文献第一篇。用google搜索,kernalpanic中有篇文章介绍了jshon和json.sh提供了另外的思路。
 
参考:
How to parse JSON string via command line on Linux
Parsing JSON with jq

Centos下NTP时间服务器配置详解

运维技术Rock 发表了文章 • 0 个评论 • 1116 次浏览 • 2016-03-27 03:10 • 来自相关话题

NTP简介

NTP(Network Time Protocol,网络时间协议)是用来使网络中的各个计算机时间同步的一种协议。它的用途是把计算机的时钟同步到世界协调时UTC,其精度在局域网内可达0.1ms,在互联网上绝大多数的地方其精度可以达到1-50ms。
NTP服务器就是利用NTP协议提供时间同步服务的。

NTP服务器安装

# 系统自带ntp软件包
[root@node ~]# rpm -qa ntp
ntp-4.2.6p5-5.el6.centos.x86_64
# 如果没有就安装
[root@node ~]# yum -y install ntp

配置NTP服务

[root@node ~]# vim /etc/ntp.conf
# restrict default kod nomodify notrap nopeer noquery
restrict default nomodify
# nomodify客户端可以同步
# 将默认时间同步源注释改用可用源
# 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
server ntp1.aliyun.com #阿里时间服务器
server s2m.time.edu.cn #北京教育网时间服务器

启动NTP服务器

# 如果计划任务有时间同步,先注释,两种用法会冲突。
[root@node ~]# crontab -e
# time sync cron
#[i]/3 [/i] [i] [/i] * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1
[root@node ~]# /etc/init.d/ntpd start
Starting ntpd: [ OK ]
[root@node ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*ntp1.aliyun.com 10.137.38.86 2 u 22 64 1 525.885 -42.367 0.000
[root@node ~]# ntpstat
synchronised to NTP server (110.75.186.247) at stratum 3
time correct to within 4257 ms
polling server every 64 s


客户机时间同步

客户机要等几分钟再与新启动的ntp服务器进行时间同步,否则会提示no server suitable for synchronization found错误。[root@node ~]# ntpdate 10.0.1.110 (ntp_server_ip)
27 Mar 18:40:16 ntpdate[1453]: step time server 10.0.1.110 offset 40.880807 sec
# 将命令放入计划任务即可。 查看全部


NTP简介


NTP(Network Time Protocol,网络时间协议)是用来使网络中的各个计算机时间同步的一种协议。它的用途是把计算机的时钟同步到世界协调时UTC,其精度在局域网内可达0.1ms,在互联网上绝大多数的地方其精度可以达到1-50ms。
NTP服务器就是利用NTP协议提供时间同步服务的。


NTP服务器安装


# 系统自带ntp软件包
[root@node ~]# rpm -qa ntp
ntp-4.2.6p5-5.el6.centos.x86_64
# 如果没有就安装
[root@node ~]# yum -y install ntp


配置NTP服务


[root@node ~]# vim /etc/ntp.conf
# restrict default kod nomodify notrap nopeer noquery
restrict default nomodify
# nomodify客户端可以同步
# 将默认时间同步源注释改用可用源
# 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
server ntp1.aliyun.com #阿里时间服务器
server s2m.time.edu.cn #北京教育网时间服务器


启动NTP服务器


# 如果计划任务有时间同步,先注释,两种用法会冲突。
[root@node ~]# crontab -e
# time sync cron
#[i]/3 [/i] [i] [/i] * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1
[root@node ~]# /etc/init.d/ntpd start
Starting ntpd: [ OK ]
[root@node ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*ntp1.aliyun.com 10.137.38.86 2 u 22 64 1 525.885 -42.367 0.000
[root@node ~]# ntpstat
synchronised to NTP server (110.75.186.247) at stratum 3
time correct to within 4257 ms
polling server every 64 s


客户机时间同步


客户机要等几分钟再与新启动的ntp服务器进行时间同步,否则会提示no server suitable for synchronization found错误。
[root@node ~]# ntpdate 10.0.1.110 (ntp_server_ip)
27 Mar 18:40:16 ntpdate[1453]: step time server 10.0.1.110 offset 40.880807 sec
# 将命令放入计划任务即可。

Linux服务器常遇到提示解析

运维技术chris 发表了文章 • 0 个评论 • 859 次浏览 • 2016-02-28 01:32 • 来自相关话题

一般类提示

eth1: Too much work at interrupt, IntrStatus=0x0001这条提示的含意为. 某网卡的中断请求过多. 如果只是偶尔出现一次可忽略. 但这条提示如果经常出现或是集中出现,那涉及到的可能性就比较多有可能需要进行处理了. 可能性比较多,如网卡性能;服务器性能;网络攻击..等等.
IPVS: incoming ICMP: failed checksum from 61.172.0.X!服务器收到了一个校验和错误的ICMP数据包. 这类的数据包有可能是非法产生的垃圾数据.但从目前来看服务器收到这样的数据非常多.一般都忽略.
一般代理服务器在工作时会每秒钟转发几千个数据包.收到几个错误数据包不会影响正常的工作.
这是问我最多的一类提示了.
NET: N messages suppressed.  or  __ratelimit: N messages suppressed。服务器忽略了 N 个数据包.和上一条提示类似.服务器收到的数据包被认为是无用的垃圾数据数据. 这类数据多是由攻击类的程序产生的.
这条提示如果 N 比较小的时候可以忽略.但如果经常或是长时间出现3位数据以上的这类提示.就很有可能是服务器受到了垃圾数据类的带宽攻击了.

UDP: bad checksum. From 221.200.X.X:50279 to 218.62.X.X:1155 ulen 24 
UDP: short packet: 218.2.X.X:3072 3640/217 to 222.168.X.X:57596
218.26.131.X sent an invalid ICMP type 3, code 13 error to a broadcast: 0.1.0.4 on eth0服务器收到了一个错误的数据包.分别为 UDP校验和错误; 过短的UDP数据包; 一个错误的ICMP类型数据. 这类信息一般情况下也是非法产生的.
但一般问题不大可直接忽略.

kernel: conntrack_ftp: partial 227 2205426703+13
FTP_NAT: partial packet 2635716056/20 in 2635716048/2635716075服务器在维持一条FTP协议的连接时出错. 这样的提示一般都可以直接忽略.

eth1: Promiscuous mode enabled. 
device eth1 entered promiscuous mode
device eth1 left promiscuous mode这几行提示指. 某块网卡进入(离开)了混杂模式. 一般来说混杂模式是当需要对通信进行抓包时才用到的. 当使用维护或故障分析时会使用到(比如consoletools中的countflow命令). 正常产生的这类提示可以忽略.
如果在前台和远端都没有进行维护时出现这个提示倒是应该引起注意,但这种可能性不大.


基本无关

keyboard: unknown scancode e0 5e键盘上接收到未定义的键值. 如果经常出现.有可能是键盘有问题. linux对于比较特殊的键或是组合键,有时也会出这样的提示.
要看一下服务器的键盘是不是被压住了. 其它情况一般忽略.

 uses obsolete (PF_INET,SOCK_PACKET)系统内核调用了一部分功能模块,在第一次调入时会出现. 一般情况与使用调试工具有关. 可直接忽略. 

报警程序的提示 

0001 WMPCheckV001 2005-04-13_10:10:01 Found .(ARP Spoofing sniffer)! IP:183 MAC:5
0002 WMPCheckV001 2005-04-07_01:53:32 Found .(MAC_incomplete)! IP:173 mac_incomplete:186
0003 WMPCheckV001 2005-04-17_16:25:11 Found .(HIGH_synsent)! totl:4271 SynSent:3490
0004 WMPCheckV001 20......这是由报警程序所引起的提示. 详细的信息需要用报警程序的客户端进行实时接收.

网络通信故障

Neighbour table overflow.出现这个提示.一般都是因为局域网内有部分计算机被病毒感染. 情况严重时会影响通信. 必须处理内部网通信不正常的计算机.

eth1: Transmit error, Tx status register 82.
Probably a duplex mismatch. See Documentation/networking/vortex.txt
Flags; bus-master 1, dirty 9994190(14) current 9994190(14)
Transmit list 00000000 vs. f7171580.
0: @f7171200 length 800001e6 status 000101e6
1: @f7171240 length 8000008c status 0001008c
.... 这个提示是3com网卡特有的. 感觉如果出现量不大的话也不会影响很严重. 目前看维一的解决办法是更换服务器上的网卡. 实在感觉3com的网卡有些问题...


网络通信严重问题! 

NETDEV WATCHDOG: eth1: transmit timed out
eth1: link down
eth1: link up, 10Mbps, half-duplex, lpa 0x0000
eth2: link up, 100Mbps, full-duplex, lpa 0x41E1
setting full-duplex based on MII #24 link partner capability of 45e1这些提示是网络通信中出现严重问题时才会出现. 故障基本和网络断线有关系. 这几条提示分别代表的含意是 某块网卡传送数据超时; 网卡连接down; 网卡连接up,连接速率为10/100Mbps,全/半双功.
这里写到的最后三行的提示比较类似. 出现这类提示时必须注意网络连接状况进行处理!!!

NIC Link is Up 100 Mbps Full Duplex情况和 kernel: eth1: link up,...相同.指某块网卡适应的连接速率. 一般认为没有说明哪个网卡down,只是连续出现网卡适应速率也是通信有问题.
如果是网线正常的断接可以忽略这类的信息.

eth0: Transmit timed out, status 0000, PHY status 786d, resetting...
eth0: Reset not complete yet. Trying harder.第一条提示 网卡关送数据失败. 复位网卡. 第二条提示 网卡复位不成功.... 这些提示都属于严重的通信问题.


服务器系统严重故障

CPU0: Temperature above threshold
CPU0: Running in modulated clock mode服务器CPU工作温度过高. 必须排除硬件故障.

I/O error, dev hda, sector N
I/O error, dev sda, sector N
hda: dma_intr: status=0x51 { DriveReady SeekComplete Error }
hda: dma_intr: error=0x40 { UncorrectableError }, LBAsect=811562, sector=811560服务器系统磁盘存储卡操作失败. 这样的问题一般不会使服务器直接停止工作, 但会引起很多严重问题. 查看全部


一般类提示


eth1: Too much work at interrupt, IntrStatus=0x0001
这条提示的含意为. 某网卡的中断请求过多. 如果只是偶尔出现一次可忽略. 但这条提示如果经常出现或是集中出现,那涉及到的可能性就比较多有可能需要进行处理了. 可能性比较多,如网卡性能;服务器性能;网络攻击..等等.

IPVS: incoming ICMP: failed checksum from 61.172.0.X!
服务器收到了一个校验和错误的ICMP数据包. 这类的数据包有可能是非法产生的垃圾数据.但从目前来看服务器收到这样的数据非常多.一般都忽略.
一般代理服务器在工作时会每秒钟转发几千个数据包.收到几个错误数据包不会影响正常的工作.
这是问我最多的一类提示了.

NET: N messages suppressed.  or  __ratelimit: N messages suppressed。
服务器忽略了 N 个数据包.和上一条提示类似.服务器收到的数据包被认为是无用的垃圾数据数据. 这类数据多是由攻击类的程序产生的.
这条提示如果 N 比较小的时候可以忽略.但如果经常或是长时间出现3位数据以上的这类提示.就很有可能是服务器受到了垃圾数据类的带宽攻击了.


UDP: bad checksum. From 221.200.X.X:50279 to 218.62.X.X:1155 ulen 24 
UDP: short packet: 218.2.X.X:3072 3640/217 to 222.168.X.X:57596
218.26.131.X sent an invalid ICMP type 3, code 13 error to a broadcast: 0.1.0.4 on eth0
服务器收到了一个错误的数据包.分别为 UDP校验和错误; 过短的UDP数据包; 一个错误的ICMP类型数据. 这类信息一般情况下也是非法产生的.
但一般问题不大可直接忽略.


kernel: conntrack_ftp: partial 227 2205426703+13
FTP_NAT: partial packet 2635716056/20 in 2635716048/2635716075
服务器在维持一条FTP协议的连接时出错. 这样的提示一般都可以直接忽略.


eth1: Promiscuous mode enabled. 
device eth1 entered promiscuous mode
device eth1 left promiscuous mode
这几行提示指. 某块网卡进入(离开)了混杂模式. 一般来说混杂模式是当需要对通信进行抓包时才用到的. 当使用维护或故障分析时会使用到(比如consoletools中的countflow命令). 正常产生的这类提示可以忽略.
如果在前台和远端都没有进行维护时出现这个提示倒是应该引起注意,但这种可能性不大.



基本无关


keyboard: unknown scancode e0 5e
键盘上接收到未定义的键值. 如果经常出现.有可能是键盘有问题. linux对于比较特殊的键或是组合键,有时也会出这样的提示.
要看一下服务器的键盘是不是被压住了. 其它情况一般忽略.


 uses obsolete (PF_INET,SOCK_PACKET)
系统内核调用了一部分功能模块,在第一次调入时会出现. 一般情况与使用调试工具有关. 可直接忽略.
 


报警程序的提示 


0001 WMPCheckV001 2005-04-13_10:10:01 Found .(ARP Spoofing sniffer)! IP:183 MAC:5
0002 WMPCheckV001 2005-04-07_01:53:32 Found .(MAC_incomplete)! IP:173 mac_incomplete:186
0003 WMPCheckV001 2005-04-17_16:25:11 Found .(HIGH_synsent)! totl:4271 SynSent:3490
0004 WMPCheckV001 20......
这是由报警程序所引起的提示. 详细的信息需要用报警程序的客户端进行实时接收.


网络通信故障


Neighbour table overflow.
出现这个提示.一般都是因为局域网内有部分计算机被病毒感染. 情况严重时会影响通信. 必须处理内部网通信不正常的计算机.


eth1: Transmit error, Tx status register 82.
Probably a duplex mismatch. See Documentation/networking/vortex.txt
Flags; bus-master 1, dirty 9994190(14) current 9994190(14)
Transmit list 00000000 vs. f7171580.
0: @f7171200 length 800001e6 status 000101e6
1: @f7171240 length 8000008c status 0001008c
.... 
这个提示是3com网卡特有的. 感觉如果出现量不大的话也不会影响很严重. 目前看维一的解决办法是更换服务器上的网卡. 实在感觉3com的网卡有些问题...



网络通信严重问题! 


NETDEV WATCHDOG: eth1: transmit timed out
eth1: link down
eth1: link up, 10Mbps, half-duplex, lpa 0x0000
eth2: link up, 100Mbps, full-duplex, lpa 0x41E1
setting full-duplex based on MII #24 link partner capability of 45e1
这些提示是网络通信中出现严重问题时才会出现. 故障基本和网络断线有关系. 这几条提示分别代表的含意是 某块网卡传送数据超时; 网卡连接down; 网卡连接up,连接速率为10/100Mbps,全/半双功.
这里写到的最后三行的提示比较类似. 出现这类提示时必须注意网络连接状况进行处理!!!


NIC Link is Up 100 Mbps Full Duplex
情况和 kernel: eth1: link up,...相同.指某块网卡适应的连接速率. 一般认为没有说明哪个网卡down,只是连续出现网卡适应速率也是通信有问题.
如果是网线正常的断接可以忽略这类的信息.


eth0: Transmit timed out, status 0000, PHY status 786d, resetting...
eth0: Reset not complete yet. Trying harder.
第一条提示 网卡关送数据失败. 复位网卡. 第二条提示 网卡复位不成功.... 这些提示都属于严重的通信问题.



服务器系统严重故障


CPU0: Temperature above threshold
CPU0: Running in modulated clock mode
服务器CPU工作温度过高. 必须排除硬件故障.


I/O error, dev hda, sector N
I/O error, dev sda, sector N
hda: dma_intr: status=0x51 { DriveReady SeekComplete Error }
hda: dma_intr: error=0x40 { UncorrectableError }, LBAsect=811562, sector=811560
服务器系统磁盘存储卡操作失败. 这样的问题一般不会使服务器直接停止工作, 但会引起很多严重问题.

TCP: time wait bucket table overflow解决

运维技术being 发表了文章 • 0 个评论 • 2210 次浏览 • 2016-02-27 22:43 • 来自相关话题

收到告警邮件,监控一台java web服务器的端口链接超时,登录到服务器上查看/var/log/message log如下:Feb 27 22:32:01 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:01 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:01 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:01 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:01 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:01 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:01 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:02 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:02 java_web1 kernel: TCP: time wait bucket table overflow 服务器的TCP连接数,超出了内核定义最大数。
 
查看设置的参数:[root@java_web1 ~]# cat /proc/sys/net/ipv4/tcp_max_tw_buckets
5000才5千,用ss -tan state time-wait | wc -l命令查看,已经有4500多的time-wait链接。
 
解决方法:
修改内核参数 /proc/sys/net/ipv4/tcp_max_tw_buckets# echo 30000 > /proc/sys/net/ipv4/tcp_max_tw_buckets写入/etc/sysctl.conf使之永久生效echo 'net.ipv4.tcp_max_tw_buckets = 30000' >> /etc/sysctl.conf && sysctl -p转载请注明来自开源技术社区 : http://openskill.cn/article/279 查看全部
收到告警邮件,监控一台java web服务器的端口链接超时,登录到服务器上查看/var/log/message log如下:
Feb 27 22:32:01 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:01 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:01 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:01 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:01 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:01 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:01 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:02 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:02 java_web1 kernel: TCP: time wait bucket table overflow
 服务器的TCP连接数,超出了内核定义最大数。
 
查看设置的参数:
[root@java_web1 ~]# cat  /proc/sys/net/ipv4/tcp_max_tw_buckets
5000
才5千,用ss -tan state time-wait | wc -l命令查看,已经有4500多的time-wait链接。
 
解决方法:
修改内核参数 /proc/sys/net/ipv4/tcp_max_tw_buckets
# echo 30000 > /proc/sys/net/ipv4/tcp_max_tw_buckets
写入/etc/sysctl.conf使之永久生效
echo 'net.ipv4.tcp_max_tw_buckets = 30000' >> /etc/sysctl.conf && sysctl -p
转载请注明来自开源技术社区 : http://openskill.cn/article/279

Linux运维常用的几个命令介绍

运维技术Geek小A 发表了文章 • 4 个评论 • 858 次浏览 • 2016-02-27 17:24 • 来自相关话题

1. 查看系统内核版本​[root@funsion geekxa]# cat /etc/issue
CentOS release 6.5 (Final)
Kernel \r on an \m显示了系统名称(CentOS)和内核版本(release 6.5)
The file /etc/issue is a text file which contains a message or system identification to be printed before the login prompt. 
 
2. 查看系统信息flyhup@ubuntu:~$ uname -a
Linux ubuntu 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:18:00 UTC 2015 i686 i686 i686 GNU/Linuxuname -a :显示系统名、节点名称、操作系统的发行版号、操作系统版本、运行系统的机器 ID 号
 
3. 查看磁盘空间占用情况$df -hl
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 100G 5.0G 90G 6% /
tmpfs 1.9G 104K 1.9G 1% /dev/shm参数:
[]-h:方便阅读[/][]-a:全部文件系统列表[/]

4. 查看内存
一、free命令root@xen_202_12 /]# free -m
total used free shared buffers cached
Mem: 3072 2459 612 0 207 1803
-/+ buffers/cache: 447 2624
Swap: 1913 0 1913第2行:
[]otal 内存总数: 3072【注意单位是M,可以用参数-hm更醒目】[/][]used 已经使用的内存数: 2459[/][]free 空闲的内存数: 612[/][]shared 当前已经废弃不用,总是0[/][]buffers: Buffer Cache内存数: 207[/][]cached: Page Cache内存数: 2803[/][]关系:total = used + free[/]
 
第3行:
[]-/+ buffers/cache的意思:[/][]-buffers/cache 的内存数: 447 (等于第1行的 used - buffers - cached)[/][]+buffers/cache 的内存数: 2624 (等于第1行的 free + buffers + cached)[/]
注:此处的内存数在用上面式子计算后,在大小上有一点点出入(还不知道是什么原因)。
可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。
 
5. 查看cpu内核数# 总核数 = 物理CPU个数 X 每颗物理CPU的核数
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数

# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq

# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l
 6. 查看系统负载dimite@ubuntu:~$ uptime
15:41:09 up 42 min, 2 users, load average: 0.08, 0.03, 0.05
[]当前时间 15:41:09[/][]系统已运行的时间 42min[/][]当前在线用户 2 user[/][]平均负载:0.54, 0.40, 0.20,最近1分钟、5分钟、15分钟系统的负载[/]
何为系统负载呢?
系统平均负载被定义为在特定时间间隔内运行队列中的平均进程数目。如果一个进程满足以下条件则其就会位于运行队列中:
[]它没有在等待I/O操作的结果[/][]它没有主动进入等待状态(也就是没有调用'wait')[/][]没有被停止(例如:等待终止)[/]
一般来说,每个CPU内核当前活动进程数不大于3,则系统运行表现良好!当然这里说的是每个cpu内核,也就是如果主机是四核cpu的话,那么只要uptime最后输出的一串字符数值小于12即表示系统负载不是很严重.当然如果达到20,那就表示当前系统负载非常严重,估计打开执行web脚本非常缓慢.
 
7. 查看进程ps -ef or ps aux杀死所有含worker的进程ps -ef | grep worker | awk '{print $2}' | xargs sudo kill -9
or
ps -aux | grep worker | awk '{print $2}' | xargs sudo kill -9


8. 查看端口占用netstat -anp

or

netstat -nltup参数:
[]-a (all)显示所有选项,默认不显示LISTEN相关[/][]-t (tcp)仅显示tcp相关选项[/][]-u (udp)仅显示udp相关选项[/][]-n 拒绝显示别名,能显示数字的全部转化成数字。[/][]-l 仅列出有在 Listen (监听) 的服務状态[/][]-p 显示建立相关链接的程序名[/][]-r 显示路由信息,路由表[/][]-e 显示扩展信息,例如uid等[/][]-s 按各个协议进行统计[/][]-c 每隔一个固定时间,执行该netstat命令。[/][]提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到[/] 查看全部
1. 查看系统内核版本​
[root@funsion geekxa]# cat /etc/issue
CentOS release 6.5 (Final)
Kernel \r on an \m
显示了系统名称(CentOS)和内核版本(release 6.5)
The file /etc/issue is a text file which contains a message or system identification to be printed before the login prompt. 
 
2. 查看系统信息
flyhup@ubuntu:~$ uname -a
Linux ubuntu 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:18:00 UTC 2015 i686 i686 i686 GNU/Linux
uname -a :显示系统名、节点名称、操作系统的发行版号、操作系统版本、运行系统的机器 ID 号
 
3. 查看磁盘空间占用情况
$df -hl
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 100G 5.0G 90G 6% /
tmpfs 1.9G 104K 1.9G 1% /dev/shm
参数:
    []-h:方便阅读[/][]-a:全部文件系统列表[/]


4. 查看内存
一、free命令
root@xen_202_12 /]# free -m
total used free shared buffers cached
Mem: 3072 2459 612 0 207 1803
-/+ buffers/cache: 447 2624
Swap: 1913 0 1913
第2行:
    []otal 内存总数: 3072【注意单位是M,可以用参数-hm更醒目】[/][]used 已经使用的内存数: 2459[/][]free 空闲的内存数: 612[/][]shared 当前已经废弃不用,总是0[/][]buffers: Buffer Cache内存数: 207[/][]cached: Page Cache内存数: 2803[/][]关系:total = used + free[/]

 
第3行:
    []-/+ buffers/cache的意思:[/][]-buffers/cache 的内存数: 447 (等于第1行的 used - buffers - cached)[/][]+buffers/cache 的内存数: 2624 (等于第1行的 free + buffers + cached)[/]

注:此处的内存数在用上面式子计算后,在大小上有一点点出入(还不知道是什么原因)。
可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。
 
5. 查看cpu内核数
# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数

# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq

# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l

 6. 查看系统负载
dimite@ubuntu:~$ uptime
15:41:09 up 42 min, 2 users, load average: 0.08, 0.03, 0.05

    []当前时间 15:41:09[/][]系统已运行的时间 42min[/][]当前在线用户 2 user[/][]平均负载:0.54, 0.40, 0.20,最近1分钟、5分钟、15分钟系统的负载[/]

何为系统负载呢?
系统平均负载被定义为在特定时间间隔内运行队列中的平均进程数目。如果一个进程满足以下条件则其就会位于运行队列中:
    []它没有在等待I/O操作的结果[/][]它没有主动进入等待状态(也就是没有调用'wait')[/][]没有被停止(例如:等待终止)[/]

一般来说,每个CPU内核当前活动进程数不大于3,则系统运行表现良好!当然这里说的是每个cpu内核,也就是如果主机是四核cpu的话,那么只要uptime最后输出的一串字符数值小于12即表示系统负载不是很严重.当然如果达到20,那就表示当前系统负载非常严重,估计打开执行web脚本非常缓慢.
 
7. 查看进程
ps -ef  or ps aux
杀死所有含worker的进程
ps -ef | grep worker | awk '{print $2}' | xargs sudo kill -9
or
ps -aux | grep worker | awk '{print $2}' | xargs sudo kill -9


8. 查看端口占用
netstat -anp

or

netstat -nltup
参数:
    []-a (all)显示所有选项,默认不显示LISTEN相关[/][]-t (tcp)仅显示tcp相关选项[/][]-u (udp)仅显示udp相关选项[/][]-n 拒绝显示别名,能显示数字的全部转化成数字。[/][]-l 仅列出有在 Listen (监听) 的服務状态[/][]-p 显示建立相关链接的程序名[/][]-r 显示路由信息,路由表[/][]-e 显示扩展信息,例如uid等[/][]-s 按各个协议进行统计[/][]-c 每隔一个固定时间,执行该netstat命令。[/][]提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到[/]

十条命令一分钟分析出Linux服务器性能

运维技术push 发表了文章 • 0 个评论 • 898 次浏览 • 2016-01-09 20:47 • 来自相关话题

如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?下面让我们看看看Neflix通过十条命令在一分钟内对机器性能问题进行诊断。

概述

通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解。
[]uptime[/][]dmesg | tail[/][]vmstat 1[/][]mpstat -P ALL 1[/][]pidstat 1[/][]iostat -xz 1[/][]free -m[/][]sar -n DEV 1[/][]sar -n TCP,ETCP 1[/][]top[/]
其中一些命令需要安装sysstat包,有一些由procps包提供。这些命令的输出,有助于快速定位性能瓶颈,检查出所有资源(CPU、内存、磁盘IO等)的利用率(utilization)、饱和度(saturation)和错误(error)度量,也就是所谓的USE方法。
下面我们来逐一介绍下这些命令,有关这些命令更多的参数和说明,请参照命令的手册。

uptime

$ uptime
23:51:26 up 21:31, 1 user, load average: 30.02, 26.43, 19.02这个命令可以快速查看机器的负载情况。在Linux系统中,这些数据表示等待CPU资源的进程和阻塞在不可中断IO进程(进程状态为D)的数量。这些数据可以让我们对系统资源使用有一个宏观的了解。

命令的输出分别表示1分钟、5分钟、15分钟的平均负载情况。通过这三个数据,可以了解服务器负载是在趋于紧张还是区域缓解。如果1分钟平均负载很高,而15分钟平均负载很低,说明服务器正在命令高负载情况,需要进一步排查CPU资源都消耗在了哪里。反之,如果15分钟平均负载很高,1分钟平均负载较低,则有可能是CPU资源紧张时刻已经过去。

上面例子中的输出,可以看见最近1分钟的平均负载非常高,且远高于最近15分钟负载,因此我们需要继续排查当前系统中有什么进程消耗了大量的资源。可以通过下文将会介绍的vmstat、mpstat等命令进一步排查。

dmesg | tail

$ dmesg | tail
[1880957.563150] perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0
[...]
[1880957.563400] Out of memory: Kill process 18694 (perl) score 246 or sacrifice child
[1880957.563408] Killed process 18694 (perl) total-vm:1972392kB, anon-rss:1953348kB, file-rss:0kB
[2320864.954447] TCP: Possible SYN flooding on port 7001. Dropping request. Check SNMP counters.该命令会输出系统日志的最后10行。示例中的输出,可以看见一次内核的oom kill和一次TCP丢包。这些日志可以帮助排查性能问题。千万不要忘了这一步。

vmstat 1

$ vmstat 1
procs ---------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
34 0 0 200889792 73708 591828 0 0 0 5 6 10 96 1 3 0 0
32 0 0 200889920 73708 591860 0 0 0 592 13284 4282 98 1 1 0 0
32 0 0 200890112 73708 591860 0 0 0 0 9501 2154 99 1 0 0 0
32 0 0 200889568 73712 591856 0 0 0 48 11900 2459 99 0 0 0 0
32 0 0 200890208 73712 591860 0 0 0 0 15898 4840 98 1 1 0 0
^Cvmstat(8) 命令,每行会输出一些系统核心指标,这些指标可以让我们更详细的了解系统状态。后面跟的参数1,表示每秒输出一次统计信息,表头提示了每一列的含义,这几介绍一些和性能调优相关的列:
[]r:等待在CPU资源的进程数。这个数据比平均负载更加能够体现CPU负载情况,数据中不包含等待IO的进程。如果这个数值大于机器CPU核数,那么机器的CPU资源已经饱和。[/][]free:系统可用内存数(以千字节为单位),如果剩余内存不足,也会导致系统性能问题。下文介绍到的free命令,可以更详细的了解系统内存的使用情况。[/][]si, so:交换区写入和读取的数量。如果这个数据不为0,说明系统已经在使用交换区(swap),机器物理内存已经不足。[/][]us, sy, id, wa, st:这些都代表了CPU时间的消耗,它们分别表示用户时间(user)、系统(内核)时间(sys)、空闲时间(idle)、IO等待时间(wait)和被偷走的时间(stolen,一般被其他虚拟机消耗)。[/]

上述这些CPU时间,可以让我们很快了解CPU是否出于繁忙状态。一般情况下,如果用户时间和系统时间相加非常大,CPU出于忙于执行指令。如果IO等待时间很长,那么系统的瓶颈可能在磁盘IO。

示例命令的输出可以看见,大量CPU时间消耗在用户态,也就是用户应用程序消耗了CPU时间。这不一定是性能问题,需要结合r队列,一起分析。

mpstat -P ALL 1

$ mpstat -P ALL 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
07:38:49 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
07:38:50 PM all 98.47 0.00 0.75 0.00 0.00 0.00 0.00 0.00 0.00 0.78
07:38:50 PM 0 96.04 0.00 2.97 0.00 0.00 0.00 0.00 0.00 0.00 0.99
07:38:50 PM 1 97.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 2.00
07:38:50 PM 2 98.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 1.00
07:38:50 PM 3 96.97 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 3.03
[...]该命令可以显示每个CPU的占用情况,如果有一个CPU占用率特别高,那么有可能是一个单线程应用程序引起的。

pidstat 1

$ pidstat 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
07:41:02 PM UID PID %usr %system %guest %CPU CPU Command
07:41:03 PM 0 9 0.00 0.94 0.00 0.94 1 rcuos/0
07:41:03 PM 0 4214 5.66 5.66 0.00 11.32 15 mesos-slave
07:41:03 PM 0 4354 0.94 0.94 0.00 1.89 8 java
07:41:03 PM 0 6521 1596.23 1.89 0.00 1598.11 27 java
07:41:03 PM 0 6564 1571.70 7.55 0.00 1579.25 28 java
07:41:03 PM 60004 60154 0.94 4.72 0.00 5.66 9 pidstat
07:41:03 PM UID PID %usr %system %guest %CPU CPU Command
07:41:04 PM 0 4214 6.00 2.00 0.00 8.00 15 mesos-slave
07:41:04 PM 0 6521 1590.00 1.00 0.00 1591.00 27 java
07:41:04 PM 0 6564 1573.00 10.00 0.00 1583.00 28 java
07:41:04 PM 108 6718 1.00 0.00 0.00 1.00 0 snmp-pass
07:41:04 PM 60004 60154 1.00 4.00 0.00 5.00 9 pidstat
^Cpidstat命令输出进程的CPU占用率,该命令会持续输出,并且不会覆盖之前的数据,可以方便观察系统动态。如上的输出,可以看见两个JAVA进程占用了将近1600%的CPU时间,既消耗了大约16个CPU核心的运算资源。

iostat -xz 1

$ iostat -xz 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
73.96 0.00 3.73 0.03 0.06 22.21
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
xvda 0.00 0.23 0.21 0.18 4.52 2.08 34.37 0.00 9.98 13.80 5.42 2.44 0.09
xvdb 0.01 0.00 1.02 8.94 127.97 598.53 145.79 0.00 0.43 1.78 0.28 0.25 0.25
xvdc 0.01 0.00 1.02 8.86 127.79 595.94 146.50 0.00 0.45 1.82 0.30 0.27 0.26
dm-0 0.00 0.00 0.69 2.32 10.47 31.69 28.01 0.01 3.23 0.71 3.98 0.13 0.04
dm-1 0.00 0.00 0.00 0.94 0.01 3.78 8.00 0.33 345.84 0.04 346.81 0.01 0.00
dm-2 0.00 0.00 0.09 0.07 1.35 0.36 22.50 0.00 2.55 0.23 5.62 1.78 0.03
[...]
^Ciostat命令主要用于查看机器磁盘IO情况。该命令输出的列,主要含义是:
[]r/s, w/s, rkB/s, wkB/s:分别表示每秒读写次数和每秒读写数据量(千字节)。读写量过大,可能会引起性能问题。[/][]await:IO操作的平均等待时间,单位是毫秒。这是应用程序在和磁盘交互时,需要消耗的时间,包括IO等待和实际操作的耗时。如果这个数值过大,可能是硬件设备遇到了瓶颈或者出现故障。[/][]avgqu-sz:向设备发出的请求平均数量。如果这个数值大于1,可能是硬件设备已经饱和(部分前端硬件设备支持并行写入)。[/][]%util:设备利用率。这个数值表示设备的繁忙程度,经验值是如果超过60,可能会影响IO性能(可以参照IO操作平均等待时间)。如果到达100%,说明硬件设备已经饱和。[/]

如果显示的是逻辑设备的数据,那么设备利用率不代表后端实际的硬件设备已经饱和。值得注意的是,即使IO性能不理想,也不一定意味这应用程序性能会不好,可以利用诸如预读取、写缓存等策略提升应用性能。

free –m

$ free -m
total used free shared buffers cached
Mem: 245998 24545 221453 83 59 541
-/+ buffers/cache: 23944 222053
Swap: 0 0 0free命令可以查看系统内存的使用情况,-m参数表示按照兆字节展示。最后两列分别表示用于IO缓存的内存数,和用于文件系统页缓存的内存数。需要注意的是,第二行-/+ buffers/cache,看上去缓存占用了大量内存空间。这是Linux系统的内存使用策略,尽可能的利用内存,如果应用程序需要内存,这部分内存会立即被回收并分配给应用程序。因此,这部分内存一般也被当成是可用内存。

如果可用内存非常少,系统可能会动用交换区(如果配置了的话),这样会增加IO开销(可以在iostat命令中提现),降低系统性能。

sar -n DEV 1

$ sar -n DEV 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
12:16:48 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
12:16:49 AM eth0 18763.00 5032.00 20686.42 478.30 0.00 0.00 0.00 0.00
12:16:49 AM lo 14.00 14.00 1.36 1.36 0.00 0.00 0.00 0.00
12:16:49 AM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:16:49 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
12:16:50 AM eth0 19763.00 5101.00 21999.10 482.56 0.00 0.00 0.00 0.00
12:16:50 AM lo 20.00 20.00 3.25 3.25 0.00 0.00 0.00 0.00
12:16:50 AM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
^Csar命令在这里可以查看网络设备的吞吐率。在排查性能问题时,可以通过网络设备的吞吐量,判断网络设备是否已经饱和。如示例输出中,eth0网卡设备,吞吐率大概在22 Mbytes/s,既176 Mbits/sec,没有达到1Gbit/sec的硬件上限。

sar -n TCP,ETCP 1

$ sar -n TCP,ETCP 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
12:17:19 AM active/s passive/s iseg/s oseg/s
12:17:20 AM 1.00 0.00 10233.00 18846.00
12:17:19 AM atmptf/s estres/s retrans/s isegerr/s orsts/s
12:17:20 AM 0.00 0.00 0.00 0.00 0.00
12:17:20 AM active/s passive/s iseg/s oseg/s
12:17:21 AM 1.00 0.00 8359.00 6039.00
12:17:20 AM atmptf/s estres/s retrans/s isegerr/s orsts/s
12:17:21 AM 0.00 0.00 0.00 0.00 0.00
^Csar命令在这里用于查看TCP连接状态,其中包括:
[]active/s:每秒本地发起的TCP连接数,既通过connect调用创建的TCP连接;[/][]passive/s:每秒远程发起的TCP连接数,即通过accept调用创建的TCP连接;[/][]retrans/s:每秒TCP重传数量;[/]
TCP连接数可以用来判断性能问题是否由于建立了过多的连接,进一步可以判断是主动发起的连接,还是被动接受的连接。TCP重传可能是因为网络环境恶劣,或者服务器压力过大导致丢包。

top

$ top
top - 00:15:40 up 21:56, 1 user, load average: 31.09, 29.87, 29.92
Tasks: 871 total, 1 running, 868 sleeping, 0 stopped, 2 zombie
%Cpu(s): 96.8 us, 0.4 sy, 0.0 ni, 2.7 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 25190241+total, 24921688 used, 22698073+free, 60448 buffers
KiB Swap: 0 total, 0 used, 0 free. 554208 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20248 root 20 0 0.227t 0.012t 18748 S 3090 5.2 29812:58 java
4213 root 20 0 2722544 64640 44232 S 23.5 0.0 233:35.37 mesos-slave
66128 titancl+ 20 0 24344 2332 1172 R 1.0 0.0 0:00.07 top
5235 root 20 0 38.227g 547004 49996 S 0.7 0.2 2:02.74 java
4299 root 20 0 20.015g 2.682g 16836 S 0.3 1.1 33:14.42 java
1 root 20 0 33620 2920 1496 S 0.0 0.0 0:03.82 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:05.35 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:06.94 kworker/u256:0
8 root 20 0 0 0 0 S 0.0 0.0 2:38.05 rcu_sched

top命令包含了前面好几个命令的检查的内容。比如系统负载情况(uptime)、系统内存使用情况(free)、系统CPU使用情况(vmstat)等。因此通过这个命令,可以相对全面的查看系统负载的来源。同时,top命令支持排序,可以按照不同的列排序,方便查找出诸如内存占用最多的进程、CPU占用率最高的进程等。

但是,top命令相对于前面一些命令,输出是一个瞬间值,如果不持续盯着,可能会错过一些线索。这时可能需要暂停top命令刷新,来记录和比对数据。

总结

排查Linux服务器性能问题还有很多工具,上面介绍的一些命令,可以帮助我们快速的定位问题。例如前面的示例输出,多个证据证明有JAVA进程占用了大量CPU资源,之后的性能调优就可以针对应用程序进行。

英文原文:http://techblog.netflix.com/2015/11/linux-performance-analysis-in-60s.html
翻译原文:http://www.infoq.com/cn/news/2015/12/linux-performance 查看全部
如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?下面让我们看看看Neflix通过十条命令在一分钟内对机器性能问题进行诊断。


概述


通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解。
    []uptime[/][]dmesg | tail[/][]vmstat 1[/][]mpstat -P ALL 1[/][]pidstat 1[/][]iostat -xz 1[/][]free -m[/][]sar -n DEV 1[/][]sar -n TCP,ETCP 1[/][]top[/]

其中一些命令需要安装sysstat包,有一些由procps包提供。这些命令的输出,有助于快速定位性能瓶颈,检查出所有资源(CPU、内存、磁盘IO等)的利用率(utilization)、饱和度(saturation)和错误(error)度量,也就是所谓的USE方法
下面我们来逐一介绍下这些命令,有关这些命令更多的参数和说明,请参照命令的手册。


uptime


$ uptime
23:51:26 up 21:31, 1 user, load average: 30.02, 26.43, 19.02
这个命令可以快速查看机器的负载情况。在Linux系统中,这些数据表示等待CPU资源的进程和阻塞在不可中断IO进程(进程状态为D)的数量。这些数据可以让我们对系统资源使用有一个宏观的了解。

命令的输出分别表示1分钟、5分钟、15分钟的平均负载情况。通过这三个数据,可以了解服务器负载是在趋于紧张还是区域缓解。如果1分钟平均负载很高,而15分钟平均负载很低,说明服务器正在命令高负载情况,需要进一步排查CPU资源都消耗在了哪里。反之,如果15分钟平均负载很高,1分钟平均负载较低,则有可能是CPU资源紧张时刻已经过去。

上面例子中的输出,可以看见最近1分钟的平均负载非常高,且远高于最近15分钟负载,因此我们需要继续排查当前系统中有什么进程消耗了大量的资源。可以通过下文将会介绍的vmstat、mpstat等命令进一步排查。


dmesg | tail


$ dmesg | tail
[1880957.563150] perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0
[...]
[1880957.563400] Out of memory: Kill process 18694 (perl) score 246 or sacrifice child
[1880957.563408] Killed process 18694 (perl) total-vm:1972392kB, anon-rss:1953348kB, file-rss:0kB
[2320864.954447] TCP: Possible SYN flooding on port 7001. Dropping request. Check SNMP counters.
该命令会输出系统日志的最后10行。示例中的输出,可以看见一次内核的oom kill和一次TCP丢包。这些日志可以帮助排查性能问题。千万不要忘了这一步。


vmstat 1


$ vmstat 1
procs ---------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
34 0 0 200889792 73708 591828 0 0 0 5 6 10 96 1 3 0 0
32 0 0 200889920 73708 591860 0 0 0 592 13284 4282 98 1 1 0 0
32 0 0 200890112 73708 591860 0 0 0 0 9501 2154 99 1 0 0 0
32 0 0 200889568 73712 591856 0 0 0 48 11900 2459 99 0 0 0 0
32 0 0 200890208 73712 591860 0 0 0 0 15898 4840 98 1 1 0 0
^C
vmstat(8) 命令,每行会输出一些系统核心指标,这些指标可以让我们更详细的了解系统状态。后面跟的参数1,表示每秒输出一次统计信息,表头提示了每一列的含义,这几介绍一些和性能调优相关的列:
    []r:等待在CPU资源的进程数。这个数据比平均负载更加能够体现CPU负载情况,数据中不包含等待IO的进程。如果这个数值大于机器CPU核数,那么机器的CPU资源已经饱和。[/][]free:系统可用内存数(以千字节为单位),如果剩余内存不足,也会导致系统性能问题。下文介绍到的free命令,可以更详细的了解系统内存的使用情况。[/][]si, so:交换区写入和读取的数量。如果这个数据不为0,说明系统已经在使用交换区(swap),机器物理内存已经不足。[/][]us, sy, id, wa, st:这些都代表了CPU时间的消耗,它们分别表示用户时间(user)、系统(内核)时间(sys)、空闲时间(idle)、IO等待时间(wait)和被偷走的时间(stolen,一般被其他虚拟机消耗)。[/]


上述这些CPU时间,可以让我们很快了解CPU是否出于繁忙状态。一般情况下,如果用户时间和系统时间相加非常大,CPU出于忙于执行指令。如果IO等待时间很长,那么系统的瓶颈可能在磁盘IO。

示例命令的输出可以看见,大量CPU时间消耗在用户态,也就是用户应用程序消耗了CPU时间。这不一定是性能问题,需要结合r队列,一起分析。


mpstat -P ALL 1


$ mpstat -P ALL 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
07:38:49 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
07:38:50 PM all 98.47 0.00 0.75 0.00 0.00 0.00 0.00 0.00 0.00 0.78
07:38:50 PM 0 96.04 0.00 2.97 0.00 0.00 0.00 0.00 0.00 0.00 0.99
07:38:50 PM 1 97.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 2.00
07:38:50 PM 2 98.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 1.00
07:38:50 PM 3 96.97 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 3.03
[...]
该命令可以显示每个CPU的占用情况,如果有一个CPU占用率特别高,那么有可能是一个单线程应用程序引起的。


pidstat 1


$ pidstat 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
07:41:02 PM UID PID %usr %system %guest %CPU CPU Command
07:41:03 PM 0 9 0.00 0.94 0.00 0.94 1 rcuos/0
07:41:03 PM 0 4214 5.66 5.66 0.00 11.32 15 mesos-slave
07:41:03 PM 0 4354 0.94 0.94 0.00 1.89 8 java
07:41:03 PM 0 6521 1596.23 1.89 0.00 1598.11 27 java
07:41:03 PM 0 6564 1571.70 7.55 0.00 1579.25 28 java
07:41:03 PM 60004 60154 0.94 4.72 0.00 5.66 9 pidstat
07:41:03 PM UID PID %usr %system %guest %CPU CPU Command
07:41:04 PM 0 4214 6.00 2.00 0.00 8.00 15 mesos-slave
07:41:04 PM 0 6521 1590.00 1.00 0.00 1591.00 27 java
07:41:04 PM 0 6564 1573.00 10.00 0.00 1583.00 28 java
07:41:04 PM 108 6718 1.00 0.00 0.00 1.00 0 snmp-pass
07:41:04 PM 60004 60154 1.00 4.00 0.00 5.00 9 pidstat
^C
pidstat命令输出进程的CPU占用率,该命令会持续输出,并且不会覆盖之前的数据,可以方便观察系统动态。如上的输出,可以看见两个JAVA进程占用了将近1600%的CPU时间,既消耗了大约16个CPU核心的运算资源。


iostat -xz 1


$ iostat -xz 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
73.96 0.00 3.73 0.03 0.06 22.21
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
xvda 0.00 0.23 0.21 0.18 4.52 2.08 34.37 0.00 9.98 13.80 5.42 2.44 0.09
xvdb 0.01 0.00 1.02 8.94 127.97 598.53 145.79 0.00 0.43 1.78 0.28 0.25 0.25
xvdc 0.01 0.00 1.02 8.86 127.79 595.94 146.50 0.00 0.45 1.82 0.30 0.27 0.26
dm-0 0.00 0.00 0.69 2.32 10.47 31.69 28.01 0.01 3.23 0.71 3.98 0.13 0.04
dm-1 0.00 0.00 0.00 0.94 0.01 3.78 8.00 0.33 345.84 0.04 346.81 0.01 0.00
dm-2 0.00 0.00 0.09 0.07 1.35 0.36 22.50 0.00 2.55 0.23 5.62 1.78 0.03
[...]
^C
iostat命令主要用于查看机器磁盘IO情况。该命令输出的列,主要含义是:
    []r/s, w/s, rkB/s, wkB/s:分别表示每秒读写次数和每秒读写数据量(千字节)。读写量过大,可能会引起性能问题。[/][]await:IO操作的平均等待时间,单位是毫秒。这是应用程序在和磁盘交互时,需要消耗的时间,包括IO等待和实际操作的耗时。如果这个数值过大,可能是硬件设备遇到了瓶颈或者出现故障。[/][]avgqu-sz:向设备发出的请求平均数量。如果这个数值大于1,可能是硬件设备已经饱和(部分前端硬件设备支持并行写入)。[/][]%util:设备利用率。这个数值表示设备的繁忙程度,经验值是如果超过60,可能会影响IO性能(可以参照IO操作平均等待时间)。如果到达100%,说明硬件设备已经饱和。[/]


如果显示的是逻辑设备的数据,那么设备利用率不代表后端实际的硬件设备已经饱和。值得注意的是,即使IO性能不理想,也不一定意味这应用程序性能会不好,可以利用诸如预读取、写缓存等策略提升应用性能。


free –m


$ free -m
total used free shared buffers cached
Mem: 245998 24545 221453 83 59 541
-/+ buffers/cache: 23944 222053
Swap: 0 0 0
free命令可以查看系统内存的使用情况,-m参数表示按照兆字节展示。最后两列分别表示用于IO缓存的内存数,和用于文件系统页缓存的内存数。需要注意的是,第二行-/+ buffers/cache,看上去缓存占用了大量内存空间。这是Linux系统的内存使用策略,尽可能的利用内存,如果应用程序需要内存,这部分内存会立即被回收并分配给应用程序。因此,这部分内存一般也被当成是可用内存。

如果可用内存非常少,系统可能会动用交换区(如果配置了的话),这样会增加IO开销(可以在iostat命令中提现),降低系统性能。


sar -n DEV 1


$ sar -n DEV 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
12:16:48 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
12:16:49 AM eth0 18763.00 5032.00 20686.42 478.30 0.00 0.00 0.00 0.00
12:16:49 AM lo 14.00 14.00 1.36 1.36 0.00 0.00 0.00 0.00
12:16:49 AM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:16:49 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
12:16:50 AM eth0 19763.00 5101.00 21999.10 482.56 0.00 0.00 0.00 0.00
12:16:50 AM lo 20.00 20.00 3.25 3.25 0.00 0.00 0.00 0.00
12:16:50 AM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
^C
sar命令在这里可以查看网络设备的吞吐率。在排查性能问题时,可以通过网络设备的吞吐量,判断网络设备是否已经饱和。如示例输出中,eth0网卡设备,吞吐率大概在22 Mbytes/s,既176 Mbits/sec,没有达到1Gbit/sec的硬件上限。


sar -n TCP,ETCP 1


$ sar -n TCP,ETCP 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
12:17:19 AM active/s passive/s iseg/s oseg/s
12:17:20 AM 1.00 0.00 10233.00 18846.00
12:17:19 AM atmptf/s estres/s retrans/s isegerr/s orsts/s
12:17:20 AM 0.00 0.00 0.00 0.00 0.00
12:17:20 AM active/s passive/s iseg/s oseg/s
12:17:21 AM 1.00 0.00 8359.00 6039.00
12:17:20 AM atmptf/s estres/s retrans/s isegerr/s orsts/s
12:17:21 AM 0.00 0.00 0.00 0.00 0.00
^C
sar命令在这里用于查看TCP连接状态,其中包括:
    []active/s:每秒本地发起的TCP连接数,既通过connect调用创建的TCP连接;[/][]passive/s:每秒远程发起的TCP连接数,即通过accept调用创建的TCP连接;[/][]retrans/s:每秒TCP重传数量;[/]

TCP连接数可以用来判断性能问题是否由于建立了过多的连接,进一步可以判断是主动发起的连接,还是被动接受的连接。TCP重传可能是因为网络环境恶劣,或者服务器压力过大导致丢包。


top


$ top
top - 00:15:40 up 21:56, 1 user, load average: 31.09, 29.87, 29.92
Tasks: 871 total, 1 running, 868 sleeping, 0 stopped, 2 zombie
%Cpu(s): 96.8 us, 0.4 sy, 0.0 ni, 2.7 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 25190241+total, 24921688 used, 22698073+free, 60448 buffers
KiB Swap: 0 total, 0 used, 0 free. 554208 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20248 root 20 0 0.227t 0.012t 18748 S 3090 5.2 29812:58 java
4213 root 20 0 2722544 64640 44232 S 23.5 0.0 233:35.37 mesos-slave
66128 titancl+ 20 0 24344 2332 1172 R 1.0 0.0 0:00.07 top
5235 root 20 0 38.227g 547004 49996 S 0.7 0.2 2:02.74 java
4299 root 20 0 20.015g 2.682g 16836 S 0.3 1.1 33:14.42 java
1 root 20 0 33620 2920 1496 S 0.0 0.0 0:03.82 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:05.35 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:06.94 kworker/u256:0
8 root 20 0 0 0 0 S 0.0 0.0 2:38.05 rcu_sched

top命令包含了前面好几个命令的检查的内容。比如系统负载情况(uptime)、系统内存使用情况(free)、系统CPU使用情况(vmstat)等。因此通过这个命令,可以相对全面的查看系统负载的来源。同时,top命令支持排序,可以按照不同的列排序,方便查找出诸如内存占用最多的进程、CPU占用率最高的进程等。

但是,top命令相对于前面一些命令,输出是一个瞬间值,如果不持续盯着,可能会错过一些线索。这时可能需要暂停top命令刷新,来记录和比对数据。


总结


排查Linux服务器性能问题还有很多工具,上面介绍的一些命令,可以帮助我们快速的定位问题。例如前面的示例输出,多个证据证明有JAVA进程占用了大量CPU资源,之后的性能调优就可以针对应用程序进行。


英文原文:http://techblog.netflix.com/2015/11/linux-performance-analysis-in-60s.html
翻译原文:http://www.infoq.com/cn/news/2015/12/linux-performance


Linux知识工具大全

运维技术OpenSkill 发表了文章 • 0 个评论 • 2689 次浏览 • 2015-12-03 23:19 • 来自相关话题

简介:
Linux is a Unix-ish POSIX-compliant OS family. Most of the distros are GPL or otherwise FOSS. The defining component of Linux is the Linux Kernel, first released on 5 October 1991 by Linus Torvalds.

新版本






开始






受欢迎的网站






著名发行版本






Grok Linux       






Linux Virt






可调参数






Linux日志






Book/ebooks






Kernel Matrix 






内核地图






In Production






Linux论坛






shell指南






Linux安全






Linux桌面






防火墙






linux NAS






最佳实践





http://openskill.cn  开源技术社区分享
只做技术的分享,欢迎关注微信订阅号:




QQ群交流:





分享英文原文链接:https://linux.zeef.com/paul.reiber 查看全部
简介:
Linux is a Unix-ish POSIX-compliant OS family. Most of the distros are GPL or otherwise FOSS. The defining component of Linux is the Linux Kernel, first released on 5 October 1991 by Linus Torvalds.


新版本


linux1.png


开始


Linux2.png


受欢迎的网站


Linux3.png


著名发行版本


Linux4.png


Grok Linux       


Linux5.png


Linux Virt


Linux6.png


可调参数


Linux7.png


Linux日志


Linux8.png


Book/ebooks


Linux9.png


Kernel Matrix 


Linux10.png


内核地图


linux11.png


In Production


linux12.png


Linux论坛


linux13.png


shell指南


linux14.png


Linux安全


linux15.png


Linux桌面


linux16.png


防火墙


Linux17.png


linux NAS


Linux18.png


最佳实践


Linux19.png

http://openskill.cn  开源技术社区分享
只做技术的分享,欢迎关注微信订阅号:
openskill.gif

QQ群交流:
qqun.png


分享英文原文链接:https://linux.zeef.com/paul.reiber


Raid级别结构知识浅析

运维技术Ansible 发表了文章 • 1 个评论 • 2011 次浏览 • 2015-11-27 01:15 • 来自相关话题

一、Raid介绍

RAID是(Redundent Array of Inexpensive Disks)的缩写,直译为“廉价冗余磁盘阵列”,也简称为“磁盘阵列”。后来RAID中的字母I被改作了Independent,RAID就成了“独立冗余磁盘阵列”,但这只是名称的变化,实质性的内容并没有改变。可以把RAID理解成一种使用磁盘驱动器的方法,它将一组磁盘驱动器用某种逻辑方式联系起来,作为逻辑上的一个磁盘驱动器来使用。RAID 包含一组或者一个集合甚至一个阵列。使用一组磁盘结合驱动器组成 RAID 阵列或 RAID 集。将至少两个磁盘连接到一个 RAID 控制器,而成为一个逻辑卷,也可以将多个驱动器放在一个组中。一组磁盘只能使用一个 RAID 级别。使用 RAID 可以提高服务器的性能。不同 RAID 的级别,性能会有所不同。它通过容错和高可用性来保存我们的数据。RAID的优点:
[]传输速率高。在部分RAID模式中,可以让很多磁盘驱动器同时传输数据,而这些磁盘驱动器在逻辑上又是一个磁盘驱动器,所以使用RAID可以达到单个的磁盘驱动器几倍的速率。因为CPU的速度增长很快,而磁盘驱动器的数据传输速率无法大幅提高,所以需要有一种方案解决二者之间的矛盾。[/][]更高的安全性。相较于普通磁盘驱动器很多RAID模式都提供了多种数据修复功能,当RAID中的某一磁盘驱动器出现严重故障无法使用时,可以通过RAID中的其他磁盘驱动器来恢复此驱动器中的数据,而普通磁盘驱动器无法实现,这是使用RAID的第二个原因。[/]

二、Raid概念

软件 RAID 和硬件 RAID软件 RAID 的性能较低,因为其使用主机的资源。 需要加载 RAID 软件以从软件 RAID 卷中读取数据。在加载 RAID 软件前,操作系统需要引导起来才能加载 RAID 软件。在软件 RAID 中无需物理硬件。零成本投资。硬件 RAID 的性能较高。他们采用 PCI Express 卡物理地提供有专用的 RAID 控制器。它不会使用主机资源。他们有 NVRAM 用于缓存的读取和写入。缓存用于 RAID 重建时,即使出现电源故障,它会使用后备的电池电源保持缓存。对于大规模使用是非常昂贵的投资。硬件 RAID 卡如下所示:




几个重要Raid概念:
[]校验方式用在 RAID 重建中从校验所保存的信息中重新生成丢失的内容。 RAID 5,RAID 6 基于校验。[/][]条带化是将切片数据随机存储到多个磁盘。它不会在单个磁盘中保存完整的数据。如果我们使用2个磁盘,则每个磁盘存储我们的一半数据。[/][]镜像被用于 RAID 1 和 RAID 10。镜像会自动备份数据。在 RAID 1 中,它会保存相同的内容到其他盘上。[/][]热备份只是我们的服务器上的一个备用驱动器,它可以自动更换发生故障的驱动器。在我们的阵列中,如果任何一个驱动器损坏,热备份驱动器会自动用于重建 RAID。[/][]块是 RAID 控制器每次读写数据时的最小单位,最小 4KB。通过定义块大小,我们可以增加 I/O 性能。[/]

三、Raid级别

RAID有不同的级别,下面列举比较常用的模式:
[]RAID0 = 条带化[/][]RAID1 = 镜像[/][]RAID5 = 单磁盘分布式奇偶校验[/][]RAID6 = 双磁盘分布式奇偶校验[/][]RAID10 = 镜像 + 条带。(嵌套RAID)[/]
 
Raid 0



RAID 0,无冗余无校验的磁盘阵列。数据同时分布在各个磁盘上,没有容错能力,读写速度在RAID中最快,但因为任何一个磁盘损坏都会使整个RAID系统失效,所以安全系数反倒比单个的磁盘还要低。一般用在对数据安全要求不高,但对速度要求很高的场合,如:大型游戏、图形图像编辑等。此种RAID模式至少需要2个磁盘,而更多的磁盘则能提供更高效的数据传输。条带化有很好的性能。在RAID0(条带化)中数据将使用切片的方式被写入到磁盘。一半的内容放在一个磁盘上,另一半内容将被写入到另一个磁盘。 假设我们有2个磁盘驱动器,例如,如果我们将数据“TECMINT”写到逻辑卷中,“T”将被保存在第一盘中,“E”将保存在第二盘,'C'将被保存在第一盘,“M”将保存在第二盘,它会一直继续此循环过程。(LCTT 译注:实际上不可能按字节切片,是按数据块切片的。)


在这种情况下,如果驱动器中的任何一个发生故障,我们就会丢失数据,因为一个盘中只有一半的数据,不能用于重建 RAID。不过,当比较写入速度和性能时,RAID 0 是非常好的。创建 RAID 0(条带化)至少需要2个磁盘。如果你的数据是非常宝贵的,那么不要使用此 RAID 级别。特点:
[]高性能。[/][]RAID 0 中容量零损失。[/][]零容错。[/][]写和读有很高的性能。[/]
 
Raid 1



RAID 1,镜象磁盘阵列。每一个磁盘都有一个镜像磁盘,镜像磁盘随时保持与原磁盘的内容一致。RAID1具有最高的安全性,但只有一半的磁盘空间被用来存储数据。主要用在对数据安全性要求很高,而且要求能够快速恢复被损坏的数据的场合。此种RAID模式每组仅需要2个磁盘。镜像可以对我们的数据做一份相同的副本。假设我们有两个2TB的硬盘驱动器,我们总共有4TB,但在镜像中,但是放在RAID控制器后面的驱动器形成了一个逻辑驱动器,我们只能看到这个逻辑驱动器有2TB。当我们保存数据时,它将同时写入这两个2TB驱动器中。创建 RAID 1(镜像化)最少需要两个驱动器。如果发生磁盘故障,我们可以通过更换一个新的磁盘恢复 RAID 。如果在 RAID 1 中任何一个磁盘发生故障,我们可以从另一个磁盘中获取相同的数据,因为另外的磁盘中也有相同的数据。所以是零数据丢失。特点:
[]良好的性能。[/][]总容量丢失一半可用空间。[/][]完全容错。[/][]重建会更快。[/][]写性能变慢。[/][]读性能变好。[/][]能用于操作系统和小规模的数据库[/]
Raid 5



RAID 5, 无独立校验盘的奇偶校验磁盘阵列。同样采用奇偶校验来检查错误,但没有独立的校验盘,而是使用了一种特殊的算法,可以计算出任何一个带区校验块的存放位置。这样就可以确保任何对校验块进行的读写操作都会在所有的RAID磁盘中进行均衡,既提高了系统可靠性也消除了产生瓶颈的可能,对大小数据量的读写都有很好的性能。为了能跨越数组里的所有磁盘来写入数据及校验码信息,RAID 5设定最少需要三个磁盘,因此在这种情况下,会有1/3的磁盘容量会被备份校验码占用而无法使用,当有四个磁盘时,则需要1/4的容量作为备份,才能让最坏情况的发生率降到最低。当磁盘的数目增多时,每个磁盘上被备份校验码占用的磁盘容量就会降低,但是磁盘故障的风险率也同时增加了,一但同时有两个磁盘故障,则无法进行数据恢复。RAID 5多用于企业级。 RAID 5的以分布式奇偶校验的方式工作。奇偶校验信息将被用于重建数据。它从剩下的正常驱动器上的信息来重建。在驱动器发生故障时,这可以保护我们的数据。假设我们有4个驱动器,如果一个驱动器发生故障而后我们更换发生故障的驱动器后,我们可以从奇偶校验中重建数据到更换的驱动器上。奇偶校验信息存储在所有的4个驱动器上,如果我们有4个 1TB 的驱动器。奇偶校验信息将被存储在每个驱动器的256G中,而其它768GB是用户自己使用的。单个驱动器故障后,RAID 5依旧正常工作,如果驱动器损坏个数超过1个会导致数据的丢失。特点:
[]性能卓越[/][]读速度将非常好。[/][]写速度处于平均水准,如果我们不使用硬件 RAID 控制器,写速度缓慢。[/][]从所有驱动器的奇偶校验信息中重建。[/][]完全容错。[/][]1个磁盘空间将用于奇偶校验。[/][]可以被用在文件服务器,Web服务器,非常重要的备份中。[/]
Raid 6




RAID 6和RAID 5相似但它有两个分布式奇偶校验。大多用在大数量的阵列中。我们最少需要4个驱动器,即使有2个驱动器发生故障,我们依然可以更换新的驱动器后重建数据。它比RAID 5慢,因为它将数据同时写到4个驱动器上。当我们使用硬件 RAID 控制器时速度就处于平均水准。如果我们有6个的1TB驱动器,4个驱动器将用于数据保存,2个驱动器将用于校验。特点:
[]性能不佳。[/][]读的性能很好。[/][]如果我们不使用硬件 RAID 控制器写的性能会很差。[/][]从两个奇偶校验驱动器上重建。[/][]完全容错。[/][]2个磁盘空间将用于奇偶校验。[/][]可用于大型阵列。[/][]用于备份和视频流中,用于大规模。[/]
Raid 10



RAID 10可以被称为1 + 0或0 +1。它将做镜像+条带两个工作。在 RAID 10中首先做镜像然后做条带。在 RAID 01上首先做条带,然后做镜像。RAID 10比RAID 01好。假设,我们有4个驱动器。当我逻辑卷上写数据时,它会使用镜像和条带的方式将数据保存到4个驱动器上。

如果我在 RAID 10 上写入数据“TECMINT”,数据将使用如下方式保存。首先将“T”同时写入两个磁盘,“E”也将同时写入另外两个磁盘,所有数据都写入两块磁盘。这样可以将每个数据复制到另外的磁盘。

同时它将使用 RAID 0 方式写入数据,遵循将“T”写入第一组盘,“E”写入第二组盘。再次将“C”写入第一组盘,“M”到第二组盘。特点:
[]良好的读写性能。[/][]总容量丢失一半的可用空间。[/][]容错。[/][]从副本数据中快速重建。[/][]由于其高性能和高可用性,常被用于数据库的存储中。[/]
下面附录几张参考表:
针对不同RAID 模式在实际运用中可以使用的磁盘空间分别有多少,在用列表举例说明:




所有Raid级别的一些特性: 查看全部


一、Raid介绍


RAID是(Redundent Array of Inexpensive Disks)的缩写,直译为“廉价冗余磁盘阵列”,也简称为“磁盘阵列”。后来RAID中的字母I被改作了Independent,RAID就成了“独立冗余磁盘阵列”,但这只是名称的变化,实质性的内容并没有改变。可以把RAID理解成一种使用磁盘驱动器的方法,它将一组磁盘驱动器用某种逻辑方式联系起来,作为逻辑上的一个磁盘驱动器来使用。
RAID 包含一组或者一个集合甚至一个阵列。使用一组磁盘结合驱动器组成 RAID 阵列或 RAID 集。将至少两个磁盘连接到一个 RAID 控制器,而成为一个逻辑卷,也可以将多个驱动器放在一个组中。一组磁盘只能使用一个 RAID 级别。使用 RAID 可以提高服务器的性能。不同 RAID 的级别,性能会有所不同。它通过容错和高可用性来保存我们的数据。
RAID的优点:
    []传输速率高。在部分RAID模式中,可以让很多磁盘驱动器同时传输数据,而这些磁盘驱动器在逻辑上又是一个磁盘驱动器,所以使用RAID可以达到单个的磁盘驱动器几倍的速率。因为CPU的速度增长很快,而磁盘驱动器的数据传输速率无法大幅提高,所以需要有一种方案解决二者之间的矛盾。[/][]更高的安全性。相较于普通磁盘驱动器很多RAID模式都提供了多种数据修复功能,当RAID中的某一磁盘驱动器出现严重故障无法使用时,可以通过RAID中的其他磁盘驱动器来恢复此驱动器中的数据,而普通磁盘驱动器无法实现,这是使用RAID的第二个原因。[/]


二、Raid概念


软件 RAID 和硬件 RAID
软件 RAID 的性能较低,因为其使用主机的资源。 需要加载 RAID 软件以从软件 RAID 卷中读取数据。在加载 RAID 软件前,操作系统需要引导起来才能加载 RAID 软件。在软件 RAID 中无需物理硬件。零成本投资。
硬件 RAID 的性能较高。他们采用 PCI Express 卡物理地提供有专用的 RAID 控制器。它不会使用主机资源。他们有 NVRAM 用于缓存的读取和写入。缓存用于 RAID 重建时,即使出现电源故障,它会使用后备的电池电源保持缓存。对于大规模使用是非常昂贵的投资。
硬件 RAID 卡如下所示:
yraid.png

几个重要Raid概念:
    []校验方式用在 RAID 重建中从校验所保存的信息中重新生成丢失的内容。 RAID 5,RAID 6 基于校验。[/][]条带化是将切片数据随机存储到多个磁盘。它不会在单个磁盘中保存完整的数据。如果我们使用2个磁盘,则每个磁盘存储我们的一半数据。[/][]镜像被用于 RAID 1 和 RAID 10。镜像会自动备份数据。在 RAID 1 中,它会保存相同的内容到其他盘上。[/][]热备份只是我们的服务器上的一个备用驱动器,它可以自动更换发生故障的驱动器。在我们的阵列中,如果任何一个驱动器损坏,热备份驱动器会自动用于重建 RAID。[/][]是 RAID 控制器每次读写数据时的最小单位,最小 4KB。通过定义块大小,我们可以增加 I/O 性能。[/]


三、Raid级别


RAID有不同的级别,下面列举比较常用的模式:
    []RAID0 = 条带化[/][]RAID1 = 镜像[/][]RAID5 = 单磁盘分布式奇偶校验[/][]RAID6 = 双磁盘分布式奇偶校验[/][]RAID10 = 镜像 + 条带。(嵌套RAID)[/]

 
Raid 0
raid0.png
RAID 0,无冗余无校验的磁盘阵列。数据同时分布在各个磁盘上,没有容错能力,读写速度在RAID中最快,但因为任何一个磁盘损坏都会使整个RAID系统失效,所以安全系数反倒比单个的磁盘还要低。一般用在对数据安全要求不高,但对速度要求很高的场合,如:大型游戏、图形图像编辑等。此种RAID模式至少需要2个磁盘,而更多的磁盘则能提供更高效的数据传输。
条带化有很好的性能。在RAID0(条带化)中数据将使用切片的方式被写入到磁盘。一半的内容放在一个磁盘上,另一半内容将被写入到另一个磁盘。 
假设我们有2个磁盘驱动器,例如,如果我们将数据“TECMINT”写到逻辑卷中,“T”将被保存在第一盘中,“E”将保存在第二盘,'C'将被保存在第一盘,“M”将保存在第二盘,它会一直继续此循环过程。(LCTT 译注:实际上不可能按字节切片,是按数据块切片的。)


在这种情况下,如果驱动器中的任何一个发生故障,我们就会丢失数据,因为一个盘中只有一半的数据,不能用于重建 RAID。不过,当比较写入速度和性能时,RAID 0 是非常好的。创建 RAID 0(条带化)至少需要2个磁盘。如果你的数据是非常宝贵的,那么不要使用此 RAID 级别。
特点:
    []高性能。[/][]RAID 0 中容量零损失。[/][]零容错。[/][]写和读有很高的性能。[/]

 
Raid 1
raid1.png
RAID 1,镜象磁盘阵列。每一个磁盘都有一个镜像磁盘,镜像磁盘随时保持与原磁盘的内容一致。RAID1具有最高的安全性,但只有一半的磁盘空间被用来存储数据。主要用在对数据安全性要求很高,而且要求能够快速恢复被损坏的数据的场合。此种RAID模式每组仅需要2个磁盘。
镜像可以对我们的数据做一份相同的副本。假设我们有两个2TB的硬盘驱动器,我们总共有4TB,但在镜像中,但是放在RAID控制器后面的驱动器形成了一个逻辑驱动器,我们只能看到这个逻辑驱动器有2TB。
当我们保存数据时,它将同时写入这两个2TB驱动器中。创建 RAID 1(镜像化)最少需要两个驱动器。如果发生磁盘故障,我们可以通过更换一个新的磁盘恢复 RAID 。如果在 RAID 1 中任何一个磁盘发生故障,我们可以从另一个磁盘中获取相同的数据,因为另外的磁盘中也有相同的数据。所以是零数据丢失。
特点:
    []良好的性能。[/][]总容量丢失一半可用空间。[/][]完全容错。[/][]重建会更快。[/][]写性能变慢。[/][]读性能变好。[/][]能用于操作系统和小规模的数据库[/]

Raid 5
raid5.png
RAID 5, 无独立校验盘的奇偶校验磁盘阵列。同样采用奇偶校验来检查错误,但没有独立的校验盘,而是使用了一种特殊的算法,可以计算出任何一个带区校验块的存放位置。这样就可以确保任何对校验块进行的读写操作都会在所有的RAID磁盘中进行均衡,既提高了系统可靠性也消除了产生瓶颈的可能,对大小数据量的读写都有很好的性能。为了能跨越数组里的所有磁盘来写入数据及校验码信息,RAID 5设定最少需要三个磁盘,因此在这种情况下,会有1/3的磁盘容量会被备份校验码占用而无法使用,当有四个磁盘时,则需要1/4的容量作为备份,才能让最坏情况的发生率降到最低。当磁盘的数目增多时,每个磁盘上被备份校验码占用的磁盘容量就会降低,但是磁盘故障的风险率也同时增加了,一但同时有两个磁盘故障,则无法进行数据恢复。
RAID 5多用于企业级。 RAID 5的以分布式奇偶校验的方式工作。奇偶校验信息将被用于重建数据。它从剩下的正常驱动器上的信息来重建。在驱动器发生故障时,这可以保护我们的数据。
假设我们有4个驱动器,如果一个驱动器发生故障而后我们更换发生故障的驱动器后,我们可以从奇偶校验中重建数据到更换的驱动器上。奇偶校验信息存储在所有的4个驱动器上,如果我们有4个 1TB 的驱动器。奇偶校验信息将被存储在每个驱动器的256G中,而其它768GB是用户自己使用的。单个驱动器故障后,RAID 5依旧正常工作,如果驱动器损坏个数超过1个会导致数据的丢失。
特点:
    []性能卓越[/][]读速度将非常好。[/][]写速度处于平均水准,如果我们不使用硬件 RAID 控制器,写速度缓慢。[/][]从所有驱动器的奇偶校验信息中重建。[/][]完全容错。[/][]1个磁盘空间将用于奇偶校验。[/][]可以被用在文件服务器,Web服务器,非常重要的备份中。[/]

Raid 6

raid6.png
RAID 6和RAID 5相似但它有两个分布式奇偶校验。大多用在大数量的阵列中。我们最少需要4个驱动器,即使有2个驱动器发生故障,我们依然可以更换新的驱动器后重建数据。
它比RAID 5慢,因为它将数据同时写到4个驱动器上。当我们使用硬件 RAID 控制器时速度就处于平均水准。如果我们有6个的1TB驱动器,4个驱动器将用于数据保存,2个驱动器将用于校验。
特点:
    []性能不佳。[/][]读的性能很好。[/][]如果我们不使用硬件 RAID 控制器写的性能会很差。[/][]从两个奇偶校验驱动器上重建。[/][]完全容错。[/][]2个磁盘空间将用于奇偶校验。[/][]可用于大型阵列。[/][]用于备份和视频流中,用于大规模。[/]

Raid 10
raid10.png
RAID 10可以被称为1 + 0或0 +1。它将做镜像+条带两个工作。在 RAID 10中首先做镜像然后做条带。在 RAID 01上首先做条带,然后做镜像。RAID 10比RAID 01好。
假设,我们有4个驱动器。当我逻辑卷上写数据时,它会使用镜像和条带的方式将数据保存到4个驱动器上。

如果我在 RAID 10 上写入数据“TECMINT”,数据将使用如下方式保存。首先将“T”同时写入两个磁盘,“E”也将同时写入另外两个磁盘,所有数据都写入两块磁盘。这样可以将每个数据复制到另外的磁盘。

同时它将使用 RAID 0 方式写入数据,遵循将“T”写入第一组盘,“E”写入第二组盘。再次将“C”写入第一组盘,“M”到第二组盘。
特点:
    []良好的读写性能。[/][]总容量丢失一半的可用空间。[/][]容错。[/][]从副本数据中快速重建。[/][]由于其高性能和高可用性,常被用于数据库的存储中。[/]

下面附录几张参考表:
针对不同RAID 模式在实际运用中可以使用的磁盘空间分别有多少,在用列表举例说明:
raid_disk.png

所有Raid级别的一些特性:
raid_td.png

vsftp虚拟用户建立 | (干货笔记)

运维技术采菊篱下 发表了文章 • 0 个评论 • 917 次浏览 • 2015-11-26 00:33 • 来自相关话题

1.安装vsftpd服务,和测试命令ftp

# yum -y install vsftpd
# yum -y install ftp

2.建立虚拟用户的用户名/密码数据库

vsftpd服务的虚拟用户数据库使用的是Berkeley DB格式的数据文件。建立数据库文件要用到db_load命令工具,所以要安装db4软件包# yum -y install db4*(一)建立文本格式的用户名/密码列表文件,奇数行为用户名,偶数行对应为上一行用户名密码。# vi /etc/vsftpd/vusers.list
mike
123.com
john
123.com
kankan
kankan[i]bj[/i]com(二)用db_load工具将列表文件转化为DB数据库文件。# cd /etc/vsftpd/
# db_load -T -t hash -f vusers.list vusers.db
# chwon /etc/vsftpd/vuser.* //降低文件权限以提高安全性

3.建立FTP访问根目录以及虚拟用户对应的系统账号

# useradd -d /data/pub -s /sbin/nologin ftpuser
# useradd -d /home/ytb/www/cms.yuntongbu/ -s /sbin/nologin kankanftpuser
# chmod 777 /data/pub
创建测试文件
#ls -lh /boot > /data/pub/vutest.file

4.建立PAM认证文件

#vi /etc/pam.d/vsftpd.vu 添加如下内容
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers

5.修改vsftpd的主配置文件,添加对虚拟用户的支持。

# vi /etc/vsftpd/vsftpd.conf #内容如下
anonymous_enable=NO
local_enable=YES
anon_umask=022
write_enable=YES
guest_enable=YES
guest_username=ftpuser
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd.vu
userlist_enable=YES
tcp_wrappers=YES

6.为不同的虚拟用户配置独立的配置文件

# vi /etc/vsftpd/vsftpd.conf #在末尾添加如下一行
user_config_dir=/etc/vsftpd/vusers_dir

7.为mike和john建立独立配置目录及文件

# mkdir -p /etc/vsftpd/vusers_dir
# cd /etc/vsftpd/vusers_dir
# vi john [size=16]#添加如下内容[/size]
anon_upload_enable=YES
anon_mkdir_write_enable=YES
#touch mike 建立空文件,默认配置文件中的权限

8.启动vsftpd服务

# service vsftpd start

权限说明:权限:john可以登录到ftp服务器,可以浏览,下载,也可以上传文件
mike可以登录到ftp服务器,可以浏览,下载,但是不可以上传本地测试:
(一)john的测试[root@YTB-APP-1 ~]# ls
anaconda-ks.cfg bin importipas.sh install.log install.log.syslog my.cnf.bak
[root@YTB-APP-1 ~]# ftp localhost
Trying ::1...
ftp: connect to address ::1Connection refused
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (localhost:ytb): john
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,82,29).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 574 Jul 01 14:50 vutest.file
226 Directory send OK.
ftp> get vutest.file
local: vutest.file remote: vutest.file
227 Entering Passive Mode (127,0,0,1,103,164).
150 Opening BINARY mode data connection for vutest.file (574 bytes).
226 Transfer complete.
574 bytes received in 3.4e-05 secs (16882.35 Kbytes/sec)
ftp> put install.log
local: install.log remote: install.log
227 Entering Passive Mode (127,0,0,1,115,162).
150 Ok to send data.
226 Transfer complete.
29388 bytes sent in 0.024 secs (1222.97 Kbytes/sec)
ftp> quit
221 Goodbye.
[root@YTB-APP-1 ~]# ls
anaconda-ks.cfg bin importipas.sh install.log install.log.syslog my.cnf.bak vutest.file
[root@YTB-APP-1 ~]# ls /data/pub/
install.log vutest.file
[root@YTB-APP-1 ~]# (二)mike的测试[root@YTB-APP-1 ~]# ls
anaconda-ks.cfg bin importipas.sh install.log install.log.syslog my.cnf.bak vutest.file
[root@YTB-APP-1 ~]# rm -rf vutest.file
[root@YTB-APP-1 ~]# ftp localhost
Trying ::1...
ftp: connect to address ::1Connection refused
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (localhost:ytb): mike
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,223,141).
150 Here comes the directory listing.
-rw-r--r-- 1 503 503 29388 Jul 03 02:23 install.log
-rw-r--r-- 1 0 0 574 Jul 01 14:50 vutest.file
226 Directory send OK.
ftp> get vutest.file
local: vutest.file remote: vutest.file
227 Entering Passive Mode (127,0,0,1,154,230).
150 Opening BINARY mode data connection for vutest.file (574 bytes).
226 Transfer complete.
574 bytes received in 3.8e-05 secs (15105.26 Kbytes/sec)
ftp> put install.log.syslog
local: install.log.syslog remote: install.log.syslog
227 Entering Passive Mode (127,0,0,1,227,247).
550 Permission denied.
ftp> quit
221 Goodbye.
[root@YTB-APP-1 ~]# ls
anaconda-ks.cfg bin importipas.sh install.log install.log.syslog my.cnf.bak vutest.file
[root@YTB-APP-1 ~]# ls /dat/pub/
ls: cannot access /dat/pub/: No such file or directory
[root@YTB-APP-1 ~]# ls /data/pub/
install.log vutest.file
[root@YTB-APP-1 ~]# 好久之前的笔记,分享出来,方便后来者! 查看全部


1.安装vsftpd服务,和测试命令ftp


# yum -y install vsftpd
# yum -y install ftp


2.建立虚拟用户的用户名/密码数据库


vsftpd服务的虚拟用户数据库使用的是Berkeley DB格式的数据文件。建立数据库文件要用到db_load命令工具,所以要安装db4软件包
# yum -y install db4*
(一)建立文本格式的用户名/密码列表文件,奇数行为用户名,偶数行对应为上一行用户名密码。
# vi /etc/vsftpd/vusers.list
mike
123.com
john
123.com
kankan
kankan[i]bj[/i]com
(二)用db_load工具将列表文件转化为DB数据库文件。
# cd /etc/vsftpd/
# db_load -T -t hash -f vusers.list vusers.db
# chwon /etc/vsftpd/vuser.* //降低文件权限以提高安全性


3.建立FTP访问根目录以及虚拟用户对应的系统账号


# useradd -d /data/pub -s /sbin/nologin  ftpuser
# useradd -d /home/ytb/www/cms.yuntongbu/ -s /sbin/nologin kankanftpuser
# chmod 777 /data/pub
创建测试文件
#ls -lh /boot > /data/pub/vutest.file


4.建立PAM认证文件


#vi /etc/pam.d/vsftpd.vu  添加如下内容
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers


5.修改vsftpd的主配置文件,添加对虚拟用户的支持。


# vi /etc/vsftpd/vsftpd.conf   #内容如下
anonymous_enable=NO
local_enable=YES
anon_umask=022
write_enable=YES
guest_enable=YES
guest_username=ftpuser
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd.vu
userlist_enable=YES
tcp_wrappers=YES


6.为不同的虚拟用户配置独立的配置文件


# vi /etc/vsftpd/vsftpd.conf   #在末尾添加如下一行
user_config_dir=/etc/vsftpd/vusers_dir


7.为mike和john建立独立配置目录及文件


# mkdir -p  /etc/vsftpd/vusers_dir
# cd /etc/vsftpd/vusers_dir
# vi john [size=16]#添加如下内容[/size]
anon_upload_enable=YES
anon_mkdir_write_enable=YES
#touch mike 建立空文件,默认配置文件中的权限


8.启动vsftpd服务


# service vsftpd start

权限说明:
权限:john可以登录到ftp服务器,可以浏览,下载,也可以上传文件
mike可以登录到ftp服务器,可以浏览,下载,但是不可以上传
本地测试:
(一)john的测试
[root@YTB-APP-1 ~]# ls
anaconda-ks.cfg bin importipas.sh install.log install.log.syslog my.cnf.bak
[root@YTB-APP-1 ~]# ftp localhost
Trying ::1...
ftp: connect to address ::1Connection refused
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (localhost:ytb): john
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,82,29).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 574 Jul 01 14:50 vutest.file
226 Directory send OK.
ftp> get vutest.file
local: vutest.file remote: vutest.file
227 Entering Passive Mode (127,0,0,1,103,164).
150 Opening BINARY mode data connection for vutest.file (574 bytes).
226 Transfer complete.
574 bytes received in 3.4e-05 secs (16882.35 Kbytes/sec)
ftp> put install.log
local: install.log remote: install.log
227 Entering Passive Mode (127,0,0,1,115,162).
150 Ok to send data.
226 Transfer complete.
29388 bytes sent in 0.024 secs (1222.97 Kbytes/sec)
ftp> quit
221 Goodbye.
[root@YTB-APP-1 ~]# ls
anaconda-ks.cfg bin importipas.sh install.log install.log.syslog my.cnf.bak vutest.file
[root@YTB-APP-1 ~]# ls /data/pub/
install.log vutest.file
[root@YTB-APP-1 ~]#
(二)mike的测试
[root@YTB-APP-1 ~]# ls
anaconda-ks.cfg bin importipas.sh install.log install.log.syslog my.cnf.bak vutest.file
[root@YTB-APP-1 ~]# rm -rf vutest.file
[root@YTB-APP-1 ~]# ftp localhost
Trying ::1...
ftp: connect to address ::1Connection refused
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (localhost:ytb): mike
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,223,141).
150 Here comes the directory listing.
-rw-r--r-- 1 503 503 29388 Jul 03 02:23 install.log
-rw-r--r-- 1 0 0 574 Jul 01 14:50 vutest.file
226 Directory send OK.
ftp> get vutest.file
local: vutest.file remote: vutest.file
227 Entering Passive Mode (127,0,0,1,154,230).
150 Opening BINARY mode data connection for vutest.file (574 bytes).
226 Transfer complete.
574 bytes received in 3.8e-05 secs (15105.26 Kbytes/sec)
ftp> put install.log.syslog
local: install.log.syslog remote: install.log.syslog
227 Entering Passive Mode (127,0,0,1,227,247).
550 Permission denied.
ftp> quit
221 Goodbye.
[root@YTB-APP-1 ~]# ls
anaconda-ks.cfg bin importipas.sh install.log install.log.syslog my.cnf.bak vutest.file
[root@YTB-APP-1 ~]# ls /dat/pub/
ls: cannot access /dat/pub/: No such file or directory
[root@YTB-APP-1 ~]# ls /data/pub/
install.log vutest.file
[root@YTB-APP-1 ~]#
好久之前的笔记,分享出来,方便后来者!
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。