存档

‘Linux云计算/云主机/虚拟化技术/系统架构’ 分类的存档

成功实施DevOps的七个有力工具

2017年1月23日 评论已被关闭

成功实施DevOps的七个有力工具
http://www.toutiao.com/a6371156850456559873/
现如今,每个软件企业都在谈论DevOps,他们希望从DevOps中获得好处。DevOps本身不是开发工具,而是开发文化的一次革新,为了能够成功地实施DevOps,需要借助一些工具。Pavan Belagatti列出了7个强有力的工具可以帮助企业成功地实施DevOps。
1. Docker
Docker是容器市场的领头羊。随着越来越多的软件企业采用了微服务架构,容器化也成为一个大趋势。在接下来的几年,Docker会变得越来越流行。我们已经在生产环境使用Docker部署了很多服务。Docker简化了配置管理,提升了可操控性,并让横向扩展变得简单。Docker还能让容器在不同的位置自由地移动。
2. Git(GitHub)
Git是一个免费的开源分布式版本控制系统,不管是小型应用还是大型应,它都能应付自如。Git创建于10年前,因为当时的Linux社区需要这么一个可以支持分布式系统的SCM(Source Control Management)软件。这个平台有助于开发者们在上面进行协作。它的那些主要特性,比如代码仓库、代码拉取等等,对开发人员来说很有吸引力。与GitHub的集成十分容易,几乎任何系统都可以连接到GitHub上,没有什么特殊限制。GitHub还可以作为一个网络社交平台,你可以在上面放置你的个人信息和项目相关的数据。GitHub优于其它SCM工具的地方在于,它支持本地分支、过度区域和多工作流。
3. AWS
AWS为企业组织提供了灵活的服务,帮助企业高效地交付软件产品。相比敏捷,DevOps能够更快地交付产品,为了做到这一点,AWS为各个公司提供了强大的云计算服务。这些服务包括计算、存储、网络、数据库、数据分析、应用服务、部署、管理、移动、开发者工具以及IoT工具。
4.JIRA
JIRA是来自Altassian公司的一款很受欢迎的敏捷开发工具,它提供了众多功能,比如缺陷跟踪、问题跟踪,并在某种程度上为企业提供了项目管理功能。它还支持Scrum、看板、敏捷报告、组合计划、插件、移动应用,并提供了一组健壮的API。
5. Ansible
可以使用Ansible为DevOps打下牢固的根基。Ansible是一个简单但却十分强大的配置管理服务器,它帮助团队横向扩展IT自动化规模,管理复杂的部署,并提高生产力。它为团队乃至整个企业带来自动化。很多成功的公司都在使用Ansible来促进IT自动化,而且一旦用了Ansible就不会再考虑其它解决方案了。企业之所以喜欢Ansible,是因为它提供了一种完全不可变的服务器架构。不可变的服务器架构可以保证在添加、销毁或替换服务器时不会对服务造成任何影响。
6. Slack
Slack是一个集成工具,任何想实践敏捷和DevOps的组织都可以使用它。它容易监控,还支持通知机制,是一个简单且强大的工具。Slack通过创建通信通道来自动化执行常见的任务,并用它来分发实时信息,缩短团队间的反馈延迟,加快团队的行动,提升团队的生产力。
7. Shippable
Shippable可以帮助软件企业加快创新进程。它是一个流水线式的持续部署平台,一般被作为托管服务或企业服务器来帮助软件企业走向现代化。它让编码、打包、部署、运行Docker容器变得更容易。Shippable通过它的CI和CD平台来支持自动化。它在不破坏安全性的前提下使用顺畅的部署来自动化执行那些重复的、机械化的任务。

试用阿里云邮件推送服务

2016年5月25日 评论已被关闭

试用阿里云邮件推送服务

 http://www.cnblogs.com/dudu/p/5099621.html

最近有一个程序的邮件通知功能出问题了。自己搭建邮件服务器虽然不难,但是可靠性很难保证,邮件发送功能的服务化是趋势,看到阿里云正在公测邮件推送服务,正好借遇到邮件发送问题的机会试用一下,看能否解决我们的实际问题。

首先在阿里云邮件推送控制台添加域名,然后在自己的dns服务器中添加如下的解析(根据控制台中的“配置”):

  • 一个主机名为aliyundm的TXT记录,用于验证域名所有权
  • 一个主机名为空、值为v=spf1 include:spf1.dm.aliyun.com -all的TXT记录,用于防止被当作垃圾邮件
  • 一个MX记录

在mac上可以通过nslookup -query=TXT 域名nslookup -query=MX 域名命令查看DNS设置是否生效。

接着在阿里云控制台验证一下域名,验证成功之后,添加一下发信地址(发件地址),并设置一下SMTP密码。

然后通过下面的C#代码使用阿里云邮件推送服务的SMTP就可以发送邮件了。

var mailMsg = new MailMessage();
mailMsg.From = new MailAddress("控制台创建的发信地址", "显示名称");
mailMsg.To.Add("收件人邮箱");
mailMsg.Subject = "Hello aliyun dm";
mailMsg.Body = "Send from aliyun dm";
mailMsg.IsBodyHtml = true;
var smtp = new SmtpClient("smtp.dm.aliyun.com", 25);
smtp.Credentials = new NetworkCredential("控制台创建的发信地址", "SMTP密码");
smtp.Send(mailMsg);

很轻松地解决了邮件发送问题。

DC/OS初体验

2016年5月17日 评论已被关闭

DC/OS初体验

http://dockone.io/article/1238

安装方式官方文档写的很清楚,我就照抄装了一下。
现在本地平台只支持centos和coreos平台,其他平台不支持,安装最好使用干净的系统,我第一次使用我原有的mesos+marathon集群安装失败。
初始化节点必须独立不能安装在master和node上面,因为安装脚本中会冲抵docker服务,安装程序也是使用docker启动的会导致安装失败。
本次安装三个节点(最少三个节点):
172.16.1.70 初始化节点
172.16.1.71 dc/os master
172.16.1.72 dc/os slavedcos初始化节点准备工作
master和node也可以这样安装,脚本中也有同样的操作,现在安装了后续就会快很多,也能避免错误:
升级内核,修改启动参数添加 -s overlay
yum upgrade -y
sudo systemctl stop firewalld && sudo systemctl disable firewalld
yum install -y docker-engine && sudo systemctl start docker && sudo systemctl enable docker
docker pull nginx(dcos安装节点)
ssh-copy-id -i 172.16.1.71 (添加无密码登录,这里用户不必须是root,安装脚本中都加的油sudo命令)

master和node安装的服务
yum install -y tar xz unzip curl ipset
sudo sed -i s/SELINUX=enforcing/SELINUX=permissive/g /etc/selinux/config &&
sudo groupadd nogroup &&
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1 &&
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1 &&
sudo reboot

在初始化节点的操作
升级内核,修改启动参数添加 -s overlay
yum upgrade -y
sudo systemctl stop firewalld && sudo systemctl disable firewalld
yum install -y docker-engine && sudo systemctl start docker && sudo systemctl enable docker
docker pull nginx(dcos安装节点)
ssh-copy-id -i 172.16.1.7x (添加无密码登录,这里用户不必须是root,安装脚本中都加的油sudo命令)
curl -O https://downloads.dcos.io/dcos … ig.sh 下载安装脚本
sudo bash dcos_generate_config.sh –web -v启动安装程序

安装界面配置
访问安装节点的9000端口
http://172.16.1.71:9000
Master Private IP List :安装节点的列表以逗号分割
Agent Private IP List:node节点列表
Master Public IP:公共IP,有代理写代理,没代理写master的地址
SSH Username :用户名
SSH Listening Port :端口
SSH Key:秘钥
Upstream DNS Servers:使用的dns
IP Detect Script:ip获取脚本,我这里写的是:
ip addr s | grep inet | grep 172.16.1 | awk -F’ ‘ ‘{print $2}’ | awk -F’/’ ‘{print $1}’,
官网的方式是:

!/usr/bin/env bash

set -o nounset -o errexit
export PATH=/usr/sbin:/usr/bin:$PATH
echo $(ip addr show eth0 | grep -Eo ‘[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}’ | head -1)
具体几种方式以及配置文件的介绍在这里查看:https://dcos.io/docs/1.7/admin … /cli/
如果安装失败,删除 /opt/mesosphere 和/var/lib/zookeeper
然后一直下一步就行了
最终访问你的master

dcos-gui-login.png

登录界面
支持谷歌、github、微软、账号登录(这里不得不吐槽,我装个本地服务还要用公网认证,或许是我太菜有其他方法),多试几次一般就能登上。
然后我们就见到了高逼格的界面

123.png

添加用户就不用说了

安装dcos-cli
pip install virtualenv
mkdir dcos && cd dcos
curl -O https://downloads.dcos.io/dcos-cli/install.sh
bash install.sh . http://172.16.1.71
source /root/dcos/bin/env-setup
dcos help
dcos login (这里会返回一个地址在浏览器访问生成一个token,把token复制进来就OK)

然后就可以装逼了:
在marathon上部署服务
dcos marathon app add https://dcos.io/docs/1.7/usage/nginx.json 启动一个nginx
dcos package describe –config marathon
dcos package install –options=marathon-config.json marathon

安装chronos组件
dcos package install chronos

webui-universe-install.png

dcos package list可以查看
dcos package search “big data” 查到大数据相关
dcos package repo list 镜像列表
dcos package repo add your-repo https://yourcompany/archive/stuff.zip 添加
dcos package repo remove your-repo 删除

卸载DC/OS
bash dcos_generate_config.sh –uninstall

具体的可以去官网查看。

DCOS到底是啥?看完这篇你就懂了~

2016年5月17日 评论已被关闭

DCOS到底是啥?看完这篇你就懂了~

http://www.dostor.com/article/121738083.html

[导读]故事还得从最近很火的浙江移动说起。

\
故事还得从最近很火的浙江移动说起。最近,该运营商凭借一条“DCOS发力双11”的新闻成功火了一把,主要是讲他们搭建了一套基于开源Mesos + Doker技术的DCOS(数据中心操作系统),而且很魄力地将一个服务于上千万用户的重要生产系统迁移其上,同时后端搭配天玑数据 PBData数据库云平台的强劲支撑,最终完美度过了今年 “双11”秒杀的高峰压力。一时间“DCOS”这个词迅速引发业内围观。“它到底是何方神圣?”“为何功能如此强大?”如果你也对它感到好奇,就请毫不犹豫地往下看吧!  1 “嗨!DCOS,你从哪里来?”

在回答这个问题前,不妨先回顾一下国际先进互联网公司数据中心资源管理系统的发展史。早在十多年前,Google就开始使用第一代集群管理Borg技术管理数据中心。随后Twitter从Google的Borg系统中得到启发,开发了一个类似的资源管理系统帮助他们摆脱可怕的“失败之鲸”。2009年加州大学伯克利分校AMPLab首先开发出Apache Mesos,这是一款开源集群管理软件,其核心研发成员Benjamin Hindman随后将其引入Twitter,于是Twitter、Facebook、苹果等大型IT企业开始陆续打造各自特色的基于Mesos的数据中心管理方案。

2012年,围绕Mesos开展商业活动的初创公司Mesosphere诞生,而Benjamin Hindman也以Mesosphere首席架构师的身份投身其中。 正是该公司提出了基于Mesos的DCOS(数据中心操作系统),希望企业能像使用一台计算机一样使用整个数据中心。

2 认识DCOS,从Apache Mesos入手

为了更好地理解DCOS,最好先了解一些Apache Mesos的背景知识。 Mesos适合作为数据中心哪一层的抽象?

IaaS层抽象的是机器, PaaS则更多考虑部署、管理应用/服务。在交互方面,PaaS可能是和开发者直接交互,而Mesos则是以API的形式和软件程序交互。

换句话说,你可以基于Mesos之上构建一个PaaS系统(比如Marathon),同时你还可以在一个IaaS上(比如Openstack)运行Mesos。因此,当Mesos运行在一个组合系统之上,就能直接跨越底层组件去管理和计划上层工作负载。 不过Mesos现在还需要与其它分布式系统配合使用。目前已有不少分布式系统直接构建于Mesos之上,包括Apache Spark,Apache Aurora,Airbnb的Chronos以及Mesosphere的Marathon等。此外还有多个流行系统与Mesos相连并运行于其上,如Apache Hadoop,Apache Storm,Google的Kubernetes等。

Mesos亮点一:两级调度机制 Mesos以Framework的形式,提供了两级调度机制,将任务的调度和执行分离。面对各种类型的任务,在调度阶段,由Framework的 Scheduler(调度器)以资源邀约的形式向Mesos Master申请资源;在执行阶段,由Framework的Executor(执行器)执行任务。

(图片来自网络)

如图所示,Mesos实现了“两级调度机制”,它可以管理多种类型的应用程序(图中只展示了Hadoop和MPI两种类型)。

深入学习:Mesos“两级调度机制”Mesos Master协调全部的Mesos Slave,并确定每个节点的可用资源,聚合计算跨节点的所有可用资源的报告,然后向注册到Master的Framework(作为Master的客户端)发出资源邀约。 Framework根据应用程序的需求,选择接受或拒绝来自Master的资源邀约。一旦接受邀约,Master即协调Framework和Slave,调度参与节点上的任务,并在容器中执行,使得多种类型的任务可在同一个节点上同时运行。

Mesos亮点二:围绕Framework建设的生态系统 在Apache Mesos的术语中,使用Mesos API在集群中调度任务的Mesos应用程序称为Framework(框架)。 Mesos另一个显著亮点就是围绕Framework建设的生态系统了。一旦将任务调度委托给Framework 应用程序,以及采用插件架构,就能直接打造Mesos问鼎数据中心资源管理的生态系统。因为每接入一种新的Framework ,Master无需为此编码,Slave模块可以复用,使得在Mesos所支持的宽泛领域中,业务迅速增长。而开发者就可以专注于他们的应用和Framework的选择。 下图为不断增长的Mesos Framework列表:

所以,Apache Mesos是________? 可以说,Apache Mesos是为构建和运行其他分布式系统提供服务的分布式系统。它将CPU 、内存、存储介质以及其它计算机资源从物理机或者虚拟机中抽象出来,构建支持容错和弹性的分布式系统,并提供高效的运行能力。Mesos使用与Linux 内核相同的系统构建原则,只是它们处在不同的抽象层次上。Mesos内核运行在每台机器上,通过应用程序Framework ,提供跨整个数据中心和云环境进行资源管理和调度的API。

3 基于Mesos的DCOS其实是Mesos衍生的生态系统之一

下图是基于Mesos衍生的生态圈。值得一提的是,像Twitter、Airbnb、苹果这样的大公司几乎都是自己搭建基于Mesos的基础设施。但开源的Mesos是一项非常尖端的技术,通过开源工具手工装配,并将Mesos用于生产环境是非常高难度的。这也是Mesosphere DCOS的价值所在。Mesosphere推出的DCOS,具备和Twitter、苹果公司同等的能力和自动化效果。

下面介绍三种基于Mesos衍生的生态系统: Mesosphere DCOS 从Mesosphere官网了解到,Mesosphere DCOS是以 Mesos为“核心”,与其周边服务及功能组件所组成的一个生态系统。它跨越数据中心或云环境中的所有主机,将所有主机的资源放入一个资源池,使所有主机的行为整体上像一个大计算机。 Mesosphere DCOS内部架构图

由图可见,Mesosphere DCOS除了内核Mesos,还有两个关键组件Marathon和Chronos。其中,Marathon(名分布式的init)是一个用于启动长时间运行应用程序和服务的框架,Chronos(又名分布式的cron)是一个在Mesos上运行和管理计划任务的框架。此外,Mesosphere DCOS还有Mesos-DNS这样的插件模块,它类似一个CLI,一个GUI又或者是提供你想运行的所有的包的仓库等工具。 Mesosphere DCOS 可以运行在任意的现代Linux环境,公有或私有云,虚拟机甚至是裸机环境,当前支持的平台有亚马逊AWS,谷歌GCE,微软Azure,Openstack等等。据Mesosphere官网显示,Mesosphere DCOS在其公有仓库上已提供了40多种服务组件,比如Hadoop,Spark,Cassandra, Jenkins, Kafka, MemSQL等等。 浙江移动与天玑联合研发的DCOS 下图为该DCOS内部架构示意

由图可见,“核心”Mesos负责集群中所有节点资源的动态调度与管理。其上还包括DCOS管控平台,容器应用框架等重要功能组件。该运营商表示,上述DCOS平台不仅具备灵活弹性的伸缩能力,为系统提供高效的平行扩展来应对突发的业务高峰,而且Mesos与Docker的结合极大简化业务运维复杂度,实现自动化部署与应用程序升级,Mesos还可为资源管理提供高容错性,自动辨别服务器、机架或网络出现的故障等。

苹果公司基于Mesos重建的Siri后端服务 在MesosCon 2015上,苹果公司分享了在生产环境中使用Mesos的经验。原来苹果用了近一年时间从原有的基于VM的环境迁移到基于Mesos的环境。他们使用Apache Mesos重建了个人助理软件Siri的后端服务,并创建了一个名为J.A.R.V.I.S.而且类似PaaS的专有调度Framework,由此,开发者可以部署可伸缩和高可用的Siri服务。据说其Mesos集群规模保守估计有10,000个节点,支持Siri应用程序的后台系统包括约100种不同类型的服务,应用程序的数据则存储在Hadoop分布式文件系统(HDFS)中。从基础设施的角度来看,使用Mesos 有助于使Siri具备可伸缩性和可用性,并且还改善了iOS 应用程序自身的延迟。

结束语

此刻,你是否已经对Mesos和DCOS有了新认识呢?其实近年来,随着云计算的快速普及,Docker为代表的容器技术如火如荼,企业用户越来越关注基于云计算的下一代IT架构变革,而软件定义数据中心(SDDC)的理念也逐渐被接收。Mesos技术正是在这样的大环境下应运而生,有了基于Mesos的数据中心操作系统,企业可以方便地对数据中心资源进行统一管理,这无疑是IT架构质的飞跃。相信不远的未来,以Mesos为代表的一系列SDDC技术将成为业内的新热点。

雷击引发青云服务中断故障始末

2016年5月17日 评论已被关闭

雷击引发青云服务中断故障始末

http://www.infoq.com/cn/news/2015/06/QingCloud-IDC

2015年6月6日下午,因服务商“睿江科技”机房遭遇雷暴天气引发电力故障,青云广东1区全部硬件设备意外关机重启,造成青云官网及控制台短时无法访问、部署于GD1的用户业务暂时不可用。 与此同时,另一家云服务商LeanCloud也发生了长达4小时的服务中断情况。

事后青云通过官方微博发布了事故报告,除了审视自身需要改进的地方,对IDC防雷能力也提出了疑问。LeanCloud通过官方微博官方报告也对自身事故原因进行了说明。

笔者对云服务故障上一次的记忆还停留在《公有云故障案例分析——Microsoft Azure的飞来人祸》和微软《Azure的官方博客的说明》。针对此次事故,一位IDC的从业老兵认为:

云计算出问题一般都是两方面,一个是数据中心稳定否,一个是云平台自身系统稳定否。

在选择第三方数据中心方面,一般云服务商会在全国选定几个区域,每个区域选两家以上的IDC,中间用裸光打通。当然,这是比较理想的状态,其成本较高。

那么,能否用自建数据中心的方式来解决稳定性的问题呢?该老兵的回答是:

目前第三方云服务商还没有实力自建IDC。例如一个T3级别1200个机柜的数据中心,投入超过2亿并且需要1年以上的建设周期,一个柜子的运营成本每年要至少10万元人民币。因此,国内第三方云服务商目前以租赁IDC的服务为主。而选择一个可靠的数据中心尤为重要。

据了解,IDC建设有严格的国标规范,其对不可抗力的要求远大于普通基础设施。以地震为例,IDC的要求是抗里氏8级地震。除了国标,运营商对机房建设还有电信研究院把关。第三方机房的建设更多地会参考国际标准。因此在如何选择IDC服务方面,首都在线工程部经理刘铮介绍说:

IDC机房的基础设施从地理位置、建筑承重、电力保障、空调效能、消防、安防等各个方面都有要求。选择IDC需要考虑机房位置、资源、建筑、空间、动力系统、制冷、安保、运维等方面综合考量。

国内IDC 机房是这几年才发展起来的,大致分为三种。

第一种,是运营商机房。这类机房会严格遵守IDC的建设标准。电信运营有近百年的历史,积累了大量的实践经验。

第二种,是运营商合作机房,这类是指运营商和社会资金合作,按照运营商的标准设计、选型构建的机房。除了所有权外,基本等同运营商机房。

第三种,是中立机房,这类机房良莠不齐。有很好的机房,例如世纪互联M5机房,是完全按照先进IDC机房规范进行设计的。也有很差的。

目前看来,在中国市场由于运营商对网络的垄断地位,个人觉得采购成熟的运营商机房是个不错的选择。 而自建机房会明显增加云厂商大量的基础设施建设成本,同时也会增加采购运营商带宽成本。

但现有国内的数据中心都是上一代数据中心,为服务器托管所设计的,空间密度低,能提供的单机柜功率低,配套空调系统效能低。就我所知大部分国内机房单机柜支撑10~20A机柜也就是2200w至4400w,这对现在的云计算系统而言,密度太低了。单机柜密度低会造成密度降低,增加云计算大量的光纤耗材成本,再设计云计算资源池时就会不得不迁就机房现有条件,分散布放计算节点,增大了tor与eor之间距离;存储方面也造成了分散,影响了效率,使得云计算资源设计难以模块化。而非模块化设计、非标准化设计会增加运维难度,增加故障隐患。国外的机房大多单机柜可以提供48A、64A甚至于更高。

至于青云此次事故中提到的UPS问题,刘铮解释说:

UPS系统非常重要,是现有数据中心最容易出现故障的一环。目前国内大多采用的都还是电池方案;国际上除了电池外还有飞轮方案等UPS代替方案。理论上要求N+1甚至N+N的容量冗余、定期的电力巡检及维护、UPS定期代载供电、电池的维护保养及更换。

机房动力系统是最关键的,对IDC选址要求至少两路供电,要有完备的柴油发电机组,现有油量储备至少支撑数小时供电,并有不间断的柴油供给。

来自InfoQ高效运维群的讨论主要观点如下:

  • 机房整体崩溃的容灾切换方案和演练有必要加强。通讯基站都会做防雷,一个IDC不能因雷击就影响用户,雷击只是一个诱因。
  • 现阶段国内云服务商还是以开发为主,并没有对网络、IDC、运维看的特别重要。
  • 网络与IDC已成为运维的重要话题。运营商机房限制很多,多线融合是第三方IDC的优势,但网络是其瓶颈。
  • 由于IDC互联成本太高,可以根据需求做DPN+DRaaS对部分或整个DC做实时异地容灾。但互联互通将成为趋势,也是市场发展的必然。
  • 异地容灾的成本也不容小觑。目前看来,冷备有问题、双活有门槛,云服务商需要看自己的业务需要,看SLA。中断服务影响最大,所以稳定和高可用是架构设计第一要素。
  • 做运维就是把更多的不可控变成可控。没做到高可用、实时异地容灾,设计上的单点故障也就难以解决。
  • 现在的云产品只能谈可用性,还谈不上易用性。

随即,我们采访了UCloud联合创始人兼CTO莫显峰,老莫从选择IDC租赁的标准方面给出的建议是:

选择IDC的标准非常多,包括物业使用权、租约、变电站、油罐、柴发、空调、承重、链路拓扑/带宽等等,但这也不足以确保100%的可靠性。美国标准TIA-942《数据中心的通信基础设施标准》,主要根据数据中心基础设施的可用性、稳定性和安全性分为四个等级:T1,可用性为99.67%;T2,可用性99.749%;T3,可用性99.982%;T4,可用性99.995%。年平均故障时间也从0.4小时到28.8小时不等,这意味着每年都可能存在各种原因的不可用。

对于青云本次IDC故障的警示以及第三方云服务商应该怎么规避此类问题,莫显峰认为应该从一下几个方面加强防范:

1. 选择合适的机房。
2. 建立同城多中心:同城多IDC之间用光纤直连,将客户的业务部署在多个机房,避免在某个机房出故障的时候,影响用户的业务可用性。
3.协助客户做好规划:完全规避IDC的问题是不可能的,因此理论上的7*24小时的业务必须在软件架构、应用部署上进行优化,例如:
a、针对外网线路故障采用多线路灾备,故障发生时实现自动切换;
b、针对机房故障包括电力故障和空调故障等,采用跨IDC数据库灾备,接入层冗余的模式进行容灾;
c、针对城域网故障采用异地有损容灾、IDC双活或多活等方案。
4.定期巡检、演习:提前发现并消除隐患,大多数市电突然中断是无法避免的,但是UPS和柴发确保能工作很重要。

至于大家讨论的各云厂商之间互联互通的理想,UCloud认为网络互联是可以先行的第一步。“只要各家的VPC支持光纤/专线互通,即可实现灾备的能力。目前UCloud是支持光纤接入公有云的。”莫显峰如是说。

综上所述,首先事故本身是一个非常小概率的事件,人力所能及的是尽量降低其发生的概率,而无法绝对避免。IDC行业有着严格的建设标准,判断一个机房的可用性要在较长的时间范围内看其可用时间的长短。发生事故并不等同于机房不靠谱或者云不靠谱。当然,事故发生后要彻底排查发生的原因,采取整改措施。

因此,从设备和管理两个层面去降低事故概率是十分必要的,云服务厂商也要不断提升云平台的灾难恢复速度。最后,我们对青云联合创始人兼CEO黄允松(Richard)进行了简短的采访,他对此次事故的回复如下:

InfoQ:以前IDC遭遇雷暴天气引发故障的案例也很多,在你看来能造成大面积影响的主要原因是什么?或者说,青云在IDC布局方面是否因受限于供应商而存在一些隐患?

Richard:机房遭遇雷击后,承载QingCloud设备所在区的两组UPS输出均出现了2秒钟的瞬时波动,从而导致了机柜出现瞬时断电再加电。UPS厂家给出的书面判断是,雷击楼体后,对UPS主机造成干扰,UPS浪涌保护器未生效,引起UPS并机线通信故障,电压回流造成电压高报警,逆变器过载关机,短时短路。

目前青云在全国共运行着8个区域,其中公有云的4个区是青云自营租用的,我们在每个省份都是选择当地最好 IDC 供应商,比如这次出问题的机房隶属广东睿江科技,这家 IDC 运营商在华南是绝对的领先者。这次事故机房是当地电信的枢纽机房,T3 等级,即便如此,也遇见了此次雷击引发电力闪断的巨大灾难。我们非常清楚云平台的服务能力一方面体现在软件技术实力,另一方面也取决于物理层面的稳定和可靠。我们已经下定决心自行投资运营数据中心,以将物理层面事故概率降到最低。需要强调的一点是,无论是云计算还是传统IT,都依赖于数据中心基础设施的稳定运行,而作为云服务商,我们的系统承载着众多用户的业务,因此要在数据中心的可靠性方面再下大力气。

InfoQ:从发现故障告警到完全恢复服务青云大概用了不到3个小时,用户的受影响程度以及反馈如何?IDC 方面有没有新的报告出来?

Richard:其实总时间是2小时31分钟,其中大约有1小时40分钟花在了物理硬件加电、全云系统的自检过程(检查所有设备、所有用户资源的状态、数据完整性检验等),用于恢复全部用户云资源的时间很短,因为此处皆自动化了。但是前面的硬件加电、检查、云系统自检这些过程还依赖于人、属于半手动的过程,这个需要进一步的开发,使之皆能自动化进行。

因为是全体断电,所以对用户的影响是大的,这也是数据中心行业能有的最严重的故障了,所有在广东一区部署的应用皆受到了影响。那些新型应用架构、吻合云模式的应用(我们称之为Cloud Native App)随着云平台恢复而立刻恢复,那些偏传统的应用通常需要用户登录进去启动一些服务、或做些操作。总体上来说,因为没有出现数据丢失,用户的反馈大多比较冷静和理性。特别值得一提的是,有一些很技术专业的用户甚至将这次事故视作一个机会来检视自己应用架构的合理与改良,真的很酷。极客邦转发的一篇就是例子。

IDC在6月6日提供了官方报告,我们已经发出来了,后来也提供了一份纯技术分析文章,其实是对前份报告的电力细节描述,我们也已经通过邮件和社交平台发给了用户。

InfoQ:经过本次事故,青云会在哪些方面进行改进,能简单说说你们的改进措施吗?

Richard:首先我们真的非常抱歉,数据中心出了这种非常小概率的大故障,让那么多用户受到严重影响。我们已经决定要自己运营数据中心(第一个力争年内在北京启用),欢迎有意投资云计算产业的企业机构与我们洽谈。另外,我们的自营网络建设一期工程已进入尾声,会在Q3之前完成北京各区之间的光纤直连,实现同城环网,这将极大程度提高云平台的容灾能力;随后会逐步实现其他各区环网。

另外从平台技术角度,我们计划加入全面的硬件自动化,这将使得我们100%杜绝人力工作慢的问题,使得灾难恢复工作更加快速;还有对于平台自检过程需要优化,我们将在北京的机房设置evil monkey测试场景,将全机房断电列为日常测试项目,确保此类灾难能在30分钟完成全部恢复。

docker常用命令

2016年5月13日 评论已被关闭

docker常用命令

http://www.xingishere.com/blogs/docker_command
最近在玩 docker,个人总结了一些常用的命令,方便大家查阅。

1. 获取镜像

$ docker pull ubuntu:12.04
# 从指定仓库中获取
$ docker pull dl.dockerpool.com:5000/ubuntu:12.04

2. 列出本地镜像

$ docker images

3. 使用容器

$ docker run -t -i ubuntu:12.04 /bin/bash

4. 修改已有镜像

docker commit -m "Added gem" -a "Docker Edward" 0b2616b0e5a8 edward/ubuntu:v2
4f177bd27a9ff0f6dc2a830403925b5360bfe0b93d476f7fc3231110e7f71b1c
# 其中,-m 来指定提交的说明信息,跟我们使用的版本控制工具一样;-a 可以指定更新的用户信息;之后是用来创建镜像的容器的 ID;最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的 ID 信息。

5. 导入本地镜像

$ cat ubuntu-14.04-x86_64-minimal.tar.gz  |docker import - ubuntu:14.04
# 然后使用 docker images 查看

6. 上传镜像

$ docker push edward/ubuntu

7. 导出和载入镜像

# 导出
$ docker save -o ubuntu_14.04.tar ubuntu:14.04
# 载入
$ docker load --input ubuntu_14.04.tar
# 或
$ docker load < ubuntu_14.04.tar

8. 删除镜像

$ docker rmi -f ubuntu:12.04
# 如果不使用 -f 参数,则需先执行 docker rm 删掉镜像依赖的容器

9. 查看容器日志

$ docker logs -f <容器名orID>

10. 查看正在运行的容器

$ docker ps
$ docker ps -a #查看所有的容器,包括已经停止的。

11. 停止、启动、杀死一个容器

$ docker stop <容器名orID>
$ docker start <容器名orID>
$ docker kill <容器名orID>

12. 构建自己的镜像

$ docker build -t <镜像名> <Dockerfile路径>

13. 在 hub 上搜索镜像

$ docker search <镜像名>

14. 登录 docker

$ docker login

架构的本质

2016年5月12日 评论已被关闭

架构的本质

http://kb.cnblogs.com/page/540632/

 

 

在首席架构师眼里,架构的本质是……

目前讨论架构实操(术)的文章较多,讨论架构理念(道)的较少,本文基于作者在大型电商系统架构方面的一些实践和思考,和大家聊聊架构理念性的东西,希望能够抛砖引玉,推进大家对架构的认识。

什么是道,什么是术?道是事物发展的本质规律,术是事物发展的具体途径。规律只有一个,途径很多,条条大路通罗马,罗马是道,大路是术。道为本,术为途,如果事先知道罗马在哪里,那么遍地是路,路路相通。架构也是如此,如果能领悟架构的本质,就不会拘泥于现有的实践和理论框框,而以最直接的方式解决问题,无招胜有招。本文的内容包括架构的本质、架构的服务对象、架构师能力模型 、架构境界等。

架构的本质

任何系统,自然情况下,都是从有序到无序,这是有科学依据的, 按照热力学第二定律,自然界的一切自发过程都有方向性,一个孤立系统会由有序变为无序,即它的熵会不断增加,最终寂灭。但生物可以通过和外界交互,主动进行新陈代谢,制造 “负熵” 来保证自身有序,继续生存。

同样,一个软件系统随着功能越来越多,调用量急剧增长,整个系统逐渐碎片化,越来越无序,最终无法维护和扩展,所以系统在一段时间的野蛮生长后,也需要及时干预,避免越来越无序。

架构的本质就是对系统进行有序化重构,不断减少系统的 “熵”,使系统不断进化。

那架构是如何实现无序到有序的呢? 基本的手段就是分和合,先把系统打散,然后重新组合。

在首席架构师眼里,架构的本质是……

分的过程是把系统拆分为各个子系统 / 模块 / 组件,拆的时候,首先要解决每个组件的定位问题,然后才能划分彼此的边界,实现合理的拆分。合就是根据最终要求,把各个分离的组件有机整合在一起,相对来说,第一步的拆分更难。

拆分的结果使开发人员能够做到业务聚焦、技能聚焦,实现开发敏捷,合的结果是系统变得柔性,可以因需而变,实现业务敏捷。

举个例子,在 Web 1.0 时代,一个 ASP 或 JSP 页面里,HTML 和脚本代码混在一起,此时脚本代码越多,系统越混乱(即熵增加),最终连开发者自己都无法理解。此时就需要对系统重新架构,办法是引入 view helper 模式,分离 HTML 和脚本,HTML 成为 view,脚本成为帮助类。然后再简单整合在一起。通过重新分和合,整个系统层次清晰,职责明确,系统的无序度降低,容易扩展。同时不同技能的开发人员,如 UED 和程序员,可以负责不同部分,有效提高开发效率。

好的架构就像一篇优美的散文,形散神不散,表面看无序,实则高度有序。

架构分类和服务对象

架构一般可分业务架构、应用架构、技术架构,那么它们分别解决什么问题,服务于谁呢? 我们首先看一个系统落地过程:

在首席架构师眼里,架构的本质是……

对于负责开发的人来说,怕的是业务太复杂,代码逻辑太乱,超出他能理解的范畴,系统无法维护。因此开发的需求是系统整体概念清晰,容易理解,方便扩展。

对于负责运行的机器来说,怕的是业务并发量太大,系统核心资源不够用(如数据库连接)。它希望在业务量增加时,系统能够支持水平扩展,支持硬件容错(如避免单点故障)。

开发的痛点主要由业务架构和应用架构解决,业务架构从概念层面帮助开发理解系统(动态的包括业务流程 / 节点 / 输入输出,静态的包括业务域 / 业务模块 / 单据模型)。

应用架构从逻辑层面帮助开发落地系统(应用种类 / 应用形式 / 数据交互关系 / 交互方式等),整个系统逻辑上容易理解,最近大家谈的比较多的 SOA 即属于应用架构的范畴。

机器的痛点主要由技术架构解决,如技术平台选型(操作系统 / 中间件 / 设备等),部署上希望支持多机房,水平扩展,无单点等。

强调一下,系统是人的系统,架构首先是为人服务的,业务概念清晰、应用逻辑合理、人好理解是第一位的(即系统有序度高)。现在大家讨论更多的是技术架构,如高并发设计,分布式事务处理等,只是因为这个不需要业务上下文背景,比较好相互沟通。具体架构设计时,首先要关注业务架构和应用架构,这个架构新手要特别注意。

架构师能力模型

架构师只做分和合的事情,但综合能力要求很高,要求内外兼修,下得厨房,上得厅堂,下图通过典型的架构方式介绍一个架构师的能力要求:

在首席架构师眼里,架构的本质是……

在此基础上,架构师要有技术的广度(多领域知识),又有深度(技术前瞻),对主流公司的系统设计非常了解,知道优劣长短,碰到实际问题,很快有多种方案可供评估。

抽象思维是架构师最重要的能力,架构师要善于把实物概念化并归类。比如面对一个大型的 B2C 网站,能够迅速抽象为采购->运营->前台搜索->下单->履单这几大块,对系统分而治之,庖丁解牛,早已目无全牛。

抽象思维是往高层次的总结升华,由实到虚;而透过问题看本质则是由虚到实,往深层次地挖掘。比如看到一段 Java 代码,知道它在 JVM 如何执行;一个跨网络调用,知道数据是如何通过各种介质到达目标 (操作系统内核 / 网卡端口 / 电磁介质等)。透过问题看本质使架构师能够敏锐地发现底层之真实,系统性端到端地思考问题,识别木桶的短板并解决之。

能落地的架构才是好架构,良好的沟通能力确保各方对架构达成共识,愿意采取行动;良好的平衡取舍能力确保架构在现有资源约束下是最合理的,理想最终照进现实。

总结下,架构师的能力要求包括:

  1. 兼具技术的广度(多领域知识)和深度(技术前瞻)
  2. 兼具思维的高度(抽象思维)和深度(问题到本质)
  3. 兼具感性(沟通)和理性(平衡)

架构境界

架构师从境界上由浅到深可以分为四层:第一看山不是山,第二看山是山,第三看山不是山,第四看山是山。

在首席架构师眼里,架构的本质是……

刚接手项目时,对业务不了解,时时被业务方冒出的术语弄得一愣一愣的,如果把现有问题比作山,则是横看成岭侧成峰,根本摸不透,此时看山不是山。

经过业务梳理和对系统深入了解,可以设计出一个屌丝的方案,把各个系统串起来,解决当前的问题,对当前这个山能够看清楚全貌,此时能够做到看山是山。

通过进一步抽象,发现问题的本质,原来这个问题是共性的,后续还会有很多类似问题。设计上进行总结和升华,得出一个通用的方案,不光能解决当前的问题,还可以解决潜在的问题。此时看到的已经是问题本质,看山不是山。

最后回到问题本身,去除过度的抽象,给出的设计简洁明了,增之一分嫌肥,减之一分嫌瘦,既解决当前问题,又保留最基本的扩展,此时问题还是那个问题,山还是那个山。

第一境界给不出合适方案,不表。

第二境界的方案只解决表面问题,往往设计不够,碰到其它类似问题或者问题稍微变形,系统需要重新做。

第三境界的方案往往过度设计,太追求通用化会创造出过多抽象,生造概念,理解和实现均困难,此时系统的无序度反而增加,过犹不及。

第四境界的方案,在了解问题本质的基础上,同时考虑现状,评估未来,不多做,不少做。

佛教讲空和色,色即事物现象,空即事物本质,从这个意义上说,第一重境界无色无空,第二重境界过色,第三重境界过空,第四重境界站在色和空之间,既色又空,不执着于当前,不虚无于未来。

不空不色,既空既色,道法自然,本性如来,架构之髓也。

不使用sudo命令执行docker

2016年5月11日 评论已被关闭

不使用sudo命令执行docker
http://www.docker.org.cn/book/install/run-docker-without-sudo-30.html

简介:本篇文章介绍如何不使用sudo命令就可以执行docker命令。
为什么需要创建docker用户组?
操作步骤:
为什么需要创建docker用户组?

Docker守候进程绑定的是一个unix socket,而不是TCP端口。这个套接字默认的属主是root,其他是用户可以使用sudo命令来访问这个套接字文件。因为这个原因,docker服务进程都是以root帐号的身份运行的。
为了避免每次运行docker命令的时候都需要输入sudo,可以创建一个docker用户组,并把相应的用户添加到这个分组里面。当docker进程启动的时候,会设置该套接字可以被docker这个分组的用户读写。这样只要是在docker这个组里面的用户就可以直接执行docker命令了。
警告:该dockergroup等同于root帐号,具体的详情可以参考这篇文章:Docker Daemon Attack Surface.
操作步骤:
使用有sudo权限的帐号登录系统。
创建docker分组,并将相应的用户添加到这个分组里面。
sudo usermod -aG docker your_username
退出,然后重新登录,以便让权限生效。
确认你可以直接运行docker命令。
$ docker run hello-world

virtualbox下虚拟机互相ping的问题

2016年4月29日 评论已被关闭

virtualbox下虚拟机互相ping的问题

http://wangfei4553693.blog.163.com/blog/static/2701047720126174134869/

我在win7系统下用virtualbox装了两台ubuntu虚拟机。名称分别是ubuntu和ubuntu c2。网络连接方式都是NAT方式(是关闭虚拟机以后,在virtualbox界面,“设置”-“网络”-可以看到下拉框,设置nat、桥接等各种联网方式)。

ifconfig

显示两台虚拟机的ip相同,都是10.0.2.15

于是把第二台即ubuntu c2的虚拟机ip修改成10.0.2.14.

但是ping10.0.2.15是ping不通的。

http://blog.csdn.net/cyq1984/article/details/5497716 这篇博客中有详细的介绍。

第一种 NAT模式
解释:
NAT模式是最简单的实现虚拟机上网的方式,你可以这样理解:Vhost访问网络的所有数据都是由主机提供的,vhost并不真实存在于网络中,主机与网络中的任何机器都不能查看和访问到Vhost的存在。
虚拟机与主机关系:
只能单向访问,虚拟机可以通过网络访问到主机,主机无法通过网络访问到虚拟机。
虚拟机与网络中其他主机的关系:
只能单向访问,虚拟机可以访问到网络中其他主机,其他主机不能通过网络访问到虚拟机。
虚拟机与虚拟机之间的关系:
相互不能访问,虚拟机与虚拟机各自完全独立,相互间无法通过网络访问彼此。
IP:10.0.2.15
网关:10.0.2.2
DNS:10.0.2.3
一台虚拟机的多个网卡可以被设定使用 NAT, 第一个网卡连接了到专用网 10.0.2.0,第二个网卡连接到专用网络 10.0.3.0,等等。默认得到的客户端ip(IP Address)是10.0.2.15,网关(Gateway)是10.0.2.2,域名服务器(DNS)是10.0.2.3,可以手动参考这个进行修改。
NAT方案优缺点:
笔记本已插网线时: 虚拟机可以访问主机,虚拟机可以访问互联网,在做了端口映射后(最后有说明),主机可以访问虚拟机上的服务(如数据库)。
笔记本没插网线时: 主机的“本地连接”有红叉的,虚拟机可以访问主机,虚拟机不可以访问互联网,在做了端口映射后,主机可以访问虚拟机上的服务(如数据库)。

 

第三种 Internal模式
解释:
内网模式,顾名思义就是内部网络模式,虚拟机与外网完全断开,只实现虚拟机于虚拟机之间的内部网络模式。
虚拟机与主机关系:
不能相互访问,彼此不属于同一个网络,无法相互访问。
虚拟机与网络中其他主机关系:
不能相互访问,理由同上。
虚拟机与虚拟机关系:
可以相互访问,前提是在设置网络时,两台虚拟机设置同一网络名称。如上配置图中,名称为intnet。
IP: VirtualBox的DHCP服务器会为它分配IP ,一般得到的是192.168.56.101,因为是从101起分的,也可手工指定192.168.56.*。
笔记本已插网线时:虚拟机可以与主机的VirtualBox Host-Only Network 网卡通信
这种方案不受主机本地连接(网卡)是否有红叉的影响。【决定采用这种模式试一下】

 

详解virtualbox虚拟机上网4种方式

2016年4月29日 评论已被关闭

使用云服务器不得不知的操作禁忌

2015年9月19日 评论已被关闭

使用云服务器不得不知的操作禁忌
http://help.aliyun.com/knowledge_detail.htm?knowledgeId=5973775
1、什么是宕机迁移,如何避免因为宕机迁移导致的服务不可用
云服务器是部署在物理机上的,底层物理机性能出现异常或者其他原因都会导致物理机宕机,当检测到云服务器所在的物理机机发生故障,系统会启动保护性迁移,将您的服务器迁移到性能正常的宿主机上 ,一旦发生宕机迁移,您的服务器就会被重启,如果您希望您的服务器重启以后应用服务器自动恢复,需要您把应用程序设置成开机自动启动,如果应用服务连接的数据库,需要在程序中设置成自动重连机制。

2、windows系统中的PV Dirvers 程序是否可以删除
PV Dirvers程序为我方服务器虚拟化驱动,请不要针对该程序进行任何操作,如果删除会导致服务器出现异常。

3、云服务器是否可以更改网卡的MAC地址
云服务器禁止更改网卡mac地址。
因为我方服务器IP跟MAC地址都是固定的,底层对IP和MAC地址做了绑定,请不要随意更改主机MAC地址,更改以后会导致服务器网络出现异常。

4、linux系统是否支持开启SELINUX服务
我方linux系统的服务器不支持开启Selinux服务,如果开启了selinux服务,会导致系统异常并无法启动。

5、linux系统是否可以自己编译内核
我方系统内核都是经过特殊开发的,集成了阿里云的虚拟化驱动,如果自行编译内核会导致系统出现不可预测问题,请不要对内核进行任何的操作。

6、阿里云服务器是否支持安装虚拟化程序
您好,我方服务器是基于虚拟化平台运行的,如果在服务器上部署虚拟化程序,会导致服务器出现不可预测的问题,请勿在服务器内部部署虚拟化程序。

7、重置以及更换系统务必要了解的事项
重置以及更换系统会导致被操作磁盘数据跟快照丢失并不可找回,如有重要数据一定要提前备份,谨慎操作。

8、linux系统下能否开启NetWorkManager服务
linux系统请不要开启NetWorkManager服务,该服务会跟系统内部网络服务出现冲突,导致网络异常。

9、windows系统中的shutdown.exe进程是否可以结束
shutdown.exe进程是系统重要进程,如果结束该进程会导在控制台上下发的指令不能成功执行。

10、linux系统下是否可以自定义更改/分区下的目录权限
请不要随意更改/分区下目录的权限,尤其是/etc/sbin/bin/boot/dev/usr/lib等目录权限,如果权限更改不当会导致出现异常。

11、windows系统是否可以删除或者重命名administrator账户
administrator账户为系统默认的管理员账号,通过管理控制台中修改服务器的登入密码是针对administrator帐号操作的,如果重命名或删除了该帐号,会导致通过控制台修改密码失效。

12、windows更改计算机名需要注意的事项
windows系统修改了计算机名一定要同步注册表中的相关健值,要不然修改不成功的,计算机名修改不成功,会导致有些第三方程序无法安装,注册表中需要修改的健值如下;
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\ComputerName\ActiveComputerName
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName

Virtualmin安装和配置使用教程

2015年8月28日 评论已被关闭

Virtualmin安装和配置使用教程

http://www.vcoo.me/show/1435.html

Virtualmin是当前最受欢迎的开源虚拟主机管理软件,在它的协助下,可以使得虚拟主机变的更为快速、可 靠、安全。Virtualmin非常容易安装,而且能够提供专业的支持和虚拟主机管理解决方案。

Virtualmin可以单独安装或以webmin的模块安装,有免费版和专业版本。和另一款虚拟主机管理软件cPanel相比,Virtualmin更加易于安装和使用,功能上也并不逊色。

[技术]Virtualmin安装和配置使用教程 – 微酷博客

下面讲一下以webmin的模块模式安装Virtualmin方法:

① 前提是先安装好webmin 并登陆。
② 从官方网站下载virtual-server-3.78.gpl.wbm.gz
③ 点击 webmin>webmin配置>webmin模块> 先中从本地文件 找到下载的模块。当然也可以不下载直接选择 从 ftp 或 http URL 输入下载地址即可。

安装virtualmin之后,就会在webmin服务器栏里出现virtualmin这一项了,点击后要做些基本的设置才能正常使用。virtualmin有好几个功能插件,包括BIND DNS、apache、mysql、proftp、邮件等,在Features and Plugins这项里选择,看你需要哪些就选哪些,否则就不要选。

201005181458310340

我就选了个apache的,保存,很可能会提示出错:

Suexec is enabled in the default template, but the Apache module mod_suexec is
not installed or not enabled.

或者是这样的出错提示:

The Suexec command on your system is configured to only run scripts under /var/www, but the Virtualmin base directory is /home. CGI and PHP scripts run as domain owners will not be executed.

出现类似这些错误提示的解决办法是:

① 首先安装下面这个软件:
apt-get install apache2-suexec-custom
② 安装完后编辑文件
/etc/apache2/suexec/www-data
将/var/www 改为 /home

修改完后再开启apache模块:开启actions和suexec这两个模块

在webmin里服务器栏点击apache后,点击第一项 Global configuration全局设置,再选择Configure Apache Modules这一项,勾选中actions和suexec这两项,再点击最下面enable那个按钮保存行了。

201005181500452223

201005181500571151

最后重启apache使之生效。

这样的话就能正常使用virtualmin来管理apache站点了。

使用virtualmin/webmin添加域名/增加网站:

点 Virtualmin => 创建虚拟服务器 => 设置域名和密码

201005181505427053

用户名如果是自动的话那么就是你域名的名称了,例如我建立新站点wincold.com,那么用户名就是wincold了,当然也可以自己指定,密码也是要自己设定的,下面还有几个选项,例如指定独立IP,要不要同时建立mysql、FTP账号密码。

最后点击创建后就会为你建立了新的账号和密码,在/home文件夹里建立了你用户名的文件夹,进去后你会发现有一些logs,public_html等目录,这些是系 统文件,请保留,不要删除,不然会有问题。您的文件上传到 public_html目录即可。这就是你网站的/目录了。

virtualmin/webmin面板功能强大,看上去也不是很难,只要不乱改动一些参数文件,一般都不会有什么大问题了。

ECS Linux服务器iptables无法重启

2015年8月28日 评论已被关闭

ECS Linux服务器iptables无法重启
新购ECS Linux服务器的iptbales无法正常重启,而且/etc/sysconfig/iptables文件不存在,这是由于新系统没有配置使用过iptables,因此在/etc/sysconfig中没有iptables的配置文件。
处理方法:
1.添加任意一条防火墙规则,如:
iptables -P OUTPUT ACCEPT (设置出口全开)
2.service iptables save (进行保存)
系统会自动生成/etc/sysconfig/iptables文件里,并自动加载配置信息。
3.service iptables restart (重启命令)和添加规则都可以正常使用。
注:/etc/sysconfig/iptables文件说明:
1、 iptables 命令规则策略实际调用的是/etc/sysconfig/iptables 的配置。
2、 修改iptables规则也可以直接编辑该文件来添加删除规则。

nutch简介(nutch原理&nutch+solr抓取并索引网页的配置)

2015年5月23日 评论已被关闭

nutch简介(nutch原理&nutch+solr抓取并索引网页的配置)

http://yuebingzhang.elastos.org/2013/08/01/nutch%E7%AE%80%E4%BB%8Bnutch%E5%8E%9F%E7%90%86nutchsolr%E6%8A%93%E5%8F%96%E5%B9%B6%E7%B4%A2%E5%BC%95%E7%BD%91%E9%A1%B5%E7%9A%84%E9%85%8D%E7%BD%AE/

nutch简介

Nutch 是一个开源Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具(包括全文搜索和Web爬虫)。当然我们也可以将nutch和solr配合起来使用,nutch实现爬虫并且将数据索引添加到solr的数据库中,由solr负责查询工作。

nutch原理

Nutch主要分为两个部分:爬虫crawler和查询searcher。Crawler主要用于从网络上抓取网页并为这些网页建立索引。Searcher主要利用这些索引检索用户的查找关键词来产生查找结果。两者之间的接口是索引,所以除去索引部分,两者之间的耦合度很低。

也正是由于爬虫和查询两个部分的耦合度很低,我们可以用solr来实现查询部分的功能,所以下面我们只介绍nutch爬虫crawler的原理。

爬虫crawler

我们先来介绍crawler的存储数据的文件结构:

crawler数据文件主要包括三类,分别是web database,一系列的segment加上index,三者的物理文件分别存储在爬行结果目录下的db目录下webdb子文件夹内,segments文件夹和index文件夹。(对于nutch1.7,文件结构有所不同,每次爬虫后,会在nutch根目录下产生一个名为“crawler+年+月+日+时+分+秒”的文件夹,里面存储的就是这次爬虫产生的所有数据文件,文件夹内部的不同之处我们在下面的详细介绍中加以说明)三者存储的信息内容如下:

Web database,也叫WebDB,其中存储的是爬虫所抓取网页之间的链接结构信息,它只在爬虫Crawler工作中使用而和Searcher的工作没有任何关系。WebDB内存储了两种实体的信息:page和link。Page实体通过描述网络上一个网页的特征信息来表征一个实际的网页,因为网页有很多个需要描述,WebDB中通过网页的URL和网页内容的MD5两种索引方法对这些网页实体进行了索引。Page实体描述的网页特征主要包括网页内的link数目,抓取此网页的时间等相关抓取信息,对此网页的重要度评分等。同样的,Link实体描述的是两个page实体之间的链接关系。WebDB构成了一个所抓取网页的链接结构图,这个图中Page实体是图的结点,而Link实体则代表图的边。(我在实践中使用的是nutch1.7+solr4.4,其中将WebDB分为crawlerdb和linkdb两个部分)

一次爬行会产生很多个segment,每个segment内存储的是爬虫Crawler在单独一次抓取循环中抓到的网页以及这些网页的索引。Crawler爬行时会根据WebDB中的link关系按照一定的爬行策略生成每次抓取循环所需的fetchlist,然后Fetcher通过fetchlist中的URLs抓取这些网页并索引,然后将其存入segment。Segment是有时限的,当这些网页被Crawler重新抓取后,先前抓取产生的segment就作废了。在存储中。Segment文件夹是以产生时间命名的,方便我们删除作废的segments以节省存储空间。

Index是Crawler抓取的所有网页的索引,它是通过对所有单个segment中的索引进行合并处理所得的。Nutch利用Lucene技术进行索引,所以Lucene中对索引进行操作的接口对Nutch中的index同样有效。但是需要注意的是,Lucene中的segment和Nutch中的不同,Lucene中的segment是索引index的一部分,但是Nutch中的segment只是WebDB中各个部分网页的内容和索引,最后通过其生成的index跟这些segment已经毫无关系了。(由于我们使用solr来实现查询,所以在nutch的数据文件中找不到index这个文件夹,它被存入到solr的文件目录下)

在清楚了crawler的文件结构后,我们来介绍crawler的工作流程:

Crawler的工作原理主要是:首先Crawler根据WebDB生成一个待抓取网页的URL集合叫做Fetchlist,接着下载线程Fetcher开始根据Fetchlist将网页抓取回来,如果下载线程有很多个,那么就生成很多个Fetchlist,也就是一个Fetcher对应一个Fetchlist。然后Crawler根据抓取回来的网页WebDB进行更新,根据更新后的WebDB生成新的Fetchlist,里面是未抓取的或者新发现的URLs,然后下一轮抓取循环重新开始。这个循环过程可以叫做“产生/抓取/更新”循环。

指向同一个主机上Web资源的URLs通常被分配到同一个Fetchlist中,这样的话防止过多的Fetchers对一个主机同时进行抓取造成主机负担过重。另外Nutch遵守Robots Exclusion Protocol,网站可以通过自定义Robots.txt控制Crawler的抓取。

在Nutch中,Crawler操作的实现是通过一系列子操作的实现来完成的。这些子操作Nutch都提供了子命令行可以单独进行调用。下面就是这些子操作的功能描述以及命令行,命令行在括号中。

1. 创建一个新的WebDb (admin db -create).

2. 将抓取起始URLs写入WebDB中 (inject).

3. 根据WebDB生成fetchlist并写入相应的segment(generate).

4. 根据fetchlist中的URL抓取网页 (fetch).

5. 根据抓取网页更新WebDb (updatedb).

6. 循环进行3-5步直至预先设定的抓取深度。

7. 根据WebDB得到的网页评分和links更新segments (updatesegs).

8. 对所抓取的网页进行索引(index).

9. 在索引中丢弃有重复内容的网页和重复的URLs (dedup).

10. 将segments中的索引进行合并生成用于检索的最终index(merge).

Crawler详细工作流程是:在创建一个WebDB之后(步骤1), “产生/抓取/更新”循环(步骤3-6)根据一些种子URLs开始启动。当这个循环彻底结束,Crawler根据抓取中生成的segments创建索引(步骤7-10)。在进行重复URLs清除(步骤9)之前,每个segment的索引都是独立的(步骤8)。最终,各个独立的segment索引被合并为一个最终的索引index(步骤10)。

nutch1.7+solr4.4配置

从Nutch 网站下载apache-nutch-1.7-bin.tar.gz 回来解开(~/apache-nutch-1.7/)

把Solr 预设的core 范例collection1 复制为core-nutch

把Nutch 提供的conf/schema-solr4.xml 覆盖掉Solr core-nutch 的conf/schema.xml

将Solr core-nutch conf/schema.xml补上一行漏掉的栏位设定<field name=”_version_” type=”long” stored=”true” indexed=”true” multiValued=”false”/>

重开Solr,进Web管理介面的Core Admin新增一个core-nutch core,并且不该有这个新增core的错误讯息。

回来~/apache-nutch-1.7/ 设定Nutch。 conf/ 底下先编辑nutch-site.xml 补上http.agent.name 的crawler 名称设定。

再编辑regex-urlfilter.txt将最后一行+.注解掉,改为+^http://my.site.domain.name只抓我自己的网站

再回到~/apache-nutch-1.7/,新增一个urls/ 目录,里头放一个seed.txt,内容放自己想要抓的种子网址,这里因为只想要抓自己的网站,所以只要放一行http://my.site.domain.name/就好

接下来跑./bin/nutch crawl urls/ -solr http://solr.server.name/solr/core-nutch/ -threads 20 -depth 2 -topN 3测试能不能抓到网站上层的几个网页,到Solr 管理介面里头用查询功能如果有资料,就是成功了。

下面是我抓取一个博客网站和php.net的截图:

Screenshot-from-2013-08-01-155016

 

 

nutch+solr

2015年5月23日 评论已被关闭

nutch+solr

http://www.thinksaas.cn/group/topic/329636/
两年前集成Nutch 和Solr 这两个Apache Lucene 项目组下的子项目实在是件困难的事情,需要打很多补丁(patches),为他们的联姻搜寻各种必需的组件(required components)。今非昔比,时下,在Solr4.0 也即将浮出水面的时候,两者的结合变的相对容易。

今年早些时候发布的Nutch 1.0包含了”开盒即用”的原装的(out of the box)Solr集成。虽然有各种不同的方法来利用这个新特性,这里仅介绍其中的一种方案。本方案中,Solr 作为处理搜索结果的源和入口,有效的减轻对Nutch 的搜索负担,让Nutch 负责她最擅长的工作:抓取(crawling)和提取(extracting)内容。使用Solr 作为搜索后端,换句话说,就是允许使用所有Solr Server的高级特性,诸如:查询拼写检查(spell-check),搜索提醒(suggestion),数据复制(data- replication),查询缓存等等。

为什么使用Nutch 而不是其他的简单抓取程序?

实现本文说的类似功能的替代方法也可能是使用简单的类似于Apache Droids 抓取框架,但是Nutch 提供了我们很多很好的优势。其中,显而易见的一点是Nutch 提供了可以让你完整的实现搜索应用的特性集,其次是Nutch 的高可伸缩性(scalablity)和健壮性(robust),Nutch 运行在Hadoop 上,你可以运行在单态机器上,也可以运行在一个100台机器构成的集群(cluster)上,另外,Nutch 有很高的抓取质量,你可以配置哪些页面更重要,优先抓取,拥有丰富的APIs可以让你容易的集成Nutch 到你的应用中(可扩展性),更重要的一点是,Nutch 的内建组件,超链数据库(LinkDatabase),拥有该组件,可以大幅的提高搜索结果的关联度,Nutch 在被抓取的页面之间跟踪超链接,以便依靠內部链接来判断页面和页面之间的相关度。

Nutch和Solr的安装

首先下载我们需要的软件,Apache Solr 和 Nutch。
1、从官方 下载Solr Version 1.3.0或者从这里 下载LucidWorks for Solr。
2、解压Solr安装包。
3、下载Nutch Version 1.0 (也可以下载nightly版本 )。
4、解压Nutch安装包。

tar zxvf apache-nutch-1.0.tar.gz

5、配置Solr

简单起见,我们以Solr Example中的配置为基础

a、从apache-nutch-1.0/conf拷贝Nutch Schema到apache-solr-1.3.0/example/solr/conf目录下,覆盖掉已经存在的。
我们希望允许Solr为搜索结果创建摘要,因此我们需要存储内容以便能够索引它。

b、调整schema.xml,以便”content”字段的”stored”属性等于true。
<field name=”content” type=”text” stored=”true” indexed=”true”/>
另外,我们希望能够容易的调整查询的关联度,因此这里创建一个新的请求处理器(request handler)交dismax

c、打开apache-solr-1.3.0/example/solr/conf/solrconfig.xml文件,把下面这段粘贴进去

<requestHandler name=”/nutch” class=”solr.SearchHandler” >
<lst name=”defaults”>
<str name=”defType”>dismax</str>
<str name=”echoParams”>explicit</str>
<float name=”tie”>0.01</float>
<str name=”qf”>
content^0.5 anchor^1.0 title^1.2
</str>
<str name=”pf”>
content^0.5 anchor^1.5 title^1.2 site^1.5
</str>
<str name=”fl”>
url
</str>
<str name=”mm”>
2&lt;-1 5&lt;-2 6&lt;90%
</str>
<int name=”ps”>100</int>
<bool hl=”true”/>
<str name=”q.alt”>*:*</str>
<str name=”hl.fl”>title url content</str>
<str name=”f.title.hl.fragsize”>0</str>
<str name=”f.title.hl.alternateField”>title</str>
<str name=”f.url.hl.fragsize”>0</str>
<str name=”f.url.hl.alternateField”>url</str>
<str name=”f.content.hl.fragmenter”>regex</str>
</lst>
</requestHandler>

6、启动Solr

cd apache-solr-1.3.0/example
java -jar start.jar

7、配置Nutch
a、打开apache-nutch-1.0/conf下的nutch-site.xml,用下面的内容(我们制定了蜘蛛的名称,激活插件,限制单机一次运行抓取的最大URL数为100)替换:

<?xml version=”1.0″?>
<configuration>
<property>
<name>http.agent.name</name>
<value>nutch-solr-integration</value>
</property>
<property>
<name>generate.max.per.host</name>
<value>100</value>
</property>
<property>
<name>plugin.includes</name>
<value>protocol-http|urlfilter-regex|parse-html|index-(basic|anchor)|query-(basic|site|url)|response-(json|xml)|summary-basic|scoring-opic|urlnormalizer-(pass|regex|basic)</value>
</property>
</configuration>

b、打开apache-nutch-1.0/conf下的regex-urlfilter.txt,用下面的内容替换:

-^(https|telnet|file|ftp|mailto):

# skip some suffixes
-.(swf|SWF|doc|DOC|mp3|MP3|WMV|wmv|txt|TXT|rtf|RTF|avi|AVI|m3u|M3U|flv|FLV|WAV|wav|mp4|MP4|avi|AVI|rss|RSS|xml|XML|pdf|PDF|js|JS|gif|GIF|jpg|JPG|png|PNG|ico|ICO|css|sit|eps|wmf|zip|ppt|mpg|xls|gz|rpm|tgz|mov|MOV|exe|jpeg|JPEG|bmp|BMP)$

# skip URLs containing certain characters as probable queries, etc.
-[?*!@=]

# allow urls in foofactory.fi domain
+^http://([a-z0-9-A-Z]*.)*lucidimagination.com/

# deny anything else
-.

8、创建一个种子列表(初始化的URL列表)

mkdir urls
echo “http://www.haoguoliang.com/” >urls/seed.txt

9、将种子URL列表导入Nutch的crawldb(注意在nutch文件夹下执行)

bin/nutch inject crawl/crawldb urls

10、生成获取(fetch)列表,以便获取和分析内容

bin/nutch generate crawl/crawldb crawl/segments

以上命令在crawl/segments目录下生成了一个新的segment目录,里边存储了抓到的URLs,下边的指令里,我们需要最新的 segment目录作为参数,存储到环境变量SEGMENT里:

export SEGMENT=crawl/segments/`ls -tr crawl/segments|tail -1`

现在,启动抓取程序真正开始抓取内容

bin/nutch fetch $SEGMENT -noParsing

接下来我们分析、解析抓取下来的内容

bin/nutch parse $SEGMENT

更新Nutch crawldb,updatedb命令会存储以上两步抓取(fetch)和分析(parse)最新的segment而得到的新的URLs到Nutch crawldb,以便后续的继续抓取,除了URLs之外,Nutch也存储了相应的页面内容,防止相同的URLs被反反复复的抓取。

bin/nutch updatedb crawl/crawldb $SEGMENT -filter -normalize

到此,一个完整的抓取周期结束了,你可以重复步骤10多次以便可以抓取更多的内容。

11、创建超链库

bin/nutch invertlinks crawl/linkdb -dir crawl/segments

12、索引所有segments中的内容到Solr中

bin/nutch solrindex http://127.0.0.1:8983/solr/ crawl/crawldb crawl/linkdb crawl/segments/*

现在,所有Nutch抓取的内容已经被Solr索引了,你可以通过Solr Admin执行查询操作了

http://127.0.0.1:8983/solr/admin 或者直接通过

http://127.0.0.1:8983/solr/nutch/?q=solr&version=2.2&start=0&rows=10&indent=on&wt=json

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lin_zyang/archive/2010/01/05/5127630.aspx

今天新配了服务器ubuntu +lighttpd + rails + mysql4

2015年3月7日 评论已被关闭

今天新配了服务器ubuntu +lighttpd + rails + mysql4
http://23c.iteye.com/blog/180488
文章选自:http://www.ruby-lang.org.cn/forums/viewthread.php?tid=1322
最近因为Rubyist项目的问题,需要一个地方来做演示。当然我们有自己的服务器,但是上面安装的是windows 2003 server,因为我还需要服务器支持asp.net。本来也可以开在国外的,但是想到演示空间经常需要更新,速度上可能还是不太理想,而且国内的服务器其实也已经配置好了支持rails运行的,目前采用的有两种方式,一种是Apache + FastCGI,而另外一种是使用mongrel运行,由防火墙转发请求。在我看来后面一种性能较好。

以前的项目都是我直接远程连接到服务器上操作的,因此也没有感到什么不便。这次要提供项目的演示空间,不可能提供远程管理权限,呵呵。这样不太方便。但是rake之类的功能就不能执行了,其实这也是我考虑的一个问题,如果程序免费发布了,不可能每个使用者都可以有权限在服务器上执行rake的,我们应该写一个页面,像传统的ASP/PHP那样的方式来执行数据库安装。

言归正传,martin要求我提供ssh或者telnet,ssh在windows上怎么弄我不知道,telnet倒是可以开,但是权限管理应该非常不好弄,至少在我管理使用windows server接近七年时间里没有使用过telnet server上面就可以看出来telnet server有多么的不普及了。看来 linux + ssh 才是最好的解决之道。本来rails推荐的生产环境也是*nix,支持较好,而我因为自己用的电脑无法使用windows的原因,最近对linux也有一点点的了解,网上的文章看多了,于是就产生了一个装个ubuntu server来提供支持的想法。

装操作系统倒不是什么难事,特别是对于ubuntu 这种比较智能的操作系统来说,有过几次安装desktop的经验,安装server版也是手到擒来。安装到后面的时候我选择了安装LAMP Server,系统就自己装上了apache 2.23及mysql 5, python 2.5,但是后来我想可能lighttpd的性能更好,而且现在都是在重装操作系统,干脆就弄个更好一点儿的吧。然后就想卸载apache2,sudo apt-get remove apache2,居然卸不了,呵呵,知识还是有限啊。没办法只好再重新安装一次了。这次我选择了只安装操作系统核心,要安装什么东西都由自己定制。聪明了吧。呵呵。

好,十多分钟后我得到了一个正常运行的,没有安装任何东西的ubuntu 7.04 server,首要的事情是改更新源。原来我一直是使用台湾那个源的,速度非常快,但是最近老是出现connection reset的错误,所以改而使用了国内lupa提供的源。

deb http://cn.archive.ubuntu.com/ubuntu feisty main restricted universe multiverse
deb http://cn.archive.ubuntu.com/ubuntu feisty-security main restricted universe multiverse
deb http://cn.archive.ubuntu.com/ubuntu feisty-updates main restricted universe multiverse
deb http://cn.archive.ubuntu.com/ubuntu feisty-backports main restricted universe multiverse
deb http://cn.archive.ubuntu.com/ubuntu feisty-proposed main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu feisty main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu feisty-security main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu feisty-updates main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu feisty-backports main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu feisty-proposed main restricted universe multiverse

然后sudo apt-get update && sudo apt-get upgrade,等几分钟就更新完了。

现在下面正式开始安装之路,首先我们需要的是Ruby环境,源里面自还的比较旧,才1.8.2,现在都1.86了,我们自己编绎吧。先安装编绎环境:sudo apt-get install build-essential,然后去ruby的官方主页下载安装包:

wget ftp://ftp.ruby-lang.org/pub/ruby/ruby-1.8.6.tar.gz
tar xzvf ruby-1.8.6.tar.gz
cd ruby-1.8.6
./configure
make
sudo make install

这里应该很顺利的通过,下一步就是安装rubygems,同样的原因,源里的版本不太匹配,还是自己编绎吧。
先下载:
wget http://rubyforge.org/frs/download.php/20989/rubygems-0.9.4.tgz
tar xzvf rubygems-0.9.4.tgz
cd rubygems-0.9.4
sudo ruby setup.rb

出错了。说找不到zlib. 我们得先安装zlib.
wget http://www.zlib.net/zlib-1.2.3.tar.gz
tar xzvf zlib-1.2.3.tar.gz
cd zlib-1.2.3
./configure
make
sudo make install

没问题,编绎通过。还需要rubyzlib。
wget http://www.blue.sky.or.jp/atelier/ruby/ruby-zlib-0.6.0.tar.gz
tar xzvf ruby-zlib-0.6.0.tar.gz
cd ruby-zlib-0.6.0
ruby extconf.rb
make
sudo make install
为了试验一下是否已经安装好,可以照以下步骤测试:
irb(main):001:0> require ‘zlib’
=> true

这样就说明成功了。再运行rubygems的安装。
cd ../rubygems-0.9.4
sudo ruby setup.rb

成功了。

接下来就比较简单了。安装rails
sudo gem install rails –include-dependencies

这样ruby 和 rails都安装好了。可以运行一些命令来测试一下:irb, rake, ri, rails等。

下面来安装server.
数据库服务:

sudo apt-get install mysql-server phpmyadmin php5-cgi

本来想使用最新的lighttpd的,可是无奈能力有限,始终没有办法搞定编绎不通过的问题,只好使用源里的lighttpd 1.4.13了,特性少了些还能应付。将就一下吧。

sudo apt-get install lighttpd lighttpd-mod-mysql-vhost

这样就安装好了,现在要启用fastcgi.

sudo lighty-enable-mod fastcgi

这样就启动了fastcgi了。

先配置一下php看看fastcgi运行正常不。

sudo vim /etc/lighttpd/conf-enabled/10-fastcgi.conf

server.modules += ( “mod_fastcgi” )

## Start an FastCGI server for php4 (needs the php4-cgi package)
fastcgi.server = ( “.php” =>
((
“bin-path” => “/usr/bin/php5-cgi”,
“socket” => “/tmp/php5-cgi.socket”,
“max-procs” => 2,
“idle-timeout” => 20,
“bin-environment” => (
“PHP_FCGI_CHILDREN” => “4”,
“PHP_FCGI_MAX_REQUESTS” => “10000”
),
“bin-copy-environment” => (
“PATH”, “SHELL”, “USER”
),
“broken-scriptfilename” => “enable”
))
)

再在/var/www 下写个<?phpinfo();?>的文件命名为info.php,执行一下。呵呵,正常了。

试试rails工作不? 加段代码:
server.document-root = “/var/ror/dev/public”
server.error-handler-404 = “/dispatch.fcgi”
url.rewrite += ( “^/$” => “/index.html” )
url.rewrite += ( “^([^.]+)$” => “$1.html” )
fastcgi.server = (“.fcgi” =>
(“localhost” =>
(“min-procs” => 1,
“max-procs” => 4,
“socket” => “/var/ror/dev/tmp/sockets/fcgi.socket-0”,
“bin-path” => “/var/ror/dev/public/dispatch.fcgi”,
“bin-environment” => (“RAILS_ENV” => “production”)
)
)
)

配置好数据库连接后满怀信心的打开FF,却发现只给了我们一个500内部错误的页面,而且这页面看来还不是rails给出的,是属于lighttpd的内部出错页面。这可糟了。

开始检查:

sudo chown www-data.www-data /var/ror/dev -R
sudo chmod 777 /var/ror/dev/tmp /var/ror/dev/log /var/ror/dev/public

还是一样的错误,会不会是文件换行格式的问题呢 ?
vi打开文件,set ff=unix :wq全部保存过,还是有问题。

是不是要重新启动一下lighttpd?肯定是的。
sudo /etc/init.d/lighttpd restart
这下糟了,都启动不了了。
2007-07-04 22:32:53: (mod_fastcgi.c.998) execve failed for: /www/railsapp/mydoc/public/dispatch.fcgi No such file or directory
2007-07-04 22:32:53: (mod_fastcgi.c.1024) the fastcgi-backend /www/railsapp/mydoc/public/dispatch.fcgi failed to start:
2007-07-04 22:32:53: (mod_fastcgi.c.1028) child exited with status 2 /www/railsapp/mydoc/public/dispatch.fcgi
2007-07-04 22:32:53: (mod_fastcgi.c.1031) if you try do run PHP as FastCGI backend make sure you use the FastCGI enabled version.
You can find out if it is the right one by executing ‘php -v’ and it should display ‘(cgi-fcgi)’ in the output, NOT (cgi) NOR (cli)
For more information check http://www.lighttpd.net/documentation/fastcgi.html#preparing-php-as-a-fastcgi-program
2007-07-04 22:32:53: (mod_fastcgi.c.1333) [ERROR]: spawning fcgi failed.
2007-07-04 22:32:53: (server.c.849) Configuration of plugins failed. Going down.

从网上查了下就知道了,这是dispatch.fcgi不存在或者没有执行权限。试试。
sudo chmod +x /var/ror/dev/public/dispatch.*

现在lighttpd可以正常重新启动了,可是还是显示错误的页面。我们还少了什么呢?看看error.log
sudo vim /var/log/lighttpd/error.log

大部分信息像下面这样的:
2007-09-15 19:06:09: (mod_fastcgi.c.1741) connect failed: Connection refused on unix:/var/ror/dev/tmp/sockets/fcgi.socket-0-3
2007-09-15 19:06:09: (mod_fastcgi.c.2852) backend died, we disable it for a 5 seconds and send the request to another backend instead: reconnects: 0 load: 1
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require’: no such file to load — fcgi (MissingSourceFile)
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require’
from /usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:495:in `require’
from /usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:342:in `new_constants_in’
from /usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:495:in `require’
from /usr/local/lib/ruby/gems/1.8/gems/rails-1.2.3/lib/fcgi_handler.rb:1
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:32:in `gem_original_require’
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:32:in `require’
from /usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:495:in `require’
from /usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:342:in `new_constants_in’
from /usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:495:in `require’
from /var/ror/dev/public/dispatch.fcgi:22
对了,我们忘记了两件重要的事情, FCGI.搞清楚了就好办了。

FastCGI

wget http://www.fastcgi.com/dist/fcgi.tar.gz
tar zxvf fcgi-2.4.0.tar.gz
cd fcgi-2.4.0
sudo ./configure
sudo make
sudo make install

RubyFCGI

wget http://sugi.nemui.org/pub/ruby/fcgi/ruby-fcgi-0.8.6.tar.gz
tar zxvf ruby-fcgi-0.8.6.tar.gz
cd ruby-fcgi-0.8.6
sudo ruby install.rb config
sudo ruby install.rb setup
sudo ruby install.rb install

测试一下:
irb(main):001:0> require ‘fcgi’
=> true

成功了,再重新启动一下lighttpd,成功启动。再看看网站,呵呵。可以正常运行了。

接下来装一下ssh和FTP就算完成了。

sudo apt-get install openssh-server vsftpd

sudo vim /etc/vsftpd.conf
启用本地帐户登录,写入,禁用匿名帐号就可以了。
由于需要安装的mysql版本是4.0的,懒得再编译了,所以,我索性直接从一台编译好的机器上scp过来用。居然能用,嘎嘎。

豆瓣的架构

2015年1月14日 评论已被关闭

豆瓣的架构
http://www.douban.com/note/29557381/
关键字包括:nginx,lighttpd,quixote,Memcached,mogile FS,Mako,Gentoo Linux,Xapian,spread

ps:窃以为第一段关于语言的采访,相当[csdn]化

你要是愿意,就买一枝三块钱的玫瑰,送给我吧,这城市也是怪让人伤心的,我想死心塌地的爱上你”

这是一个叫钟童茜的歌手的歌,我在豆瓣网站发现有人评论,才知道了这首有些凄凉的歌曲。你几乎不可能从百度的最流行的mp3的列表中找到它,因为它不是那么有名,也许是这个原因,引发了我采访豆瓣的愿望。接受我采访的是,豆瓣网站的技术总监洪强宁先生和产品经理张贝宁女士。
本刊记者:好,现在开始,豆瓣是一个非常著名的Web2.0网站,你们的开发语言选择的是Python,我想问的是,为什么选择Python?

洪强宁:我们选择Python的理由是它是动态语言,具有动态语言的优点,比如开发特别迅速。我们做的是一个Web2.0的网站,这种网站的特点就是always beta,用户的需求在随时发生变化,我们也不断发现新的价值。所以网站的结构和程序会不断变化,如果用Java做,你的开发量比较大,你就难以做出迅速地改变。Python的特点就是开发迅速,你可以在一两个小时,就做出一个功能。或者说已??上线了,用户反映需要某一功能,也可以比较快地做出来。

本刊记者:这就是TDD,敏捷开发的思路,和传统的方式有些不同。但是会有另一方面的问题,Python的程序员好找吗?在国内会Python的要比会Java程序员少的多。

洪强宁:对,确实是。在中国用Python的人确实不多,也给我们寻找开发任何人员带来困难。不过从另一方面说,也有好处,因为没有一个学校去教Python,会Python的人都是自己学的,也就是说他知道自己需要什么技术,而且能够通过自学掌握它,包括Python的资料中文比较少,需要学习者接触第一手资料,这都使得Python程序员的平均水平,要比使用其他热门语言的平均水平要高。另一方面Python也越来越流行,在国外比较流行的动态语言有Perl,和Python,现在Python已经超过了Perl。

本刊记者:不过,在Web开发这方面有许多选择,比如,Java,.NET,和PHP,在这个格局里Python还是比较弱势。

洪强宁:对,当然,它是新兴语言。在未来,我相信,至少在在Web2.0网站开发方面,它会有自己的一个位置。

本刊记者:还有问一个问题,Python与Perl比较怎么样?因为Python的面向对象的特性好一些,代码看起来更容易理解一些吧,我以前是用 Perl写程序的,觉得Perl的程序代码看起来比较乱。

洪强宁:对,Perl 是write once风格的,一个人写完了,过一段时间,可能自己都不能看懂,它确实很强大,但比较适合当作个人工具使用,不太适合团队的开发。Python的哲学是解决问题的最好方式只有一种,这样同样的功能,每个人写出来的程序样子应该差不太多,比较易于理解,更适合团队开发。

本刊记者:还有一个问题,,有一种说法,认为Python比较慢,在性能方面会不会有问题?

洪强宁:这个问题可以分两个方面说,首先,说Python慢,这是和编译语言比,比如与C,C++,Java比,在动态语言中,它并不慢,它比Ruby要快,它和Perl性能相当。如果选择动态语言的话,Python并不是很慢。另一方面,如果做网站开发,语言的不是速度的瓶颈,比如我把我们现在用Python写的程序全部用C写,程序当然会快一点,但是改变不是很大。Web网站一般会有很多对IO的操作,比如对数据库的访问,对硬盘的访问响应用户的请求,80%,90%你的时间都花在IO上,语言的速度,相对而言,不是那么重要。也可以这样说,网站的性能主要取决于架构设计的是否合理。因为网站需要响应大量的并发的请求,如果你的设计的不好,即使你用C写的,也可能无法应付。所以更多的考虑是在架构设计上,要使架构体系不会产生速度瓶颈。

本刊记者:那您能简要地介绍一下豆瓣的架构吗?

洪强宁:关于豆瓣的系统架构图,首先我们在Web server上做个划分,把网站内容分为动态内容和静态内容。在豆瓣上所有的html都是动态内容,图片都是静态内容。分成两个Web 服务可以做不同的调优。 对动态内容,我们用的是nginx和lighttpd的混合,nginx做负载的平衡,lighttpd通过 SCGi 与application server相连,application server是基于 quixote这个框架写的。

application server拿到用户的请求,分析用户的url,并且利用外部的资源,比如数据库,组合成一个html,返回。从数据库存取会比较慢,数据库有大量的IO,我们使用cache,我们使用的是Memcached,这是一个分布式的内存的cache,比如你可以用很多机器,每个机器有两个G的内存,我们自己开发了client端来使用它,另外如果用户有搜索请求,我们会用搜索引擎。Xapian是一个C++写的开源的搜索引擎,我们通过Web service去访问它。其他,我们还提供了另外的Web service接口响应用户的请求,比如要访问某个文件。spread是我们最近加了一部分,用户有的请求可以采用这样的异步服务。

数据库是这样的,两个MySQL做成一对,一个master ,一个 slave,根据应用划分,使得load不会太高。这个图上??的是两对,实际上有三对。还有一个slave,一方面作为备份,一方面用作数据挖掘,因为不能对线上的数据做直接操作。

对于静态部分,我们也是用nginx,你注意到豆瓣现在有日记的贴图功能系统,用户可能上传很多图片,我们采用的方案是用了mogile FS ,这是一个分布式的文件系统,同时可以做备份,保持高可用性,可以提高很大的IO。

关于application server,它都是用Python写的。我们是用的MVC方式,Controller我们用的是quixote ,它接受用户的请求,根据这个URL去找到Model的某个具体的函数来执行,它是一个dispatcher,当中会判断用户的权限等。然后再传给View,View根据模版进行渲染,形成网页。View的模版,我们以前是用的是PTL,PTL很高效,最近引用了mako,这是一个比较现代的开源的模版,用它写出的代码比较好维护,比PTL好维护一些.。同时,在使用mako的同时,我们的工程师做了很多加速的工作,现在mako的代码有很多是豆瓣的人写的。

你如果注意过Python的Web开发框架的话,你会发现Python的有三个比较著名的框架,Django,Pylons,TurboGears,Pylons默认的模版就是Mako。

下面的就是Model,业务模块,核心是类是User,因为Web2.0是以人为本,我们肯定会有一个User。只有人也做不了事情,还要有物。豆瓣的物,就是Subject,比如书,比如评论,比如小组等。

与数据库进行链接,我们一个很轻量级的与数据库进行链接,这也是一个开源项目,SQL Farm Manager。这个Web service,豆瓣中有很多用的都是Web service。

本刊记者:好,还想问您一个问题,Web2.0会不会也在架构设计中也有所体现呢 ?

洪强宁: Web2.0用户的反复的操作非常多,你需要一个非常流畅的体现。这需要一些技术来实现,比如Ajax;豆瓣花了很多钱很多精力,来提高性能,比如买好的机器,使用Gentoo Linux,为什么使用Gentoo Linux,因为它方便调优。还有,大量的使用cache。在数据库调优方面,我们也花了很大的精力。

另一方面,Web 2,0是用户提供数据的,用户有很多写操作。这样很多1.0优化方法在2.0中行不通。豆瓣在数据库上用的是分库的方式。除此之外我们还尝试了一些其他的方法。

本刊记者:我现在想问张贝宁一个问题,您能否谈一下Web2.0社区网站和传统的社区网站的区别?比如天涯论坛,和豆瓣的区别。

张贝宁:先说一下Web 2.0 的概念,传统网站,用户到这些网站,只是看信息,这些信息是怎么来的呢,比如像Google,它是抓来的,或者像新浪这样的门户网站,是用户给你编好的。你到这样的网站,只是获取信息,你不能创造信息,也不能决定它放的位置。按照业界的理解,Web 2.0相对于Web 1.0,它是以用户为中心的,或者说是以用户创造内容为主,并且可以决定展现方式。你刚才说的传统的社区,在某种程度上,也可以说是2.0的,因为它也由用户提供内容。不过早期的BBS,网站以内容作分类,比如体育,军事,文学等。用户不能形成自己的分类。在豆瓣,用户可以对任何一个话题进行讨论,这完全是用户自主的。这还只是关系到豆瓣的小组的功能,如果拿天涯论坛和豆瓣做比较的话,豆瓣与天涯这样的BBS不同还在于,它首先有一个物的概念,比如书,音乐,和电影。

本刊记者:我也发现了这点。这样的组织方式,给人的感觉会非常不同。比如我们要查找对余华的小说《活着》的评论,在豆瓣就比较容易找到认真,有质量的评论。而在传统的BBS上,你只能用查找的方式,搜索“活着”这个词,找出的东西,也可能还不是谈论《活着》这本小说的,而只是其中的文本包含了“活着”这个词,而且有很多无意义的吵架帖。豆瓣的组织方式,让人感觉很严肃,雅气。不过,我也发现了一个或许有些不便的地方,比如,我要在讨论德里达的小组回帖,在一般的BBS可以匿名,或具有一个ID就行了,但在豆瓣,我要首先参加德里达这个小组。

张贝宁:对,是这样的。豆瓣更关心的是人群,就是对同一话题和事物有兴趣的人群,而不是帖子,这与传统的BBS确实有一些区别。

本刊记者:好,就到这里。谢谢你们两位能够接受我的采访,分享你们的经验与思想。

Hadoop集群系列1:CentOS安装配置

2015年1月14日 评论已被关闭

Hadoop集群系列1:CentOS安装配置

http://developer.51cto.com/art/201206/342067_all.htm

1、准备安装

1.1 系统简介

CentOS 是什么?

CentOS是一个基于Red Hat 企业级 Linux 提供的可自由使用的源代码企业级的 Linux 发行版本。每个版本的 CentOS 都会获得七年的支持(通过安全更新方式)。新版本的 CentOS 每两年发行一次,而每个版本的 CentOS 会定期(大概每六个月)更新一次,以便支持新的硬件。这样,建立一个安全、低维护、稳定、高预测性、高重复性的 Linux 环境。

CentOS(Community Enterprise Operating System)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。两者的不同,在于CentOS并不包含封闭源代码软件。

CentOS是一个开源软件贡献者和用户的社区。它对RHEL源代码进行重新编译,成为众多发布新发行版本的社区当中的一个,并且在不断的发展过程中,CentOS社区不断与其他的同类社区合并,使CentOS Linux逐渐成为使用最广泛的RHEL兼容版本。CentOS Linux的稳定性不比RHEL差,唯一不足的就是缺乏技术支持,因为它是由社区发布的免费版。

CentOS Linux与RHEL产品有着严格的版本对应关系,例如使用RHEL4源代码重新编译发布的是CentOS Linux 4.0,RHEL5对应的是CentOS Linux 5.0,RHEL6对应的是CentOS Linux 6。由于RHEL产品的生命周期较长(通常具有3~5年的官方支持),因此Red Hat公司在RHEL系列产品发布后每隔一段时间,都会将累积的更新程序重新打包成为更新的发行版进行发布,通常称为RHEL Update。

例如,RHEL5的第1个更新版本叫做RHEL 5 Update 1,用户通常也称为RHEL 5.1。对Red Hat公司发布的每一个RHEL Update CentOS社区都会发布对应的更新发行版,例如根据RHEL 5的Update 1更新程序源码包,CentOS会重新编译并打包发布CentOS Linux 5.1版。CentOS Linux和与之对应版本号的RHEL发行版具有软件包级别的二进制兼容性,即某个RPM软件包如果可以安装运行在RHEL产品中,就可以正常地安装运行在对应版本的CentOS Linux中。CentOS Linux由于同时具有与RHEL的兼容性和企业级应用的稳定性,又允许用户自由使用,因此得到了越来越广泛的应用。

CentOS特点

可以把CentOS理解为Red Hat AS系列!它完全就是对Red Hat AS进行改进后发布的!各种操作、使用和RED HAT没有区别!

CentOS完全免费,不存在RED HAT AS4需要序列号的问题。

CentOS独有的yum命令支持在线升级,可以即时更新系统,不像RED HAT那样需要花钱购买支持服务!

CentOS修正了许多RED HAT AS的BUG!

CentOS版本说明: CentOS3.1 等同于 RED HAT AS3 Update1 CentOS3.4 等同于 RED HAT AS3 Update4 CentOS4.0 等同于 RED HAT AS4。

1.2 安装版本

本次安装我们选择CetOS6.0版本,下面从几个方面介绍一下这个版本。

集成基于内核的虚拟化。CentOS 6.0集成了基于内核的虚拟化,将KVM管理程序完全集成到内核中。这样的功能可以帮助CentOS 6.0用户在主机之间轻松迁移虚拟机,更加灵活地部署和管理IT资源,有效为企业节省资源。利用内核的硬件抽象使应用程序能够独立于底层硬件,并且提高 CPU和内存可扩展性,使每个服务器可容纳更多虚拟机。

提升系统和资源管理功能。基于标准的Linux可管理性规范(SBLIM)使用基于Web的企业管理(WBEM)来管理系统。用Dracut取代mkinitrd,最大限度地减少底层硬件改变的影响,更易于维护,并使支持第三方驱动程序更容易。

加强电源管理,按时的内核改进使CentOS 6.0可以将没有活动任务的处理器置为空闲状态,以达到降低CPU的温度和更进一步减少能耗。

在一种叫做控制组(即cgroups)的新框架的帮助下CentOS 6.0提供对硬件资源的细颗粒度控制、分配和管理。cgroups运行在进程组水平上,可被用于为应用管理从CPU、内存、网络和硬盘I/O的资源。

增强了系统的可靠性、可用性和适用性。CentOS 6.0利用新硬件能力提供热插拔特性,并且可以通过AER的PCIe设备的增强错误检查。CentOS 6.0包括高级数据完整性特性(DIF/DIX)。这类特性通过硬件检查和检验来自应用的数据。自动缺陷报告工具(ABRT)的引进提供了确定和报告系统 异常情况,包括内核故障和用户空间应用崩溃等。

改进了可伸缩性和内核性能。CentOS 6.0提供了适应未来系统的可伸缩性,其可伸缩性能力从对大量CPU和内存配置的优化的支持到处理更多数量的系统互联总线和外设的能力。在虚拟化变得同裸机部署一样无处不在之时,这些能力适合于裸机环境和虚拟化环境。

CentOS 6.0改进了内核性能,可以通过让更高优先级的进程在最低限度的较低优先级处理干扰的条件下,更公平地在处理器之间分配计算时间。同时CentOS 6.0将多种多处理器锁同步进行改进,以消除不必要的锁定事件、用睡眠锁定代替许多旋转(spin)锁定和采用更高效的锁定基元。

稳定的应用程序开发与生产平台。CentOS 6.0是一个高性能、高度可扩展、分布式、基于内存的对象缓存系统,大大提高了动态Web应用程序的速度。在Web基础架构上主要改进了Apache、 Squid和Memcached三个方面的改进。在Java性能支持上,CentOS 6.0和OpenJDK的紧密集成包括在SystemTap中支持Java探测器,从而可支持更好的Java调试。同时,CentOS 6.0也在逐步完善Tomcat 6的支持。

官方网站与文档

官方主页: http://www.centos.org/

官方Wiki: http://wiki.centos.org/

官方中文文档 :http://wiki.centos.org/zh/Documentation

安装说明: http://www.centos.org/docs/

1.3 硬件信息

现在Linux发行版的安装程序的硬件识别能力都比较强,即使不查询什么硬件信息,安装操作系统也没有什么大问题,不过对于非常新的硬件和笔记本电脑这样比较特殊的设备,还是建议在网络上查询一下相关硬件的信息,以确保硬件可以被驱动。这里列举几种可能需要重点考察的硬件,对于任何一种发行版都需要注意如下这些问题。

主板芯片组支持。这是一组比较重要的硬件信息,可能影响到硬盘是否可以使用、可以启用UDMA,是否可以使用ACPI或APM电源管理等。这里的支持程序总是和内核版本相关的,考察的时候要注意对应的内核版本。

网络设备支持。目前,对于一般用户主要是以太网卡和无线网卡,有些无线网卡的驱动还没有被整合进内核,但确实已经有驱动支持了。

声卡。Linux对声音芯片的支持在历史上饱受诟病,但自从ALSA(Advanced Linux Sound Architecture)诞生以来,这个问题已经得到了很大程序的缓解,现在,ALSA是2.6内核的一部分。不过,仍然有一些声卡问题不时地出现。特别的,目前大多数的用户使用的是主板板载声卡,在安装系统之前应该考察一下Linux内核对该主板芯片声效功能的支持。

显卡。主流的显卡目前都可以得到支持,如果需要的话,看一下显卡芯片的厂商、型号、显存大小基本就可以了,如果希望省事的话,可以考虑选择性能虽然不强,但开源驱动的稳定性和性能最好的Intel整合显卡,而追求高性能显卡的用户可以考虑NVIDIA芯片并在日后使用官方的驱动程序,来获得更好的3D性能,ATI/ADM显卡目前的Linux驱动是不理想的,但AMD已经开放了芯片的技术规范,未来一定会得到开源驱动的良好支持。

其他外设。USB键盘和鼠标一般都可以被支持,少数最低端的硬盘盒的移动硬盘可能不会被支持,摄像头这些小硬件大部分都可以被支持了,另外就是一些笔记本电脑,需要考察一下。

为了有备无患,要考察的信息还是比较多的,除了上网查找和询问周围的朋友外,使用Live CD进行体验也是一个很不错的办法。

1.4 硬盘分区

在计算机上安装Linux系统,对硬盘进行分区是一个非常重要的步骤,下面介绍几个分区方案。

方案1(桌面)

/boot:用来存放与Linux系统启动有关的程序,比如启动引导装载程序等,建议大小为100MB。

/:Linux系统的根目录,所有的目录都挂在这个目录下面,建议大小为5GB以上。

/home:存放普通用户的数据,是普通用户的宿主目录,建议大小为剩下的空间。

swap:实现虚拟内存,建议大小是物理内存的1~2倍。

方案2(服务器)

/boot:用来存放与Linux系统启动有关的程序,比如启动引导装载程序等,建议大小为100MB。

/usr:用来存放Linux系统中的应用程序,其相关数据较多,建议大于3GB以上。

/var:用来存放Linux系统中经常变化的数据以及日志文件,建议大于1GB以上。

/home:存放普通用户的数据,是普通用户的宿主目录,建议大小为剩下的空间。

/:Linux系统的根目录,所有的目录都挂在这个目录下面,建议大小为5GB以上。

/tmp:将临时盘在独立的分区,可避免在文件系统被塞满时影响到系统的稳定性。建议大小为500MB以上。

swap:实现虚拟内存,建议大小是物理内存的1~2倍。

2、光盘安装

2.1 安装引导

首先要设置计算机的BIOS启动顺序为光驱启动,保存设置后将安装光盘放入光驱,重新启动计算机。

计算机启动以后会出现如下图所示的界面。

1002280

你可以直接按下<Enter>来进入图形界面的安装方式或者等待60秒。

下面是上图所示引导菜单选项如下:

Install or upgrade an existing system(安装或升级现有系统):

这个选项是默认的。 选择此选项,安装到您的计算机使用CentOS的图形安装程序的系统。

Install system with basic video driver(安装系统,基本的视频驱动程序):

此选项允许您安装CentOS的模式,即使在图形安装程序无法加载视频卡的正确驱动程序为您的。如果你的屏幕上出现扭曲或一片空白时使用的安装或升级现有系统的选项,重新启动计算机,并尝试此选项。

Rescue installed system(救援安装的系统):

选择这个选项来修复您的安装CentOS系统,防止正常启动你一个问题。虽然CentOS是一个非常稳定的计算平台,它是偶然的问题仍有可能发生,防止启动。 救援环境包含实用程序,允许您解决这些问题,品种繁多。

Boot from local drive(从本地驱动器启动):

此选项将引导从第一个安装的磁盘系统。 如果你意外地启动这个光盘,使用未立即启动安装程序这是从硬盘启动选项。

2.2 检测光盘介质

如下图所示,如果是一张完整的安装盘,可以直接单击”Skip”按钮跳过,否则单击”OK”按钮检测安装盘的完整性。

1002281

备注:如果你确定你所下载的DVD或光盘没有问题的话,那么这里可以选择’Skip’, 不过,你也可以按下’OK’来进行DVD的分析,因为通过DVD的分析后,后续的安装比较不会出现奇怪的问题。 不过如果你按下’OK’后,程式会开始分析光盘内的所有文件的资讯,会花非常多的时间喔!

2.3 安装欢迎界面

当检测完电脑硬件信息后,进入安装欢迎界面,如下图所示。

1002282

2.4 选择安装过程中的语言

单击”Next”按钮进入如下图所示的界面,选择安装过程中使用的语言,此处选择”Chinese (Simplified)(中文(简体))”。

1002283

2.5 选择键盘布局类型

选择完安装过程中的语言后,单击”下一步”按钮进入如下图所示的界面,选择键盘类型一般默认会选择”美国英语式(U.S.English)”,即美式键盘,在此使用默认的选择。

1002284

2.6 选择设备

选择一种存储设备进行安装。”基本存储设备”作为安装空间的默认选择,适合哪些不知道应该选择哪个存储设备的用户。而”指定的存储设备”则需要用户将系统安装指定到特定的存储设备上,可以是本地某个设备,当然也可以是SAN(存储局域网)。用户一旦选择了这个选项,可以添加FCoE/iSCSI/zFCP磁盘,并且能够过滤掉安装程序应该忽略的设备。这里选择”基本存储设备”,单击”下一步”按钮。

1002285

备注:基本存储设备:用于台式机和笔记本等等;指定存储设备:用于服务器等等。

2.7 初始化硬盘

如果硬盘上没有找到分区表,安装程序会要求初始化硬盘。此操作使硬盘上的任何现有数据无法读取。如果您的系统具有全新的硬盘没有操作系统安装,或删除硬盘上的所有分区,则单击 “重新初始化”。

1002286

备注:安装程序将为您提供一个单独的对话框,为每个磁盘,它无法读取一个有效的分区表。单击”忽略所有”按钮,或”重新初始化所有”按钮,可将应用到所有设备相同的答案。

2.8 设置主机名与网络

安装程序会提示您提供和域名为这台计算机的主机名格式,设置主机名和域名 。 许多网络有DHCP(动态主机配置协议)服务,它会自动提供域名系统的一个连接,让用户输入一个主机名。除非您有特定需要定制的主机名和域名,默认设置 localhost.localdomain 是一个很好的选择大多数用户。我们这里按照下表进行填写主机名和域名,详情请看”Hadoop集群_第2期_机器信息分布表”。

表2.8-1 机器信息分布

 
机器名称 IP地址
Master.Hadoop 192.168.1.2
Salve1.Hadoop 192.168.1.3
Salve2.Hadoop 192.168.1.4
Salve3.Hadoop 192.168.1.5

1002287

设置固定IP

选择『配置网络』à『有线』à『eth0』à『编辑』,弹出编辑窗口上选择”IPv4设置”,打开”方法”边上的下拉菜单,选择”手动”。单击 “添加”按钮,依次输入本机的IP、子网掩码、网关。在下面的”DNS服务器”处输入DNS地址。最后,点击”应用”按钮即可。

1002288

按照前面的表2.8-1进行配置IP地址。

1002289 10022810

2.9 时区选择

因为全世界分为24个时区,所以,要告知系统时区在哪里。如下图所示,你可以选择北京,或直接用鼠标在地图上选择。要特别注意UTC,它与”夏令时”有关,我们不需要选择这个选项,否则会造成时区混乱,导致系统显示的时间与本地时间不同。

10022811

2.10 设置管理员密码

下面是最重要的”系统管理员的口令”设置,如下图所示。在Linux中,系统管理员的默认名称为root,请注意,这个口令很重要。至少6个字符以上,含有特殊符号,并要记好。

10022812

备注:当你设置好进入下一步时,由于你的密码可能设置的过于简单,此时会弹出一个对话框,如果你要坚持你设置的密码,可以选择”无论如何都是用”。

2.11 磁盘分区配置

为方便大家分区硬盘,CentOS预设给了我们分区模式,分别为:

10022813

备注:我们实际是直接选的是”使用所有空间”,当时就是图方便,但实际工作中却要按照实际的要求对硬盘进行分区,合理利用硬盘。而这里选择”创建自定义布局”,按照1.4小节给出的服务器分区方案对硬盘重新分区。

下面是对每个选项的详细介绍:

使用所有空间(Use All Space ):

选择此选项,删除您硬盘上的所有分区(这包括如Windows的NTFS分区VFAT或其他操作系统创建的分区)。

替换现有的Linux系统(Replace Existing Linux System):

选择此选项,以消除先前的Linux安装创建的分区。 这不会删除其他分区(如VFAT或FAT32分区),你可能对您的硬盘驱动器。

  • 缩小现有系统(Shrink Current System):

选择此选项,调整当前的数据和分区安装在手动释放的空间是一个默认的红帽企业Linux布局。

  • 使用剩余空间(Use Free Space):

选择此选项以保留您当前的数据和分区并安装在未使用的存储驱动器上的空间可用的Scientific。 确保有足够的存储驱动器上的可用空间,然后再选择此选项。

  • 创建自定义布局(Create Custom Layout):

选择此选项,手动存储设备进行分区并创建自定义布局。

下面是”创建自定义布局”的步骤:

第一步:选择”创建自定义布局”,按”下一步”按钮;如下图所示。

10022814

第二步:创建”/boot”

选择要分区的空闲空间,按下”创建”后,就会出现如下的画面。选择”标准分区”后,点击”生成”。

10022815

挂载点:选择”/boot”;文件系统类型:使用默认”Ext4 日志文件系统”;大小:输入分配的大小100,以 MB 为单位;其它大小选项:选择”固定大小”;点”确定”按钮。

10022816

第三步:创建”/”

继续选择空闲空间,按下”创建”后,就会出现如下的画面。选择”标准分区”后,点击”生成”。

挂载点:选择”/”;文件系统类型:使用默认”Ext4 日志文件系统”;大小:输入分配的大小5000,以 MB 为单位;其它大小选项:选择”固定大小”;点”确定”按钮。

10022817

第四步:创建交换空间

继续选择空闲空间,点”创建”后,就会出现如下的画面。选择”标准分区”后,点击”生成”。

文件系统类型:选择”swap”;大小:输入分配的大小1000,以 MB 为单位;其它大小选项:选择”固定大小”。点”确定”按钮。

10022818

备注:”交换空间”用于实现虚拟内存,建议大小是物理内存的1~2倍。

第五步:创建”/usr”

继续选择空闲空间,按下”创建”后,就会出现如下的画面。选择”标准分区”后,点击”生成”。

挂载点:选择”/usr”;文件系统类型:使用默认”Ext4 日志文件系统”;大小:输入分配的大小3000,以 MB 为单位;其它大小选项:选择”固定大小”;点”确定”按钮。

10022819

第六步:创建”/var”

继续选择空闲空间,按下”创建”后,就会出现如下的画面。选择”标准分区”后,点击”生成”。

挂载点:选择”/var”;文件系统类型:使用默认”Ext4 日志文件系统”;大小:输入分配的大小1000,以 MB 为单位;其它大小选项:选择”固定大小”,点”确定”按钮。

备注:图与第五步基本相同,故略。

第七步:创建”/tmp”

继续选择空闲空间,按下”创建”后,就会出现如下的画面。选择”标准分区”后,点击”生成”。

挂载点:选择”/tmp”;文件系统类型:使用默认”Ext4 日志文件系统”;大小:输入分配的大小500,以 MB 为单位;其它大小选项:选择”固定大小”,点”确定”按钮。

备注:图与第五步基本相同,故略。

第八步:”/home”分区

继续选择空闲空间,点”创建”后,就会出现如下的画面。选择”标准分区”后,点击”生成”。

挂载点:选择”/home”;文件系统类型:使用默认”Ext4 日志文件系统”;其它大小选项:选择”使用全部可用空间”,点”确定”按钮。

10022820

至此,分区已全部创建完毕,如果不满意,还可以点击”重设”按钮进行更改。如果确定,就点”下一步”按钮后,弹出”是否格式化以下已存在的硬盘”,选择”格式化”。

10022821

安装程序会提示您确认您所选的分区选项。单击”将修改写入磁盘”,以允许安装程序在您的硬盘进行分区,并安装系统更改。

10022822

2.12引导装载程序设置

如下图所示为GRUB引导安装窗口,可采用默认设置,直接单击”下一步”按钮。

10022823

备注:设置引导装载程序密码的方法是,选择”使用引导装载程序口令”,在弹出的窗口中输入密码。我们实际中并没有设置此项。

2.13选择安装的软件包

可选的服务器类型更多,而且默认安装是一个非常小的甚至不完整的系统。选中”现在自定义”,然后单击”下一步”按钮,如下图所示。

10022824

可选的类型说明如下:

  • Desktop:基本的桌面系统,包括常用的桌面软件,如文档查看工具。
  • Minimal Desktop:基本的桌面系统,包含的软件更少。
  • Minimal:基本的系统,不含有任何可选的软件包。
  • Basic Server:安装的基本系统的平台支持,不包含桌面。
  • Database Server:基本系统平台,加上MySQL和PostgreSQL数据库,无桌面。
  • Web Server:基本系统平台,加上PHP,Web server,还有MySQL和PostgreSQL数据库的客户端,无桌面。
  • Virtual Host:基本系统加虚拟平台。
  • Software Development Workstation:包含软件包较多,基本系统,虚拟化平台,桌面环境,开发工具。

备注:我们这里安装Linux是作为服务器使用,没有必要安装图形界面,故选择的是最小化安装(Minimal),如果想安装图形界面,可以选择桌面安装(Desktop)。

因为上一步我们选择的是最小化安装(Minimal),所以在以下软件包设置画面中,所有的软件包默认都是没有被选中的状态。这里我们只选择我们需要的软件包来安装。

首先,选中「基本系统」中的「基本」。

10022825

然后,选中「开发」中的「开发工具」。

10022826

最后,在「语言支持」中选中「中文支持」。如果您有支持其他语言的需要,也可以在这里一并选择。最后点击”下一步”,开始安装。

10022827

2.14开始安装Linux系统

开始安装。在安装的画面中,会显示还需要多少时间,每个软件包的名称,以及该软件包的简单说明,如下图所示。

10022828

等到安装完之后,一切就都完成了。出现最后这个画面时,请将光盘拿出来,并按下”重新引导”按钮去启动,如下图所示。

10022829

3、环境设置

在CentOS 6刚刚安装好之后,默认的安全设置以及服务启动等等可能并不符合我们的需求,所以在搭建各种系统服务之前,我们先将系统环境设置为最为简洁的状态,在以后开通各种服务的时候,在按照服务的需求来进行具体的定制。

3.1 建立一般用户

root 用户拥有控制整个系统的最高权限,如果在一般的操作中我们用 root 来进行,很容易不小心对系统造成误删、误更改等操作,所以我们首先建立一般用户,用一般用户来应付日常的系统操作。

10022830

在一般用户建立成功以后,我们就可以用一般用户来登录系统进行日常的系统管理。在一些需要 root 权限的情况,我们可以通过以下方式在一般用户的登录状态下直接登录为 root 用户来进行需要 root 权限的操作。

10022831

如以上示范,我们可以在一般用户登录的状态下通过”su -“命令来直接登录为 root 用户。

3.2 关闭防火墙及SELinux

本站文档是假定「服务器在防火墙以内」的前提下编纂的,在这个前提下,服务器本身在内部网络是不需要防火墙的(在需要抵御内部安全威胁的情况下,您也可以用您在 iptables 方面的相关知识,根据实情设置防火前,并保证服务器端防火墙启动的状态)。另外,在一般情况下,我们不需要 SELinux 复杂的保护,所以也将其设置为无效的状态。

关闭防火墙

10022832

关闭SELinux

用下面命令执行,并修改内容如下所示:

vim /etc/sysconfig/selinux

SELINUX=enforcing

SELINUX=disabled

10022833

接着在执行如下命令:

setenforce 0

getenforce

10022834

3.3 关闭不需要的服务

使用下面命令进行关闭不需要的服务:

for SERVICES in abrtd acpid auditd avahi-daemon cpuspeed haldaemon mdmonitor messagebus udev-post; do chkconfig ${SERVICES} off; done

10022835

备注:该文档由于是事后很久才编写,当时在安装Linux的时候,所以本节的3.2和3.3并没有进行,以至于后来遇到不少麻烦,所以在这里把这些遗漏的补上。另外本文档所有的截图并不是当时实际安装,而是为了编写此文档在虚拟机上安装时截的图,所以个别图上的信息反映的是虚拟机的硬件信息,在实际中则不一样,安装时请注意细微差别。

原文链接:http://www.cnblogs.com/xia520pi/archive/2012/05/16/2503770.html

(总结)Nginx/LVS/HAProxy负载均衡软件的优缺点详解

2015年1月9日 评论已被关闭

(总结)Nginx/LVS/HAProxy负载均衡软件的优缺点详解

http://www.ha97.com/5646.html

PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下。

一般对负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术。具体的应用需求还得具体分析,如果是中小型的Web应用,比如日PV小于1000万,用Nginx就完全可以了;如果机器不少,可以用DNS轮询,LVS所耗费的机器还是比较多的;大型网站或重要的服务,且服务器比较多时,可以考虑用LVS。

一种是通过硬件来进行进行,常见的硬件有比较昂贵的F5和Array等商用的负载均衡器,它的优点就是有专业的维护团队来对这些服务进行维护、缺点就是花销太大,所以对于规模较小的网络服务来说暂时还没有需要使用;另外一种就是类似于Nginx/LVS/HAProxy的基于Linux的开源免费的负载均衡软件,这些都是通过软件级别来实现,所以费用非常低廉。

目前关于网站架构一般比较合理流行的架构方案:Web前端采用Nginx/HAProxy+Keepalived作负载均衡器;后端采用MySQL数据库一主多从和读写分离,采用LVS+Keepalived的架构。当然要根据项目具体需求制定方案。
下面说说各自的特点和适用场合。

Nginx的优点是:

1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构,它的正则规则比HAProxy更为强大和灵活,这也是它目前广泛流行的主要原因之一,Nginx单凭这点可利用的场合就远多于LVS了。
2、Nginx对网络稳定性的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势之一;相反LVS对网络稳定性依赖比较大,这点本人深有体会;
3、Nginx安装和配置比较简单,测试起来比较方便,它基本能把错误用日志打印出来。LVS的配置、测试就要花比较长的时间了,LVS对网络依赖比较大。
3、可以承担高负载压力且稳定,在硬件不差的情况下一般能支撑几万次的并发量,负载度比LVS相对小些。
4、Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测。比如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,Nginx会把上传切到另一台服务器重新处理,而LVS就直接断掉了,如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而不满。
5、Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器。LNMP也是近几年非常流行的web架构,在高流量的环境中稳定性也很好。
6、Nginx现在作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,可以考虑用其作为反向代理加速器。
7、Nginx可作为中层反向代理使用,这一层面Nginx基本上无对手,唯一可以对比Nginx的就只有lighttpd了,不过lighttpd目前还没有做到Nginx完全的功能,配置也不那么清晰易读,社区资料也远远没Nginx活跃。
8、Nginx也可作为静态网页和图片服务器,这方面的性能也无对手。还有Nginx社区非常活跃,第三方模块也很多。

Nginx的缺点是:
1、Nginx仅能支持http、https和Email协议,这样就在适用范围上面小些,这个是它的缺点。
2、对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测。不支持Session的直接保持,但能通过ip_hash来解决。

LVS:使用Linux内核集群实现一个高性能、高可用的负载均衡服务器,它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability)。

LVS的优点是:
1、抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的,对内存和cpu资源消耗比较低。
2、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率。
3、工作稳定,因为其本身抗负载能力很强,自身有完整的双机热备方案,如LVS+Keepalived,不过我们在项目实施中用得最多的还是LVS/DR+Keepalived。
4、无流量,LVS只分发请求,而流量并不从它本身出去,这点保证了均衡器IO的性能不会收到大流量的影响。
5、应用范围比较广,因为LVS工作在4层,所以它几乎可以对所有应用做负载均衡,包括http、数据库、在线聊天室等等。

LVS的缺点是:
1、软件本身不支持正则表达式处理,不能做动静分离;而现在许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在。
2、如果是网站应用比较庞大的话,LVS/DR+Keepalived实施起来就比较复杂了,特别后面有Windows Server的机器的话,如果实施及配置还有维护过程就比较复杂了,相对而言,Nginx/HAProxy+Keepalived就简单多了。

HAProxy的特点是:
1、HAProxy也是支持虚拟主机的。
2、HAProxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导;同时支持通过获取指定的url来检测后端服务器的状态。
3、HAProxy跟LVS类似,本身就只是一款负载均衡软件;单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。
4、HAProxy支持TCP协议的负载均衡转发,可以对MySQL读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,大家可以用LVS+Keepalived对MySQL主从做负载均衡。
5、HAProxy负载均衡策略非常多,HAProxy的负载均衡算法现在具体有如下8种:
① roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;
② static-rr,表示根据权重,建议关注;
③ leastconn,表示最少连接者先处理,建议关注;
④ source,表示根据请求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为解决session问题的一种方法,建议关注;
⑤ ri,表示根据请求的URI;
⑥ rl_param,表示根据请求的URl参数’balance url_param’ requires an URL parameter name;
⑦ hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
⑧ rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。

Nginx和LVS对比的总结:
1、Nginx工作在网络的7层,所以它可以针对http应用本身来做分流策略,比如针对域名、目录结构等,相比之下LVS并不具备这样的功能,所以Nginx单凭这点可利用的场合就远多于LVS了;但Nginx有用的这些功能使其可调整度要高于LVS,所以经常要去触碰触碰,触碰多了,人为出问题的几率也就会大。
2、Nginx对网络稳定性的依赖较小,理论上只要ping得通,网页访问正常,Nginx就能连得通,这是Nginx的一大优势!Nginx同时还能区分内外网,如果是同时拥有内外网的节点,就相当于单机拥有了备份线路;LVS就比较依赖于网络环境,目前来看服务器在同一网段内并且LVS使用direct方式分流,效果较能得到保证。另外注意,LVS需要向托管商至少申请多一个ip来做Visual IP,貌似是不能用本身的IP来做VIP的。要做好LVS管理员,确实得跟进学习很多有关网络通信方面的知识,就不再是一个HTTP那么简单了。
3、Nginx安装和配置比较简单,测试起来也很方便,因为它基本能把错误用日志打印出来。LVS的安装和配置、测试就要花比较长的时间了;LVS对网络依赖比较大,很多时候不能配置成功都是因为网络问题而不是配置问题,出了问题要解决也相应的会麻烦得多。
4、Nginx也同样能承受很高负载且稳定,但负载度和稳定度差LVS还有几个等级:Nginx处理所有流量所以受限于机器IO和配置;本身的bug也还是难以避免的。
5、Nginx可以检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点。目前LVS中 ldirectd也能支持针对服务器内部的情况来监控,但LVS的原理使其不能重发请求。比如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,Nginx会把上传切到另一台服务器重新处理,而LVS就直接断掉了,如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而恼火。
6、Nginx对请求的异步处理可以帮助节点服务器减轻负载,假如使用apache直接对外服务,那么出现很多的窄带链接时apache服务器将会占用大 量内存而不能释放,使用多一个Nginx做apache代理的话,这些窄带链接会被Nginx挡住,apache上就不会堆积过多的请求,这样就减少了相当多的资源占用。这点使用squid也有相同的作用,即使squid本身配置为不缓存,对apache还是有很大帮助的。
7、Nginx能支持http、https和email(email的功能比较少用),LVS所支持的应用在这点上会比Nginx更多。在使用上,一般最前端所采取的策略应是LVS,也就是DNS的指向应为LVS均衡器,LVS的优点令它非常适合做这个任务。重要的ip地址,最好交由LVS托管,比如数据库的 ip、webservice服务器的ip等等,这些ip地址随着时间推移,使用面会越来越大,如果更换ip则故障会接踵而至。所以将这些重要ip交给 LVS托管是最为稳妥的,这样做的唯一缺点是需要的VIP数量会比较多。Nginx可作为LVS节点机器使用,一是可以利用Nginx的功能,二是可以利用Nginx的性能。当然这一层面也可以直接使用squid,squid的功能方面就比Nginx弱不少了,性能上也有所逊色于Nginx。Nginx也可作为中层代理使用,这一层面Nginx基本上无对手,唯一可以撼动Nginx的就只有lighttpd了,不过lighttpd目前还没有能做到 Nginx完全的功能,配置也不那么清晰易读。另外,中层代理的IP也是重要的,所以中层代理也拥有一个VIP和LVS是最完美的方案了。具体的应用还得具体分析,如果是比较小的网站(日PV小于1000万),用Nginx就完全可以了,如果机器也不少,可以用DNS轮询,LVS所耗费的机器还是比较多的;大型网站或者重要的服务,机器不发愁的时候,要多多考虑利用LVS。

现在对网络负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术:

第一阶段:利用Nginx或HAProxy进行单点的负载均衡,这一阶段服务器规模刚脱离开单服务器、单数据库的模式,需要一定的负载均衡,但是仍然规模较小没有专业的维护团队来进行维护,也没有需要进行大规模的网站部署。这样利用Nginx或HAproxy就是第一选择,此时这些东西上手快, 配置容易,在七层之上利用HTTP协议就可以。这时是第一选择。

第二阶段:随着网络服务进一步扩大,这时单点的Nginx已经不能满足,这时使用LVS或者商用Array就是首要选择,Nginx此时就作为LVS或者Array的节点来使用,具体LVS或Array的是选择是根据公司规模和预算来选择,Array的应用交付功能非常强大,本人在某项目中使用过,性价比也远高于F5,商用首选!但是一般来说这阶段相关人才跟不上业务的提升,所以购买商业负载均衡已经成为了必经之路。

第三阶段:这时网络服务已经成为主流产品,此时随着公司知名度也进一步扩展,相关人才的能力以及数量也随之提升,这时无论从开发适合自身产品的定制,以及降低成本来讲开源的LVS,已经成为首选,这时LVS会成为主流。
最终形成比较理想的基本架构为:Array/LVS — Nginx/Haproxy — Squid/Varnish — AppServer

 

PHP网站简单架构 – 单独跑php-fpm

2015年1月9日 评论已被关闭

PHP网站简单架构 – 单独跑php-fpm

https://blog.linuxeye.com/358.html

PHP网站简单架构 – 单独跑php-fpm | Linux运维笔记

这个架构比较简单,不做过多的说明
前端1台Nginx:负载均衡+nfs
中间2台php:php-fpm
后端1台数据库:MySQL

php_architecture_1_2_1

安装略,参考lnmp最新源码一键安装包
192.168.112安装Tengine
192.168.1.113/192.168.1.115安装php
192.168.1.114安装MySQL

nfs配置
nfs服务端:192.168.1.112
检查nfs否已安装,这里我已经都安装了。

[root@linux2 ~]# rpm -qa | grep nfs
nfs-utils-1.0.9-66.el5
nfs-utils-lib-1.0.8-7.9.el5
[root@linux2 ~]# rpm -qa | grep portmap
portmap-4.0-65.2.2.1

如果你检查发现没有安装,可以使用一下命令进行安装;

yum -y install nfs-utils portmap
cat /etc/exports
/home/wwwroot   192.168.1.0/24(rw)

设置固定端口,方便配置iptables

cat >> /etc/sysconfig/nfs << EOF
RQUOTAD_PORT=50001
LOCKD_TCPPORT=50002
LOCKD_UDPPORT=50002
MOUNTD_PORT=50003
STATD_PORT=50004
EOF
iptables -I INPUT 5 -s 192.168.1.0/24 -p tcp -m state --state NEW -m tcp --dport 111 -j ACCEPT
iptables -I INPUT 6 -s 192.168.1.0/24 -p udp --dport 111 -j ACCEPT
iptables -I INPUT 7 -s 192.168.1.0/24 -p tcp -m state --state NEW -m tcp --dport 2049 -j ACCEPT
iptables -I INPUT 8 -s 192.168.1.0/24 -p udp --dport 2049 -j ACCEPT
iptables -I INPUT 9 -s 192.168.1.0/24 -p tcp -m state --state NEW -m tcp --dport 50001:50004 -j ACCEPT
iptables -I INPUT 10 -s 192.168.1.0/24 -p udp --dport 50001:50004 -j ACCEPT
service iptables save

开机自动启动nfs

chkconfig portmap on
chkconfig nfs on
service portmap start
service nfs start

现在看看启动的端口:

rpcinfo -p localhost

nfs客户端:192.168.1.113,192.168.1.115

yum -y install portmap
chkconfig portmap on
service portmap start

查看远程nfs共享信息

showmount -e 192.168.1.112

在/etc/fstab配置文件中添加如下,开机自动挂载

192.168.1.112:/home/wwwroot  /home/wwwroot      nfs     defaults        0 0

重新读取/etc/fstab配置文件挂载所有

mount -a

数据库:192.168.1.114
如:举例网站程序是discuz,创建数据库、赋权,让php能远程访问,如下:

# mysql -uroot -p
mysql> create database linuxeye_bbs;
mysql> grant all privileges on linuxeye_bbs.* to linuxeye_user@'192.168.1.%' identified by 'linuxeye_password';
mysql> flush privileges;

iptables配置

iptables -I INPUT 5 -s 192.168.1.0/24 -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
service iptables save

php:192.168.113
lnmp脚本用的是本机127.0.0.1,为了支持让前端Tengine访问,修改配置文件/usr/local/php/etc/php-fpm.conf

listen = 192.168.1.113:9000
listen.allowed_clients = 192.168.1.112
service php-fpm restart

iptables配置

iptables -I INPUT 5 -s 192.168.1.112 -p tcp -m state --state NEW -m tcp --dport 9000 -j ACCEPT
service iptables save

php:192.168.115
同理,修改/usr/local/php/etc/php-fpm.conf

listen = 192.168.1.115:9000
listen.allowed_clients = 192.168.1.112
service php-fpm restart

iptables配置

iptables -I INPUT 5 -s 192.168.1.112 -p tcp -m state --state NEW -m tcp --dport 9000 -j ACCEPT
service iptables save

Tengine:192.168.112
配置Tengine负载均衡,在主配置文件/usr/local/tengine/conf/nginx.conf中http段添加如下

        upstream cluster_discuz {
                ip_hash;
                server 192.168.1.112:9000;
                server 192.168.1.115:9000;
        }

添加虚拟主机文件
运行lnmp/vhost.sh,创建虚拟主机(我这里添加的直接是ip192.168.1.112)
修改虚拟主机配置文件/usr/local/tengine/conf/vhost/192.168.1.112.conf

location ~ .*\.(php|php5)?$  {
        fastcgi_pass cluster_discuz;
        fastcgi_index index.php;
        include fastcgi.conf;
        }

重启nginx

service nginx restart