Online.net Xenserver 使用RPN-SAN的诸多问题

Online.net 的系统本身就有很多问题,加上XenServer 以后问题就更多了,再加上RPN – SAN 以后,那问题就更更更多了。。。

为什么要是用RPN-SAN? 

因为online.net 的服务器很多都是纯SSD 服务器,如果我们需要放置大量的图片的话,显然是不够的,这个时候RPN-SAN 就派上用场了, 在纯dedicated server上使用SAN,那是很容易的事情,直接挂载就可以了,在XenServer上挂载iSCSI 的 SAN,则稍微麻烦点, 有几点注意事项:

  1. XenServer 7 是建立在CentOS 7 上面的, iSCSI用的port 是3260, 所以需要在防火墙上打开3260
  2. Online.net 的RPN-SAN 用的是内网,位于 10.88.0.0/14. 如果你的online.net 的服务器是用的IPMI 安装的系统,那么你需要把这台服务器自带的Private IP 配置上. 关于private ip 的 netmask,和gateway 可以先用DHCP 激活,然后自己记录下来,稍后你可以一直使用DHCP,或者按照自己的意愿使用static
  3. 在购买完了Online.net 的 RPN-SAN以后,你需要在此RPN-SAN的管理页面,给使用此RPN-SAN 的dedicated server授权,这是从security 的角度考虑
  4. 于此同时,你还需要在RPN Group里面,把RPN-SAN 和使用此SAN 的服务器放置于同一个Group里面
  5. 一般来说,RPN-SAN 和 服务器的Private IP 需要在一个网段,我们这里可以使用10.88.0.0/14 或者10.90.0.0/15
  6. XenServer 需要手动添加一条面向private network 10.88.0.0/14 或者10.90.0.0/15的 route,这样是他们互相通信,为了方便,此文下面假设我们使用的是10.90.0.0/15这个网段
  7. XenServer 通过xapi 添加static route 的办法:
xe network-list
xe network-param-set uuid=<UUID> other-config:static-routes=10.90.0.0/15/10.90.23.1

在这命令里面,我们的网卡为xenbr2,IP 为10.90.23.44, Gateway 为10.90.23.1

运行完这条命令, 如果我们使用route -n 来查看route, 会发现没有任何变化, 这是因为我们需要重启系统或者运行xe-toolstack-restart 来使新的配置生效

添加static route 很简单,但是删除就比较麻烦了. 删除的话,需要一次性删除所有的static route,然后再添加我们认为必须的route.

删除所有static route:

xe network-param-remove uuid={network UUID} param-name=other-config param-key=static-routes

If there were some needed static route, add them back, for example:

xe network-param-set uuid={network UUID} other-config:static-routes=192.168.98.0/24/192.168.1.1,192.168.99.0/24/192.168.1.1

 

After that, reboot to make them take effect.

对于storage来说,我们经常会把NIC 的MTU 改为9000, steps to modify MTU in Senserver:

  1. shutdown guests
  2. reconfigure network

xe network-param-set uuid=<network-uuid> MTU=9000

      3. reboot hosts

       4. verify proper MTU sizing

CentOS 6 安装SmokePing教程

smokeping是对IDC网络质量,稳定性等最好的检测工具,包括常规的 ping,dig,echoping,curl等,可以 监视 www 服务器性能,监视 dns 查询性能,监视 ssh 性能等。Smokeping是rrdtool的作者Tobi Oetiker的作品,所以底层也是 rrdtool 做支持。smokeping是一个很老的开源项目了,不过考虑到现网以下两方面的需求,感觉还是有必要部署的。1、针对虚拟化平台主机重启速度较快,普通的监控平台可能敏感度不够;2、业务和网络部门经常有对网络质量和页面访问速度对比的需求。

smokeping安装前,可以参考官方安装页面:

http://oss.oetiker.ch/smokeping/doc/smokeping_install.en.html

具体要求如下:

RRDtool 1.2.x or later
FPing (optional)
EchoPing (Optional)
Curl (Optional)
dig (Optional)
SSH (Optional)
Webserver
Perl 5.8.8 or later(对应的模块如下)
 FCGI
 CGI, CGI::Fast
 Config::Grammar
 LWP
 Socket6 (optional)
 Net::Telnet (optional)
 Net::OpenSSH (optional)
 Net::DNS (optional)
 Net::LDAP (optional)
 IO::Socket::SSL (optional)
 Authen::Radius (optional)

更多

阿里云centos创建swap分区的办法

以前不用国内的云,现在一用。。真是不用不知道。。用了你就留掉坑里了。。系统盘只能升不能降。。

阿里云全系linux系统不配置swap分区,按照阿里云的说法是为了让大家多买内存。。。以减少对swap的依赖。。however,许多应用程序要求必须要有swap分区,比如说大名鼎鼎的oracle

话不多说,下面说下centos创建swap的方法. 目前主流的做法有两种: 一是创建一个单独的分区,专门用来做swap区,这是推荐的做法。但是对于阿里云来说,如果你没有加载第二个或者第三个数据盘,这是很难实现的。因为对系统盘做无损分区,这基本是不可能的事情。因此,只有当你挂载了第二个数据盘或者多个数据盘,还没有开始使用的情况下,可以使用这个方式;二是专门创建一个目录来做swap分区,这种方法不受系统盘和数据盘的限制,哪里有空间,哪里就可以设置。但是这种方式的速度不如直接挂载一个分区过去速度快。

第二种方式,阿里云的官方文档中有详细的说明: https://help.aliyun.com/knowledge_detail/42534.html

这里我就不多说了。这篇文章主要关注点在于创建一个分区然后挂载到swap分区上

swap 的大小,根据我多年的经验,在内存小于等于4G时,可以设置为内存的2倍;在大于4G时,建议设置为和内存大小一样。

对新数据盘进行分区,就是使用fdisk /dev/vdx 命令,然后跟着命令走就可以了

格式化的时候,和格式化普通格式硬盘不一样,需要使用mkswap命令, 加入我们创建的分区为/dev/vdb1

则命令为

mkswap /dev/vdb1

swapon /dev/vdb1

第一句话表明格式化为swap 分区,第二句话表示enable swap分区。

运行完这两个命令,用free -m就可以看到swap分区了。

如果在 /etc/rc.local 中有 swapoff -a 需要修改为 swapon -a

但是当你重启以后,你会发现swap又没有了。。这是因为我们需要把挂载swap的命令写入/etc/fstab里面

/dev/vbd1 swap swap defaults 0 0

但是这还没完呢

在 Linux 系统中,可以通过查看 /proc/sys/vm/swappiness 内容的值来确定系统对 SWAP 分区的使用原则。当 swappiness 内容的值为 0 时,表示最大限度地使用物理内存,物理内存使用完毕后,才会使用 SWAP 分区。当 swappiness 内容的值为 100 时,表示积极地使用 SWAP 分区,并且把内存中的数据及时地置换到 SWAP 分区。

标准的linux安装板,会把此值这是为60

可用下面的命令临时修改此项参数:

echo 10 >/proc/sys/vm/swappiness

若要永久修改此项配置,需要编辑/etc/sysctl.conf, 并增加一下内容:

# vim /etc/sysctl.conf
vm.swappiness=10
# sysctl -p

大型网站技术架构一

这篇文章同样来自于SF, 写的真心好,好好学习一下


网站都是从小网站一步一步发展为大型网站的,而这之中的挑战主要来自于庞大的用户、安全环境恶劣、高并发的访问和海量的数据,任何简单的业务处理,一旦需要处理数以 P 计的数据和面对数以亿计的用户时,问题就会变的很棘手

下面我们就来说说这个演变过程:

初始阶段

大型网站都是由小型网站演变而来的,网站架构也一样

小型网站最开始没有太多人访问,只需要一台服务器就绰绰有余,就像这样:::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::0

1478739355-5581-43471-581d720961069-articlex

应用程序、数据库、文件等所有资源都在一台服务器上,通常使用 Linux PHP MySQL Apache 就可以完成整个项目部署,然后再买个域名,租一个廉价的服务器就可以开始我们的网站之旅了

 

应用服务与数据服务分离

随着业务的发展,逐渐的一台服务器已经不能满足需求, 这时我们可以将 应用与数据分离

分离之后我们使用到三台服务器:应用服务器、文件服务器和数据库服务器,如下所示:

1478739658-3931-bVFaIO

对于这三台服务器要求各不相同:

应用服务器 要处理大量的业务逻辑,所以需要更好更快更强大的 CPU
数据库服务器 需要快速的进行磁盘检索和数据缓存,因此需要更快的硬盘和更大的内存
文件服务器 需要存储用户上传的文件资源,因此需要更大的硬盘存储空间

应用与数据分离后,各个的职责变得更加专一,网站的性能得到进一步的提升,但随着用户的继续增加,我们需要对网站架构进一步优化

使用缓存改善性能

网站的访问一样遵循二八定律:80% 的业务访问集中在 20% 的数据上面

因此我们要对这一小部分的数据进行缓存来减轻数据库的访问压力,以提高整个网站的数据访问速度,改善数据库的读写性能

网站的缓存可以分为两种:缓存在应用服务器上的本地缓存和缓存在专门的分布式缓存服务器上的远程缓存

本地缓存 的访问速度会快一些,但是受应用服务器内存限制,缓存数据量很有限,而且会出现内存争用的情况
远程分布式缓存 可以使用集群的方式,部署大内存的服务器作为专门的缓存服务器,可以在理论上做到不受内存容量限制的缓存服务

如下所示:

1478739657-8775-bVFaIQ

使用缓存后,数据访问压力得到了有效的缓解,但单一的应用服务器能够处理的请求连接数有限,在访问的高峰期,应用服务器又会成为网站性能的瓶颈

使用应用服务器集群改善网站并发处理能力

使用集群是网站解决高并发,海量数据问题的常用手段,当你纵向提升到一定程度后,那就该开始横向提升了

当一台服务器的处理能力不足时,与其换一台更强大的服务器,不如增加一台服务器去分担原有的服务器压力。对于大型网站而言,无论多么强大的服务器,都满足不了持续增长的业务需求,更高效的方式就是增加服务器来分担压力

对于网站架构而言,如果增添一台新的服务器可以改善负载压力,那么就可以使用同样的方式来应对源源不断的业务需求,从而实现系统的可伸缩性

1478739657-2112-bVFaIT

通过负载均衡调度服务器,可以将用户请求分发到应用服务器集群里的任何一台服务器上,如果有更多的用户,可以增加更多的应用服务器,使应用服务器的负载压力不再成为网站的性能问题

数据库读写分离

在使用了缓存后,大多数的操作不经过数据库访问就能完成,但仍有一部分读操作(缓存访问未命中,缓存过期)和所有的写操作需要访问数据库,在网站的用户量达到一定时,数据库的负载问题就来了

目前大多数的数据库都支持主从热备份,通过配置两台服务器的主从关系,可以将一台数据库服务器的数据更新同步到另一台,网站利用这一功能,实现数据库读写分离,从而进一步改善数据库负载压力

1478739657-6883-bVFaJa

应用服务器在写操作的时候,访问主数据库,主数据库通过主从复制机制把数据同步更新到从数据库,这样当应用服务器进行读操作的时候,就能访问从数据库获取数据

使用反向代理和 CDN 加速网站响应

CDN 和 反向代理 的基本原理都是缓存

CDN 部署在网络供应商的机房,用户在进行请求时,会从距离最近的网络供应商机房获取数据
反向代理 则部署在中心机房,当用户请求到达中心机房后,会首先访问反向代理服务器,如果反向代理服务器中缓存这用户请求的资源,就直接返回给用户

1478739657-9540-bVFaJd

 

使用 CDN 和 反向代理 都是为了尽快返回给用户数据,一方面加快用户访问速度,另一方面也减轻了后端服务器的压力

使用分布式文件系统和分布式数据库系统

随着网站业务的继续发展,这时候就可以像分布式应用服务器一样,对数据库系统和文件系统进行分布式管理

分布式数据库 是网站数据库拆分的最后手段,一般我们可以采取业务分库,根据不同业务的数据库部署在不同的数据库服务器上

使用 NoSQL 和搜索引擎

这两个方式都是依赖于互联网的技术手段,应用服务器通过一个统一的数据访问模块来访问各种数据,从而减轻应用程序有多个数据源的麻烦

1478739660-6504-bVFaJf

业务拆分

对于大型网站,我们可以分而治之,把整个网站的业务分为不同的模块,比如大型的交易购物完整可以分为首页、店铺、订单、买家等,分别交给不同的业务团队来负责

同时我们将一个网站根据模块划分拆分成多个应用,每个应用进行单独的部署和维护,应用之间通过超链接建立关系(指向不同的应用地址),最后通过相同的数据存储系统来构成一个互相关联的完整系统

1478739666-4522-bVFaJh

分布式服务

随着业务拆分,整个系统越来越大,应用的整体复杂度呈指数级增加,部署维护越来越困难,并且所有的应用服务器都要与数据库服务连接, 在数万台服务器规模的情况下,这些连接的数目是服务器规模的平方,导致资源不足

这时候就要对相同的业务进行提取,独立部署,把这些可重用的业务和连接数据库等,提取出来作为公共业务服务,而应用系统只需要通过分布式服务访问公共业务服务完成业务操作

1478739661-6301-bVFaJi

到这里,基本上大多数的技术问题都能得到解决,还有一些实时同步等具体业务问题也都可以通过现有的技术解决

Piwik 使用GeoIP 以及优化(二)

  1.  piwik 现在的版本都支持geoip maxmind 的数据库自动更新,因此你也不在需要使用maxmind 的 geoipupdate 的程序了
  2. ISP 和 ORG 的 IP 数据库是需要购买的
  3. geo city 的数据库自动包括geo country 的数据库,因此在更新的时候只需要更新geo city 即可
  4. 对于piwik,  默认建议打开auto-archive. 如果您使用的是军哥LNMP, 需要yum install cronie -y 来安装crontab service
  5. piwik office optimize doc: http://piwik.org/docs/optimize-how-to/

慎用histats.com

对于正规站点来说, google analytics 无疑是最好的选择

但是对于很多做站群或者website farm 的同学来说, 使用google analytics 会增大被google 关联的机会

因此一直在使用histats,号称全免费

可是今天晚上再debug 源代码的时候发现,所有使用histats 的站点都被添加了 dtscout.com和 dtscdn.com 的CDN JS, 而dtscout.com则是一家数据发现公司

由此可见histats 的免费使用是建立在把数据卖给dtscout.com的基础上

发现了这个问题,就要进行改正

准备把使用histats.com的站点全部迁移到piwik上去