最近碰到一个问题,某个应用占用的CPU特别高,亟待解决,也整理笔记,希望对有需要的人有帮助。
一般有如下做法:
1 搬至独立的高性能的服务器
2 把部分功能直接用代理的方式教与另外一台服务器处理
3 做负载均衡
第一个解决方式需要做搬迁,一般比较耗时间,如果很多很多文件需要搬,那是很难实现的,这个对于大批文件的服务而言,并不是一个好的方案。
第二个是适合某些功能可以独立运作的。比如某些需要用PHP的功能和静态文件分离,看你碰到的问题了。
第三个是负载均衡,这里最重要的一点是如何保证多个服务器的文件一致性。
前两个解决方案不适合我的问题,保持文件的一致性倒可以尝试:
1 rsync同步文件
2 NFS
3 samba
4 svn
第一个种方案有同步的时间差,对于某些服务不合适。
第二个是我这次采用的方案,NFS可以很简单的实现另外一个服务器立刻上马做服务,不需要同步文件,而且同时使用一样的文件,最适合负载均衡的文件一致性问题了。
第三个则是我构想的,不知道和NFS相比有多大的性能差别,但samba是与windows共享文件的解决方案,可能比NFS要差点。
第四个是听来的,锁定文件更新,同时更新到服务器上,但可能对于很多文件的服务器还不太合适。
NFS的说明参考我之前整理的资料:《NFS文件系统》
在主服务器上添加共享的目录:
这里说明一下参数:
共享的路径 可使用的IP(可读写,没有写缓存,用户组和用户id是2,也就是daemon)
另外一个服务器上:
如果文件很多,那需要等一段时间才挂载完毕。
df -h 可以看到已经有相关信息了:
这样就可以用了~~文件一致性解决完毕。
BTW,写入的用户如果没有指定,那就是nobody,这里指定了是daemon,注意文件读写权限的管理。
文件一致了,那就好办了,剩下的运行程序有两个解决方案:
1 proxy做负载均衡
2 fastcgi做条件性的选择或者负载均衡
第一个适合各种需求,但需要配置两套环境,第二个适合做php的问题解决方案,是我需要的,也是配置比较简单的。
安装fastcgi环境就可以了,之前做了个安装包:
PHP的fastcgi模式安装程序和源文件打包
用fpm管理就挺合适的:
/Path_to_php-cgi/sbin/php-fpm start
需要注意的配置:
主服务器就可以做fastcgi分担处理了:
本地服务器处理默认的php需求,把特定的丢给另外一台处理,当然,写法可以更加精简些。
原创内容如转载请注明:来自 阿权的书房
一般有如下做法:
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)
/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
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
/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
允许调用的服务器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/"
))
)
}
}
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需求,把特定的丢给另外一台处理,当然,写法可以更加精简些。
原创内容如转载请注明:来自 阿权的书房
收藏本文到网摘
闲聊
linux下查看带宽的工具
