Blog of Jeff Xue

  • Home

  • Categories

  • 读书

  • 编程

  • 思考

  • Archives

  • Tags

redis主从+Sentinel高可用方案

Posted on 2016-06-12 Edited on 2020-01-19 In 运维

生产环境redis一直处于单节点运行模式,如果出现故障,则会无法提供服务,因此需要提高redis服务的高可用性,因为本身访问量并不是十分大,另外并无运维人力投入进行维护,因此并不考虑集群方案。通过综合考虑研究采用redis主从,加上redis sentinel组件搭建高可用的redis方案。

redis主从保证了数据的可靠性,而redis sentinel可以提升其可用性。redis sentinel为redis主从集群提供了:1)master存活检测、2)集群主从服务监控、3) 自动故障转移
一般情况下,最小redis主从集群单元由一个maste和slave组成,当master失效后,sentinel可以帮助我们自动将slave提升为master;有了sentinel组件,可以减少系统管理员的人工切换slave的操作过程。

但是一般情况下,主从分别部署在不同的服务器上,对外服务IP不同,当sentinel进行了主从切换后,应用程序如何切换访问新的master。而实际上应用程序可以通过访问sentinel获取最新master,从而达到无缝的切换(Jedis提供了JedisSentinelPool,但在主从切换后需主动重新获取新的连接;而spring-data-redis中使用RedisTemplates进行调用不会有该问题,具体见后面章节)

Read more »

redis集群方案比较

Posted on 2016-06-12 Edited on 2020-01-19 In 运维

Redis常见集群实现方式

本章节为引用内容http://www.infoq.com/cn/articles/effective-ops-part-03

客户端分片

这种方案将分片工作放在业务程序端,程序代码根据预先设置的路由规则,直接对多个Redis实例进行分布式访问。这样的好处是,不依赖于第三方分布式中间件,实现方法和代码都自己掌控,可随时调整,不用担心踩到坑。
这实际上是一种静态分片技术。Redis实例的增减,都得手工调整分片程序。基于此分片机制的开源产品,现在仍不多见。
这种分片机制的性能比代理式更好(少了一个中间分发环节)。但缺点是升级麻烦,对研发人员的个人依赖性强——需要有较强的程序开发能力做后盾。如果主力程序员离职,可能新的负责人,会选择重写一遍。
所以,这种方式下,可运维性较差。出现故障,定位和解决都得研发和运维配合着解决,故障时间变长。
这种方案,难以进行标准化运维,不太适合中小公司(除非有足够的DevOPS)

Read more »

mysql优化案例

Posted on 2016-06-12 Edited on 2020-01-19 In 运维

索引

无索引案例

问题描述:用户系统打开缓慢,数据库 CPU 100%
问题排查:发现数据库中大量的慢sql, 执行时间超过了2s
慢SQL:SELECT uid FROM user WHERE mo=13772556391 LIMIT 0,1;
执行计划

Read more »

《癌症.真相:医生也在读》

Posted on 2016-05-27 Edited on 2020-01-19 In 读书
  • 第一,无论男女、癌症发病率从40岁以后就是指数增长;第二,老年男性比女性得癌症概率高,主要原因是大量男性会得前列腺癌
  • 癌症发生的根本原因是基因突变
  • 人体器官收到损伤后需要修复,而组织修复都需要靠细胞分裂完成。器官长期慢性损伤,会导致组织反复修复,细胞分裂次数a变大,就容易诱发癌症
  • 良性肿瘤不转移,属于钉子户,所以只要手术切除肿瘤本身就算治好了。而恶性肿瘤不论大小,都已经发生了转移,可能在血液系统里,可能在淋巴系统里,也可能已经到了身体的其他器官
  • 有很多癌症,由于现在还不清楚原因,会导致患者体重迅速下降,肌肉和脂肪都迅速丢失,无论患者吃多少东西,输多少蛋白质都没用,这个现象较“恶病质”。恶病质现在无药可治,是不可逆的。由于肌肉和脂肪对整个机能的能量供应、内分泌调整至关重要,出现恶病质的癌症患者很快会出现系统性衰竭而死亡
  • 毛囊细胞对头发生长至关重要,化疗药物杀死癌细胞的同时,也杀死毛囊细胞,这是为什么化疗患者头发会掉光。负责造血和维持免疫系统的造血干细胞也会被杀死,因此化疗患者的免疫系统会非常弱,极容易感染
  • 消化道上皮细胞也会被杀死,于是患者严重拉肚子,没有食欲
Read more »

安装memcached可视化管理工具

Posted on 2016-04-27 Edited on 2020-01-19 In 运维

MemAdmin

MemAdmin是一款可视化的Memcached管理与监控工具,基于 PHP5 & JQuery 开发,体积小,操作简单。

主要功能:

  • 服务器参数监控:STATS、SETTINGS、ITEMS、SLABS、SIZES实时刷新
  • 服务器性能监控:GET、DELETE、INCR、DECR、CAS等常用操作命中率实时监控
  • 支持数据遍历,方便对存储内容进行监视
  • 支持条件查询,筛选出满足条件的KEY或VALUE
  • 数组、JSON等序列化字符反序列显示
  • 兼容memcache协议的其他服务,如Tokyo Tyrant (遍历功能除外)
  • 支持服务器连接池,多服务器管理切换方便简洁
Read more »

memcached stats输出详解

Posted on 2016-04-19 Edited on 2020-01-19 In 运维
STAT 说明
STAT pid 26227 进程号
STAT uptime 48196 启动运行时长
STAT time 1461032409 当前系统时间
STAT version 1.4.25 memcached版本号
STAT libevent 2.0.19-stable libevent版本号
STAT pointer_size 64 操作系统指针大小
STAT rusage_user 1.136071
STAT rusage_system 0.528033
STAT curr_connections 10 当前打开的连接数
STAT total_connections 16 打开过的总的连接数
STAT connection_structures 11 分配的连接结构的数量
STAT reserved_fds 20
STAT cmd_get 24 get总请求数量
STAT cmd_set 8 set总请求数量
STAT cmd_flush 0 flush总请求数量
STAT cmd_touch 0 touch总请求数量
STAT get_hits 16 get命中的请求数量
STAT get_misses 8 get不命中的请求数量
STAT delete_misses 0 delete不命中的请求数量
STAT delete_hits 0 delete命中的请求数量
STAT incr_misses 0 incr不命中的请求数量
STAT incr_hits 0 incr命中的请求数量
STAT decr_misses 0 decr不命中的请求数量
STAT decr_hits 0 decr命中的请求数量
STAT cas_misses 0 cas不命中的请求数量
STAT cas_hits 0 cas命中的请求数量
STAT cas_badval 0
STAT touch_hits 0 touch命中请求数量
STAT touch_misses 0 touch不命中请求数量
STAT auth_cmds 0 auth数量
STAT auth_errors 0 auth错误数量
STAT bytes_read 2447 读取字节数
STAT bytes_written 4957 写入字节数
STAT limit_maxbytes 1073741824 最大内存大小
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT time_in_listen_disabled_us 0
STAT threads 4 线程数量
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT malloc_fails 0
STAT bytes 1762
STAT curr_items 8 当前缓存对象数量
STAT total_items 8 总的缓存对象数量(包括删除掉的)
STAT expired_unfetched 0
STAT evicted_unfetched 0
STAT evictions 0 为了获取空闲内存删除的items数量,比如超过缓存大小时根据LRU算法移除的对象,以及过期的对象
STAT reclaimed 0 已经过期的items数量
STAT crawler_reclaimed 0
STAT crawler_items_checked 0
STAT lrutail_reflocked 0
END

memcached1.4.25编译安装

Posted on 2016-04-19 Edited on 2020-01-19 In 运维

概述

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。

安装

可见github脚本

libevent

memcached是基于libevent的事件处理,libevent是一个事件触发的网络库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue等系统调用管理事件机制

1
2
3
4
tar xvzf libevent-2.0.22-stable.tar.gz -C /usr/local
cd /usr/local/libevent-2.0.22-stable
./configure --prefix=/usr/local/libevent2022
make && make install
Read more »

tomcat6和tomcat7性能对比

Posted on 2016-04-18 Edited on 2020-01-19 In 性能

静态页面

测试场景:逐步递增并发到500,访问index.html静态页面
测试结论:静态页面处理能力基本无差异

- TPS 90%响应时间(秒) CPU
Tomcat6 1410 0.316 14.93%
Tomcat7 1416 0.314 17.91%

动态页面

测试场景:逐步递增并发到500,访问login页面
测试结论:Tomcat7处理动态页面性能比Tomcat6约提升8%,CPU使用率稍有下降

- TPS 90%响应时间(秒) CPU
Tomcat6 638 0.649 62.38%
Tomcat7 692 0.602 57.71%

tomcat-native编译安装

Posted on 2016-04-18 Edited on 2020-01-19 In 运维

Tomcat Native概述

The Apache Tomcat Native Library is an optional component for use with Apache Tomcat that allows Tomcat to use certain native resources for performance, compatibility, etc.

Specifically, the Apache Tomcat Native Library gives Tomcat access to the Apache Portable Runtime (APR) library’s network connection (socket) implementation and random-number generator. See the Apache Tomcat documentation for more information on how to configure Tomcat to use the APR connector.

Features of the APR connector:

  • Non-blocking I/O for Keep-Alive requests (between requests)
  • Uses OpenSSL for TLS/SSL capabilities (if supported by linked APR library)
  • FIPS 140-2 support for TLS/SSL (if supported by linked OpenSSL library)

可见以下安装脚本

Read more »

tomcat7安装配置详细说明

Posted on 2016-04-18 Edited on 2020-01-19 In 运维

安装

Tomcat不需要安装,直接解压到对应的目录即可,需提前解压安装JDK1.7,并配置环境变量

1
2
3
tar xvzf apache-tomcat-7.0.68.tar.gz -C /usr/local

mv /usr/local/apache-tomcat-7.0.68 /usr/local/tomcat

配置

配置JAVA_HOME

启动的时候,启动脚本会加载setenv.sh,以下为catalina.sh截取代码
(同样会自动加载setclasspath.sh)

1
2
3
4
5
if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
. "$CATALINA_BASE/bin/setenv.sh"
elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
. "$CATALINA_HOME/bin/setenv.sh"
fi

/usr/local/tomcat/bin/setenv.sh

1
JAVA_HOME=/usr/local/jdk1.7.0_79
Read more »
1…456…11
Jeff Xue

Jeff Xue

Think Bigger, Start Simple!
104 posts
10 categories
48 tags
GitHub
© 2016 – 2021 Jeff Xue
Powered by Hexo v3.9.0
|
Theme – NexT.Gemini v7.3.0