ssh免密码登录的原理

昨天在搭建hadoop环境时用到了ssh client免密登录服务器,在查阅相关资料后对其原理有点迷糊。

于是看了该博主的文章:http://blog.csdn.net/u012814506/article/details/50932898,才顿悟。主要是对非对称加密方式有点不了解,误以为在client创建的公私钥密码对需要和登录的服务器有什么关系,其实非对称加密的核心是,公钥加密、私钥解密。你要免密登录首先就得有服务器的密码,而服务器只要保存你的身份信息就可以了,其余的事就交给ssh了。

附上一张原理图:

交换机的MAC地址学习和ARP协议

1. 首先我们来看看交换机,swith(交换机)

今天就先讲讲交换机和网桥的区别。这两个设备都工作在第2层

主要区别是,交换机的转发速度较快,是硬件的转发,端口数比较多

下面直接来看交换机的学习功能 , 也就是交换机的MAC地址学习. 下面我们设想一个模型,有A,B,C,D这四台PC接在一台交换机上, 首先交换机最初加电时它里面的MAC地址表为空,也就是还没学习,在学习的最初状态. 首先,比如A发给D一个数据, 这个时候交换机首先在连接A那台PC的端口上学习到A的MAC地址,并且把这个MAC地址记录到交换机里的MAC地址表里, 但是这个时候交换机并不知道D是在哪,因为MAC表里还没有D的MAC. 这个时候怎么办呢?交换机会复制多份这个数据(多帧复制),向交换机的所有端口都转发这个数据(除A接的那个端口外),这个称为泛洪,flooding 。当B和C接到这个数据时,首先检查目的地址,发现不是发给我的,那么就丢弃这个帧 . 当D接到这个帧时,发现这是发给自己的,然后D便会发给A数据,这个时候交换机在D的接口又学习到了D的MAC地址 , 这个时候交换机学习到了两条MAC地址。

2. 下面继续讲ARP协议

当数据包到网络层的时候,这个时候会继续向下层数据链路层封装,这个时候要找寻目的的MAC地址. 因为在第2层,也就是交换机工作的那层是不不知道什么叫IP地址呢,交换机始终是靠MAC地址找寻的 .

列举:

还是那个开始的那个模型,当A发数据给D。这个时候,在网络层只知道D的IP地址,那么怎么获取D的MAC地址,从而让交换机把数据发送到D的MAC地址呢?这个时候A便会发送arp,,注意一点,交换机本身是不会主动发送ARP的。那么在ARP这个报文里包含了啥东东呢?ARP报文里有源MAC地址,(也就是A的MAC地址),源IP地址,目的IP地址(也就是D的IP地址),目的MAC地址这个时候为全F,,因为这个arp是一个广播嘛。全F的MAC地址就是一个广播,因为这个时候A不知道D的mac地址,所以要发送一个广播,通知全部的PC,找寻D的MAC地址 ,怎么发送给全部同网段的PC呢?就是靠全F的mac地址。也叫flooding,我说了泛洪只是一个形象的比喻书法。当D接到这个ARP请求后,发现是找自己的,那么就返回一条ARP回应给A,告诉自己的MAC地址 ,全F的MAC地址就是广播。这个时候A的arp表便记录了D的ip地址和mac地址的对应关系。这样便顺利的发送给了D这台机子的物理地址,mac。交换机的学习是交换机自己多帧复制,不是靠广播实现,ARP是PC发送ARP广播。在A的arp表项里会记录D的ip和mac的对应关系,这个arp表在ms的系统里好像是15分钟刷新一次。

总结:交换机通过局域网主机发送的ARP数据包,学习MAC地址。

Keepalived高可用集群实践

keepalived

1、keepalived初识

Keepalived软件起初是转为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个节点的状态,后来又加入了可以实现高可用的VRRPG功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx,Haproxy,MySQL等)的高可用解决方案软件。

Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual Router Redundancy Protocol(虚拟路由冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。所以,keepalived一方面具有配置管理LVS的功能,同时还具有对LVS下面的节点进行健康检查的功能,另一方面也可以实现系统网络服务的高可用功能。

keepalived软件的官网是:www.keepalived.org

2、keepalived服务的三个重要功能

  • 管理LVS负载均衡软件

早期的LVS软件,需要通过命令行或脚本实现管理,并且没有针对LVS节点的健康检查功能,为了解决LVS的这些使用不便的问题,keepalived就诞生了,可以说,Keepalived软件起初是专为解决LVS的问题而诞生的。因此,Keepalived和LVS的感情很深,它们的关系如夫妻一样,可以紧密的结合,愉快的工作。Keepalived可以通过读取自身的配置文件实现通过更底层的接口直接管理LVS的配置以及控制服务启动、停止等功能,这使得LVS的应用更加简单方便了。LVS和Keepalived的组合应用此文暂不讨论。

  • 实现对LVS集群节点健康检查功能(healthcheck)

Keepalived可以通过在自身的Keepalived.conf文件里配置LVS的节点IP和相关参数实现对LVS的直接管理;除此之外,当LVS集群中的某一个甚至是几个节点同时发生故障无法提供服务时,Keepalived服务会自动将失效的节点服务器从LVS的正常转发队列中清除出去,并将请求调度到别的正常节点服务器上,从而保证最终用户的访问不受影响;当故障的节点服务器被修复以后,Keepalived服务又会自动地把他们加入到正常转发队列中,对客户提供服务。

  • 作为系统网络服务的高可用功能(failover)

Keepalived可以实现任意两台主机之间,例如Master和Backup主机之间的故障转移和自动切换,这个主机可以是普通的不能停机的业务服务器,也可以是LVS负载均衡、Nginx反向代理这样的服务器。

Keepalived高可用功能实现的简单原理为,两台主机同时安装好Keepalived软件并启动服务,开始正常工作时,由角色为Master的主机获得所有资源并对用户提供服务,角色为Backup的主机作为Master主机的热备;当角色为Master的主机失效或出现故障时 ,角色为Backup的主机将自动接管Master主机的所有工作,包括接管VIP资源及相应资源服务;而当角色为Master的主机故障修复后,又会自动自动接管回它原来处理的工作,角色为Backup的主机则同时释放Master主机失效时它接管的工作,此时,两台主机将恢复到最初启动时各自的原始角色及工作状态。

3、Keepalived高可用故障切换转移原理

Keepalived高可用服务对之间的故障切换转移,是通过VRRP(Virtual Route Redundancy Protocol,虚拟路由冗余协议)来实现的。

在Keepalived服务正常工作时,主Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活着,当主Master节点发生故障时,就无法发送心跳消息,备节点 也就因此无法继续检测到来自主Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的IP资源及服务。而当主Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。

那么什么是VRRP呢?

VRRP,全称为Virtual Router Redundancy Protocol,中文名为虚拟路由冗余协议,VRRP的出现就是为了解决静态路由的单点故障问题,VRRP是通过一种竞选机制来将路由的任务交给某台VRRP路由器的。

VRRP早期是用来解决交换机、路由器等设备单点故障的,下面是交换、路由的Master和Backup切换原理描述,同样也适用于Keepalived的工作原理。

在一组VRRP路由器集群中,有多台物理VRRP路由器,但是这多台物理的机器并不是同时工作的,而是由一台称为Master的机器负责路由工作,其他的机器都是Backup。Master角色并不是一成不变的,VRRP会让每个VRRP路由参与竞选,最终获胜的就是Master。获胜的Master有一些特权,比如拥有虚拟路由器的IP地址等,拥有系统资源的Master负责转发发送给网关地址的包和相应ARP请求。

VRRP通过竞选机制来实现虚拟路由的功能,所有的协议报文都是通过IP多播(Multicast)包(默认的多播地址为224.0.0.18)形式发送的。虚拟路由器由VRID(范围0-255)和一组IP地址组成,对外表现为一个众所周知的mac地址:00-00-5E-00-01-{VIDR}。所以,在一个虚拟路由器中,不管谁是Master,对外都是相同的MAC和IP(称之为VIP)。客户端主机并不需要因Master的改变而修改自己的路由配置。对他们来说,这种切换是透明的。

在一组虚拟路由器中,只有作为Master的VRRP路由器会一直发送VRRP广播包(VRRP Advertisement messages),此时Backup不会抢占Master。当Master不可用时,Backup就收不到来自Master的广播包了,此时多台Backup中优先级最高的路由器会抢占为Master。这种抢占是非常快速的(可能只有1s甚至更少),以保证服务的连续性。出于安全性考虑,VRRP数据包使用了加密协议进行了加密。

4、keepalived高可用服务单实例实战

配置keepalived主服务器lb01 Master

[code lang=”bash”]

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id <span style="color: #ff0000;">lb01</span>
}

vrrp_instance VI_1 {
state <span style="color: #ff0000;">MASTER</span>
interface eth0
<span style="background-color: #00ffff;">virtual_router_id 51</span>
priority <span style="color: #ff0000;">150</span>
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.100.200/24 dev eth0 label eth0:1
}
}

[/code]

实战配置keepalived备服务器lb02 BACKUP

[code lang=”bash”]
! Configuration File for keepalived

global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id <span style="color: #ff0000;">lb02</span>
}

vrrp_instance VI_1 {
state <span style="color: #ff0000;">BACKUP</span>
interface eth0
<span style="background-color: #00ffff;">virtual_router_id 51</span>
priority <span style="color: #ff0000;">100</span>
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.100.200/24 dev eth0 label eth0:1
}
}

[/code]

5、关于Keepalived高可用服务器的“裂脑”问题
什么是裂脑:
由于某些原因,导致两台高可用服务器对在指定的时间内,无法检测到对方的心跳消息,各自取得资源及服务的所有权,而此时的两台高可用服务器对都还活着并且在正常运行,这样就会导致同一个IP或服务在两段同时存在而发生冲突,最严重的是两台主机占用同一个VIP地址,当用户写入数据时可能会分别写入到两端,这可能会导致服务器两段的数据不一致或造成数据丢失,这种情况就被成为裂脑。

导致裂脑的原因:

  1. 高可用服务器之间心跳线链路发生故障,导致无法正常通信。
  2. 高可用服务器上开启了iptables防火墙阻挡了心跳消息传输。
  3. 高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败。
  4. 其他服务配置不当等原因,如心跳方式不同,心跳广播冲突、软件bug等。

注意:Keepalived配置里同一VRRP实例如果virtual_route_id两端参数配置不一致,也会导致烈脑问题的发生。

iptables 企业场景应用–实例

#!/bin/bash
#2016-06-17 zhixiang from immoc
#iptables rules
##################################################
#ftp 内核模块
modprobe ipt_MASQUERADE
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
#清除所有规则
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X

#################################################
# -p 默认规则设置
iptables -P INPUT DROP
iptables -A INPUT -m state –state ESTABLISH,RELATED -j ACCEPT

iptables -A INPUT -i lo ACCEPT

iptables -A INPUT -p tcp -m multiport –dport 110,80,25 -j ACCEPT
#允许内网只能访问文件共享
iptables -A INPUT -p tcp -s 10.0.100.0/24 –dport 139 -j ACCEPT

iptables -A INPUT -i eth1 -p udp -m multiport –dport 53 -j ACCEPT

#开放vpn(pptp),gre隧道
iptables -A INPUT -p tcp –dport 1723 -j ACCEPT
iptables -A INPUT -p gre -j ACCEPT

#限速
iptables -A INPUT -s 192.168.100.0/24 -p tcp -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i ppp0 -p tcp –syn -m connlimit –connlimit-above 15 -j DROP

#禁止ping
iptables -A INPUT -p icmp -j DROP

# NAT转发:内网访问外网通过ppp0
iptables -t nat -A POSTROUTING -O PPPO -S 10.0.100.0/24 -j MASQUERADE

#########################################################
#防攻击策略
iptables -N syn-flood
iptables -A INPUT -p tcp –syn -j syn-flood
iptables -I syn-flood -p tcp -m limit –limit 3/s –limit-burst -j RETURN
iptables -A syn-flood -j REJECT

###########################################################
#转发规则
iptables -P FORWARD DROP
iptables -A FORWARD -p tcp -s 10.0.100.0/24 -m multiport –dport 80,110,21,25,1723 -j ACCEPT
iptables -A FORWARD -p udp -s 10.0.100.0/24 –dport 53 -j ACCEPT
iptables -A FORWARD -p gre -s 10.0.100.0/24 -j ACCEPT
iptables -A FORWARD -p icmp -s 10.0.100.0/24 -j ACCEPT

#########################################################
#访问控制
iptables -A FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables -I FORWARD -p udp –dport -m string –string “tencent” -m time –timestart 8:00 –timestop 12:30 –days Mon,Tue,Wed,Thu,Fri,Sat -j DROP

iptables -I FORWARD -p udp –dport -m string –string “TENCENT” -m time –timestart 8:00 –timestop 12:30 –days Mon,Tue,Wed,Thu,Fri,Sat -j DROP

iptables -I FORWARD -p udp –dport -m string –string “tencent” -m time –timestart 14:00 –timestop 17:30 –days Mon,Tue,Wed,Thu,Fri,Sat -j DROP

iptables -I FORWARD -p udp –dport -m string –string “TENCENT” -m time –timestart 14:00 –timestop 17:30 –days Mon,Tue,Wed,Thu,Fri,Sat -j DROP
#限制访问web QQ
iptables -I FORWARD -s 10.0.100.0/24 -m string “qq.com” -m time –timestart 8:00 –timestop 18:00 –days Mon,Tus,Wed,Tus,Fri,Sat -j DROP
#禁止访问关键词网址
iptables -I FORWARD -s 10.0.100.0/24 -m string –string “av1024.net” -j DROP
iptables -I FORWARD -D 10.0.100.0/24 -m string –string “eroticism” -j DROP
#禁止bt下载
iptables -A FORWARD -m ipp2p –edk –kazaa –bit -J DROP

#内核相关模块
#开启数据包转发,防止syn攻击
sysctl -w net.ipv4.ip_forward=1 &>/dev/null
sysctl -w net.ipv4.tcp_syncookies=1 &>/dev/null

#确保管理员的ip有绝对的访问权限
iptables -I INPUT -s 10.0.100.15 -j ACCEPT
iptables -I FORWARD -s 10.0.100.15 -j ACCEPT

iptables中NAT模式设置–SNAT

iptables防火墙nat表规则配置s数据包在规则表、链匹配流程

场景模拟:我在虚拟机中搭建了三台服务器,其中一台webserver:ip 10.0.100.128,另一台centos作为Nat sever,配置两块网卡(网卡1:10.0.100.129,网卡2:192.168.100.128),另一台Ubuntu server 作为Client,访问web server,其ip为:192.168.100.129,很显然他们ip不再同一网段内,所以无法互通,接下来我们通过Snat规则,使ubuntu server能访问到位于10.0.100.128上的web server。其网络拓扑结构如下:

SNAT场景模拟

其中10.0.100.128的iptables规则如下:
#!/bin/bash
#20160715 >> /etc/rc.local 开机启动
#清除所有规则
iptables -F
#开放ssh端口
iptables -I INPUT -p tcp –dport 52022 -j ACCEPT
#开放本地回环请求
iptables -I INPUT -i lo -j ACCEPT
#状态放行(本地请求)
iptables -I INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
#开放网段
iptables -I INPUT -p tcp -s 10.0.100.0/24 -j ACCEPT
#开启开发服务端口
iptables -I INPUT -p tcp –dport 80 -j ACCEPT
#开放VPN端口
#iptables -I INPUT -p tcp –dport 1723 -j ACCEPT
#允许icmp数据包,允许ping
iptables -I INPUT -p icmp -j ACCEPT
#拒绝未被允许的数据包
iptables -A INPUT -j REJECT
#显示所有规则
iptables -nL
#保存所有规则到配置文件中
#/etc/init.d/iptables save

接下来需要配置Nat server:首先打开内核数据包转发功能。vim /etc/sysctl.conf修改net.ipv4.ip_forward = 1,
然后执行sysctl -p使参数立即生效。然后配置iptables 转发规则:iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -j SNAT –to 10.0.100.135,将所有流经网卡192.168.100.0/24网段的数据都由10.0.100.135这块网卡转发出去。
最后我们在Client上增加一块默认网关为192.168.100.128,将请求的数据有Nat server转发。命令为:sudo route add default gw 192.168.100.128,
测试结果如下:
QQ截图20160717134659

使用CDN做网站内容加速

  1. 什么是CDN?

    1. CDN全称为Content Delivery Network,中文意思为内容分发网络。简单地讲,通过在现有的internet中增加一层新的网络架构,将网络的内容发布到最接近用户的Cache服务器内,通过智能DNS负载均衡技术,判断用户的来源,让用户就近使用与服务器相同线路的带宽访问Cache服务器,取得所需的内容。例如:成都电信用户访问成都电信Cache服务器上的内容。这样可以减少数据在网络上传输的时间,提高访问的速度。
    2. CDN是一套全国或全球的分布式缓存集群,其实质是通过智能DNS判断用户的来源地域及上网线路,为用户选择一个最接近用户地域,以及和用户上网线路相同的服务器节点,因为地域近,且线路相同,所以可以大幅度提升用户浏览网站的体验。
    3. CND的价值:
      • 为架设网站的企业省钱
      • 提升企业网站的用户访问体验
      • 可以阻挡大部分流量攻击,例如DDOS攻击
      • 一个良好的网站架构设计,访问量尽量都交给CDN
  2. CDN的特点

    1. CDN就是一个具备根据用户区域和线路智能调度的分布式缓存集群。其特点为:
      • 通过服务器内存缓存网站数据,提高了企业站点的访问速度,并大大提高企业站点的稳定性
      • 用户根据智能DNS技术自动选择最合适的Cache服务器,降低了不同运营商之间互联瓶颈造成的影响实现了跨运营商的网络加速,保证不同网络中用户都能得到良好的访问质量。
      • 加快了访问速度,减少了源站点的带宽
      • 用户访问时从服务器的内存中读取数据,分担了网络流量,同时减轻了源站点负载压力
      • 使用CDN可分担源站的网络流量,同时可以减轻源站点的负载压力,并降低黑客入侵及各种DDOS攻击对网站的影响,保证网站有较好的服务质量。
  3. 企业使用CDN的基本要求

    1. 并不是所有的网站都可以一上来就能用CDN的。要加速的业务数据应该存在独立的域名,例如:业务内容图片、附件、JS、CSS等静态元素,这样的静态网站域名才可以使用CDN
    2. 国内较大的CDN提供商有:网宿、蓝汛、快网、帝联及BAT

图解原理:

cdn01 cdn03 CDN域名解析 cdn原理

企业级Nginx Web 服务优化实战

Nginx Web优化思想

  1. nginx基本安全优化
    1. 调整参数隐藏Nginx软件版本号信息
    2. 更改源代码隐藏Nginx软件名及版本号
    3. 更改Nginx服务的默认用户
  2. 根据参数优化Nginx服务性能
    1. 优化Nginx服务的worker进程个数
      1. Nginx官方建议设置为CPU的核数或CPU核数*2。
    2. 优化绑定不同的Nginx进程到不同的CPU上
    3. Nginx时间处理模型优化
    4. 调整Nginx单个进程允许的客户端最大的连接数
      1. Nginx总并发连接=worker数量*work_connections.
      2. 实际的并发连接数除了受worker_connections参数控制外,还和最大打开文件数worker_rlimit_nofile有关。
    5. 配置Nginx worker进程最大打开文件数
    6. 优化服务器域名的散列表大小
    7. 开启高效文件传输模式
    8. 优化Nginx连接参数,调整连接超时时间
    9. 上传文件大小的限制
    10. FastCGI相关参数优化
    11. 配置Nginx gzip压缩实现性能优化
    12. 配置Nginx expires实现性能优化
  3. Nginx日志相关优化与安全
    1. 编写脚本实现Nginx access 日志轮询
    2. 不记录不需要的访问日志
    3. 访问日志的权限设置
  4. Nginx站点目录及URL访问控制
    1. 根据扩展名限制程序和文件访问
    2. 禁止访问指定目录下的所有文件和目录
    3. 限制网站来源IP访问
    4. 配置Nginx,禁止非法域名解析访问企业网站
  5. Nginx图片及目录防盗链
  6. Nginx错误信息的优雅显示
  7. Nginx站点目录文件及目录权限优化
  8. Nginx防爬虫优化
  9. 利用Nginx限制HTTP的请求方法
  10. 使用CDN做网站加速
  11. Nginx程序架构优化
  12. 使用普通用户启动Nginx
  13. 控制Nginx并发连接数量
    • ngx_http_limit_conn_module
      • limit_conn_zone key zone=name:size;(limit_conn_zone $binary_remote_addr zone=addr:10m;)
      • limit_conn参数:limit_conn zone number;
        • limit_conn addr 1;(限制单IP的并发连接为1)
  14. 控制客户端请求Nginx的速率

Linux下Web网站压力测试工具

一个网站或者博客到底能够承受多大的用户访问量经常是我们在用VPS或者独立服务器搭建网站了最关心的问题,还有不少人喜欢对LNMP或者LAMP进行一些优化以便提高Web性能,而优化后到底有多大的效果,就需要我们对网站进行服务器压力测试了。

目前来说Webbench,Apache Bench,http_load是三款比较流行的网站服务器压力Web性能测试工具,安装和使用都非常简单,只要有一台VPS主机或者直接用本地电脑就可以开始测试,由于受网络等各种因素的影响,测试结果不一定很准确,但可以当作参考.

Apache Bench又叫做AB,是Apache 附带的一个小工具,专门用于 HTTP Server 的benchmark testing,ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL进行访问,可用来测试Apache的负载压力,也可以测试nginx、lighthttp、IIS等其它Web服务器的压力。

Webbench是由Lionbridge公司开发出来的一个网站压力测试工具,可用于测试ASP,PHP,JAVA,CGI等服务器压力,也可用于SSL的安全网站的负载能力进行测试,最多可以模拟3万个并发连接去测试网站的负载能力,Webbench操作简单,一行命令就可以显示出服务器压力。

http_load这是国外一个博主开发的基于linux平台的性能测试工具,主要是以并行复用的方式运行,可以用来测试web服务器的吞吐量与负载,测试结果一目了然。Apache Bench,Webbench,http_load这三款网站服务器压力测试工具还要根据测试者的主机性能来决定参数,防止把测试主机给搞成死机了。

一、Apache Bench:Apache自带服务器压力测试工具

1、要使用Apache Bench工具,只要VPS主机已经有了Apache就行了,如果安装Apache,可直接运行命令:yum install httpd。

2、Apache Bench工具用法命令:ab -n 100 -c 50 https://www.qq.com/,“-n”表示:每次请求数,默认不能超过1024个,“-c”表示:1个请求的并发连接数,默认最大不能超过50000。注意C

3、上面的命令就是模拟50个并发连接每次以100个请求数来测试腾讯网站的Web性能。测试结果及相关的数据说明请看下图:

二、Webbench:最多模拟3万个并发连接数测试压力

安装依赖:yum install ctags wget make apr* autoconf automake gcc gcc-c++

安装:wget http://home.tiscali.cz/cz210552/distfiles/webbench-1.5.tar.gz

tar zxvf webbench-1.5.tar.gz  #解压

cd webbench-1.5  #进入解压目录

make  #编译

mkdir /usr/local/man #创建目录,否则安装失败

make install  #安装

用法:webbench -c 并发数 -t 运行测试时间 URL

压力测试:

[code lang=”bash”]webbench -c 1000 -t 30 http://www.baidu.com/
[/code]

 

-c是并发数 -t是持续时间,即30秒钟内中以每次1000个并发请求进行测试。

关于PHP服务缓存及优化

生产环境插件的安装建议:
1)对于功能性插件,如果业务产品不需要,可以展示不考虑安装,如imagick,PDO_MYSQL.
2)对于性能优化插件,eAccelerator、XCache、ZendOpcache(官方缓存插件)、APC可以选择安装其中任意一种,具体情况看实际业务需求,在选择时最好能搭建相关环境进行压力测试。

phpize是什么?

安装php扩展插件时,常常会有这样一条命令:/application/php/bin/phpize,它究竟起了什么作用呢?事实上phpize是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块。比如想在编译好的PHP中加入Memcached等扩展模块,可使用phpize工具。

那么要如何使用phpize呢?

编译PHP后,其bin目录下会有phpize这个脚本文件。在编译要添加的扩展模块之前,执行一下phpize就可以了。比如现在想在PHP中加入memcached扩展模块,那么要做的只是执行如下的Memcache客户端软件安装命令:

[code lang=”bash”]

cd /home/jian/tools

wget -q http://pecl.php.net/get/memcache-2.2.7.tgz

tar -zxvf memcache-2.2.7.tgz

cd memcache-2.2.7

/application/php/lib/phpize

#在执行configure前执行这条命令

./configure –enable-memcache –with-php-config=/application/php/bin/php-config

make

make install

[/code]

这样就编译完成了,还需要做的就是在php.ini文件中加入如下两行:

[code lang=”bash”]

extension_dir="/application/php/lib/php/extensions/no-debug-non-zts-xxxxxxxx/"

extension = memcache.so

#上述两行配置的作用是加载使得Memcached客户端配置生效

#重启php

pkill php-fpm

/application/php/sbin/php-fpm

[/code]

 

MemCache缓存软件解读

Memcache缓存软件说明

[iframe frameborder=”no” border=”0″ marginwidth=”0″ marginheight=”0″ width=600 height=86 src=”http://music.163.com/outchain/player?type=2&id=22551663&auto=0&height=66″][/iframe]

memcached

MemCache是一个自由、源码开放、高性能、分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度。MemCaChe是一个存储键值对的HashMap,在内存中对任意的数据(比如字符串、对象等)所使用的key-value存储,数据可以来自数据库调用、API调用,或者页面渲染的结果。MemCache设计理念就是小而强大,它简单的设计促进了快速部署、易于开发并解决面对大规模的数据缓存的许多难题,而所开放的API使得MemCache能用于Java、C/C++/C#、Perl、Python、PHP、Ruby等大部分流行的程序语言。

另外,说一下MemCache和MemCached的区别:

1、MemCache是项目的名称

2、MemCached是MemCache服务器端可以执行文件的名称

MemCache的官方网站为http://memcached.org/

Memcached服务的工作步骤如下:

  1. 程序首先检查客户端请求的数据在Memcached服务中的缓存中是否存在,如果存在,直接把请求的数据返回,不再请求后端数据库。
  2. 如果请求的数据在Memcached缓存中不存在,则程序会去Memcached后端的数据库服务。
  3. 把从数据库中取到的数据返回给客户端。
  4. 同时把新取到的数据库的数据缓存一份到Memcached服务缓存中,下次同样的请求就直接从Memcached服务缓存返回数据,从而减轻数据库的访问压力。

Memcached缓存PHP扩展插件安装

Memcache分为服务器端软件和客户端插件两部分,本文是Memcached客户端PHP的扩展插件(memcached-2.2.7.tgz)在php环境中的安装,用于访问Memcached服务器端数据。

PHP的Memcached扩展插件的下载地址为:http://pecl.php.net/get/memcache-2.2.7.tgz。

安装过程如下:

[code lang=”bash”]

cd /home/jian/tools/

wget http://pecl.php.net/get/memcache-2.2.7.tgz

tar -zxvf memcache-2.2.7.tgz

cd memcache-2.2.7/

/application/php/bin/phpize

./configure –enable-memcache –with-php-config=/application/php/bin/php-config

make

make install

ls -l /application/php/lib/php/extensions/no-debug-non-zts-20090626/

#若该文件夹下生成了memcache.so模块,表示memcache扩展插件成功安装

[/code]

memcached缓存应用:

 

 

 

 

 

 

 

memcached分布式原理

memcached不相互通信,那么memcached是如何实现分布式的呢?memcached的分布式实现主要依赖客户端的实现:

如上图所示,我们看下缓存的存储的一般流程:

当数据到达客户端,客户端实现的算法就会根据“键”来决定保存的memcached服务器,服务器选定后,命令他保存数据。取的时候也一样,客户端根据“键”选择服务器,使用保存时候的相同算法就能保证选中和存的时候相同的服务器。