树莓派使用实例之:2 Pi R 第二篇:Web服务器

简介:

在我的上一篇文章中讲过如何做一个高可用系统:两个树莓派布署上 GlusterFS 集群文件系统,就变成一个容错文件服务器了。在这篇文章中我们会基于这个高可用系统构建另一个容错服务:建立一个简单的 Web 服务器集群。

可能你没有看过我的上一篇文章,那我就在这里简单回顾一下上次的内容。我有两个树莓派:Pi1 和 Pi2。Pi1 的 IP 地址为 192.168.0.121,Pi2 的 IP 地址为 192.168.0.122。我把它们组合成为 GlusterFS 集群系统,共享一个存储卷,卷名为 gv0。并且这个 gv0 被挂载在两个树莓派上,挂载点都是 /mnt/gluster1,这样一来,两个树莓派能同时访问到这个共享卷。最后我测试了下系统的容错性,将共享卷挂载到第三个物理机上,并执行共享卷上的一个简单的脚本:打印系统时间并输出到 gv0 上的一个文件内,然后轮着关掉两台树莓派,检测这个冗余系统是否还能用。

现在我手上有这个经过检验的存储系统,我要做的是把这个系统做成有容错功能的 Web 服务器集群。树莓派的 CPU 处理速度和内存资源都不是很高,好在对付一个静态 Web 服务器已经是绰绰有余了。我故意把这个例子做得非常简单,因为我觉得如果你能摆平这个简单的例子,你也能处理复杂一点的问题了。

安装 Nginx

虽然我也比较喜欢 Apache,但在资源有限的情况下,像 Nginx 这样功能全、性能高、资源占用少的 Web 服务器是比较理想的选择。在 Raspbian 的默认源中存在 Nginx,所以我只要登入一台树莓派并且输入以下命令:

 
  1. $ sudo apt-get update
  2. $ sudo apt-get install nginx

Nginx 安装好后,创建配置文件 /mnt/gluster1/cluster ,内容如下:

 
  1. server {
  2. root /mnt/gluster1/www;
  3. index index.html index.htm;
  4. server_name twopir twopir.example.com;
  5.  
  6. location / {
  7. try_files $uri $uri/ /index.html;
  8. }
  9. }

注意:我这里把服务器命名为“twopir”,你可以根据自己爱好命名你的网站。另外我把 Web 服务器的根目录设置为 /mng/gluster1/www。这样,我就能把我的静态文件放在这个共享存储系统内,从而让两个树莓派主机都访问到它们。

现在删除默认的 Nginx 配置文件,将上面配好的配置文件作为 Nginx 的配置文件。在 Debian 系统中,Nginx 将它的配置文件像 Apache 一样放在 sites-available 和 site-enabled 两个目录下面。虚拟主机配置文档放在 sites-available 中,而 sites-enabled 目录包含了你想生效的配置文件的软链接。

 
  1. $ cd /etc/nginx/sites-available
  2. $ sudo ln -s /mnt/gluster1/cluster .
  3. $ cd /etc/nginx/sites-enabled
  4. $ sudo rm default
  5. $ sudo ln -s /etc/nginx/sites-available/cluster .

现在我已经放好了配置文件,但系统还不存在上面所说的 Web 服务器根目录。下一步就是创建目录 /mnt/gluster1/www,并复制 index.html 文件进去。当然你也可以建立自己定义的 index.html 文件,但先复制一个已有的文件是个不错的选择:

 
  1. $ sudo mkdir /mnt/gluster1/www
  2. $ cp /usr/share/nginx/www/index.html /mnt/gluster1/www

重启 Nginx 服务:

 
  1. $ sudo /etc/init.d/nginx restart

现在去 DNS 服务器为192.168.0.121的树莓派配置记录。你可以根据自己的情况配置你自己的域名和 IP 地址。现在在浏览器上输入 http://twopir/ 然后出现默认的 Nginx 首页。如果你查看下 /var/log/nginx/access.log 文件,你可以看到点击网页留下的记录。

Nginx 能正常工作后,配置第二个树莓派。因为我们已经将配置文件都放在 GlusterFS 共享目录下,我们现在要做的只是安装 Nginx,创建相关的软链接,重启 Nginx:

 
  1. $ sudo apt-get update
  2. $ sudo apt-get install nginx
  3. $ cd /etc/nginx/sites-available
  4. $ sudo ln -s /mnt/gluster1/cluster .
  5. $ cd /etc/nginx/sites-enabled
  6. $ sudo rm default
  7. $ sudo ln -s /etc/nginx/sites-available/cluster .
  8. $ sudo /etc/init.d/nginx restart

DNS 服务器上配置两条 A 记录

现在两个主机共享同一份文件,下一步是设置冗余系统的关键步骤。虽然你完全可以设置一个类似心跳的服务用于轮询检测哪个树莓派的 Web 服务是开启的,但这里有个更好的方法:给同一个主机名指定两个 DNS 的 A 记录,分别指向你的两个树莓派(译注:A 记录就是将域名转化为 IP 地址的记录,DNS 包含很多记录方式,如 A 记录、PTR 记录、MX 记录等等),这就是传说中的 DNS 负载均衡,DNS 访问主机时,如果主机名对应多个 IP 地址,DNS 会随机返回这些 IP 地址的顺序:

 
  1. $ dig twopir.example.com A +short
  2. 192.168.0.121
  3. 192.168.0.122
  4. $ dig twopir.example.com A +short
  5. 192.168.0.122
  6. 192.168.0.121

因为返回随机的顺序,用户可以均匀地往两台服务器发送请求,这个负载均衡的机制就是由 DNS 服务器的多条 A 记录来提供。相对于 DNS 的负载均衡技术,我更感兴趣的是 Web 浏览器如何处理请求失败的情况。当浏览器通过网页主机获得两条 A 记录,并且第一条记录所在的主机当机了,浏览器几乎立刻就切到另一条记录上。切换效率快到用户根本察觉不出来,这可比传统的心跳线轮循请求主机快多了。

所以在你正在使用的 DNS 服务器上添加你的树莓派集群的两个 IP 地址,然后试试 dig 命令,就像我在上面使用过的一样,你也应该能得到两个 IP 地址。

当你为同一个域名设置好了两个 A 记录,这套集群就可以提供容错服务了。打开两个终端并分别登录到两个树莓派,运行 tail -f /var/log/ngnix/access.log 命令,你可以监视 Web 服务器的访问情况。当你通过浏览器访问网页时,你可以看到在一台树莓派上产生了访问日志,而在另外一台的日志里什么也没有出现。现在你可以刷新几次页面,当你觉得你对能成功访问到 Web 服务器感到满意了,你可以重启响应你请求的那台树莓派,然后再刷新几次页面。也许浏览器上会出现一个短暂的不可访问信号,但会马上重定向到第二台树莓派上,你会看到一样的页面,并且你能通过终端访问日志了解具体情况。当第一台树莓派启动后,你在浏览器上根本不会察觉到。

(译注:如何处理DNS 轮询的多个IP地址,不同浏览器有不同的做法,目前译者收集到的资料显示,只有mozilla的netlib库支持自动重连下一个IP地址的做法。如果读者知道更多的浏览器对DNS轮询的处理策略,请评论给我们。其实,以译者的态度看,DNS轮询根本就不能算作是高可用性的方案,勉强可以算作是负载均衡方案,建议考虑更可靠的其它方案。)

随机重启一台树莓派,只要有一台在线,Web 服务器就能提供服务。这是一个非常简单的案例,你可以把你其它的静态文件放到 /mnt/gluster1/www 上,为你提供真正有价值的服务,现在好好享受你的低成本容错集群 Web 服务器吧。

原文发布时间为:2014-03-09

本文来自云栖社区合作伙伴“Linux中国”

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
5天前
计算机网络:思科实验【1-访问WEB服务器】
计算机网络:思科实验【1-访问WEB服务器】
计算机网络:思科实验【1-访问WEB服务器】
|
10天前
|
数据可视化 Shell Linux
shell+crontab+gitlab实现ecs服务器文件的web展示
本文通过把ecs服务器上的文件定时上传至gitlab,实现文件的页面可视化和修改历史。技术点:shell、crontab、gitlab。
37 3
|
1天前
|
存储 弹性计算 数据可视化
ECS实例概念
ECS实例是云上的虚拟计算服务器
8 2
|
2天前
|
存储 弹性计算 安全
阿里云服务器8核16G配置可选实例规格、收费标准及2024年优惠价格参考
阿里云服务器8核16G配置多少钱?可选实例规格有哪些?2024年的优惠价格是多少?根据阿里云2024年的收费标准及活动价格来看,8核16G配置云服务器的价格为3084.36元1年。阿里云服务器8核16G配置可选的规格有二十几个,不同实例的价格有所不同,下面是8核16G配置可选实例规格详解及优惠价格表。
阿里云服务器8核16G配置可选实例规格、收费标准及2024年优惠价格参考
|
3天前
|
存储 弹性计算 安全
阿里云服务器4核8G配置可选实例规格、收费标准及2024年优惠价格
阿里云服务器4核8G配置多少钱?可选实例规格有哪些?2024年的优惠价格是多少?根据阿里云2024年的收费标准及活动价格来看,4核8G配置云服务器的价格为199元1年。阿里云服务器4核8G配置可选的规格有二十几个,不同实例的价格有所不同,下面是4核8G配置可选实例规格详解及优惠价格表。
阿里云服务器4核8G配置可选实例规格、收费标准及2024年优惠价格
|
3天前
|
存储 弹性计算 安全
阿里云服务器2核4G配置可选实例规格、收费标准及2024年优惠价格
阿里云服务器2核4G配置多少钱?可选实例规格有哪些?2024年的优惠价格是多少?根据阿里云2024年的收费标准及活动价格来看,2核4G配置轻量应用服务器的最优惠的价格是165元1年,云服务器2核4G配置的价格为199元1年。阿里云服务器2核4G配置可选的规格有二十几个,不同实例的价格有所不同,下面是2核4G配置可选实例规格详解及优惠价格表。
阿里云服务器2核4G配置可选实例规格、收费标准及2024年优惠价格
|
4天前
|
弹性计算 固态存储 调度
阿里云199元服务器ECS u1实例2核4G5M带宽性能怎么样?
阿里云199元服务器ECS u1实例2核4G5M带宽性能怎么样?阿里云服务器ECS u1实例,2核4G,5M固定带宽,80G ESSD Entry盘优惠价格199元一年,性能很不错,CPU采用Intel Xeon Platinum可扩展处理器,购买限制条件为企业客户专享,实名认证信息是企业用户即可,新老用户均可购买,并且续费续费不涨价,企业客户新购续费皆¥199.00/1年,每年可下单1次。阿里云百科整理这台2核4G5M云服务器购买条件、详细配置、优惠价格和性能参数测评
|
4天前
|
弹性计算 数据可视化 应用服务中间件
2024年阿里云服务器2核2G配置有什么优惠?可选实例规格及优惠价格参考
阿里云服务器2核2G配置多少钱?可选实例规格有哪些?2024年的优惠价格是多少?根据阿里云2024年的收费标准及活动价格来看,2核2G配置轻量应用服务器的最优惠的价格是61元1年,云服务器2核2G配置的价格为99元1年。阿里云服务器2核2G配置可选的规格有4个,不同实例的价格有所不同,下面是2核2G配置可选实例规格详解及优惠价格表。
2024年阿里云服务器2核2G配置有什么优惠?可选实例规格及优惠价格参考
|
4天前
|
存储 弹性计算 编解码
阿里云服务器五代、六代、七代、八代实例有哪些?各自在性能方面有哪些提升?
阿里云服务器的实例规格经过多次升级之后,最新一代已经升级到第八代实例,当下主售的是以七代和八代云服务器为主,有的用户由于是初次接触阿里云服务器,所以不是很清楚阿里云服务器五代、六代、七代、八代实例有哪些,它们各自在云服务器性能上有哪些提升。下面小编为大家介绍下阿里云五代、六代、七代、八代云服务器实例规格分别有哪些以及每一代云服务器在性能方面具体有哪些提升,以供大家参考和了解。
阿里云服务器五代、六代、七代、八代实例有哪些?各自在性能方面有哪些提升?
|
4天前
|
安全 网络安全 开发者
如何在OpenWRT部署uhttpd搭建服务器实现远程访问本地web站点
如何在OpenWRT部署uhttpd搭建服务器实现远程访问本地web站点
18 0

相关产品

  • 云迁移中心