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 如果你要禁止任何文件和目录的操作,那么可以关闭很多文件操作。...

PHP安装错误记录

编译错误 错误:同时指定了fpm与aspxs2方式错误 bash 1 2 You've configured multiple SAPIs to be build.You can build only one SAPI module and CLI binary at the same time 原因:导致的原因是我的配置参数中同时使用了–enable-fpm 与–with-apxs2,因此编译的时候出错了,去掉其中的任意一个参数编译成功。 系统缺少libtool bash 1 make ***[libphp5.la] Error 1 解决方法:在编译PHP版本时,产生错误 make ***[libphp5.la] Error 1 错误原因:系统缺少libtool 解决办法:yum install libtool-ltdl-devel make过程错误 make: *** [sapi/cli/php] Error 1 原因:在 「./configure 」 沒抓好一些环境变数值。错误发生点在建立「-o sapi/cli/php」是出错,没給到要 link 的 iconv 库参数。 报错提示: bash 1 2 3 4 5 6 7 8 9 libiconv.so.2: cannot open shared object file: No such file or directory mak /root/tools/php-7....

一致性hash在memcache中的应用

Memcache应用场景 基本场景 比如有 N 台 cache 服务器(后面简称 cache),那么如何将一个对象 object 映射到 N 个 cache 上呢,你很可能会采用类似下面的通用方法计算 object 的 hash 值,然后均匀的映射到到N个cache; hash(object)%N 如下图: 这时,一切都运行正常,再考虑如下的两种情况: 一个 cache服务器m down掉了(在实际应用中必须要考虑这种情况),这样所有映射到cache m的对象都会失效,怎么办,需要把cache m从cache 中移除,这时候 cache 是 $N-1$ 台,映射公式变成了 hash(object)%(N-1) 。此时数据 $3%3-1=3%2=1$ 此时,3应该在S3上,但是由于S3down机导致到S1去取,这时会未命中。如下图 由于访问加重,需要添加 cache ,这时候 cache 是 $N+1$ 台,映射公式变成了 hash(object)%(N+1) 。1和2意味着突然之间几乎所有的 cache 都失效了。对于服务器而言,这是一场灾难,洪水般的访问都会直接冲向后台服务器。$\frac{N-1} { N\times (N-1)}$ 即: 有N台服务器,变为 $N-1$ 台,即每 $N \times (N-1)$个数中,求余相同的只有 N-1 个。命中率为:$\frac{1}{3}$ 再来考虑第三个问题,由于硬件能力越来越强,你可能想让后面添加的节点多做点活,显然上面的 hash 算法也做不到。 有什么方法可以改变这个状况呢,这就是 consistent hashing… 但现在一致性hash算法在分布式系统中也得到了广泛应用,研究过memcached缓存数据库的人都知道,memcached服务器端本身不提供分布式cache的一致性,而是由客户端来提供,具体在计算一致性hash时采用如下步骤: 首先求出memcached服务器(节点)的哈希值,并将其配置到 0~232 的圆(continuum)上。 然后采用同样的方法求出存储数据的键的哈希值,并映射到相同的圆上。 然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上。如果超过232仍然找不到服务器,就会保存到第一台memcached服务器上。...

网络共享 - centos7安装vsftpd

配置防火墙,开启FTP服务器需要的端口 CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙。 关闭firewall: bash 1 2 systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall开机启动 安装iptables防火墙 bash 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 yum install iptables-services # 安装 vi /etc/sysconfig/iptables # 编辑防火墙配置文件 # Firewall configuration written by system-config-firewall # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 10060:10090 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT :wq!...

memcached从入门到精通

1 Memcached介绍及常见同类软件对比 1.1 Memcached是什么? Memcached是一个开源的、支持高性能、高并发的分布式缓存系统,由C语言编写,总共2000多行代码。从软件名称上看,前3个字符的单词Mem就是内存的意思,接下来的后面5个字符的单词Cache就是缓存的意思,最后一个字符d是daemon的意思,代表是服务端守护进程模式服务。 Memcached服务分为服务端和客户端两部分,其中,服务端软件的名字形如 Memcached-1.4.24.tat.gz,客户端软件的名字形如 Memcache-2.25.tar.gz Memcached软件诞生于2003年,最初由LiveJournal的BradFitzpatrick开发完成。Memcached是整个项目的名称,而Memcached是服务器端的主程序名,因其协议简单,使用部署方便、且支持高并发而被互联网企业广泛使用,知道现在仍然被广泛应用。官方网址:http://memcached.org 1.2 Memcached的作用 传统场景,多数Web应用都将数据保存到关系型数据库中(例如MySQL),Web服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,关系型数据库的负担就会加重、响应缓慢、导致网站打开延迟等问题,影响用户体验。 这时就需要Memcached软件出马了。使用Memcached的主要目的是,通过在自身内存中缓存关系型数据库的查询结果,减少数据库自身被访问的次数,以提高动态web应用的速度、提高网站架构的并发能力和可扩展性。 Memcached服务的运行原理是通过在实现规划好的系统内存空间中临时缓存数据库的各类数据,以达到减少前端业务服务对数据库的直接高并发访问,从而达到提升大规模网站急群众动态服务的并发访问能力。 生产场景的Memcached服务一般被用来保存网站中经常被读取的对象或数据,就像我们的客户端浏览器也会把经常访问的网页缓存起来一样,通过内存缓存来存取对象或数据要比磁盘存取快很多,因为磁盘是机械的,因此,在当今的IT企业中,Memcached的应用范围很广泛 1.3 互联网常见内存服务软件 下表为互联网企业场景常见内存缓存服务软件相关对比信息: 软件 类型 主要作用 缓存的数据 Memcached 纯内存型 常用于缓存网站后端的各类数据,例如数据库中的数据 主要缓存用户重复请求的动态内容,blog的博文BBS的帖子等内容用户的Session会话信息 Redis/Mongodb/memcachedb 可持久化存储,即使用内存也会使用磁盘存储 1. 缓存后端数据库的查询数据 2.作为关系数据库的重要补充 1.作为缓存:主要缓存用户重复请求的动态内容:例如BLOG的博文、BBS的帖子等内容。2.作为数据库的有效补充:例如:好友关注、粉丝统计、业务统计等功能可以用持久化存储。 Squid/Nginx 内存或内存加磁盘缓存 主要用于缓存web前端的服务内容 主要用于静态数据缓存,例如:图片,附件(压缩包),js,css,html等,此部分功能大多数企业会选择专业的CDN公司如:蓝讯、网宿。 2 Memcached常见用途工作流程 Memcached是一种内存缓存软件,在工作中经常用来缓存数据库的查询数据,数据被缓存在事先预分配的Memcached管理的内存中,可以通过API或命令的方式存取内存中缓存的这些数据,Memcached服务内存中缓存的数据就像一张巨大的HASH表,每条数据都是以key-value对的形式存在。 2.1 网站读取Memcached数据时的工作流程 Memcached用来缓存查询到的数据库中的数据,逻辑上,当程序访问后端数据库获取数据时会先优先访问Memcached缓存,如果缓存中有数据就直接返回给客户端用户,如果没有数据(没有命中)程序再去读取后端的数据库的数据,读取到需要的数据后,把数据返回给客户端,同时还会把读取到的数据库缓存到Memcached内存中,这样客户端用户再请求相同数据就会直接读取Memcached缓存的数据,这样就大大减轻了后端数据库的压力,并提高了整个网站的响应速断,提升了用户体验。 图2-1展示了Memcached缓存系统和后端数据库系统的协作流程 上图,使用Memcached缓存查询数据来减少数据库压力的具体工作流程如下: web程序首先检查客户端请求的数据是否在Memcached缓存中存在,如果存在,直接把请求的数据返回给客户端,此时不在请求后端数据库。 如果请求的数据在Memcached缓存中不存在,则程序会请求数据库服务,把数据库中取到的数据返回给客户端,此时不再请求后端数据库。 2.2 网站更新Memcached数据时工作流程 当程序更新或者删除数据时,会首先处理后端数据库中的数据。 程序处理后端数据库中的数据的同时,也会通知Memcached中的对应旧数据失效,从而保证Memcached中缓存的数据始终和数据库中的户数一直,这个数据一致性非常重要,也是大型网站分布式缓存集群的最头痛的问题所在。 如果是在高并发读写场合,除了要程序通知Memcached过期的缓存失效外,还可能会通过相关机制,例如在数据库上部署相关程序(例如:在数据库中设置触发器使用UDFs),实现当数据库有更新就会把数据更新到Memcached服务中,使得客户端在访问新数据前,预先把更新过的数据库数据复制到Memcached中缓存起来,这样可以减少第一次查询数据库带来的访问压力,提升Memcached中缓存的命中率,甚至sina门户还会把持久化存储redis做成MySQL数据库的从库,实现真正的主从复制。 Memcached网站作为缓存应用更新数据流程图见下图1-2 Memcached服务作为缓存应用通过相关软件更新数据见图2-2 3 Memcached在企业中的应用场景 3.1 作为数据库查询数据缓存 3.1.1 完整数据缓存 例如电商的商品分类功能不会经常变动,就可以实现放到Memcached里,然后再对外提供数据访问。这个过程被称之为“数据预热”。 此时秩序读取缓存无需读取数据库就能读到Memcached缓存里的所有商品分类数据了,所以数据库的访问压力就会大大降低了。 为什么商品分类数据可以实现放在缓存里呢? 因为,商品分类几乎都是由内部人员管理的,如果需要更新数据,更新数据库后,就可以把数据同时更新到Memcached里。 如果把商品分类数据做成静态化文件,然后通过在前段WEB缓存或者使用CDN加速效果更好。 3.1.2 热点数据缓存 热点数据缓存一般是用于由用户更新的商品,例如淘宝的卖家,当卖家新增商品后,网站程序就会把商品写入后端数据库,同时把这部分数据,放入Memcached内存中,下一次访问这个商品的请求就直接从Memcached内存中取走了。这种方法用来缓存网站热点的数据,即利用Memcached缓存经常被访问的数据。 特别提示:这个过程可以通过程序实现,也可以在数据库上安装软件进行设置,直接由数据库把内容更新到Memcached中,相当于Memcached是MySQL的丛库一样。 淘宝、京东、小米等电商双11秒杀抢购场景: 如果碰到电商双11秒杀高并发的业务场景,必须要实现预热各种缓存,包括前端的web缓存和后端的数据缓存。...