最近碰到一个问题,某个应用占用的CPU特别高,亟待解决,也整理笔记,希望对有需要的人有帮助。

一般有如下做法:
1 搬至独立的高性能的服务器
2 把部分功能直接用代理的方式教与另外一台服务器处理
3 做负载均衡

第一个解决方式需要做搬迁,一般比较耗时间,如果很多很多文件需要搬,那是很难实现的,这个对于大批文件的服务而言,并不是一个好的方案。
第二个是适合某些功能可以独立运作的。比如某些需要用PHP的功能和静态文件分离,看你碰到的问题了。
第三个是负载均衡,这里最重要的一点是如何保证多个服务器的文件一致性。

前两个解决方案不适合我的问题,保持文件的一致性倒可以尝试:
1 rsync同步文件
2 NFS
3 samba
4 svn

第一个种方案有同步的时间差,对于某些服务不合适。
第二个是我这次采用的方案,NFS可以很简单的实现另外一个服务器立刻上马做服务,不需要同步文件,而且同时使用一样的文件,最适合负载均衡的文件一致性问题了。
第三个则是我构想的,不知道和NFS相比有多大的性能差别,但samba是与windows共享文件的解决方案,可能比NFS要差点。
第四个是听来的,锁定文件更新,同时更新到服务器上,但可能对于很多文件的服务器还不太合适。

NFS的说明参考我之前整理的资料:《NFS文件系统

在主服务器上添加共享的目录:

[root@localhost ~]# cat /etc/exports
/Data/webapps/www.aslibra.com       192.168.1.0/24(rw,no_wdelay,anonuid=2,anongid=2)


这里说明一下参数:
共享的路径 可使用的IP(可读写,没有写缓存,用户组和用户id是2,也就是daemon)

另外一个服务器上:

mkdir -p /NFS/www.aslibra.com
mount 192.168.1.2:/Data/webapps/www.aslibra.com /NFS/www.aslibra.com


如果文件很多,那需要等一段时间才挂载完毕。
df -h 可以看到已经有相关信息了:

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             9.9G  7.6G  1.8G  81% /
none                 1012M     0 1012M   0% /dev/shm
192.168.1.2:/Data/webapps/www.aslibra.com
                      650G  388G  229G  63% /NFS/www.aslibra.com


这样就可以用了~~文件一致性解决完毕。
BTW,写入的用户如果没有指定,那就是nobody,这里指定了是daemon,注意文件读写权限的管理。

文件一致了,那就好办了,剩下的运行程序有两个解决方案:
1 proxy做负载均衡
2 fastcgi做条件性的选择或者负载均衡

第一个适合各种需求,但需要配置两套环境,第二个适合做php的问题解决方案,是我需要的,也是配置比较简单的。
安装fastcgi环境就可以了,之前做了个安装包:
PHP的fastcgi模式安装程序和源文件打包

用fpm管理就挺合适的:
/Path_to_php-cgi/sbin/php-fpm start

需要注意的配置:

<value name="allowed_clients">192.168.1.2,192.168.1.3</value>
允许调用的服务器ip
<value name="listen_address">192.168.1.5:9000</value>
监听的ip应该是局域网ip


主服务器就可以做fastcgi分担处理了:

$HTTP["host"] == "www.aslibra.com" {
        server.document-root = "/Data/webapps/www.aslibra.com/"
        url.rewrite-once = (
                "^/test/([^/]+)/([^/]+)/([^/]+)/([^/]+)/(.+)" => "/test/index.php",
        )
  fastcgi.server = ( ".php" =>
        (( "host" => "127.0.0.1",
     "port" => 9000,
        ))
  )
  $HTTP["url"] =~ "/test/index.php" {
    fastcgi.server = (
      ".php" =>
      (( "host" => "192.168.1.5",
         "port" => 9000,
         "check-local" => "disable",
         "docroot" => "/NFS/www.aslibra.com/"
      ))
    )
  }
}


本地服务器处理默认的php需求,把特定的丢给另外一台处理,当然,写法可以更加精简些。


原创内容如转载请注明:来自 阿权的书房
收藏本文到网摘
Tags: , , , ,
发表评论
表情
emotemotemotemotemotemotemotemotemotemotemotemotemot
emotemotemotemotemotemotemotemotemotemotemotemot
打开HTML 打开UBB 打开表情 隐藏
昵称   密码   游客无需密码
网址   电邮   [注册]
               

验证码 不区分大小写
 

阅读推荐

服务器相关推荐

开发相关推荐

应用软件推荐