操作系统:deepin15.9桌面版(国产Linux发行版)
集群介绍:Redis Cluster为官方发布集群方案,区别去其他方案(一致性哈希算法),本方案采用16384个slot槽的方案设计。可以在线修改糟的归属Redis节点,优秀的客户端可以通过不断积累更新16384个slot糟的redis节点,实现高效率。
优点:非代理,而是直接面向连接,效率很高。而且通过配置slave节点,实现高可用redis集群方案。
Redis-cluster 架构图
介绍:
(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.
(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value
安装过程:
对应的redis节点和端口如下:
127.0.0.1:7000 127.0.0.1:7001
127.0.0.1:7002 127.0.0.1:7003
127.0.0.1:7004 127.0.0.1:7005
1 安装Redis:
获取包:
wget http://download.redis.io/releases/redis-3.0.0.tar.gz
解压,安装:
tar xf redis-3.0.0.tar.gz
cd redis-3.0.0
make && make install
创建存放多个实例的目录:
mkdir /data/cluster -p
cd /data/cluster
mkdir 7000 7001 7002 7003 7004 7005
修改配置文件:
port 7000 #端口设置
daemonize yes #开启后台进程,开启这个就可以让redis在后台自行运行
cluster-enabled yes #允许集群
cluster-config-file nodes.conf #设定了保存节点配置文件的路径, 默认值为nodes.conf ,节点配置文件无须人为修改, 它由 Redis 集群在启动时创建
cluster-node-timeout 5000 #redis节点宕机被发现的时间 也是主节点服务宕机 从节点顶替上来需要的时间
appendonly yes #开启AOF模式
pidfile /var/run/redis_xxx.pid #这里时指定一个redis开启的所有进程的pid的记录文件,因为开启的redis多了,全部都写到同一个 文件里,不方便查阅管理
logfile "logxxx.log" #指定一个自己的log打印文件,同理,也是方便查个各自的log文件
dbfile dumpxxx.rdb #指定各种持久化的文件
分别启动6个redis实例:
cd /data/cluster/7000
redis-server redis.conf
cd /data/cluster/7001
redis-server redis.conf
cd /data/cluster/7002
redis-server redis.conf
cd /data/cluster/7003
redis-server redis.conf
cd /data/cluster/7004
redis-server redis.conf
cd /data/cluster/7005
redis-server redis.conf
查看进程否存在:
[root@redis-server 7005]# ps -ef | grep redis
执行命令创建集群,首先安装依赖,否则创建集群失败:
//安装Ruby和RubyGems
{
apt-get install ruby-full rubygems
//测试确保路径下有gem命令:
which gem
//如果命令没有找到,则更新相应的PATH变量,例如,您可以使用以下行:更新.bashrc文件
export PATH=$PATH:/var/lib/gems/1.8/bin
//离线安装RubyGems
//首先下载安装包:https://rubygems.org/pages/download。
//解压并进入目录,执行命令:ruby setup.rb
cd /home/cmfchina/rubygems
tar -zxvf rubygems-2.6.12.tgz
// 执行命令:ruby setup.rb
}
//安装gem-redis
{
gem install -l redis-3.0.0.gem
//如果失败:(手工下载并安装:)
wget https://rubygems.global.ssl.fastly.net/gems/redis-3.2.1.gem
gem install -l ./redis-3.2.1.gem
}
创建集群:
redis-trib create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
命令的意义如下:
给定 redis-trib.rb 程序的命令是 create , 这表示我们希望创建一个新的集群。
选项 --replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。
之后跟着的其他参数则是实例的地址列表, 我们希望程序使用这些地址所指示的实例来创建新集群。
简单来说, 以上命令的意思就是让 redis-trib 程序创建一个包含三个主节点和三个从节点的集群。
>>> Creating cluster
Connecting to node 127.0.0.1:7000: /var/lib/gems/2.5.0/gems/redis-3.2.1/lib/redis/client.rb:443: warning: constant ::Fixnum is deprecated
OK
Connecting to node 127.0.0.1:7001: OK
Connecting to node 127.0.0.1:7002: OK
Connecting to node 127.0.0.1:7003: OK
Connecting to node 127.0.0.1:7004: OK
Connecting to node 127.0.0.1:7005: OK
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
127.0.0.1:7000
127.0.0.1:7001
127.0.0.1:7002
Adding replica 127.0.0.1:7003 to 127.0.0.1:7000
Adding replica 127.0.0.1:7004 to 127.0.0.1:7001
Adding replica 127.0.0.1:7005 to 127.0.0.1:7002
M: 74eeaa511a26c050deaed5c33180fead4b513db3 127.0.0.1:7000
slots:0-5460 (5461 slots) master
M: 1c0ce26bad338ddf165176f97dbdca6a1466135b 127.0.0.1:7001
slots:5461-10922 (5462 slots) master
M: 17d6445e3da0274f4ec088a6b6f4407c26e59390 127.0.0.1:7002
slots:10923-16383 (5461 slots) master
S: 19ee1c278329a86409238ca93c94e6afbc2b3b4a 127.0.0.1:7003
replicates 74eeaa511a26c050deaed5c33180fead4b513db3
S: da398bc786c253c9aa7d82dee1fcaaa5de8ea1db 127.0.0.1:7004
replicates 1c0ce26bad338ddf165176f97dbdca6a1466135b
S: 3495eee50240f5178f1bbefa9157fd5d10f3699c 127.0.0.1:7005
replicates 17d6445e3da0274f4ec088a6b6f4407c26e59390
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....
>>> Performing Cluster Check (using node 127.0.0.1:7000)
M: 74eeaa511a26c050deaed5c33180fead4b513db3 127.0.0.1:7000
slots:0-5460 (5461 slots) master
M: 1c0ce26bad338ddf165176f97dbdca6a1466135b 127.0.0.1:7001
slots:5461-10922 (5462 slots) master
M: 17d6445e3da0274f4ec088a6b6f4407c26e59390 127.0.0.1:7002
slots:10923-16383 (5461 slots) master
M: 19ee1c278329a86409238ca93c94e6afbc2b3b4a 127.0.0.1:7003
slots: (0 slots) master
replicates 74eeaa511a26c050deaed5c33180fead4b513db3
M: da398bc786c253c9aa7d82dee1fcaaa5de8ea1db 127.0.0.1:7004
slots: (0 slots) master
replicates 1c0ce26bad338ddf165176f97dbdca6a1466135b
M: 3495eee50240f5178f1bbefa9157fd5d10f3699c 127.0.0.1:7005
slots: (0 slots) master
replicates 17d6445e3da0274f4ec088a6b6f4407c26e59390
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.