redis + zookeeper + twemproxy 安装不在此赘述
第一节 Redis启动
本节参考自:https://www.cnblogs.com/gomysql/p/3617238.html
/usr/local/redis2.6/conf 下配置 文件7100.conf (主),以下是关键配置信息,其他的可以参考redis相关文档,说的很详细。
daemonize yes
pidfile /usr/local/redis2.6/pid/7100.pid
port 7100
logfile /data/redis/7100/logs/7100.log
dbfilename 7100.rdb
dir /data/redis/7100/data
配置文件7101.conf(从),相比较主7100.conf(主)的配置,增加了配置
slaveof 10.4.0.45 7100
redis启动与关闭命令
/usr/local/redis/src/redis-server /usr/local/redis/7100.conf
/usr/local/redis/src/redis-server /usr/local/redis/7101.conf
netstat -nltp | grep 7100
netstat -nltp | grep 7101
使用redis-cli 命令分别登录主从,检查在主server set值,从server是否会同步,如果未同步请检查7101的info
10.4.0.45:7101> info
检查列出的信息是不是出现了“master_link_status:down”,正常应该是“master_link_status:up”,我的处理方式是注释配置文件中的“masterauth test”,使用无密码的redis server。问题解决后,在主server中设置值,从server就会同步到主server的信息。配置文件中slaveof标记的server不会一直是从server,主server异常关闭后重启,主从就会交换
。
第二节 redis-watchdog 启动
watchdog是 Redis 2.6 版本发布的一个新特性,它用于诊断Redis的延迟问题
,这一功能有点类似于慢日志。主要是记录一些太慢的行为,以便排查原因。安装watchdog后,在目录/usr/local/redis-watchdog 下创建7100和7101的文件目录,并配置zk地址,修改logFile,然后在zk上创建节点:/redis/cluster/business , business为业务名称,最后执行watchdog启动命令:
/usr/local/redis-watchdog/redis-zoo-watchdog.elf -f /usr/local/redis-watchdog/7100/zoo-watchdog.conf -dc -t 10.4.0.45:7100 /redis/cluster/business/redis-001
/usr/local/redis-watchdog/redis-zoo-watchdog.elf -f /usr/local/redis-watchdog/7101/zoo-watchdog.conf -dc -t 10.4.0.45:7101 /redis/cluster/business/redis-001
多主从的时候命令中的redis-001 可叠加为002,003等。
第三节 twemproxy启动
本节参考自 https://www.cnblogs.com/gomysql/p/4413922.html
Twemproxy是一种代理分片机制,由Twitter开源。Twemproxy作为代理,可接受来自多个程序的访问,按照路由规则,转发给后台的各个Redis服务器,再原路返回。该方案很好的解决了单个Redis实例承载能力的问题。当然,Twemproxy本身也是单点,需要用Keepalived做高可用方案。通过Twemproxy可以使用多台服务器来水平扩张redis服务,可以有效的避免单点故障问题。虽然使用Twemproxy需要更多的硬件资源和在redis性能有一定的损失(twitter测试约20%),但是能够提高整个系统的HA也是相当划算的。不熟悉twemproxy的同学,如果玩过nginx反向代理或者mysql proxy,那么你肯定也懂twemproxy了。
上面的架构通常只有一台Twemproxy在工作,另外一台处于备机,当一台挂掉以后,vip自动漂移,备机接替工作。
接下来开始实际操作。创建proxy配置文件redis-proxy-business.yml,并修改配置
alpha:
listen: 10.4.0.45:22119
hash: md5
distribution: modula
hash_tag: "{}"
zookeeper_host: zk-cjb-master1.test.mz:2181,zk-cjb-master2.test.mz:2181,zk-cjb-master3.test.mz:2181
zookeeper_path: /redis/proxy/business/10.4.0.45:22119
zookeeper_redis_path: /redis/cluster/business
auto_eject_hosts: false
redis: true
timeout: 1000
server_retry_timeout: 2000
server_failure_limit: 2
servers:
- 10.4.0.45:7100:0-2047 business-redis-01
配置详解为
alpha
: redis集群的逻辑名称
listen
:部署了twemproxy的服务器监听本机的端口号
hash
:hash散列算法
distribution
:分片算法,一致性hash,取模,等等
timeout
:跟redis连接的超时时长
redis
:是否是redis,false的话是memcached
zookeeper_redis_path
:存储的是redis节点信息,ls之后显示redis主从server列表,靠前的是主server
zookeeper_path
:存储的是proxy信息,ls之后是显示listen配置的ip和端口
servers
:redis实例列表,server的地址:端口:权重 别名,权重越大节点保存的数据就越多,一定要加别名(示例中的business-redis-01),否则默认使用ip:port:weight来计算分片,如果宕机后更换机器,那么分片就不一样了,因此加了别名后,可以确保分片一定是准确的。
然后执行命令
/usr/local/redis-proxy/bin/nutcracker -dc /usr/local/redis-proxy/conf/redis-proxy-business.yml -o /usr/local/redis-proxy/logs/redis-proxy-business.log -p /usr/local/redis-proxy/pid/22119.log
ps -ef |grep redis
如果发现proxy未启动,请检查配置文件以及zk节点是否正常。/redis/cluster/business/redis-001 下。