分类 系统运维 下的文章

当手中有相当多的机器需要管理的时候,自动化处理冗余又无聊的任务对系统管理员来说就很重要了。很多管理员习惯了自己写脚本模拟复杂软件之间的调度。不幸的是,脚本会过时,脚本的作者会离职,如果不花费巨大精力来维护这些脚本的话,它们早晚会一点儿用也没有。如果能有一个系统,任何人都可以使用、安装工具,不论其受雇于何人,那真是太期待了。目前已有几种系统可以解决这类需求,这篇教程将介绍其中之一——Puppet——的使用方法。

Puppet 是什么?

Puppet 是一款为 IT 系统管理员和顾问们设计的自动化软件,你可以用它自动化地完成诸如安装应用程序和服务、补丁管理和部署等工作。所有资源的相关配置都以“manifests”的方式保存,单台机器或者多台机器都可以使用。如果你想了解更多内容,Puppet 实验室的网站上有关于 Puppet 及其工作原理的更详细的介绍。

本教程要做些什么?

在这篇教程里,我们将一起安装配置一个 Puppet 服务器,然后在我们的客户端服务器(译注:这里的“客户端服务器”指需要部署业务逻辑的服务器)上完成一些基本配置。

准备工作

由于 Puppet 不是 CentOS 或 RHEL 发行版的基本仓库,所以我们得手动添加 Puppet 实验室提供的自定义仓库。在所有你想使用 Puppet 的地方执行以下命令安装这个仓库(版本不同,对应的 RPM 文件名可能略有不同)。

对于 CentOS/RHEL 6.5:

# rpm -ivh https://yum.puppetlabs.com/el/6.5/products/x86_64/puppetlabs-release-6-10.noarch.rpm

对于 CentOS/RHEL 7:

 # rpm -ivh https://yum.puppetlabs.com/el/7/products/x86_64/puppetlabs-release-7-10.noarch.rpm

安装服务器端

在你打算用作 master 的服务器上安装 "puppet-server" 包。

# yum install puppet-server

安装完成后,设置 Puppet 服务器开机自动启动,然后启动它。

# chkconfig puppetmaster on
# service puppetmaster start

现在服务器已经运行起来了,我们试试看我们的网络能不能访问到它。

对于使用 iptables 当做防火墙的 CentOS/RHEL 6,在 /etc/sysconfig/iptables 文件的 OUTPUT ACCEPT 小节里添加下面这一行。

-A INPUT -m state --state NEW -m tcp -p tcp --dport 8140 -j ACCEPT

重新启动 iptables 服务让刚才的修改生效。

# service iptables restart

在安装了防火墙的 CentOS/RHEL 7 上,我们这么做:

# firewall-cmd --permanent --zone=public --add-port=8140/tcp
# firewall-cmd --reload

安装客户端

执行下面的命令,在客户端节点安装 Puppet 客户端。

# yum install puppet

安装完成后,确保 Puppet 会随开机自动启动。

# chkconfig puppet on

Puppet 客户端需要知道 Puppet master 服务器的地址。最佳方案是使用 DNS 服务器解析 Puppet master 服务器地址。如果你没有 DNS 服务器,在 /etc/hosts 里添加类似下面这几行也可以:

1.2.3.4 server.your.domain

2.3.4.5 client-node.your.domain

1.2.3.4 对应你的 Puppet master 服务器 IP 地址,“server.your.domain”是你的 master 服务器域名(默认通常是服务器的 hostname),“client-node.your.domain”是你的客户端节点。包括 Puppet master 和客户端,所有相关的服务器都要在 hosts 文件里配置。

完成这些设置之后,我们要让 Puppet 客户端知道它的 master 是谁。默认情况下,Puppet 会查找名为“puppet”的服务器,但通常这并不符合你网络环境的真实情况,所以我们要改成 Pupper master 服务器的完整域名。打开文件 /etc/sysconfig/puppet,把 PUPPET\_SERVER 变量的值改成你在 /etc/hosts 文件里指定的 Puppet master 服务器的域名。

PUPPET\_SERVER=server.your.domain

master 服务器名也要在 /etc/puppet/puppet.conf 文件的“[agent]”小节里事先定义好。

server=server.your.domain

现在可以启动 Puppet 客户端了:

# service puppet start

强制我们的客户端在 Puppet master 服务器上登记:

# puppet agent --test

你会看到类似于下面的输出。别怕,这是正常现象,因为服务器还没有在 Puppet master 服务器上验证过。

Exiting; no certificate found and waitforcert is disabled

返回 Puppet master 服务器,检查证书验证请求:

# puppet cert list

你应该能看到一个列出了所有向 Puppet master 服务器发起证书签名请求的服务器。找到你客户端服务器的 hostname 然后使用下面的命令签名(client-node 是你客户端节点的域名):

# puppet cert sign client-node

到此为止 Puppet 客户端和服务器都正常工作了。恭喜你!但是,现在 Puppet master 没有任何要客户端做的事儿。好吧,我们来创建一些基本的 manifest 文件然后让我们的客户端节点安装一些基本工具。

回到你的 Puppet 服务器,确保目录 /etc/puppet/manifests 存在。

# mkdir -p /etc/puppet/manifests

创建 manifest 文件 /etc/puppet/manifests/site.pp,内容如下

node 'client-node' {
        include custom_utils
}

class custom_utils {
        package { ["nmap","telnet","vim-enhanced","traceroute"]:
                ensure => latest,
                allow_virtual => false,
        }
}

然后重新启动 puppetmaster 服务。

# service puppetmaster restart

客户端默认每 30 分钟更新一次配置,如果你希望你的修改能强制生效,就在客户端执行如下命令:

# puppet agent -t

如果你需要修改客户端的默认刷新时间,编辑客户端节点的 /etc/puppet/puppet.conf 文件中“[agent]”小节,增加下面这一行:

runinterval =

这个选项的值可以是秒(格式比如 30 或者 30s),分钟(30m),小时(6h),天(2d)以及年(5y)。值得注意的是,0 意味着“立即执行”而不是“从不执行”

提示和技巧

1. 调试

你免不了会提交错误的配置,然后不得不通过调试判断问题出现在哪儿。一般来说,你要么通过查看日志文件 /var/log/puppet 着手解决问题,要么手动执行查看输出:

# puppet agent -t

使用“-t”选项,你可以看到 Puppet 的详细输出。这条命令还有额外的选项可以帮你定位问题。首先要介绍的选项是:

# puppet agent -t --debug

debug 选项会显示 Puppet 本次运行时的差不多每一个步骤,这在调试非常复杂的问题时很有用。另一个很有用的选项是:

# puppet agent -t --noop

这个选项让 puppet 工作在 dry-run(译注:空转模式,不会对真实环境产生影响)模式下,不会应用任何修改。Puppet 只会把其工作内容输出到屏幕上,不会写到磁盘里去。

2. 模块

有时候你需要更复杂的 manifest 文件,在你着手编写它们之前,你有必要花点儿时间浏览一下 https://forge.puppetlabs.com。Forge 是一个集合了 Puppet 模块的社区,你的问题很可能已经有人解答过了,你能在那儿找到解决问题的模块。如果找不到,那就自己写一个然后提交上去,其他人也能从中获益。

现在,假设你已经找到了一个模块能解决你的问题。怎么把它安装到你的系统中去呢?非常简单,因为 Puppet 已经有了可以直接下载模块的用户界面,只需要执行下面的命令:

# puppet module install <module_name> --version 0.0.0

是你选择的模块的名字,版本号可选(如果没有指定版本号,默认使用最新的版本)。如果你不记得想安装的模块的名字了,试试下面的命令搜索模块:

# puppet module search <search_string>

你会得到一个包含 search\_string 的列表。

# puppet module search apache

Notice: Searching https://forgeapi.puppetlabs.com ...
NAME                   DESCRIPTION                        AUTHOR          KEYWORDS
example42-apache       Puppet module for apache           @example42      example42, apache
puppetlabs-apache      Puppet module for Apache           @puppetlabs     apache web httpd centos rhel ssl wsgi proxy
theforeman-apache      Apache HTTP server configuration   @theforeman     foreman apache httpd DEPRECATED

如果你想查看已经安装了哪些模块,键入:

# puppet module list

总结

到目前为止,你应该有了功能完整的可以向一个或多个客户端服务器推送基本配置的 Puppet master 服务器。你可以自己随便加点儿配置适配你自己的网络环境。不必为试用 Puppet 担心,你会发现,它会拯救你的生活。

Puppet 实验室正在试着维护一个质量上乘的项目文档,所以如果你想学点儿关于 Puppet 相关的配置,我强烈推荐你访问 Puppet 项目的主页 http://docs.puppetlabs.com

如果你有任何问题,敬请在文章下方评论,我会尽我所能回答你并给你建议。


via: http://xmodulo.com/2014/08/install-puppet-server-client-centos-rhel.html

作者:Jaroslav Štěpánek 译者:sailing 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

在 GitHub 我们总是说“如果网站响应速度不够快,我们就不应该让它上线运营”。我们之前在前端的体验速度这篇文章中介绍了一些提高网站响应速率的方法,但这只是故事的一部分。真正影响到 GitHub.com 性能的因素是 MySQL 数据库架构。让我们来瞧瞧我们的基础架构团队是如何无缝升级了 MySQL 架构吧,这事儿发生在去年8月份,成果就是大大提高了 GitHub 网站的速度。

任务

去年我们把 GitHub 上的大部分数据移到了新的数据中心,这个中心有世界顶级的硬件资源和网络平台。自从使用了 MySQL 作为我们的后端系统的基础,我们一直期望着一些改进来大大提高数据库性能,但是在数据中心使用全新的硬件来部署一套全新的集群环境并不是一件简单的工作,所以我们制定了一套计划和测试工作,以便数据能平滑过渡到新环境。

准备工作

像我们这种关于架构上的巨大改变,在执行的每一步都需要收集数据指标。新机器上安装好了基本的操作系统,接下来就是测试新配置下的各种性能。为了模拟真实的工作负载环境,我们使用 tcpdump 工具从旧的集群那里复制正在发生的 SELECT 请求,并在新集群上重新回放一遍。

MySQL 调优是个繁琐的细致活,像众所周知的 innodbbufferpoolsize 这个参数往往能对 MySQL 性能产生巨大的影响。对于这类参数,我们必须考虑在内,所以我们列了一份参数清单,包括 innodbthreadconcurrency,innodbiocapacity,和 innodbbufferpoolinstances,还有其它的。

在每次测试中,我们都很小心地只改变一个参数,并且让一次测试至少运行12小时。我们会观察响应时间的变化曲线,每秒的响应次数,以及有可能会导致并发性降低的参数。我们使用 “SHOW ENGINE INNODB STATUS” 命令打印 InnoDB 性能信息,特别观察了 “SEMAPHORES” 一节的内容,它为我们提供了工作负载的状态信息。

当我们在设置参数后对运行结果感到满意,然后就开始将我们最大的数据表格之一迁移到一套独立的集群上,这个步骤作为整个迁移过程的早期测试,以保证我们的核心集群有更多的缓存池空间,并且为故障切换和存储功能提供更强的灵活性。这步初始迁移方案也引入了一个有趣的挑战:我们必须维持多条客户连接,并且要将这些连接指向到正确的集群上。

除了硬件性能的提升,还需要补充一点,我们同时也对处理进程和拓扑结构进行了改进:我们添加了延时拷贝技术,更快、更高频地备份数据,以及更多的读拷贝空间。这些功能已经准备上线。

列出任务清单,三思后行

每天有上百万用户的使用 GitHub.com,我们不可能有机会等没有人用了才进行实际数据切换。我们有一个详细的任务清单来执行迁移:

我们还规划了一个维护期,并且在我们的博客中通知了大家,让用户注意到这件事情。

迁移时间到

太平洋时间星期六上午5点,我们的迁移团队上线集合对话,同时数据迁移正式开始:

我们将 GitHub 网站设置为维护模式,并在 Twitter 上发表声明,然后开始按上述任务清单的步骤开始工作:

13 分钟后,我们确保新的集群能正常工作:

然后我们让 GitHub.com 脱离维护模式,并且让全世界的用户都知道我们的最新状态:

大量前期的测试工作与准备工作,让我们将维护期缩到最短。

检验最终的成果

在接下来的几周时间里,我们密切监视着 GitHub.com 的性能和响应时间。我们发现迁移后网站的平均加载时间减少一半,并且在99%的时间里,能减少三分之二

我们学到了什么

功能划分

在迁移过程中,我们采用了一个比较好的方法是:将大的数据表(主要记录了一些历史数据)先迁移过去,空出旧集群的磁盘空间和缓存池空间。这一步给我们留下了更多的资源用于“热”数据,将一些连接请求分离到多套集群里面。这步为我们之后的胜利奠定了基础,我们以后还会使用这种模式来进行迁移工作。

测试测试测试

为你的应用做验收测试和回归测试,越多越好,多多益善,不要嫌多。从老集群复制数据到新集群的过程中,如果进行验收测试和响应状态测试,得到的数据是不准的,如果数据不理想,这是正常的,不要惊讶,不要试图拿这些数据去分析原因。

合作的力量

对基础架构进行大的改变,通常需要涉及到很多人,我们要像一个团队一样为共同的目标而合作。我们的团队成员来自全球各地。

团队成员地图:

本次合作新创了一种工作流程:我们提交更改(pull request),获取实时反馈,查看修改了错误的 commit —— 全程没有电话交流或面对面的会议。当所有东西都可以通过 URL 提供信息,不同区域的人群之间的交流和反馈会变得非常简单。

一年后……

整整一年时间过去了,我们很高兴地宣布这次数据迁移是很成功的 —— MySQL 性能和可靠性一直处于我们期望的状态。另外,新的集群还能让我们进一步去升级,提供更好的可靠性和响应时间。我将继续记录这些优化过程。


via: https://github.com/blog/1880-making-mysql-better-at-github

作者:samlambert 译者:bazz2 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

不仅是系统管理员和网络管理员时不时会听到“代理服务器”这个词,我们也经常听到。代理服务器已经成为一种企业常态,而且经常会接触到它。它现在也出现在一些小型的学校或者大型跨国公司的自助餐厅里。Squid(常被视作代理服务的代名词)就是这样一个应用程序,它不但可以被作为代理服务器,其同时也是在该类工具中比较被广泛使用的一种。

本文旨在提高你在遇到关于代理服务器面试点时的一些基本应对能力。

以下为面试问答的内容

1. 什么是代理服务器?代理服务器在计算机网络中有什么用途?

回答 : 代理服务器是指那些作为客户端和资源提供商或服务器之间的中间件的物理机或者应用程序。客户端从代理服务器中寻找文件、页面或者是数据,而且代理服务器能处理客户端与服务器之间所有复杂事务,从而满足客户端的生成的需求。

代理服务器是WWW(万维网)的支柱,它们其中大部分都是Web代理。一台代理服务器能处理客户端与服务器之间的复杂通信事务。此外,它在网络上提供的是匿名信息(LCTT 译注:指浏览者的 IP、浏览器信息等被隐藏),这就意味着你的身份和浏览痕迹都是安全的。代理可以去配置允许哪些网站的客户能看到,哪些网站被屏蔽了。

2. Squid是什么?

回答 : Squid是一个在GNU/GPL协议下发布的既可作为代理服务器,同时也可作为Web缓存守护进程的应用软件。Squid主要是支持像HTTP和FTP那样的协议,但是对其它的协议比如HTTPS,SSL,TLS等同样也能支持。其特点是Web缓存守护进程通过从经常上访问的网站里缓存Web和DNS数据,从而让上网速度更快。Squid支持所有的主流平台,包括Linux,UNIX,微软公司的Windows和苹果公司的Mac。

3. Squid的默认端口是什么?怎么去修改它的操作端口?

回答 : Squid运行时的默认端口是3128。我们可以通过编辑它的配置文件来把它的默认端口修改成未被用户使用的端口,路径是 /etc/squid/squid.conf ,建议如下。

用你的编辑器打开 ‘/etc/squid/squid.conf’ 文件。

# nano /etc/squid/squid.conf

现在把它修改成未被使用的其它端口,并保存退出。

http_port 3128

重新启动Squid代理服务,如下显示。

# service squid restart

4. 你的公司管理层要求你通过Squid代理服务器屏蔽掉一些域名,你怎么做?

回答 : 屏蔽域名是一个在配置文件中实现的功能模块。我们只需要执行一个小的手动配置即可,建议如下。

a. 在 ‘/etc/squid’ 目录下创建一个名为 ‘blacklist’ 的文件。

# touch /etc/squid/blacklist

b. 用nano编辑器打开这个文件。

 # nano /etc/squid/blacklist

c. 以每行一个域名的方式将想要屏蔽的域名写进这个文件里。

.facebook.com
.twitter.com
.gmail.com
.yahoo.com
...

d. 保存退出,然后从 ‘/etc/squid/squid.conf’ 打开Squid配置文件。

# nano /etc/squid/squid.conf

e. 在配置文件中添加如下行。

acl BLACKLIST dstdom_regex -i “/etc/squid/blacklist”
http_access deny blacklist

f. 保存配置文件并退出,重启Squid服务让其生效。

# service squid restart

5. 在Squid中什么是媒体范围限制(Media Range Limitation)和部分下载?

回答 : 媒体范围限制是Squid的一种特殊的功能,它只从服务器中获取所需要的数据而不是整个文件。这个功能很好的实现了用户在各种视频流媒体网站如YouTube和Metacafe看视频时,可以点击视频中的进度条来选择进度,因此整个视频不用全部都加载,除了一些需要的部分。

Squid部分下载功能的特点是很好地实现了类似在Windows更新时能以一个个小数据包的形式下载,并可以暂停,正因为它的这个特点,正在下载文件的Windows机器可以重新继续下载,而不用担心数据会丢失。Squid的媒体范围限制和部分下载功能只有在存储了一个完整文件的副本之后才行。此外,当用户访问另一个页面时,除非Squid进行了特定的配置,部分下载下来的文件会被删除且不留在缓存中。

6. 什么是Squid的反向代理?

回答 : 反向代理是Squid的一个功能,这个功能被用来加快最终用户的上网速度。下面用缩写 ‘RS’ 的表示包含了资源的原服务器,而代理服务器则称作 ‘PS’ 。初次访问时,它会从RS得到其提供的数据,并将其副本按照配置好的时间存储在PS上。这样的话每次从PS上请求的数据就相当于就是从原服务器上获取的。这样就会减轻网络拥堵,减少CPU使用率,降低网络资源的利用率,从而缓解原来实际服务器的负载压力。但是RS统计不了总流量的数据,因为PS分担了部分原服务器的任务。‘X-Forwarded-For HTTP’ 信息能用于记录下通过HTTP代理或负载均衡方式连接到RS的客户端最原始的IP地址。

从技术上说,用单个Squid服务器同时作为正向代理服务器和反向代理服务器是可行的。

7. 由于Squid能作为一个Web缓存守护进程,那缓存可以删除吗?怎么删除?

回答 : 当然!作为一个Web缓存守护进程,Squid能加快网页的访问速度,清除缓存也是非常简单的。

a. 首先停止Squid代理服务,然后从这个 ‘/var/lib/squid/cache’ 目录中删除缓存。

# service squid stop
# rm -rf /var/lib/squid/cache/*<

b. 创建交换分区目录。

# squid -z

8. 你有一台工作中的机器可以访问代理服务器,如果想要限制你的孩子的访问时间,你会怎么去设置那个场景?

把允许访问的时间设置成晚上4点到7点三个小时,跨度为星期一到星期五。

a. 想要限制Web访问时间在星期一到星期五的晚上4点到7点,要先打开Squid的配置文件。

# nano /etc/squid/squid.conf

b. 在配置文件中添加如下行,保存文件并退出。

acl ALLOW_TIME time M T W H F 16:00-19:00
shttp_access allow ALLOW_TIME

c. 重启Squid服务。

# service squid restart

9. Squid存储的数据是什么文件格式?

回答 : Squid存储的数据是UFS文件格式的。UFS是一种老的,使用比较广泛的Squid存储格式

10. Squid的缓存会存储到哪里?

回答 : Squid存储的缓存是位于 ‘/var/spool/squid’ 的特定目录下。

以上就是全部内容了,很快我还会带着其它有趣的内容回到这里。


via: http://www.tecmint.com/squid-interview-questions/

作者:Avishek Kumar 译者:ZTinoZ 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

Hello,我是——邪恶君子!今天呢,给大家分享一下Linux上iSCSI的搭建,通过文字+图像的解说,不管你是小白还是菜鸟,都能够让你掌握搭建iSCSI的精华所在!

废话不多说,看招:

首先呢,给大家说一下本次教程的环境:系统版本:RedHat Enterprise Linux 6.2

在搭建iSCSI前呢,先把SELinux禁用;关闭防火墙并清空所有规则。并配置好yum源(直接挂载本地光盘,yum源指向本地就行)。

开始搭建

首先要安装一个包:scsi-target-utils-1.0.14-4.el6.x86\_64

#yum -y install scsi-target-utils

在这或许会有人抱怨了,邪恶啊,这么长的名字记不住肿么办?不要怕,没事,邪恶教你一招:直接执行命令#yum -y install scsi-target* 也可以,这下简单多了吧。

好了,安装完以后,要启动服务,iSCSI的服务为tgtd,直接启动就行了

#service tgtd start
#chkconfig tgtd on (设为开机启动)

到此,我们安装完毕,简单吧!!!

创建iSCSI

在创建前呢,你要在你的电脑上先分出一个区用来搭建iSCSI存储。邪恶这次是分出一个5G大小的分区来创建iSCSI,给大家附上我的分区图:

大家看到了吧,sda5,大小为5G!

其实,在这里简单的提一下,分区的大小你自己随便定,也可以是一个硬盘,都行!

接下来呢,就是激动人心的时刻,关键来了哦,邪恶所说的精华就是接下来的内容,看招:

执行下面的三条命令:

#tgtadm --lld iscsi --mode target --op new --tid 1 -T iqn.mailtest.com.20140916:disk1
#tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 -b /dev/sda5
#tgtadm --lld iscsi --mode target --op bind --tid 1 -I ALL

给大家简单解释一下命令,建议大家在执行前先执行一下

#tgtadm --help

看一下命令的帮助文档。

第一条命令,只需掌握 --tid后面的参数“1”,这个“1”在这里就是个编号,你也可以设为2,不过建议大家从1开始,习惯嘛!然后就是-T后面的参数,-T后面的参数自己随便写,但记住一点就行,需以iqn开头,然后后面的你想怎么起都行,一般都是"iqn.hostname:diskX",hostname就是你的主机名,X代表编号。

第二条命令,需要记住--tid后面的参数必须要和第一条的一样, --lun后面的参数也是代表编号,和第一条命令的--tid类似,-b后面就跟你要搭建iSCSI的分区就行。

第三条命令,更简单,只需注意--tid后面的参数要和第一条、第二条的一样,其实第二条和第三条都是以第一条的为基准的,然后就是-I后面的参数,这里设置为ALL是代表允许所有的IP都可以访问。你也可以设置为个别的IP,具体的可以参考帮助文档。

执行完以后,可以执行

#tgt-admin -s

查看一下自己创建的iSCSI,这里把我自己搭建效果图给大家附上

从图上可以看到,刚才自己创建的iSCSI Target及编号,也可以看到自己创建的lun和编号,最下面可以显示出用的哪个分区创建的。

到此,搭建完毕,是不是很简单!

这在儿,有个要点需记住,那就是开机后,上面3条命令创建的iSCSI会失效,要想开机后还有,那就把上面的3条命令添加到/etc/rc.d/rc.local里面,看图:

这样,以后在重启或关机后再开机就可以保证创建的iSCSI失效了!

或许到这儿,就会有人问了:“邪恶,你为什么不讲一下理论知识?”。

邪恶回答你的很简单:一讲理论就讲的多了,就需要花很大的文字去讲解,而且邪恶也不敢保证理论讲的是否正确。邪恶在此顺便给大家说一下,邪恶的原则是通过自己的实践和自己的心得和体会,尽量的写的精简点,然后分享给大家,让菜鸟和小白都能快速掌握,至于理论知识,百度上一大堆,都解释的很详细,一看就明白!

客户端测试

接下来,邪恶再给大家讲一下怎么验证自己搭建的iSCSI是否可用,同时也讲一下客户端的操作!看招:

首先,客户端需要先安装iscsi-initiator-utils包,执行命令安装:

#yum -y install iscsi-initiator-utils

如果这两个包的名字也记不住肿么办,没问题,邪恶我再教你一招,直接执行命令:#yum -y install iscsi-init*

安装完毕后,启动相应的服务,并设置为开机启动,命令:

#service iscsi start
#chkconfig iscsi on
#service iscsid start
#chkconfig iscsid on

好了,到此呢,准备工作已准备完毕,各位,接下来就是见证神奇的时刻:

在客户端执行下面两条命令:

#iscsiadm -m discovery -t sendtargets -p 10.30.12.121:3260(效果看下图)

到这一步就可以看出,你服务端创建的iSCSI Target 的编号和名称。这条命令只需记住-p后面跟iSCSI服务的地址就行了,也可以是主机名,都可以!3260是服务的端口号,默认的!

#iscsiadm -m node -T iqn.mailtest.com.20140916:disk1 -p 10.30.12.121:3260 -l(效果看下图)

好了,已经看到successful。成功了!验证和客户端都是这样操作的,两条命令就okay了!

简单吧!这时,你就可以执行#fdisk -l 查看自己的分区了,会多出一个硬盘,效果见图:

看到了吧,我已经用红色的框框给大家标注出来了,是不是很神奇呢?

各位!到此,整个教程就结束了!你是否学会了呢!不管是否掌握了,先给自己鼓个掌吧,辛苦自己可以从头仔细认真的学到尾!谢谢大家的支持,希望可以多多交流!欢迎大家指出有错误的地方,或者写的不好的地方,供改进,促提升!

问题:我想给VMware ESXi上的一台虚拟机分配一个静态的MAC地址。然而当我开始这么做的时候,虚拟机就不能启动了,并且抛出了一个这样一个错误"00:0c:29:1f:4a:ab is not an allowed static Ethernet address. It conflicts with VMware reserved MACs"(00:0c:29:1f:4a:ab不是一个合法的静态以太网地址。它与VMWare的保留MAC地址冲突)。我该如何在VMware ESXi虚拟机上设置静态MAC地址?

当你在VMware ESXi上创建虚拟机时,虚拟机的每个网络接口就被分配了一个动态的NAC地址。如果你想要改变默认的行为并给你的虚拟机分配一个静态MAC地址时就这样做

如你上图所见,VMWare的vSphere的GUI客户端已经有一个为虚拟机分配静态MAC地址的菜单。然而,基于GUI的方法只允许你在00:50:56:xx:xx:xx的范围里选择一个静态MAC地址,这是VMWare保留的MAC地址范围。如果你尝试设置任何超出这个范围的MAC地址,你就会无法启动VM,接着就会看到下面的错误。

那么如果我想要给虚拟机设置任意的MAC地址怎么办?

幸运地,这里有一个对于这个限制的临时方案。方法就是,不使用vSphere GUI客户端编辑。在登录ESXi主机后直接编辑你虚拟机的.vmx文件。

首先关闭你想要分配静态MAC地址的虚拟机。

对你的ESXi主机启用SSH访问,如果你还没这么做的话。接着通过SSH登录ESXi主机。

移到你虚拟机的.vmx文件所在目录。

# cd vmfs/volumes/datastore1/[name-of-vm] 

用文本编辑器打开.vmx文件,接着在加入下面这几行。把MAC地址替换成你自己的MAC地址。

ethernet0.addressType = "static"
ethernet0.checkMACAddress = "false"
ethernet0.address = "00:0c:29:1f:4b:ac"

现在你应该可以使用你定义在.vmx文件中的静态MAC地址启动虚拟机了。


via: http://ask.xmodulo.com/static-mac-address-vmware-esxi-virtual-machine.html

译者:geekpi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

大家好,我是邪恶君子!今天,邪恶就给大家分享一下,使用小小的一个netstat命令,就能让你检测出系统是否处于安全状态!!!

这篇文档,复杂°:简单;难易°:易。坚决让小白都看得懂,学得会,掌握牢,上手快!好,废话不多说,看招:

大家都知道,Linux上的web服务每天都要面临成千上万的连接,这些连接都是要遵循TCP协议的,这都是众所周知的(至于TCP协议,这里就不在过多的介绍,不懂的同学可以自己搜索,友好多)。既然都是TCP协议连接,那就不得不面临一个网路最大的安全问题,DOS攻击及DDOS攻击,这些攻击是没有办法抹除的,因为这是针对TCP协议本身的一个设计缺陷儿造成的。所以,这就要求运维人员,时刻监测系统安全,是否处于被DOS攻击状态。

那么是怎么监测及检测的呢?这就要用到我一开始就要提到的netstat命令。先简单的介绍一下netstat命令的主要作用:可以查看系统当前的连接状态,不管是TCP连接还是udp协议连接,以及每个连接的进程号、是哪个应用程序、连接所用的端口号,这些都可以陈列出来。是不是很强大。

在讲监测检测之前,先给大家在普及一个知识,那就是TCP连接的状态,TCP进行3次握手,其过程有很多状态,不同的连接状态,都有想对应的状态码,看下面列表:

  • LISTEN:侦听来自远方的TCP端口的连接请求
  • SYN-SENT:再发送连接请求后等待匹配的连接请求
  • SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认
  • ESTABLISHED:代表一个打开的连接
  • FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认
  • FIN-WAIT-2:从远程TCP等待连接中断请求
  • CLOSE-WAIT:等待从本地用户发来的连接中断请求
  • CLOSING:等待远程TCP对连接中断的确认
  • LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认
  • TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认
  • CLOSED:没有任何连接状态

大家最好一定要记住这些状态,因为运维人员在监控系统并发连接状态时,监控系统返回的也是这些状态码!

了解完这些后,还要再了解一个Linux系统的脚本中的一个小知识点,那就是“|”管道符,管道符的作用就不多说了,这里就简单提一下,因为下面的例子要用到。

好了,终于可以进入正题了,是不是都有点心急了呢 ?嘿嘿

以下这条命令将会显示出netstat的帮助信息,不懂的以及不太了解这个命令有哪些参数可用的都可以在这个命令的返回信息中看到:

#netstat --help

显示当前所有活动的网络连接:

#netstat -na

显示出所有处于监听状态的应用程序及进程号和端口号:

#netstat -aultnp

如果想对一个单一的进行查询,只需要在命令后面再加上“| grep $”。这里就用到了管道符,以及grep筛选命令,$代表参数,也就是你要查询的那个。

如要显示所有80端口的网络连接:

#netstat -aultnp | grep 80

如果还想对返回的连接列表进行排序,这就要用到sort命令了,命令如下:

#netstat -aultnp | grep :80 | sort

当然,如果还想进行统计的话,就可以再往后面加wc命令。如:

#netstat -aultnp | grep :80 | wc -l

其实,要想监测出系统连接是否安全,要进行多状态的查询,以及要分析,总结,还有就是经验。总的下来,才可以判断出连接是否处于安全状态。

下面就给大家再举一些例子,让大家彻底的明白,及彻底的理解这个命令的用处,使其发挥出最大功能。

#netstat -n -p|grep SYN_REC | wc -l

这个命令可以查找出当前服务器有多少个活动的 SYNC\_REC 连接。正常来说这个值很小,最好小于5。 当有Dos攻击或者邮件炸弹的时候,这个值相当的高。尽管如此,这个值和系统有很大关系,有的服务器值就很高,也是正常现象。

#netstat -n -p | grep SYN_REC | sort -u

列出所有连接过的IP地址。

#netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'

列出所有发送SYN\_REC连接节点的IP地址。

#netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

使用netstat命令计算每个主机连接到本机的连接数。

#netstat -anp |grep 'tcp|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

列出所有连接到本机的UDP或者TCP连接的IP数量。

#netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr

检查 ESTABLISHED 连接并且列出每个IP地址的连接数量。

#netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1

列出所有连接到本机80端口的IP地址和其连接数。80端口一般是用来处理HTTP网页请求。

怎么样,是否能弄懂上面的这些命令及作用?在这儿呢,邪恶负责的说一句话:如果你能把上面的这些都彻底的理解消化了,能举一反三了,那么,恭喜您,您在Linux系统网络检测这一小块已经是一个高手了,不在是菜鸟或者小白了,为自己鼓鼓掌吧!!!

说明一点:命令及参数是死的,但是人是活的,要想发挥出其最大的功能,还需要自己去摸索,自己去理解及配合其他命令一起使用。同时,netstat -an在Windows上也管用哦!

那么,如果真的发现有大量的假连接了,那么也不要慌,要先找出一些“另类的IP地址”,怎么解释呢,因为在进行Dos攻击时,会为造出大量的假IP去连接服务器,进行3次握手,所以,这就要根据经验去找出假IP,然后通过防火墙规则,添加一个规则拒接这个假IP的网段连接。

例如:

#iptables -A INPUT 1 -s $IPADRESS -j DROP/REJECT

注意,你需将$IPADRESS 替换成需要拒绝连接的IP地址。执行完iptables 后呢,要重启一下web服务。

好了,今天的学习呢,到这儿就结束了,至于能掌握多少,这就要因人而异了,但我相信:天道酬勤!!!

最后,如果哪里有不对的地方,希望大家多多交流!!!