redis从5开始已经废弃了使用ruby脚本创建集群,而将创建集群指令直接集成在了redis-cli里面

生产环境建议采用 3master + 3slave 总共6台独立服务器搭建

安装

  • 安装版本v5
yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum --enablerepo=remi install -y redis
systemctl enable redis
  • 修改配置,切换到集群模式

必须绑定私有IP,而不是0.0.0.0 (估计5有BUG,无法正常寻址)

# /etc/redis.conf
bind {private_ip}
cluster-enabled yes
  • 启动
service redis start

创建集群

任意节点下执行

redis1=192.168.0.166
redis2=192.168.0.169
redis3=192.168.0.168
redis1_slave=192.168.0.164
redis2_slave=192.168.0.167
redis3_slave=192.168.0.165

redis-cli --cluster create ${redis1}:6379 ${redis2}:6379 ${redis3}:6379 ${redis1_slave}:6379 ${redis2_slave}:6379 ${redis3_slave}:6379 --cluster-replicas 1

正常的话,屏幕输出如下

>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.0.164:6379 to 192.168.0.166:6379
Adding replica 192.168.0.167:6379 to 192.168.0.169:6379
Adding replica 192.168.0.165:6379 to 192.168.0.168:6379
M: c16eae487165b689c195c88feac45e2cd1eb979b 192.168.0.166:6379
   slots:[0-5460] (5461 slots) master
M: a4f326cf24260dbb3f669e9eefa38a2fafc27409 192.168.0.169:6379
   slots:[5461-10922] (5462 slots) master
M: 80eb826d4db28be85c7795cfd40b3268bcf2296a 192.168.0.168:6379
   slots:[10923-16383] (5461 slots) master
S: e1a1b24711a05f08e15269eb9a508852301d1f45 192.168.0.164:6379
   replicates c16eae487165b689c195c88feac45e2cd1eb979b
S: 465e50a0196dbb641e44a733547328b6c4d0adfe 192.168.0.167:6379
   replicates a4f326cf24260dbb3f669e9eefa38a2fafc27409
S: 8e7febc522a3d07a9d56d4e5ce88895b530a5f9f 192.168.0.165:6379
   replicates 80eb826d4db28be85c7795cfd40b3268bcf2296a
Can I set the above configuration? (type 'yes' to accept):

确认没问题,输入yes继续

>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
...

集群内部开始相互握手,过10秒钟握手完毕,系统开始初始化,分片

>>> Performing Cluster Check (using node 192.168.0.166:6379)
M: c16eae487165b689c195c88feac45e2cd1eb979b 192.168.0.166:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 465e50a0196dbb641e44a733547328b6c4d0adfe 192.168.0.167:6379
   slots: (0 slots) slave
   replicates a4f326cf24260dbb3f669e9eefa38a2fafc27409
S: 8e7febc522a3d07a9d56d4e5ce88895b530a5f9f 192.168.0.165:6379
   slots: (0 slots) slave
   replicates 80eb826d4db28be85c7795cfd40b3268bcf2296a
M: a4f326cf24260dbb3f669e9eefa38a2fafc27409 192.168.0.169:6379
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: e1a1b24711a05f08e15269eb9a508852301d1f45 192.168.0.164:6379
   slots: (0 slots) slave
   replicates c16eae487165b689c195c88feac45e2cd1eb979b
M: 80eb826d4db28be85c7795cfd40b3268bcf2296a 192.168.0.168:6379
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

安装监控

可以单独搭建在独立服务器上

  • 安装脚本
yum install -y ruby ruby-devel gcc gcc-c++
gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
gem install redis-stat

  • 启动脚本
redis-stat redis1 redis2 redis3 redis1_slave redis2_slave redis3_slave  --server --daemon

建议将6台服务器地址写入/etc/hosts

参数 --server --daemon 是后台模式运行,默认监听63790端口

  • 指标参数清单
简写 指标 说明
us used_cpu_user 用户空间占用CPU百分比
sy used_cpu_sys 内核空间占用CPU百分比
cl connected_clients 连接客户端数量
bcl blocked_clients 阻塞客户端数量(如BLPOP)
mem used_memory 使用总内存
rss used_memory_rss 使用物理内存
keys dbx.keys key的总数量
cmd/s command/s 每秒执行命令数
exp/s expired_keys/s 每秒过期key数量
evt/s evicted_keys/s 每秒淘汰key数量
hit%/s keyspace_hitratio/s 每秒命中百分比
hit/s keyspace_hits/s 每秒命中数量
mis/s keyspace_miss/s 每秒丢失数量
aofcs aof_current_size AOF日志当前大小

LB

# /etc/haproxy/haproxy.cfg

listen  redis *:6379
    mode tcp
    balance     roundrobin
    timeout client  3h
    timeout server  3h
    option          clitcpka
    server _1 redis1:6379 check inter 5s rise 2 fall 3
    server _2 redis2:6379 check inter 5s rise 2 fall 3
    server _3 redis3:6379 check inter 5s rise 2 fall 3
    server _4 redis1-slave:6379 check inter 5s rise 2 fall 3
    server _5 redis2-slave:6379 check inter 5s rise 2 fall 3
    server _6 redis3-slave:6379 check inter 5s rise 2 fall 3

性能分析方法

  • 压测方法
redis-benchmark -t set,get -n 100000 -h {addr}

8w/s为good

  • 延时分析
redis-cli --latency -h {addr}

avg稳定在0.3-0.4为good

  • 慢查询分析
:6379> slowlog get