Redis的Cluster配置

                                      作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.安装Redis并启动

1>.修改Redis的配置文件(本实验只有三个节点)

[root@node101.yinzhengjie.org.cn ~]# egrep -v "^#|^$" /etc/redis.conf
bind node101.yinzhengjie.org.cn
protected-mode yes
port
tcp-backlog
unixsocket "/tmp/redis.sock"
timeout
tcp-keepalive
daemonize no
supervised systemd
pidfile "/var/run/redis_6379.pid"
loglevel notice
logfile "/var/log/redis/redis.log"
databases
save
save
save
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename "dump.rdb"
dir "/var/lib/redis"
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay
repl-disable-tcp-nodelay no
slave-priority
requirepass "yinzhengjie"
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit
cluster-enabled yes                          #我们需要启用cluster功能
cluster-config-file redis-cluster.conf               #指定cluster的配置文件
cluster-node-timeout                       #指定节点的超时时间
slowlog-log-slower-than
slowlog-max-len
latency-monitor-threshold
notify-keyspace-events ""
hash-max-ziplist-entries
hash-max-ziplist-value
list-max-ziplist-size -
list-compress-depth
set-max-intset-entries
zset-max-ziplist-entries
zset-max-ziplist-value
hll-sparse-max-bytes
activerehashing yes
client-output-buffer-limit normal
client-output-buffer-limit slave 256mb 64mb
client-output-buffer-limit pubsub 32mb 8mb
hz
aof-rewrite-incremental-fsync yes
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# egrep -v "^#|^$" /etc/redis.conf

[root@node102.yinzhengjie.org.cn ~]#
[root@node102.yinzhengjie.org.cn ~]# egrep -v "^#|^$" /etc/redis.conf
bind node102.yinzhengjie.org.cn
protected-mode yes
port
tcp-backlog
unixsocket "/tmp/redis.sock"
timeout
tcp-keepalive
daemonize no
supervised systemd
pidfile "/var/run/redis_6379.pid"
loglevel notice
logfile "/var/log/redis/redis.log"
databases
save
save
save
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename "dump.rdb"
dir "/var/lib/redis"
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay
repl-disable-tcp-nodelay no
slave-priority
requirepass "yinzhengjie"
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit
cluster-enabled yes
cluster-config-file redis-cluster.conf
cluster-node-timeout
slowlog-log-slower-than
slowlog-max-len
latency-monitor-threshold
notify-keyspace-events ""
hash-max-ziplist-entries
hash-max-ziplist-value
list-max-ziplist-size -
list-compress-depth
set-max-intset-entries
zset-max-ziplist-entries
zset-max-ziplist-value
hll-sparse-max-bytes
activerehashing yes
client-output-buffer-limit normal
client-output-buffer-limit slave 256mb 64mb
client-output-buffer-limit pubsub 32mb 8mb
hz
aof-rewrite-incremental-fsync yes
[root@node102.yinzhengjie.org.cn ~]#
[root@node102.yinzhengjie.org.cn ~]#

[root@node102.yinzhengjie.org.cn ~]# egrep -v "^#|^$" /etc/redis.conf

[root@node103.yinzhengjie.org.cn ~]# egrep -v "^#|^$" /etc/redis.conf
bind node103.yinzhengjie.org.cn
protected-mode yes
port
tcp-backlog
unixsocket "/tmp/redis.sock"
timeout
tcp-keepalive
daemonize no
supervised systemd
pidfile "/var/run/redis_6379.pid"
loglevel notice
logfile "/var/log/redis/redis.log"
databases
save
save
save
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename "dump.rdb"
dir "/var/lib/redis"
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay
repl-disable-tcp-nodelay no
slave-priority
requirepass "yinzhengjie"
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit
cluster-enabled yes
cluster-config-file redis-cluster.conf
cluster-node-timeout
slowlog-log-slower-than
slowlog-max-len
latency-monitor-threshold
notify-keyspace-events ""
hash-max-ziplist-entries
hash-max-ziplist-value
list-max-ziplist-size -
list-compress-depth
set-max-intset-entries
zset-max-ziplist-entries
zset-max-ziplist-value
hll-sparse-max-bytes
activerehashing yes
client-output-buffer-limit normal
client-output-buffer-limit slave 256mb 64mb
client-output-buffer-limit pubsub 32mb 8mb
hz
aof-rewrite-incremental-fsync yes
[root@node103.yinzhengjie.org.cn ~]#
[root@node103.yinzhengjie.org.cn ~]#

[root@node103.yinzhengjie.org.cn ~]# egrep -v "^#|^$" /etc/redis.conf

2>.启动Redis集群

[root@node101.yinzhengjie.org.cn ~]# systemctl start redis
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# systemctl status redis
● redis.service - Redis persistent key-value database
Loaded: loaded (/usr/lib/systemd/system/redis.service; disabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/redis.service.d
└─limit.conf
Active: active (running) since Sun -- :: CST; 5min ago
Main PID: (redis-server)
CGroup: /system.slice/redis.service
└─ /usr/bin/redis-server node101.yinzhengjie.org.cn: [cluster] Apr :: node101.yinzhengjie.org.cn systemd[]: Starting Redis persistent key-value database...
Apr :: node101.yinzhengjie.org.cn systemd[]: Started Redis persistent key-value database.
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# systemctl start redis

[root@node102.yinzhengjie.org.cn ~]# systemctl start redis
[root@node102.yinzhengjie.org.cn ~]#
[root@node102.yinzhengjie.org.cn ~]# systemctl status redis
● redis.service - Redis persistent key-value database
Loaded: loaded (/usr/lib/systemd/system/redis.service; disabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/redis.service.d
└─limit.conf
Active: active (running) since Sun -- :: CST; 3s ago
Main PID: (redis-server)
CGroup: /system.slice/redis.service
└─ /usr/bin/redis-server node102.yinzhengjie.org.cn: [cluster] Apr :: node102.yinzhengjie.org.cn systemd[]: Starting Redis persistent key-value database...
Apr :: node102.yinzhengjie.org.cn systemd[]: Started Redis persistent key-value database.
[root@node102.yinzhengjie.org.cn ~]#

[root@node102.yinzhengjie.org.cn ~]# systemctl start redis

[root@node103.yinzhengjie.org.cn ~]# systemctl start redis
[root@node103.yinzhengjie.org.cn ~]#
[root@node103.yinzhengjie.org.cn ~]# systemctl status redis
● redis.service - Redis persistent key-value database
Loaded: loaded (/usr/lib/systemd/system/redis.service; disabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/redis.service.d
└─limit.conf
Active: active (running) since Sat -- :: PDT; 3s ago
Main PID: (redis-server)
CGroup: /system.slice/redis.service
└─ /usr/bin/redis-server node103.yinzhengjie.org.cn: [cluster] Apr :: node103.yinzhengjie.org.cn systemd[]: Starting Redis persistent key-value database...
Apr :: node103.yinzhengjie.org.cn systemd[]: Started Redis persistent key-value database.
[root@node103.yinzhengjie.org.cn ~]#
[root@node103.yinzhengjie.org.cn ~]#

[root@node103.yinzhengjie.org.cn ~]# systemctl start redis

3>.登录Redis服务器测试

[root@node103.yinzhengjie.org.cn ~]# redis-cli  -h node101.yinzhengjie.org.cn -a yinzhengjie
node101.yinzhengjie.org.cn:>
node101.yinzhengjie.org.cn:>

[root@node103.yinzhengjie.org.cn ~]# redis-cli -h node101.yinzhengjie.org.cn -a yinzhengjie

二.配置Redis Cluster

1>.查看cluster相关命令的帮助信息

[root@node103.yinzhengjie.org.cn ~]# redis-cli  -h node101.yinzhengjie.org.cn -a yinzhengjie
node101.yinzhengjie.org.cn:>
node101.yinzhengjie.org.cn:> HELP @cluster CLUSTER ADDSLOTS slot [slot ...]
summary: Assign new hash slots to receiving node
since: 3.0. CLUSTER COUNT-FAILURE-REPORTS node-id
summary: Return the number of failure reports active for a given node
since: 3.0. CLUSTER COUNTKEYSINSLOT slot
summary: Return the number of local keys in the specified hash slot
since: 3.0. CLUSTER DELSLOTS slot [slot ...]
summary: Set hash slots as unbound in receiving node
since: 3.0. CLUSTER FAILOVER [FORCE|TAKEOVER]
summary: Forces a slave to perform a manual failover of its master.
since: 3.0. CLUSTER FORGET node-id
summary: Remove a node from the nodes table
since: 3.0. CLUSTER GETKEYSINSLOT slot count
summary: Return local key names in the specified hash slot
since: 3.0. CLUSTER INFO -
summary: Provides info about Redis Cluster node state
since: 3.0. CLUSTER KEYSLOT key
summary: Returns the hash slot of the specified key
since: 3.0. CLUSTER MEET ip port
summary: Force a node cluster to handshake with another node
since: 3.0. CLUSTER NODES -
summary: Get Cluster config for the node
since: 3.0. CLUSTER REPLICATE node-id
summary: Reconfigure a node as a slave of the specified master node
since: 3.0. CLUSTER RESET [HARD|SOFT]
summary: Reset a Redis Cluster node
since: 3.0. CLUSTER SAVECONFIG -
summary: Forces the node to save cluster state on disk
since: 3.0. CLUSTER SET-CONFIG-EPOCH config-epoch
summary: Set the configuration epoch in a new node
since: 3.0. CLUSTER SETSLOT slot IMPORTING|MIGRATING|STABLE|NODE [node-id]
summary: Bind a hash slot to a specific node
since: 3.0. CLUSTER SLAVES node-id
summary: List slave nodes of the specified master node
since: 3.0. CLUSTER SLOTS -
summary: Get array of Cluster slot to node mappings
since: 3.0. READONLY -
summary: Enables read queries for a connection to a cluster slave node
since: 3.0. READWRITE -
summary: Disables read queries for a connection to a cluster slave node
since: 3.0. node101.yinzhengjie.org.cn:>

node101.yinzhengjie.org.cn:6379> HELP @cluster

2>.命令行分配切片范围

[root@node103.yinzhengjie.org.cn ~]#
[root@node103.yinzhengjie.org.cn ~]# redis-cli -h node101.yinzhengjie.org.cn -a yinzhengjie -c cluster addslots {..}
OK
[root@node103.yinzhengjie.org.cn ~]#
[root@node103.yinzhengjie.org.cn ~]# redis-cli -h node102.yinzhengjie.org.cn -a yinzhengjie -c cluster addslots {..}
OK
[root@node103.yinzhengjie.org.cn ~]#
[root@node103.yinzhengjie.org.cn ~]# redis-cli -h node103.yinzhengjie.org.cn -a yinzhengjie -c cluster addslots {..}
OK
[root@node103.yinzhengjie.org.cn ~]#
[root@node103.yinzhengjie.org.cn ~]#

3>.互相暴露各个节点

[root@node103.yinzhengjie.org.cn ~]# redis-cli -h node103.yinzhengjie.org.cn -a yinzhengjie
node103.yinzhengjie.org.cn:>
node103.yinzhengjie.org.cn:> CLUSTER INFO
cluster_state:fail
cluster_slots_assigned:
cluster_slots_ok:
cluster_slots_pfail:
cluster_slots_fail:
cluster_known_nodes:
cluster_size:
cluster_current_epoch:
cluster_my_epoch:
cluster_stats_messages_sent:
cluster_stats_messages_received:
node103.yinzhengjie.org.cn:>

node103.yinzhengjie.org.cn:6379> CLUSTER INFO

node103.yinzhengjie.org.cn:> CLUSTER MEET 172.30.1.101
OK
node103.yinzhengjie.org.cn:>
node103.yinzhengjie.org.cn:> CLUSTER MEET 172.30.1.102
OK
node103.yinzhengjie.org.cn:>
node103.yinzhengjie.org.cn:> CLUSTER INFO
cluster_state:ok
cluster_slots_assigned:
cluster_slots_ok:
cluster_slots_pfail:
cluster_slots_fail:
cluster_known_nodes:
cluster_size:
cluster_current_epoch:
cluster_my_epoch:
cluster_stats_messages_sent:
cluster_stats_messages_received:
node103.yinzhengjie.org.cn:>

node103.yinzhengjie.org.cn:6379> CLUSTER INFO

[root@node102.yinzhengjie.org.cn ~]# redis-cli -h node102.yinzhengjie.org.cn -a yinzhengjie
node102.yinzhengjie.org.cn:>
node102.yinzhengjie.org.cn:>
node102.yinzhengjie.org.cn:>
node102.yinzhengjie.org.cn:> CLUSTER INFO
cluster_state:ok
cluster_slots_assigned:
cluster_slots_ok:
cluster_slots_pfail:
cluster_slots_fail:
cluster_known_nodes:
cluster_size:
cluster_current_epoch:
cluster_my_epoch:
cluster_stats_messages_sent:
cluster_stats_messages_received:
node102.yinzhengjie.org.cn:>
node102.yinzhengjie.org.cn:>

node102.yinzhengjie.org.cn:6379> CLUSTER INFO

[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# redis-cli -h node101.yinzhengjie.org.cn -a yinzhengjie
node101.yinzhengjie.org.cn:>
node101.yinzhengjie.org.cn:> CLUSTER INFO
cluster_state:ok
cluster_slots_assigned:
cluster_slots_ok:
cluster_slots_pfail:
cluster_slots_fail:
cluster_known_nodes:
cluster_size:
cluster_current_epoch:
cluster_my_epoch:
cluster_stats_messages_sent:
cluster_stats_messages_received:
node101.yinzhengjie.org.cn:>
node101.yinzhengjie.org.cn:>

node101.yinzhengjie.org.cn:6379> CLUSTER INFO

4>.验证Redis的写操作

[root@node101.yinzhengjie.org.cn ~]# redis-cli -h node101.yinzhengjie.org.cn -a yinzhengjie
node101.yinzhengjie.org.cn:>
node101.yinzhengjie.org.cn:>
node101.yinzhengjie.org.cn:> SET name Jason                                      #注意,我们在node101.yinzhengjie.org.cn创建数据时失败啦!返回的是错误,说是name这个字段被hash到5798这个分片上,而该分片在172.30.1.102:6379这个节点上,因此我们应该去该节点配置!
(error) MOVED 172.30.1.102:
node101.yinzhengjie.org.cn:>
node101.yinzhengjie.org.cn:>
node101.yinzhengjie.org.cn:>
node101.yinzhengjie.org.cn:> quit
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# redis-cli -h node102.yinzhengjie.org.cn -a yinzhengjie          #于是,按照其错误的提示,我们登录到172.30.1.102:6379这个节点上去设置KEY
node102.yinzhengjie.org.cn:>
node102.yinzhengjie.org.cn:> SET name Jason                                     #果不其然,在该节点就可以成功创建名称为name的KEY
OK
node102.yinzhengjie.org.cn:>
node102.yinzhengjie.org.cn:> KEYS *
) "name"
node102.yinzhengjie.org.cn:>
node102.yinzhengjie.org.cn:>

5>.验证Redis的读操作

[root@node103.yinzhengjie.org.cn ~]# redis-cli -h node103.yinzhengjie.org.cn -a yinzhengjie
node103.yinzhengjie.org.cn:>
node103.yinzhengjie.org.cn:> KEYS *
(empty list or set)
node103.yinzhengjie.org.cn:>
node103.yinzhengjie.org.cn:> GET name              #当我们想要读取name字段对应的value时,发现当前节点可以帮我们路由到真正存储的该节点上去
(error) MOVED 172.30.1.102:
node103.yinzhengjie.org.cn:>
node103.yinzhengjie.org.cn:> quit
[root@node103.yinzhengjie.org.cn ~]#
[root@node103.yinzhengjie.org.cn ~]# redis-cli -h node102.yinzhengjie.org.cn -a yinzhengjie
node102.yinzhengjie.org.cn:>
node102.yinzhengjie.org.cn:> KEYS *
) "name"
node102.yinzhengjie.org.cn:>
node102.yinzhengjie.org.cn:> GET name              #按照上面的报错提示登录到指定的节点后,发现是可以读取数据的!
"Jason"
node102.yinzhengjie.org.cn:>
node102.yinzhengjie.org.cn:>

  经测试,读写操作虽然能实现,但是对于程序员来说,手动去解决这些问题简直太麻烦了,推荐大家使用Cerberus(芒果TV)的解决方案,可以帮我们轻松解决上面遇到的读写问题!

 

Redis的Cluster配置的更多相关文章

  1. redis单点、redis主从、redis哨兵sentinel,redis集群cluster配置搭建与使用

    目录 redis单点.redis主从.redis哨兵 sentinel,redis集群cluster配置搭建与使用 1 .redis 安装及配置 1.1 redis 单点 1.1.2 在命令窗口操作r ...

  2. redis cluster 配置

    #服务器192.168.56.111 192.168.56.112 192.168.56.113 计划1主2从   192.168.56.111 192.168.56.112 192.168.56.1 ...

  3. laravel redis sentinel 和 redis cluster 配置

    laravel redis sentinel配置: 'redis' => [ 'cluster' => false, 'options' => [ 'replication' =&g ...

  4. redis的主从复制配置

    redis的主从复制配置 一.     原理 Redis的主从复制功能非常强大,一个master可以拥有多个slave,而一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架 ...

  5. Redis进阶实践之十一 Redis的Cluster集群搭建

    一.引言      本文档只对Redis的Cluster集群做简单的介绍,并没有对分布式系统的详细概念做深入的探讨.本文只是提供了有关如何设置集群.测试和操作集群的说明,而不涉及Redis集群规范中涵 ...

  6. Redis进阶实践之十二 Redis的Cluster集群动态扩容

    一.引言     上一篇文章我们一步一步的教大家搭建了Redis的Cluster集群环境,形成了3个主节点和3个从节点的Cluster的环境.当然,大家可以使用 Cluster info 命令查看Cl ...

  7. Redis集群配置(linux)

     *弄了一天,有问题直接问我.qq:137416943   1.redis集群的配置和简单使用   Redis集群配置 0.首先要配置环境: 0.1 安装c++ yum install gcc-c++ ...

  8. docker+redis安装与配置,主从+哨兵模式

    docker+redis安装与配置 docker安装redis并且使用redis挂载的配置启动 1.拉取镜像 docker pull redis:3.2 2.准备准备挂载的目录和配置文件 首先在/do ...

  9. Redis实战总结-配置、持久化、复制

    Redis的配置主要放置在redis.conf,可以通过修改配置文件实现Redis许多特性,比如复制,持久化,集群等. redis.conf部分配置详解 # 启动redis,显示加载配置redis.c ...

随机推荐

  1. Unix、Windows、Mac OS、Linux系统故事

    我们熟知的操作系统大概都是windows系列,近年来Apple的成功,让MacOS也逐渐走进普通用户.在服务器领域,恐怕Linux是无人不知无人不晓.他们都是操作系统,也在自己的领域里独领风骚.这都还 ...

  2. Python基础——3特性

    特性 切片 L=[0,1,2,3,4,5,6,7,8,9,10] L[:3]=[0,1,2] L[-2:]=[9,10] L[1:3]=[1,2] L[::3]=[0,3,6,9] L[:5:2]=[ ...

  3. VMware虚拟机上网络连接解决方案

    VMware虚拟机上网络连接解决方案 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 从虚拟机上连接外部网络,需要设置以下几个地方. 1.服务 (1)打开 ...

  4. HashMap线程不安全的体现

    前言:我们都知道HashMap是线程不安全的,在多线程环境中不建议使用,但是其线程不安全主要体现在什么地方呢,本文将对该问题进行解密. 1.jdk1.7中的HashMap 在jdk1.8中对HashM ...

  5. InetAddress类和InetSocketAddress类

    InetAddress 类 封装计算机的 IP 地址,不包含端口号 InetAddress 类常用的方法 1 String getHostAddress() 获得 IP 地址 2 String get ...

  6. mybatis从mapper接口跳转到相应的xml文件的eclipse插件

    mybatis从mapper接口跳转到相应的xml文件的eclipse插件 前提条件 开发软件 eclipse 使用框架 mybatis 为了方便阅读源码,项目使用mybatis的时候,方便从mapp ...

  7. 复杂度定义 The Definition of Complexity

    The upper bound   Big-O: Definition: f(n) is in O(g(n)) if there are constants c0 and N0 such that f ...

  8. CodeForces Round #552 Div.3

    A. Restoring Three Numbers 代码: #include <bits/stdc++.h> using namespace std; ]; int a, b, c; i ...

  9. Flask中使用数据库连接池 DBUtils ——(4)

    DBUtils是Python的一个用于实现数据库连接池的模块. 此连接池有两种连接模式: 模式一:为每个线程创建一个连接,线程即使调用了close方法,也不会关闭,只是把连接重新放到连接池,供自己线程 ...

  10. redis优化

    一.配置文件优化 bind 127.0.0.1 //允许连接的ip,如果就本机连接最后127.0.0.1 protected-mode yes //是否开启保护模式.默认开启,如果没有设置bind项的 ...