<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Ops运维 | Mr`kang Blog｜小豆子]]></title> 
<link>https://www.cnmysql.com/index.php</link> 
<description><![CDATA[关注服务器运维技术、DB优化、Docker虚拟化、自动化运维、工作积累]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[Ops运维 | Mr`kang Blog｜小豆子]]></copyright>
<item>
<link>https://www.cnmysql.com/post/104/</link>
<title><![CDATA[当下流行的分布式文件系统大阅兵 ]]></title> 
<author>kangyang &lt;kangyang315@qq.com&gt;</author>
<category><![CDATA[运维自动化]]></category>
<pubDate>Wed, 03 Sep 2014 03:22:34 +0000</pubDate> 
<guid>https://www.cnmysql.com/post/104/</guid> 
<description>
<![CDATA[ 
	<span style="font-family: 宋体;"><span style="font-size: 12px;"><br/>本文对目前数种分布式文件系统进行简单的介绍。当前比较流行的分布式文件系统包括：Lustre、Hadoop、MogileFS、FreeNAS、FastDFS、NFS、OpenAFS、MooseFS、pNFS、以及GoogleFS。<br/>　　Lustre（<a href="http://www.lustre.org" target="_blank">www.lustre.org</a>）<br/>　　lustre是一个大规模的、安全可靠的，具备高可用性的集群文件系统，它是由SUN公司开发和维护。该项目主要的目的就是开发下一代的集群文件系统，可以支持超过10000个节点，数以PB的数量存储系统。<br/>　　lustre是开放源代码的集群文件系统，采取GPL许可协议，目前在集群计算机里，计算机与磁盘间数据交换的提升无法跟上微处理器和内存增长的速度，从而也拖累了应用程序的性能，一种新兴的集群文件系统软件提高了I/O速度，可能降低企业购买存储设备的成本并改变企业购买存储的方式，集群文件系统已经在大学、实验室和超级计算机研究中心里使用，而且即将进入通用商业计算市场。新的集群文件系统采用了开源的lustre技术，由美国能源部(Department Of Energy）开发，惠普公司(HP）提供商业支持。它显著提高了输入输出（I/O)速度，目前已经在高校、国家实验室和超级计算研究中心产生了一定影响，未来几年中，它很有可能进入普通的商业计算机领域。<br/>　　运行在linux下,开发语言c/c++<br/>　　Hadoop（hadoop.apache.com）<br/>　　hadoop并不仅仅是一个用于存储的分布式文件系统，而是设计用来在由通用计算设备组成的大型集群上执行分布式应用的框架。<br/>　　如下图是hadoop的体系结构：<br/><a href="https://www.cnmysql.com/attachment.php?fid=23" target="_blank"><img src="https://www.cnmysql.com/attachment.php?fid=23" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>授权协议apache,开发语言java，资源耗费有点大。<br/>　　MogileFs（<a href="http://www.danga.com" target="_blank">www.danga.com</a>）<br/>　　Mogile Fs是一个开源的分布式文件系统，主要特征包括<br/>　　1、应用层的组件<br/>　　2、无单点故障<br/>　　3、自动文件复制<br/>　　4、具有比RAID更好的可靠性<br/>　　5、无需RAID nigukefs支持 ，运行在linux下。<br/>　　FreeNAS（<a href="http://www.openqrm.org" target="_blank">www.openqrm.org</a>）<br/>　　FreeNAS是网络附加存储(NAS)服务专用操作系统(FreeBSD的简化版 )。基于m0n0wall防火墙，该系统通过提供磁盘管理及RAID软件，可让用户home将PC转换为NAS服务器，支持FTP/NFS/RSYNC/CIFS/AFP/UNISON/SSH sourceforge.net/pro协议，旨在让人们重新使用旧硬件.<br/>　　FastDFS（code.google.com/p/fastdfs）<br/>　　FastDFS是一个开源的分布式文件系统，它对文件进行管理，功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等，解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务， 如相册网站，视频网站等等。FastDFS服务端有两个角色：跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度的工作，在访问上起负载均衡的作用。存储节点存储文件，完成文件管理的所有功能：<br/>　　存储、同步、和提供存取接口，FastDFS同时对文件的meta data进行管理。所谓文件的meta data就是文件的相关属性，以键值对(key value pair)方式表示，如：width=1024,其中的key为width，value为1024。文件meta data是文件属性列表，可以包含多个键值树。<br/>　　开发语言c/c++，运行在linux系统下。<br/>　　NFS（<a href="http://www.tldp.org/HOWTO/NFS-HOWTO/index.html" target="_blank">www.tldp.org/HOWTO/NFS-HOWTO/index.html</a>）<br/>　　网络文件系统是FreeBSD支持的文件系统中的一种，也被称为NFS。<br/>　　NFS允许一个系统在网络上与它人共享目录和文件。通过使用NFS， 用户和程序可以象访问本地文件一样访问远端系统上的文件。它的好处是：<br/>　　1、本地工作站使用更少的磁盘空间，因为通常的数据可以存放在一台机器上而且可以通过网络访问到。<br/>　　2、用户不必在每个网络上机器里面都有一个home目录。home目录可以被放在NFS服务器上并且在网络上处处可用。<br/>　　3、诸如软驱、CDROM、和ZIP之类的存储设备可以在网络上面被别的机器使用。可以减少整个网络上的可移动介质设备的数量。<br/>　　开发语言c/c++,可跨平台运行。<br/>　　OpenAFS（<a href="http://www.openafs.org" target="_blank">www.openafs.org</a>）<br/>　　OpenAFS是一套开放源代码的分布式文件系统，允许系统之间通过局域网和广域网来分享档案和资源。OpenAFS是围绕一组叫做cell的文件服务器组织的，每个服务器的标识通常是隐藏在文件系统中，从AFS客户机登陆的用户将分辨不出他们在那个服务器上运行，因为从用户的角度上看，他们想在有识别的Unix文件系统语义的单个系统上运行。<br/>　　文件系统内容通常都是跨cell复制，一便一个硬盘的失效不会损害OpenAFS客户机上的运行。OpenAFS需要高达1GB的大容量客户机缓存，以允许访问经常使用的文件。它是一个十分安全的基于kerbero的系统，它使用访问控制列表(ACL）以便可以进行细粒度的访问，这不是基于通常的Linux和Unix安全模型。开发协议IBM Public，运行在linux下。<br/>　　MooseFs（derf.homelinux.org）<br/>　　Moose File System是一个具备容错功能的网路分布式文件统，它将数据分布在网络中的不同服务器上，MooseFs通过FUSE使之看起来就 是一个Unix的文件系统。但有一点问题，它还是不能解决单点故障的问题。开发语言perl,可跨平台操作。<br/>　　pNFS（<a href="http://www.pnfs.com" target="_blank">www.pnfs.com</a>）<br/>　　网络文件系统(Network FileSystem,NFS)是大多数局域网(LAN）的重要的组成部分。但NFS不适用于高性能计算中苛刻的输入书橱密集型程序，至少以前是这样。NFS标准的罪行修改纳入了Parallel NFS(pNFS），它是文件共享的并行实现，将传输速率提高了几个数量级。<br/><a href="https://www.cnmysql.com/attachment.php?fid=24" target="_blank"><img src="https://www.cnmysql.com/attachment.php?fid=24" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>开发语言c/c++,运行在linu下。<br/>　　googleFs<br/>　　据说是一个比较不错的一个可扩展分布式文件系统，用于大型的，分布式的，对大量数据进行访问的应用。它运行于廉价的普通硬件上，但可以提供容错功能，它可以给大量的用户提供性能较高的服务。google自己开发的。<br/><br/></span></span><br/>Tags - <a href="https://www.cnmysql.com/tags/hadoop/" rel="tag">hadoop</a> , <a href="https://www.cnmysql.com/tags/mogilefs/" rel="tag">mogilefs</a> , <a href="https://www.cnmysql.com/tags/freenas/" rel="tag">freenas</a> , <a href="https://www.cnmysql.com/tags/fastdfs/" rel="tag">fastdfs</a> , <a href="https://www.cnmysql.com/tags/nfs/" rel="tag">nfs</a>
]]>
</description>
</item><item>
<link>https://www.cnmysql.com/post/74/</link>
<title><![CDATA[使用PSSH批量SSH操作Linux服务器]]></title> 
<author>kangyang &lt;kangyang315@qq.com&gt;</author>
<category><![CDATA[运维自动化]]></category>
<pubDate>Wed, 06 Aug 2014 06:43:18 +0000</pubDate> 
<guid>https://www.cnmysql.com/post/74/</guid> 
<description>
<![CDATA[ 
	<span style="color: #4B0082;"><span style="font-size: 12px;"><span style="font-family: 宋体;">服务器多了，有一个烦恼就是如何批量快速操作一堆服务器。这里我推荐一下经常使用利器pssh。这个工具给我的工作带来了莫大的帮助。<br/>简介<br/>pssh是一款开源的软件，使用python实现。用于批量ssh操作大批量机器。<br/>pssh的项目地址 <a href="https://code.google.com/p/parallel-ssh/" target="_blank">https://code.google.com/p/parallel-ssh/</a><br/><br/>安装<br/>在pssh的项目主页找到相应的版本，下载到我们的服务器上，解压后执行python setup.py安装。下面以pssh-2.3的安装为例<br/><div class="code">wget &#039;https://parallel-ssh.googlecode.com/files/pssh-2.3.tar.gz&#039;<br/>tar -xzvf pssh-2.3.tar.gz<br/>cd pssh-2.3<br/>python setup.py install</div><br/>常用的方法<br/>pssh使用帮助<br/><div class="code">pssh --help</div><br/>pssh查看所有服务器的uptime;-h list 指定了执行命令的机器列表；-A表示提示输入密码（如果机器都是ssh key打通的则无需加-A）<br/><div class="code">pssh -i -A -h list &#039;uptime&#039;</div><br/>使用pscp向一堆机器分发文件<br/><div class="code">pscp -h list&nbsp;&nbsp;localfile&nbsp;&nbsp; remote_dir</div><br/>从一堆机器中拷贝文件到中心机器<br/><div class="code">pslurp -h list /etc/hosts local_dir</div><br/>批量上传<br/>批量上传本地文件 linux-3.14.3.tar.xz 到服务器上的 /tmp 目录：<br/><div class="code">$ pscp -l root -A -h grids linux-3.14.3.tar.xz /tmp/<br/>Warning: do not enter your password if anyone else has superuser<br/>privileges or access to your account.<br/>Password:<br/>&#91;1&#93; 05:56:16 &#91;SUCCESS&#93; grid01<br/>&#91;2&#93; 05:56:16 &#91;SUCCESS&#93; grid03<br/>&#91;3&#93; 05:57:04 &#91;SUCCESS&#93; grid05<br/>&#91;4&#93; 05:57:04 &#91;SUCCESS&#93; grid04<br/>&#91;5&#93; 05:57:05 &#91;SUCCESS&#93; grid02</div><br/>批量下载<br/>批量下载服务器上的某文件到本地，不用担心重名问题，因为 pssh 已经建立了 grid01, grid02, …, grid05 目录来存放下载的文件：<br/><div class="code">$ pslurp -l root -h grids -A /tmp/linux-3.14.3.tar.xz .<br/>Warning: do not enter your password if anyone else has superuser<br/>privileges or access to your account.<br/>Password:<br/>&#91;1&#93; 06:06:01 &#91;SUCCESS&#93; grid01<br/>&#91;2&#93; 06:06:01 &#91;SUCCESS&#93; grid03<br/>&#91;3&#93; 06:06:06 &#91;SUCCESS&#93; grid04<br/>&#91;4&#93; 06:06:06 &#91;SUCCESS&#93; grid02<br/>&#91;5&#93; 06:06:06 &#91;SUCCESS&#93; grid05<br/><br/>$ ls<br/>grid01&nbsp;&nbsp;grid02&nbsp;&nbsp;grid03&nbsp;&nbsp;grid04&nbsp;&nbsp;grid05&nbsp;&nbsp;grids&nbsp;&nbsp;linux-3.14.3.tar.xz&nbsp;&nbsp;parallel-ssh</div><br/>批量同步<br/>有时候我们需要保持开发机上（某目录里）的数据和服务器上的数据一致：<br/><div class="code">$ prsync -l root -h grids -A -r develop/ /tmp/production/<br/>Warning: do not enter your password if anyone else has superuser<br/>privileges or access to your account.<br/>Password:<br/>&#91;1&#93; 06:12:52 &#91;SUCCESS&#93; grid05<br/>&#91;2&#93; 06:12:52 &#91;SUCCESS&#93; grid01<br/>&#91;3&#93; 06:12:52 &#91;SUCCESS&#93; grid04<br/>&#91;4&#93; 06:12:52 &#91;SUCCESS&#93; grid02<br/>&#91;5&#93; 06:12:52 &#91;SUCCESS&#93; grid03</div><br/><br/>常见问题<br/>如果你遇到这样的错误：<br/>IOError: [Errno 4] Interrupted system call<br/>建议升级python版本到python2.7</span></span></span>
]]>
</description>
</item><item>
<link>https://www.cnmysql.com/post/73/</link>
<title><![CDATA[系统自动化配置和管理工具 SaltStack]]></title> 
<author>kangyang &lt;kangyang315@qq.com&gt;</author>
<category><![CDATA[运维自动化]]></category>
<pubDate>Wed, 06 Aug 2014 06:38:23 +0000</pubDate> 
<guid>https://www.cnmysql.com/post/73/</guid> 
<description>
<![CDATA[ 
	<span style="color: #800080;"><span style="font-size: 12px;"><span style="font-family: 宋体;">我们的服务器由 Puppet 配置管理工具来管理，服务器上线后由 puppet 完成初始化和配置等一系列工作（比如，静态 IP 配置，DNS 设置，NFS/SAN 挂载，LDAP/Kerberos 登录，安全加固配置，内核参数优化，防火墙规则配置等等），等初始化完成后开始运行，运行一段时间后有一些需要自动和手动操作的任务（比如升级、重启、备份等），这时候我们使用 Fabric 来批量执行这些临时任务。<br/>所以从这里可以看到 Puppet 和 Fabric 其实是两个不同性质的工具，看下面的归类可能会更清楚一些。Puppet 和 Fabric 两个的工作其实可以由一个工具 SaltStack（或 AnsibleWorks）完成，减少一个工具的使用会减轻一点负担（学习工具的人力成本、安装和配置工具的时间成本等等）。<br/>操作系统和软件的安装、配置、初始化等；<br/>（Puppet, Chef, CFEngine, AnsibleWorks, SaltStack, …）<br/>自动执行任务，比如定期备份、清除日志等；<br/>（Fabric, AnsibleWorks, SaltStack, …）<br/>手动执行任务，比如部署应用、升级、重启、检查和校验文件系统、增加用户等。<br/>（Fabric, Rake, Func, Rundeck, AnsibleWorks, SaltStack, …）<br/>SaltStack 采用 zeromq 消息队列进行通信，和 Puppet/Chef 比起来，SaltStack 速度快得多。还有一点我们喜欢 SaltStack 的地方是它是 Python 写的，比 Puppet/Chef 这些 Ruby 工具更接近我们的能力圈。<br/>安装主控服务器（salt master）<br/>和大多数类似工具一样，SaltStack 需要在一台机器（主控）上安装服务器端软件（SaltStack 称之为 salt master），在多台机器（受控）上安装客户端软件（SaltStack 称之为 salt minion）。在主控机器上给下属（受控）发命令，在受控机器上接受和执行上级（主控）的命令。<br/>在 Ubuntu 上安装 salt master：<br/><div class="code">$ sudo add-apt-repository ppa:saltstack/salt<br/>$ sudo apt-get update<br/>$ sudo apt-get install salt-master</div><br/>在 CentOS 6.x 上安装 salt master：<br/><div class="code"># rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/i386/epel-release-6-8.noarch.rpm<br/># yum update<br/># yum install salt-master</div><br/>安装受控客户端（salt minion）<br/>在 Ubuntu 上安装 salt minion：<br/><div class="code">$ sudo add-apt-repository ppa:saltstack/salt<br/>$ sudo apt-get update<br/>$ sudo apt-get install salt-minion</div><br/>在 CentOS 6.x 上安装 salt minion：<br/><div class="code"># rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/i386/epel-release-6-8.noarch.rpm<br/># yum update<br/># yum install salt-minion</div><br/>安装完 salt minion 后记得修改配置文件，让 salt minion 指向 salt master 服务器地址：<br/><div class="code">$ sudo vi /etc/salt/minion<br/>...<br/># Set the location of the salt master server, if the master server cannot be<br/># resolved, then the minion will fail to start.<br/>master: saltmaster.vpsee.com<br/>...<br/> <br/>$ sudo restart salt-minion</div><br/>在 master 上执行 salt-key list 就会看到有个 minion1.vpsee.com 请求加入受控，执行 -a 接受请求后，主控和受控之间的信任关系就建立起来了，主控就可以任意 “摆布” 受控了：<br/><div class="code"># salt-key list<br/>Accepted Keys:<br/>Unaccepted Keys:<br/>minion1.vpsee.com<br/>Rejected Keys:<br/> <br/># salt-key -a minion1.vpsee.com<br/>The following keys are going to be accepted:<br/>Unaccepted Keys:<br/>minion1.vpsee.com<br/>Proceed? &#91;n/Y&#93;</div><br/>执行命令的例子<br/>在主控机器上执行一个命令，让所有受控机器执行 hostname 命令：<br/><div class="code"># salt &#039;*&#039; cmd.run &quot;hostname&quot;<br/>minion1.vpsee.com:<br/>&nbsp;&nbsp;&nbsp;&nbsp;minion1.vpsee.com</div><br/>在主控机器上执行一个命令，让所有受控机器上执行内建 test.ping 命令：<br/><div class="code"># salt &#039;*&#039; test.ping<br/>minion1.vpsee.com:<br/>&nbsp;&nbsp;&nbsp;&nbsp;True</div><br/>还有一些内建命令可以尝试：<br/><div class="code"># salt &#039;*&#039; disk.usage<br/># salt &#039;*&#039; network.interfaces</div><br/>执行状态的例子<br/>开头的时候我们说了 SaltStack = Fabric + Puppet，上面 “执行命令的例子” 演示了 Fabric 类似的功能，这里要演示的是 Puppet 类似的功能，在主控上定义好系统配置应该有的状态，然后受控自动完成相应的操作和配置。<br/>首先确定状态定义的文件应该放在什么地方，以下操作都在主控（salt master）上执行。检查 /etc/salt/master 文件的 file_roots 条目，默认是在 /srv/salt 下，如果没有这个目录还需要手动创建一个：<br/><div class="code"># vi /etc/salt/master<br/>...<br/>#file_roots:<br/>#&nbsp;&nbsp;base:<br/>#&nbsp;&nbsp;&nbsp;&nbsp;- /srv/salt<br/>...<br/> <br/># mkdir /srv/salt</div><br/>比如我们想在所有受控机器上安装 vim 软件包，并使用自己定义的 vimrc 文件：<br/><div class="code"># vi /srv/salt/vim.sls<br/>vim:<br/>&nbsp;&nbsp;pkg.installed<br/> <br/>/etc/vimrc:<br/>&nbsp;&nbsp;file.managed:<br/>&nbsp;&nbsp;&nbsp;&nbsp;- source: salt://vimrc<br/>&nbsp;&nbsp;&nbsp;&nbsp;- mode: 644<br/>&nbsp;&nbsp;&nbsp;&nbsp;- user: root<br/>&nbsp;&nbsp;&nbsp;&nbsp;- group: root<br/> <br/># vi /srv/salt/vimrc<br/>syntax enable<br/>set textwidth=79<br/>set shiftwidth=4<br/>set tabstop=4<br/>set expandtab<br/>set softtabstop=4<br/>set shiftround<br/>set fileencodings=utf-8<br/>set encoding=utf8<br/>set tenc=utf8</div><br/>强制执行这个状态：<br/><div class="code"># salt &#039;*&#039; state.sls vim</div><br/>再来一个例子，参考 “安装和使用系统监控工具 Glances” 一文，我们想在所有受控机器上安装 Glances，如何实现呢？<br/><div class="code"># vi /srv/salt/glances.sls<br/>python-pip:<br/>&nbsp;&nbsp;pkg.installed<br/> <br/>build-essential:<br/>&nbsp;&nbsp;pkg.installed<br/> <br/>python-dev:<br/>&nbsp;&nbsp;pkg.installed<br/> <br/>glances:<br/>&nbsp;&nbsp;pip.installed:<br/>&nbsp;&nbsp;&nbsp;&nbsp;- require:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- pkg: python-pip</div><br/>强制执行这个状态：<br/><div class="code"># salt &#039;*&#039; state.sls glances<br/>...<br/>minion1.vpsee.com:<br/>----------<br/>&nbsp;&nbsp;&nbsp;&nbsp;State: - pip<br/>&nbsp;&nbsp;&nbsp;&nbsp;Name:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glances<br/>&nbsp;&nbsp;&nbsp;&nbsp;Function:&nbsp;&nbsp;installed<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result:&nbsp;&nbsp;&nbsp;&nbsp;True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Comment:&nbsp;&nbsp; Package was successfully installed<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Changes:&nbsp;&nbsp; Glances==1.7.1: Installed<br/>...</div></span></span></span>
]]>
</description>
</item>
</channel>
</rss>