Redis Cluster集群配置

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"
### 如何配置 Redis Cluster 集群 #### 创建多个实例 为了创建一个功能齐全的 Redis Cluster,至少需要六个节点(三个主节点和三个从节点)。每个节点都是独立运行的一个 `redis-server` 实例。可以通过命令行启动这些服务,并指定不同的端口号来区分各个实例。 ```bash $ redis-server /path/to/node_7001.conf $ redis-server /path/to/node_7002.conf ... ``` 每台服务器都需要有自己的配置文件,在其中设置如下参数[^2]: - port:定义监听端口; - cluster-enabled yes:启用集群模式; - cluster-config-file nodes-{port}.conf:保存集群状态到磁盘上的文件名模板; - cluster-node-timeout 5000:超时时间设定; #### 初始化集群 当所有的 Redis 进程都已成功启动之后,则可以利用官方提供的工具 `redis-cli --cluster create ...` 来初始化这个新的集群环境。此过程会自动分配键空间给各成员并建立连接关系图谱。 ```bash $ redis-cli --cluster create \ 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 127.0.0.1:7006 \ --replicas 1 ``` 上述命令指定了六台机器参与构建集群,并且为每一个主节点指派了一个对应的副本节点。 #### 数据分片策略 Redis Cluster 使用了一种称为“虚拟槽”的机制来进行数据划分。整个键空间被切分成 16384 个槽位 (slot),而每个键都会通过 CRC16 算法计算得到对应编号范围内的某个具体位置。这样做的好处是可以让不同类型的对象均匀分布在多台设备之间,从而实现负载均衡的效果[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值