firewalld

1 firewalld的配置文件 以xml格式为主 bash 1 2 /etc/firewalld/ /usr/lib/firewalld/ 使用时的规则是这样的:当需要一个文件时firewalld会首先到第一个目录中查找,如果找到直接使用,否则会继续到第二个目录中查找。 1.1 配置文件结构 firewalld的配置文件主要有两个文件和三个目录 文件:firewalld.conf、lockdown-whitelist.xml 目录:zone services icmptypes 1.2 firewalld.conf firewalld的主配置文件,不过非常简单,只有五个配置项 defaultzone:默认使用的zone默认public minimalmark:标记最小值 cleanUpOnExit:退出当前firewalld后是否清除防火墙规则,默认值为yes; zones 保存zone配置文件 services 保存service配置文件 icmptypes 保存和icmp类型相关的配置文件 2 firewall操作 2.1 查看firewalld状态 bash 1 2 3 4 5 6 7 $ firewall-cmd --state not running $ systemctl start firewalld $ firewall-cmd --state running 2.2 不改变状态的条件下重新加载防火墙 bash 1 firewall-cmd --reload 获取支持的区域列表 bash 1 firewall-cmd --get-zone 获得所有支持的服务 bash 1 2 $ firewall-cmd --get-services RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns ftp high-availability http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxypmwebapi pmwebapis pop3s postgresql proxy-dhcp radius redis rpc-bind samba samba-client smtp ssh telnet tftp tftp-clienttransmission-client vnc-server wbem-https 获取所有支持的ICMP类型...

Keepalived 高可用集群应用实践

Keepalived介绍 Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。 Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual Router Redundancy Protocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。所以,Keepalived一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能。 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主机失效时它接管的工作,此时,两台主机将恢复到最初启动时各自的原始角色及工作状态。 说明:Keepalived的高可用功能是本章的重点,后面除了讲解Keepalived高可用的功能外,还会讲解Keepalived配合Nginx反向代理负载均衡的高可用的实战案例。 Keepalived高可用故障切换转移原理 Keepalived高可用服务对之间的故障切换转移,是通过VRRP(Virtual Router 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-{VRID}。所以,在一个虚拟路由器中,不管谁是Master,对外都是相同的MAC和IP(称之为VIP)。客户端主机并不需要因Master的改变而修改自己的路由配置。对它们来说,这种切换是透明的。 在一组虚拟路由器中,只有作为Master的VRRP路由器会一直发送VRRP广播包(VRRP Advertisement messages),此时Backup不会抢占Master。当Master不可用时,Backup就收不到来自Master的广播包了,此时多台Backup中优先级最高的路由器会抢占为Master。这种抢占是非常快速的(可能只有1秒甚至更少),以保证服务的连续性。出于安全性考虑,VRRP数据包使用了加密协议进行了加密。 如果你在面试时,要你解答Keepalived的工作原理,建议用自己的话回答如下内容,以下为对面试官的表述: Keepalived高可用对之间是通过VRRP通信的: VRRP,全称Virtual Router Redundancy Protocol,中文名为虚拟路由冗余协议,VRRP的出现是为了解决静态路由的单点故障。 VRRP是通过一种竞选协议机制来将路由任务交给某台VRRP路由器的。 VRRP用IP多播的方式(默认多播地址(224.0.0.18))实现高可用对之间通信。 工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,就启动接管程序接管主节点的资源。备节点可以有多个,通过优先级竞选,但一般Keepalived系统运维工作中都是一对。 VRRP使用了加密协议加密数据,但Keepalived官方目前还是推荐用明文的方式配置认证类型和密码。 Keepalived服务的工作原理 介绍完了VRRP,接下来我再介绍一下Keepalived服务的工作原理: Keepalived高可用对之间是通过VRRP进行通信的,VRRP是通过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。 在Keepalived服务对之间,只有作为主的服务器会一直发送VRRP广播包,告诉备它还活着,此时备不会抢占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性。接管速度最快可以小于1秒。 Keepalived高可用服务搭建 安装Keepalived 通过官方地址获取Keepalived源码软件包编译安装 sh 1 2 3 4 ./configure \ --prefix=/app/keepalived-\ --mandir=/usr/local/share/man make && make install 复制命令到/usr/sbin下 sh 1 ln -s /app/keepalived-1.3.5/sbin/keepalived /usr/sbin/ keepalived默认会读取/etc/keepalived/keepalived.conf配置文件...

LVS & keepalived 集群架构

LVS概述 负载均衡(Load Balance)集群提供了一种廉价、有效、透明的方法,来扩展网络设备和服务器的负载、带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。 搭建负载均衡服务的需求 把单台计算机无法承受的大规模的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间,提升用户体验. 单个重负载的运算分担到多台节点设备上做并发处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提高。 7*24小时服务保证,任意一个或多个有限后面节点设备宕机,要求不能影响业务。 在负载均衡集群中,所有计算机节点都应该提供相同的服务。集群负载均衡器所截获所有对该服务的入站请求。然后将这些请求尽可能的平均分配在所有集群节点上。 LVS (Linux Virtual Server)介绍 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统,可在UNIX、Linux平台下实现负载均衡集群功能。该项目在1998年5月由章文嵩博士组织成立,是中国国内最早出现的自由软件项目之一 LVS项目介绍 http://www.linuxvirtualserver.org/zh/lvs1.html LVS集群的体系结构 http://www.linuxvirtualserver.org/zh/lvs2.html LVS集群中的IP负载均衡技术 http://www.linuxvirtualserver.org/zh/lvs3.html LVS集群的负载调度 http://www.linuxvirtualserver.org/zh/lvs4.html IPVS(LVS)发展史 早在2.2内核时,IPVS就已经以内核补丁的形式出现。 从2.4.23版本开始,IPVS软件就是合并到Linux内核的常用版本的内核补丁的集合。 从2.4.24以后IPVS已经成为Linux官方标准内核的一部分。 IPVS软件工作层次图 从上图可以看出,LVS负载均衡调度技术是在Linux内核中实现的,因此,被称之为Linux虚拟服务器(Linux virtual Server)。我们使用该软件配置LVS时候,不能直接配置内核中的ipvs,而需要使用ipvs的管理工具ipsadm进行管理. LVS技术点小结: 真正实现调度的工具是IPVS, 工作在Linux内核层面 LVS自导IPVS管理工具是ipvsadm keepalived实现管理IPVS及负载均衡器的高可用。 RedHat工具Piranha WEB管理实现调度的工具IPVS。 LVS体系结构与工作原理简单描述 LVS集群负载均衡器接受服务的所有入站客户端计算机请求,并根据调度算法决定那个集群几点应该处理回复请求。负载均衡器简称(LB)有时也被成为LVS Director简称Director LVS虚拟服务器的体系结构如下图所示,一组服务器通过告诉的局域网或者地理分布的广域网互相连接,在他们的前端有一个负载调度器(Load Balancer)。负载调度器能无缝地将网络请求调度到真实服务器上,从而使得服务器集群的结构对客户是透明的,客户访问集群系统提供的网络服务就像访问一台高性能、高可用的服务器一样。客户程序不收服务器集群的影响不需作任何修改。胸的伸缩性通过在服务集群中透明的加入和删除一各节点来达到,通过检测节点或服务进程故障和正确地重置系统达到高可用性。由于我们的负载调度技术是在Linux内核中实现的,我们称之为Linux虚拟服务器(Linux Virtual Server)。 LVS基本工作过程图 **LVS基本工作过程图1:带颜色的小方块代表不同的客户端请求 LVS基本工作过程图2: 不同的客户端请求小方块经过负载均衡器,通过指定的分配策略被分发到后面的机器上 LVS基本工作过程图3: LVS基本工作过程图4: LVS相关术语命名约定 名称 缩写 说明 虚拟IP地址(Virtual IP Address) VIP VIP为Direcort用于向客户端计算机提供IP地址.如www.baidu.com域名就要解析到VIP上提供服务 真实IP地址(Real Server IP Address) RIP 在集群下面节点上使用的IP地址,物理IP地址 Director的IP地址(Director IP Address) DIP Director用于连接内外网络的IP地址,物理网卡上的IP地址,是负载均衡器上的IP 客户端主机IP地址(Client IP Address) CIP 客户端用户计算机请求集群服务器的IP地址,该地址用作发送给集群的请求的源IP地址 LVS集群内部的节点称为真实服务器(Real Server),也叫做集群节点。请求集群服务的计算机称为客户端计算机。...

使用fpm制作rpm包与搭建本地yum源

rpm 与 fpm 软件的安装方式 编译安装:优点是可以定制化安装目录、按需开启功能等,缺点是需要查找并实验出适合的编译参数,诸如MySQL之类的软件编译耗时过长 yum安装:优点是全自动化安装,不需要为依赖问题发愁,缺点是自主性太差,软件的功能、存放位置都已经固定好了,不易变更。 编译源码:根据自己的需求做成 RMP包 ==> 搭建yum仓库 ==> yum安装。结合前两者的优点,暂未发现什么缺点。可能的缺点就是RPM包的通用性差,一般人不会定制RPM包。 RPM概述 RPM全称是Red Hat Package Manager(RedHat包管理器)。几乎所有的Linux发型版本都使用这种形式的软件包管理安装、更新和卸载软件。 rpm命令有5种基本功能(不包括创建软件包):安装、卸载、升级、查询和验证。 关于rpm命令的使用可以用rpm –help来获得 rpmbuild rpmbuild是reahat系的原声打包命令,这个命令的使用难点主要在于spec文件编写,一个类似于kickstart的ks.cfg文件。 作为一个使用工具,种种繁琐,在没有替代品时还能存活。当有了其他简易工具时,他就到了完蛋的时候 fpm fpm 是将一种类型的包转换成另一种类型 支持的源类型包 类型 说明 dir 将目录打包成所需要的类型,可以用于源码编译安装的软件包 rpm 对rpm进行转换 gem 对rubygem包进行转换 python 将python模块打包成相对应的类型 支持目标类型包 rpm 转换为rpm包 deb 转换为deb包 solaris 装环卫solaris包 puppet 转换为puppet模块 fpm安装 fpm是ruby写的,因此系统环境需要ruby,而且ruby版本号大于bshards运行的版本。 yum安装ruby模块 bash 1 yum install ruby rubygems ruby-devel -y 查看ruby的版本 bash 1 2 3 4 5 6 7 $ rpm -qa|grep ruby ruby-libs-1....

heartbeat权威指南

heartbeat介绍 Heartbeat一款开源提供高可用(Highly-Available)服务的软件,通过heartbeat,可以将资源(IP及程序服务等资源)从一台已经故障的计算机快速转移到另一台正常运转的机器上继续提供服务,一般称之为高可用服务。在实际生产应用场景中,heartbeat的功能和另一个高可用开源软件keepalived有很多相同之处,但在生产中,对应实际的业务应用也是有区别的,例如:keepalived主要是控制IP的漂移,配置、应用简单,而heartbeat则不但可以控制IP漂移,更搜长对资源服务的控制,配置、应用比较复杂 heartbeat工作原理 通过修改heartbeat软件的配置文件,可以指定哪一台Heartbeat服务器作为主服务器,则另一台将自动成为热备服务器.然后在热备服务器上配里Heartbeat守护程序来监听来自主服务器的心跳消息。如果热备服务器在指定时间内未监听到来自主服务器的心跳,就会启动故障转移程序,并取得主服务器上的相关资源服务的所有权,接替主服务器继续不间断的提供服务,从而达到资源及服务高可用性的目的。 以上描述的是heartbeat主备的模式,heartbeat还支持主主棋式,即两台服务器互为主备,这时它们之间会相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未受到对方发送的心跳报文,那么,一方就会认为对方失效或者宕机了,这时每个运行正常的主机就会启动自身的资源接管模块来接管运行在对方主机上的资源或者服务,继续为用户提供服务。一般情况下,可以较好的实现一台主机故障后,企业业务仍能够不间断的持续运行。 注意:所谓的业务不间断,再故障转移期间也是需要切换时间的(例如:停止数据库及存储服务等),heartbeat的主备高可用的切换时间一般是在5-20秒左右(服务器宕机的切换比人工切换要快)。 另外,和keepalived高可用软件一样,heartbeat高可用是操作系统级别的,不是服务(软件)级别的,可以通过简单的脚本控制.实现软件级别的高可用。 高可用服务器切换的常见条件场景: 主服务器物理宕机(硬件损坏,操作系统故障)。 Heartbeat服务软件本身故障。 两台主备服务器之间心跳连接故障。 服务故障不会导致切换.可以通过服务宕机把heartbeat服务停掉。 3 heartbeat心跳连接 经过前面的叙述,要部署heartbeat服务,至少需要两台主机来完成。那么,要实现高可用服务,这两台主机之间是如何做到互相通信和互相监侧的呢? 下面是两台heartbeat主机之间通信的一些常用的可行方法: 利用串行电缆,即所谓的串口线连接两台服务器(可选)。 一根以太网电缆两网卡直连(可选)。 以太网电缆,通过交换机等网络设备连接(次选)。 如何为高可用服务器端选择心跳通信方案? 串口线信号不会和以太网网络交集,也不需要单独配置丐地址等信息,因此传输稳定不容易出现问题,使用串口线的缺点是两个服务器对之间的距离距离不能太远,串口线对应服务端的设备为/dev/ttys0。串口线形状如下图所示: 使用以太网网线(无需特殊交叉线了)直连网卡的方式,配置也比较简单,只需对这两块直连网线的网卡配好独立的IP段地址能够互相通信即可,普通的网线就可以了(推荐) 使用联网以太网网线和网卡作为心跳线是次选的方案,因为这个链路里增加了交换机设备这样的故障点,且这个线路不是专用心跳线路,容易受以太网其他数据传输的影响,导致心跳报文发送延迟或者无法送达问题。 选择方案小结: 和数据相关的业务,要求较高,可以串口和网线直连的方式并用。 Web业务,可以网线直连的方式或局域网通信方式也可。 Heartbeat软件未来发展说明 有关heartbeat分3个分支的说明 自2.1.4版本后,Linux-HA将Heartbeat分包成三个不同的子项目,并且提供了一个cluster-glue的组件,专用于Local ResourceManager 的管理。即heartbeat + cluster-glue + resouce-agent 三部分。 Heartbeat hearbeat本身是整个集群的基础(cluster messaging layer),负责维护集群各节点的信息以及它们之前通信。 Cluster Glue 相当于一个中间层,负责调度,可以将heartbeat和crm(pacemaker)联系起来,包括两个摸块:本地资漂管理(Local Resource Manager)LRM和STONITH。 Resource Agents 资源代理层,各种的资源的ocf脚本,这些脚本将被LRM调用从而实现各种资源启动、停止、监控等等。 Pacfrmaker资料 pacemaker介绍:http://baike.baidu.com/view/8635511.htm 从头开始搭建其群在Fedora上面创建主/主和主/备集群 http://www.clusterlabs.org/doc/zh-CN/Pacemaker/1.1/html-single/Clusters_from_Scratch/index.html 参考文档:http://www.2cto.com/os/201511/448872.html 裂脑 什么是裂脑 由于某些原因,导致两台高可用服务器对之间在指定时间内,无法互相检侧到对方心跳而各自启动故障转移功能,取得了资源及服务的所有权,而此时的两台高可用服务器对都还活着并在正常运行,这样就会导致同一个IP或服务在两端同时启动而发生冲突的严重问题,最严重的是两台主机占用同一个VIP地址,当用户写入数据时可能会分别写入到两端,这样可能会导致服务器两端的数据不一致或造成数据丢失,这种情况就被称为裂脑,也有人称其为分区集群或大脑垂直分割,英文为split brain。 导致裂脑发生的多种原因 一般来说,裂脑的发生,有以下几个原因。 高可用服务器对之间心跳线链路故障。导致无法正常通信。 心跳线坏了(包括断了,老化)。 网卡及相关驱动坏了,IP配置及冲突问题(网卡直连)。 心跳线间连接的设备故障(网卡及交换机)。 仲裁的机器出问题(仲裁的方案)。 高可用服务器对上开启了如iptables防火墙阻挡了心跳的传输。 高可用服务器对上心跳网卡地址等信息配置不正确,导致发送心跳失败。 其它服务配置不当等原因,如心跳方式不同,心跳广播冲突、软件BUG等。 提示:另外的高可用软件keepalived配置里如果virtual router_id参数,两端配置不一致,也会导致裂脑问题发生。 防止裂脑发生的8种秘籍 发生裂脑时,对业务的影响是极其严重的,有时甚至是致命的。如:两台高可用服务器对之间发生裂脑,导致互相争用同一IP资源,就如同我们在局域网内常见的IP地址冲突一样,两个机器就会有一个或者两个都不正常,影响用户正常访问服务器。如果是应用在数据库或者存储服务这种极重要的高可用上,那就可能会导致用户发布的数据间断的写在两台不同服务器上,最终数据恢复极困难或难以恢复(当然,有NAS等公共存储的硬件也许会好一些)。...

redis主从复制工作原理

Replication的工作原理 设置一个Slave,无论是第一次还是重连到Master,它都会发出一个sync命令。当Master收到sync命令之后,会做两件事: Master执行BGSAVE,即在后台保存数据到磁盘(rdb快照文件)。 Master同时将新收到的写入和修改数据集的命令存入缓冲区(非查询类)。 当Master在后台把数据保存到快照文件完成之后,把这个快照传送给Slave,而Slave则把内存清空后,加载该文件到内存中。而Master也会把此前收集到缓冲区中的命令,通过Reids命令协议形式转发给Slave,Slave执行这些命令,实现和Master的同步。Master/Slave此后会不断通过异步方式进行命令的同步。 注:在redis2.8之前,主从之间一旦发生重连都会引发全量同步操作。但在2.8之后版本,也可能是部分同步操作。 部分复制 2.8后,当主从之间的连接断开之后,他们之间可以采用持续复制处理方式代替采用全量同步。Master端为复制流维护一个内存缓冲区(in-memory backlog),记录最近发送的复制流命令;同时,Master和Slave之间都维护一个复制偏移量(replication offset)和当前Master服务器ID(Master run id)。当网络断开,Slave尝试重连时: 如果MasterID相同(即仍是断网前的Master服务器),并且从断开时到当前时刻的历史命令依然在Master的内存缓冲区中存在,则Master会将缺失的这段时间的所有命令发送给Slave执行,然后复制工作就可以继续执行了 否则,依然需要全量复制操作。 Redis 2.8 的这个部分重同步特性会用到一个新增的PSYNC内部命令, 而 Redis 2.8以前的旧版本只有SYNC命令,不过,只要从服务器是Redis 2.8或以上的版本,它就会根据主服务器的版本来决定到底是使用 PSYNC还是SYNC。 如果主服务器是 Redis 2.8 或以上版本,那么从服务器使用 PSYNC 命令来进行同步。 如果主服务器是 Redis 2.8 之前的版本,那么从服务器使用 SYNC 命令来进行同步。 redis主从同步特点 一个Master可以有多个Slave。 Redis使用异步复制。从2.8开始,Slave会周期性(每秒一次)发起一个ack确认复制流(replication stream)被处理进度; 不仅主服务器可以有从服务器, 从服务器也可以有自己的从服务器, 多个从服务器之间可以构成一个图状结构; 复制在Master端是非阻塞模式的,这意味着即便是多个Slave执行首次同步时,Master依然可以提供查询服务; 复制在Slave端也是非阻塞模式的:如果你在redis.conf做了设置,Slave在执行首次同步的时候仍可以使用旧数据集提供查询;你也可以配置为当Master与Slave失去联系时,让Slave返回客户端一个错误提示; 当Slave要删掉旧的数据集,并重新加载新版数据时,Slave会阻塞连接请求(一般发生在与Master断开重连后的恢复阶段); 复制功能可以单纯地用于数据冗余(data redundancy),也可以通过让多个从服务器处理只读命令请求来提升扩展性(scalability): 比如说, 繁重的 SORT 命令可以交给附属节点去运行。 可以通过修改Master端的redis.config来避免在Master端执行持久化操作(Save),由Slave端来执行持久化。 redis replication配置文件详解 bash 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 slaveof [masterip] [masterport] #←该redis为slave ip和port是master的ip和port masterauth <master-password> #←如果master设置了安全密码,此处为master的安全密码 slave-serve-stale-data yes#←当slave丢失master或同步正在进行时,如果发生对slave的服务请求: slave-serve-stale-data no #←slave返回client错误:"SYNC with master in progress" slave-serve-stale-data yes #←slave依然正常提供服务 slave-read-only yes #←设置slave不可以写数据,只能用于同步 repl-ping-slave-period 10 #←发送ping到master的时间间隔 repl-timeout 60 #←IO超时时间 repl-backlog-size 1mb #←backlog的大小,当从库连接不到主库时,backlog的队列能放多少 repl-backlog-ttl 3600 #←backlog的生命周期 min-slaves-max-lag 10 #←延迟小于min-slaves-max-lag秒的slave才认为是健康的slave # 当master不可用,Sentinel会根据slave的优先级选举一个master。 # 最低的优先级的slave,当选master....

redis数据类型

key/value介绍 Redis key值是二进制安全的,这意味着可以用任何二进制序列作为key值,从形如“0foo”的简单字符串到一个JPG文件的内容都可以。空字符串也是有效key值。 关于key的几条规则: 太长的键值,例如1024字节的键值,不仅因为消耗内存,而且在数据中查找这类键值的计算成本很高。 太短的键值,如果你要用 u:1000:pwd来代替user:1000:password,这没有什么问题,但后者更易阅读,并且由此增加的空间消耗相对于key object和value object本身来说很小.当然,没人阻止您一定要用更短的键值节省一丁点空间。 最好坚持一种模式;。例如:object-type:id:field就是个不错的注意,像这样user:1000:password。我喜欢对多单词的字段名中加上一个点,就像这样:comment.1234.renlv_to key建议:object-type:id:field 长度10-20 value建议:string不要超过2K set sortedset元素不要超过5000 bash 1 2 3 4 $ redis-cli set user_list:user_id:5 zhangsan OK $ redis-cli get user_list:user_id:5 "zhangsan" 通用操作 找到全部给定模式的匹配到的key bash 1 2 3 4 5 6 7 127.0.0.1:6379> keys * #<==打印全部key 1) "name" 2) "site" 127.0.0.1:6379> keys na[ma]e #<==返回正则匹配到的key 1) "name" 127.0.0.1:6379> keys nam? 1) "name" randomkey返回随机key bash 1 2 3 4 127.0.0.1:6379> randomkey "name" 127.0.0.1:6379> randomkey "site" exists检查key是否存在 bash 1 2 3 4 127....

redis数据持久化

Redis的所有数据都存储在内存中,但是他也提供对这些数据的持久化。 Redis是一个支持持久化的内存数据库,Redis需要经常将内存中的数据同步到磁盘来保证持久化。Redis支持四种持久化方式,一种是 Snapshotting(快照)也是默认方式 ,另一种是 Append-only file(aof)的方式 。 RDB持久化方式 Snapshotting方式是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。可以通过配置设置自动做快照持久化。例如可以配置redis在n秒内如果超过m个key被修改就自动做快照。 实现机制 Redis调用fork子进程。 父进程继续处理client请求,子进程负责将内存内容写入到临时文件。由于os的实时复制机制(copy on write)父子进程会共享相同的物理页面,当父进程处理写请求时os会为父进程要修改的页面创建副本,而不是写共享的页面。所以子进程地址空间内的数据是fork时刻整个数据库的一个快照。 当子进程将快照写入临时文件完毕后,用临时文件替换原来的快照文件,然后子进程退出。client也可以使用save或者bgsave命令通知redis做一次快照持久化。save操作是在主线程中保存快照的,由于redis是用一个主线程来处理所有client的请求,这种方式会阻塞所有clien:请求。所以不推荐使用。另一点需要注意的是,每次快照持久化都是完整写入到磁盘一次并不是增量的只同步变更数据。如果数据量大的话,而且写操作比较多,必然会引起大量的磁盘IO操作,可能会严重影响性能。 缺点: 快照方式是在一定间隔时间做一次的,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改。如果应用要求不能丢失任何修改的话,可以采用aof持久化方式。 相关配置 bash 1 2 3 4 5 6 7 8 save 900 1 #←900秒内至少有1个key被改变 save 300 10 #←300秒内至少有10个key被改变 save 60 10000 #←60秒内至少有10000个key被改变 stop-writes-on-bgsave-error yes #←后台存储错误后停止写。如:磁盘空间不足 rdbcompression yes #←使用LZF压缩rdb文件 rdbchecksum yes #←存储和加载rdb文件时校验 dbfilename dump.rdb #←存储rdb文件名 dir /app/redis/db/ #←rdb文件路径 持久化测试 bash 1 2 3 4 5 11512:M 22 Apr 01:04:47.028 * 5 changes in 60 seconds....

redis事务与发布订阅

发布与订阅 Publish/Subscribe 发布订阅(pub/sub)是一种消息通信模式,主要的目的是解耦消息发布者和消息订阅者之间的藕合,这点和设计模式中的观察者模式比较相似。pub/sub不仅仅解决发布者和订阅者直接代码级别耦合也解决两者在物理部署上的耦合。Redis作为一个pub/sub的server,在订阅者和发布者之间起到了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向Redis server订阅自己感兴趣的消息类型,Redis将消息类型称为通道(channel)。当发布者通过publish命令向Redis server发送特定类型的消息时。订阅该消息类型的全部client 都会收到此消息。这里消息的传递是多对多的。一个client可以订阅多个channel,也可以向多个channel发送消息。 Redis支持这样一种特性,你可以将数据推到某个信息管道中,然后其它人可以通过订阅这些管道来获取推送过来的信息。 用一个客户端订阅频道 bash 1 2 3 4 5 6 psubscribe new #### 1.批量订阅 127.0.0.1:6379> publish news news-test (integer) 1 127.0.0.1:6379> publish video video-test (integer) 1 此时可以见到接受的信息 bash 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 127.0.0.1:6379> psubscribe news video Reading messages... (press Ctrl-C to quit) 1) "psubscribe" 2) "news" 3) (integer) 1 1) "psubscribe" 2) "video" 3) (integer) 2 1) "pmessage" 2) "news" 3) "news" 4) "news-test" 1) "pmessage" 2) "video" 3) "video" 4) "video-test" 数据过期设置及机制 Redis key的过期机制 Redis对过期键采用了lazy expiration:在访间key的时候判定key是否过期,如果过期,则进行过期处理(过期的key没有被访间可能不会被删除)。其次,每秒对volatile keys进行抽样测试,如果有过期键,那么对所有过期key进行处理。...

Redis安装

Remote Dictonary Server(Redis)是一个基于key-value键值对的持久化数据库存储系统。redis和大名鼎鼎的Memcached缓存服务很像,但是redis支持的数据存储类型更丰富,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)、Hash等。 这些数据类型都支持push/pop,add/remove及取交集、并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached缓存服务一样,为了保证效率数据都是缓存在内存中提供服务。和memcached不同的是,redis持久化缓存服务还会周期性的把更新的数据写入到磁盘以及把修改的操作记录追加到文件里记录下来,比memcached更有优势的是,redis还支持master-slave(主从)同步,这点很类似关系型数据库MySQL。 Redis是一个开源的、使用C语言编写、3万多行代码、支持网络、可基于内存亦可久化的日志型、Key-Value数据库,并提供多种语言的API从2010年3月15日起,Redis开发工作由VMware主持。 Redis的出现,再一定程度上弥补了memcached这类key-value内存缓存服务的不足,在部分场合可以对关系数据库起到很好的补充作用.redis提供了Python, Ruby, Erlang, PHP客户端,使用很方便。redis官方文档如下:http://www.redis.io/documentation Redis的优点 与memcached不用,redis可以持久化存储数据。 性能很高:Redis能支持超过10w/秒的读写频率。 丰富的数据类型:redis支持二进制的Strings, Lists, Hashes, Sets及sorted sets等数据类型操作。 原子:Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。 丰富的特性:Redis还支持publish/subscribe(发布/订阅),通知,key过期等等特性。 redis支持异步主从复制。 Redis的应用场景 传统的MySQL+Memcached的网站架构遇到的问题: MySQL数据库实际上是适合进行海量数据存储的,加上通过Memcached将热点数据 存放到到内存cache里,达到加速数据访问的目的,绝大部分公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的增长,很多问题就会暴漏出来: 需要不断的对MySQL进行拆库拆表Memcached也需不断跟着扩容,扩容和维护工作占据大量开发运维时间。 Memcached与MySQL数据库数据一致性问题是个老大难。 Memcached数据命中率低或down机,会导致大量访问直接穿透到数据库,导致MySQL无法支撑访问。 跨机房cache同步一致性问题。 redis在微博中的应用 计数器:微博(评论、转发、阅读、赞等) 用户(粉丝、关注、收藏、双向关注等) redis在短信中的应用 发送短信后存入redis中60秒过期。 redis的最佳应用场景 Redis最佳试用场景是全部数据in-memory。 Redis更多场景是作为Memcached的替代品来使用。 当需要除key/value之外的更多数据类型支持时,使用Redis更合适。 数据比较重要,对数据一致性有一定要求的业务。 当存储的数据不能被剔除时,使用Redis更合适。 更多 Redis作者谈Redis应用场景 http://blog.nosglfan.com/html/2235.html 使用redis bitmap进行活跃用户统计 http://blog.nosqlfun.com/html/3501.html 计数、cache服务、展示最近、最热、点击率最高、活跃度最高等等条件的top list、用户最近访问记录表、relation list/Message Queue、粉丝列表 Key-Value Store更加注重对海量数据存取的性能、分布式、扩展性支持上,并不需要传统关系数据库的一些特征。例如:Schema事务、完整SQL查询支持等等,因此在布式环境下的性能相对于传统的关系数据库有较大的提升。 redis的生产经验教训 要进行Master-slave主从同步配置,在出现服务故障时可以切换。 在master禁用数据据持久化只需在slave上配置数据持久化。 物理内存+虚拟内存不足,这个时候dump一直死着,时间久了机器挂掉。这个情就是灾难。 当Redis物理内存使用超过内存总容量的3/5时就会开始比较危险了,就开始做swap,内存碎片大! 当达到最大内存时,会清空带有过期时间的如 redis与DB同步写的问题,先写DB,后写redis,因为写内存基本上没有问题。 业务场景 提高了DB的可扩展性,只需要将新加的数据放到新加的服务器上就可以了。 提高了DB的可用性,只影响到需要访问的shard服务器上的数据的用户。 提高了DB的可维护性,对系统的升级和配里可以按shard一个个来搞,对服务产生的影响小。 小的数据库存的查询压力小,查询更快,性能更好。 使用过程中的一些经验与教训,做个小结: 要进行Master-slave配置,出现服务故障时可以支持切换。 在master侧禁用数据持久化,只需在slave上配置数据持久化。 物理内存+虚拟内存不足时,这个时候dump已知死着,时间久了机器挂掉。这个情况就是灾难。 当Redis物理内存使用超过内存总容量的3/5时就会开始比较危险了,就开始做swap,内存碎片大。 当达到最大内存时,会清空带有过期时间的key,即使key未到过期时间。 redis与DB同步写的问题,先写DB,后写redis,因为写内存基本上没有问题。 安装配置Redis 下载安装Redis redis官方网站:www....

redis安全相关配置

为Redis客户端外部设置连接密码 因为redis速度相当快,所以在一台比较好的服务器下,一个外部的用户可在一秒钟进行上万次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解。 修改配置文件 bash 1 requirepass 123@1 重启服务后登录客户端提示没有验证 bash 1 2 3 $ redis-cli 127.0.0.1:6379> keys * (error) NOAUTH Authentication required. 验证成功后,可以正常操作 bash 1 2 3 4 5 127.0.0.1:6379> auth 123@1 OK 127.0.0.1:6379> keys * 1) "test-durable-1" 2) "test-durable" 命令行临时生效 在命令行设置后,redis在下次重启前,每次登录都需要验证密码 bash 1 2 3 4 5 6 127.0.0.1:6379> CONFIG set requirepass 123@1 OK 127.0.0.1:6379> quit $ redis-cli 127.0.0.1:6379> keys * (error) NOAUTH Authentication required. 注意:配置Redis复制的时候如果主数据库设置了密码,需要在从数据库的配置文件中通过masterauth参数设置主数据库的密码,以使从数据库连接主数据库时自动使用AUTH命令认证。 通过mysql命令行指定密码方式登录Redis客户端 bash 1 2 3 4 $ redis-cli -a 123@1 127....

ch7 关于iptables的内核参数

调整内核参数文件/etc/sysctl.conf,以下是我们生产环境的某个服务器的配置: bash 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 # 表示如果套接字由本端要求关闭,这个檀树决定了他保持在FIN-WAIT-2状态的时间。 net.ipv4.tcp_fin_timeout = 2 # 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭。 net.ipv4.tcp_tw_reuse = 1 # 表示开启TCP连接中TIME-WAIT socket的快速收回,默认为0,表示关闭 net.ipv4.tcp_tw_recycle = 1 提示:以上两个参数为了防止生产环境下 time_wait过多设置的。 ############################################################ # 表示开启SYN Cookie。当出现SYN等带队列溢出时,启动cookie来处理,可防范少量SYN攻击,默认为0表示关闭 net.ipv4.tcp_syncookies = 1 # 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是两小时,改为20分钟 单位秒 net.ipv4.tcp_keepalive_time = 1200 # 表示对用向外连接的端口范围。缺省情况下很小。 net.ipv4.ip_local_port_range = 4000 65000 # 表示SYN队列的长度,默认为1024,加大队列长度为8192,可容纳更过等待连接的网络连接数。 net....

ch6 iptables生产应用场景

1、局域网共享上网(适合做企业内部局域网上网网关,以及IDC机房内网的上网网关 nat POSTROUTING) 2、服务器防火墙功能(适合IDC机房具有外网IP服务器,主要是filter INPUT的控制) 3、把外部IP及端口映射到局域网内部(可以一对一IP映射,也可针对某一个端口映射。) 也可能是IDC把网站的外网VIP级网站端口映射到负载均衡器上(硬件防火墙)(NAT PREROUTING) 4、办公路由器+网关功能(zebra路由+iptables过滤及NAT+squid正向透明代理80+ntop/iftop/iptaf流量查看+tc/cbq流量控制限速)。 5、邮件的网关。 问题2:的生产环境应用:用于没有外网地址的内网服务器,映射为公网IP后对外提供服务,也包括端口的映射 问题3:IP一对一映射 用于没有外网地址的内网服务器,映射为公网IP后对外提供服务,例如:ftp服务要一对一IP映射。 共享上网封IP的方法: bash 1 2 /sbin/iptables -I FROWAED -s 10.0.0.26 -j DROP /sbin/iptables ${deal} FROWARD -m mac --mac -source ${strIpMac} -j DROP 映射多个外网IP上网 bash 1 2 iptables -t nat -A POSTROUTING -s 10.0.1.0/255.255.240.0 -o eth0 -j SNAT --to-source 124.42.60.11-124.42.60.16 iptables -t nat -A POSTROUTING -s 172.168.1.0/255.255.255.0 -o eth0 -j SNAT --to=source 124.42.60.60-124.42.60.63 问题:公司内网主机多的时候,访问网站容易被封。

ch5 配置网关及服务器地址映射

1 办公室路由网关架构图 对应实际企业办公上网场景逻辑图 2.实验环境配置需求前期准备 2.1 服务器网关B需要准备如下条件 物理条件是具备上网卡,建议eth0外网地址(这里是192.168.1.5,gw 192.168.1.2),ech1内网地址(这里是172.168.1.10,内网卡不配GW。 确保服务器网关B要可以上网(B上网才能代理别的机器上网)。可以通过ping baidu.com或外网IP测试。 内核文件/etc/sysctl.conf里开启转发功能。在服务器网关B192.168.1.5机器上开启路由转发功能。编辑/etc/sysctl.conf修改内容为net.ipv4.ip_forward = 1,然后执行sysctl -p使修改生效 iptables的filter表的FORWARD链允许转发 不要filter防火墙功能,共享上网,因此最好暂停防火墙测试/etc/init.d/tables stop 2.2 加载iptables内核模块 配置网关需要iptables的nat表,PREROUTING,POSTROUTING。 (1)载入iptables内核模块,执行并放入rc.local bash 1 2 3 4 5 6 7 modprobe ip_tables \ modprobe iptable_filter \ modprobe iptable_nat \ modprobe ip_conntrack \ modprobe ip_conntrack_ftp \ modprobe ip_nat_ftp \ modprobe ipt_state bash 1 2 3 $ lsmod|egrep ^ip iptable_nat 6051 0 iptable_filter 2793 0 2.3 局域网的机器: 局域网的机器有一块网卡即可,确保局域网的机器C,默认网关这只了网关服务器B的eth1内网卡IP(172.168l.1.10)。把主机C的gateway设置为B的内网卡192的网卡ip即172.168l.1.10。 检查手段: 分别ping网关服务器B的内外网卡IP,都应该是通的就对了. 出公网检查除了PING网站域名外,也要ping下外网ip,排除DNS故障。不通 ping 10.0.0.254网关也是不通的。 如上,请准备两台虚拟机B和C,其中B要有双网卡。B的内网卡的网段和C的网段一样。...

ch4 生产环境如何维护iptables

生产中,一般第一次添加规则命令行或者脚本加入然后一次性保存成文件,然后可以改配置文件管理: bash 1 2 3 4 5 6 7 8 9 $ cat /etc/sysconfig/iptables # Generated by iptables-save v1.4.7 on Wed Nov 23 09:18:12 2016 *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [115:13341] -A INPUT -p tcp -m tcp --dport 52113 -j ACCEPT COMMIT # Completed on Wed Nov 23 09:18:12 2016 生产维护: ⑴ 确定规则 sh 1 2 3 4 5 vim /etc/sysconfig/iptables # 加入想要的规则:例如: -A INPUT -p tcp -m tcp --dport 873 -j ACCEPT /etc/init....

ch3 iptables配置防火墙

生产环境配置主机防火墙有两种模式: 逛公园及看电影两种模式: 逛公园:默认随便出进,对非法的分子进行拒绝。企业应用:企业配置上网网关路由。 看电影:默认没有票进不去。花钱买票才能看电影。企业应用:服务器主机防火墙。 很显然:第二种更严格,更安全。 逛公园及看电影两种模式本事就是防火墙的默认规则是允许还是拒绝。 1.清理当前所有规则和计数器 bash 1 2 3 iptables -F iptables -Z iptables -X 2.配置允许SSH登陆端口进入 bash 1 2 iptables -A INPUT -p tcp --dport 52113 -j ACCEPT iptables -A INPUT -p tcp -s 192.168.1.0/30 -j ACCEPT 提示:此步骤是为了防止执行下面的步骤,把自己关在外面,除非你在本地处理,这部可以不做。 3.设置允许本机lo通讯规则 bash 1 2 iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # output加不加都行,在工作环境上是加的 4.设置默认的防火墙禁止和允许规则 bash 1 2 3 iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT 一般情况下OUTPUT我们不要drop,像电影院一样,电影已经看完了,中间不想看就回家了,你不可能说不行不能走,所以一般出去没人管,进来才收票,OUTPUT一般不设置,但是不设置也有风险,企业流量暴涨,由于服务器中病毒外发流量。...

ch2 iptables命令帮助信息

2 iptables命令帮助信息 有问题查帮助,下面是很全的帮助信息(必须拿下它) bash 1 $ iptables -h bash 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 $ iptables -nL # INPUT链 ACCEPT默认允许决策 Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 REJECT all -- 0.0.0.0/0 0....

ch1 iptables介绍

1 防火墙实战 关闭两项功能: selinux(生产中也是关闭的),ids入侵检测,MD5指纹将。系统所有核心文件全部做指纹识别,将指纹留下,将来出问题,一看就知道那个文件被改过。 iptables(生产中看情况,内网关闭,外网打开),大并发的情况,不能开iptables,影响性能。 使用防火墙就不如不使用防火墙,不使用防火墙的前提是不给外网ip,工作中要少给外网服务器ip,这样防火墙使用率较低,防火墙使用也很消耗资源 安全优化: 尽可能不给服务器配置外网IP。可以通过代理转发或者通过防火墙映射。 并发不是特别大情况再外网IP的环境,要开启iptables防火墙 http://edu.51cto.com/course/course_id-772.html 学好iptables基础: OSI7层模型以及不同层对应那些协议? TCP/IP三次握手,四次断开的过程,TCP HEADER。 常用的服务端口要了如指掌。 1.1 iptables防火墙简介 Netfilter/iptables(以下简称iptables)是unix/linux自带的一款优秀且开放源代码的完全自由的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入和流出的服务器数据包进行很精细的控制。特别是他可以在一台非常低的硬件配置下跑的非常好(赛扬500MHZ 64M内存的情况部署网关防火墙)提供400人的上网服务四号==不逊色企业级专业路由器防火墙==。iptables+zebra+squid iptables是linux2.4及2.6内核中集成的服务。其功能与安全性比其老一辈ipwadin ipchains强大的多(长江水后浪推前浪),iptables主要工作在OSI七层的二、三、四层,如果重新编译内核,iptables也可以支持7层控制(squid代理+iptables)。 1.2 iptables名词和术语 容器:包含或者说属于关系 什么是容器? ​ 在iptables里,就是用老描述这种包含或者说属于的关系 什么是Netfilter/iptables? ​ Netfilter是表(tables)的容器 什么是表(tables)? ​ 表是链的容器,所有的链(chains)都属于其对应的表。 什么是链(chains)? ​ 链(chains)是规则的容器 什么是规则(policy) ​ iptables一系列过滤信息的规范和具体方法条款 iptables抽象和实际比喻对比表 | Netfilter | tables | chains | policy | | --------- | ---------- | ------------ | -------------------- | | 一栋楼 | 楼里的房子 | 房子里的柜子 | 柜子里衣服的摆放规则 | 1.3 iptables工作流程 iptables是采用数据包过滤机制工作的,所以他会对请求的数据包包头数据进行分析,并根据我们预先设定的规则进行匹配来决定是否可以进入主机。...

Apache httpd配置集锦

httpd下载地址:Historical releases 安装httpd bash 1 2 3 4 5 6 7 $ ls ABOUT_APACHE buildconf emacs-style INSTALL LICENSE os srclib acinclude.m4 CHANGES httpd.dep InstallBin.dsp Makefile.in README support Apache.dsw config.layout httpd.dsp LAYOUT Makefile.win README.platforms test build configure httpd.mak libhttpd.dep modules README-win32.txt VERSIONING BuildAll.dsp configure.in httpd.spec libhttpd.dsp NOTICE ROADMAP BuildBin.dsp docs include libhttpd.mak NWGNUmakefile server httpd 编译参数 参数选项 注释说明 ./configure 配置源代码树 –prefix=/usr/local/apache2 体系无关文件的顶级安装目录PREFIX,也就Apache的安装目录。 –enable-module=so [-enable-deflate] 打开so模块,so模块是用来提DSO支持的apache核心模块 –enable-deflate=shared [-enable-expires] 支持网页压缩 –enable-expires=shared [-enable-rewrite] 支持缓存过期控制 –enable-rewrite=shared 支持URL重写 –enable-cache 支持缓存 –enable-file-cache 支持文件缓存 –enable-mem-cache 支持记忆缓存 –enable-disk-cache 支持磁盘缓存 –enable-static-support 支持静态连接(默认为动态连接) –enable-static-htpasswd 使用静态连接编译htpasswd–管理用于基本认证的用户文件 –enable-static-htdigest 使用静态连接编译htdigest–管理用于摘要认证的用户文件 –enable-static-rotatelogs 使用静态连接编译rotatelogs–滚动Apache日志的管道日志程序 –enable-static-logresolve 使用静态连接编译logresolve–解析Apache日志中的IP地址为主机名 –enable-static-htdbm 使用静态连接编译htdbm–操作DBM密码数据库 –enable-static-ab 使用静态连接编译ab–Apache服务器性能测试工具 –enable-static-checkgid 使用静态连接编译checkgid –disable-cgid 禁止用一个外部CGI守护进程执行CGI脚本 –disable-cgi 禁止编译CGI版本的PHP –disable-userdir 禁止用户从自己的主目录中提供页面 –with-mpm=worker 让apache以worker方式运行 –enable-authn-dbm=shared 对动态数据库进行操作。Rewrite时需要。 以下是分门别类的更多参数注解,与上面的会有重复 用于apr的configure脚本的选项: 可选特性 –enable-experimental-libtool 启用试验性质的自定义libtool –disable-libtool-lock 取消锁定(可能导致并行编译崩溃) –enable-debug 启用调试编译,仅供开发人员使用。 –enable-maintainer-mode 打开调试和编译时警告,仅供开发人员使用。 –enable-profile 打开编译profiling(GCC) –enable-pool-debug[=yes|no|verbose|verbose-alloc|lifetime|owner|all] 打开pools调试 –enable-malloc-debug 打开BeOS平台上的malloc_debug –disable-lfs 在32-bit平台上禁用大文件支持(large file support) –enable-nonportable-atomics 若只打算在486以上的CPU上运行Apache,那么使用该选项可以启用更加高效的基于互斥执行 的原子操作。 –enable-threads 启用线程支持在线程型的MPM上必须打开它 –disable-threads 禁用线程支持,如果不使用线程化的MPM,可以关闭它以减少系统开销。 –disable-dso 禁用DSO支持 –enable-other-child 启用可靠子进程支持 –disable-ipv6 禁用IPv6支持 **可选的额外程序包** –with-gnu-ld 指定C编译器使用GNU ld –with-pic 只使PIC/non-PIC对象[默认为两者都使用] –with-tags[=TAGS] 包含额外的配置 –with-installbuilddir=DIR 指定APR编译文件的存放位置(默认值为:’${datadir}/build’) –without-libtool 禁止使用libtool连接库文件 –with-efence[=DIR] 指定Electric Fence的安装目录 –with-sendfile 强制使用sendfile(译者注:Linux2....

php.ini优化

PHP引擎缓存优化加速 eaccelerator zend opcode xcache 使用tmpfs作为缓存加速缓存的文件目录 bash 1 2 mount -t tmpfs tmpfs /dev/shm -o size=256m mount -t tmpfs /dev/shm/ /tmp/eaccelerator/ 利用好tmpfs 1.上传目录缩略图临时处理目录/tmp. 2.其他加速器临时目录/tmp/eaccelerator/ php.ini参数优化 无论是 apache 还是 nginx,php.ini都是适合的。而 php-fpm.conf 适合nginx。而php-fpm.conf更适合 nginx+fcgi 的配置。首选选择产品环境的 php.ini 开发场景:development 生产环境:production 打开php的安全模式 php的安全模式是个非常重要的php内嵌的安全机制,能够控制一些php中的函数执行,比如system() ,同时把很多文件操作的函数进行了权限控制。php5.4后弃用 该参数配置如下: text 1 2 3 336 ; Safe Mode 337 ; http://php.net/safe-mode 338 safe_mode = Off 用户和安全组 当safe_mode打开时,safe_mode_gid被关闭,那么php脚本能够对文件进行访问,而且相同组的用户也能够对文件进行访问。建议设置为safe_mode_gid=off; 如果不进行设置,可能我们无法对我们服务器网站目录下的文件进行操作了,比如我们需要对文件进行操作的时候。php5.3默认为 safe_mode_gid=off; (新版弃用) 关闭危险函数 如果打开了安全模式,那么函数禁止是可以不需要的,但是我们为了安全还是考虑进去。比如,我们觉得不希望执行包括 system() 等在那的能够执行命令的php函数,或者能够查看php信息的 phpinfo() 等函数,那么我们就可以禁止他们,方法如下: text 1 disable_functions = system,passthru,exec,shell_exec,popen,phpinfo 如果你要禁止任何文件和目录的操作,那么可以关闭很多文件操作。...