Redis Cluster集群配置
背景:Redis Cluster 提供了一种运行 Redis 安装的方法,其中数据 在多个 Redis 节点之间自动分片。
一、下载安装
1.下载安装redis
wget https://download.redis.io/releases/redis-3.2.0.tar.gz
tar zxf redis-3.2.0.tar.gz
cd redis-3.2.0
make
make install PREFIX=/usr/local/redis-cluster
2.集群配置文件
cd /usr/local/redis-cluster
mkdir 6379 6380 6381 6382 6383 6384
#redis.conf配置文件,端口6379需要和目录保持一致
bind 0.0.0.0
daemonize yes
port 6379
cluster-enabled yes
cluster-config-file "nodes.conf"
cluster-node-timeout 15000
cluster-require-full-coverage no
appendonly yes
masterauth "***"
requirepass "***"
3.安装ruby
yum remove ruby
yum install ruby
yum install rubygems
gem install redis
#会提示ERROR: Error installing redis redis #requires Ruby version >= 2.2.2.
#需要用rvm 安装ruby指定版本
curl -L get.rvm.io | bash -s stable
rvm install 2.3.0
rvm use 2.3.0
rvm remove 2.0.0 #删除掉系统旧的ruby2.0.0
ruby --version #查看版本
#如果还没有变更过来的话,直接将源码ruby命令cp到/usr/bin/下
cp /usr/local/rvm/src/ruby-2.3.0/ruby /usr/bin/ruby
再次执行确认ruby --version
二、配置集群
1.启动redis所有节点
目前总计6个节点,启动脚本入下:
start-all.sh脚本内容:
cd 6379
redis-server redis.conf &
cd ..
cd 6380
redis-server redis.conf &
cd ..
cd 6381
redis-server redis.conf &
cd ..
cd 6382
redis-server redis.conf &
cd ..
cd 6383
redis-server redis.conf &
cd ..
cd 6384
redis-server redis.conf &
cd ..
2.修改client.rb文件,创建带认证密码集群
vim /usr/local/rvm/rubies/ruby-2.3.0/lib/ruby/gems/2.3.0/gems/redis-4.3.1/lib/redis/client.rb
DEFAULTS = {
url: -> { ENV["REDIS_URL"] },
scheme: "redis",
host: "127.0.0.1",
port: 6379,
path: nil,
read_timeout: nil,
write_timeout: nil,
connect_timeout: nil,
timeout: 5.0,
username: nil,
password: "*****",
db: 0,
driver: nil,
id: nil,
tcp_keepalive: 0,
reconnect_attempts: 1,
reconnect_delay: 0,
reconnect_delay_max: 0.5,
inherit_socket: false,
logger: nil,
sentinels: nil,
role: nil
}.freeze
修改如上的password内容
3.创建集群
./redis-trib.rb create --replicas 1 10.0.0.1:6379 10.0.0.1:6380 10.0.0.1:6381 10.0.0.1:6382 10.0.0.1:6383 10.0.0.1:6384 -a ***
结果入下:
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
10.0.0.1:6379
10.0.0.1:6380
10.0.0.1:6381
Adding replica 10.0.0.1:6382 to 10.0.0.1:6379
Adding replica 10.0.0.1:6383 to 10.0.0.1:6380
Adding replica 10.0.0.1:6384 to 10.0.0.1:6381
M: a0c2a7a48ccceb5c6ed7c78c80f2966cc38cfbfb 10.0.0.1:6379
slots:0-5460 (5461 slots) master
M: 9ffcc65c57a4e6909937c468ed011fd27285b01e 10.0.0.1:6380
slots:5461-10922 (5462 slots) master
M: fc7a9badfaaffc11a9519504467515010cf5a934 10.0.0.1:6381
slots:10923-16383 (5461 slots) master
S: 6ababf944d4bd0e81a25b805a5a3e8c24225cfdb 10.0.0.1:6382
replicates a0c2a7a48ccceb5c6ed7c78c80f2966cc38cfbfb
S: 51012b44e11a6bc23c4283c59bede25433844c9b 10.0.0.1:6383
replicates 9ffcc65c57a4e6909937c468ed011fd27285b01e
S: 60650186bad3c5814ac768302dc5038df3c56c51 10.0.0.1:6384
replicates fc7a9badfaaffc11a9519504467515010cf5a934
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 10.0.0.1:6379)
M: a0c2a7a48ccceb5c6ed7c78c80f2966cc38cfbfb 10.0.0.1:6379
slots:0-5460 (5461 slots) master
M: 9ffcc65c57a4e6909937c468ed011fd27285b01e 10.0.0.1:6380
slots:5461-10922 (5462 slots) master
M: fc7a9badfaaffc11a9519504467515010cf5a934 10.0.0.1:6381
slots:10923-16383 (5461 slots) master
M: 6ababf944d4bd0e81a25b805a5a3e8c24225cfdb 10.0.0.1:6382
slots: (0 slots) master
replicates a0c2a7a48ccceb5c6ed7c78c80f2966cc38cfbfb
M: 51012b44e11a6bc23c4283c59bede25433844c9b 10.0.0.1:6383
slots: (0 slots) master
replicates 9ffcc65c57a4e6909937c468ed011fd27285b01e
M: 60650186bad3c5814ac768302dc5038df3c56c51 10.0.0.1:6384
slots: (0 slots) master
replicates fc7a9badfaaffc11a9519504467515010cf5a934
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
三、集群测试
1.命令行测试-c参数表示集群模式
# ./redis-cli -p 6379 -c -a adminadmin
127.0.0.1:6379> get v
-> Redirected to slot [7761] located at 10.0.0.1:6380
(nil)
10.0.0.1:6380> get c
"vv"
10.0.0.1:6380> get we
-> Redirected to slot [11725] located at 10.0.0.1:6381
"12"
10.0.0.1:6381> get bb
-> Redirected to slot [8620] located at 10.0.0.1:6380
(nil)
10.0.0.1:6380> get we
-> Redirected to slot [11725] located at 10.0.0.1:6381
"12"
10.0.0.1:6381> keys *
1) "we"
2) "a"