下面我将详细讲解 redis 集群搭建过程。
1. 环境准备
首先需要准备一台或多台主机,安装 redis 服务。本次搭建使用的操作系统为 CentOS 7.8,redis 版本为 5.0.9。
2. 下载、安装和配置 redis
下载安装
# 安装前依赖包
$ yum install gcc -y
$ yum install tcl -y
# 下载 Redis
$ wget http://download.redis.io/releases/redis-5.0.9.tar.gz
# 解压
$ tar xzf redis-5.0.9.tar.gz
# 进入 redis 目录
$ cd redis-5.0.9
# 编译
$ make
# 安装
$ make install
配置
- 为每个 Redis 实例创建不同目录,用于存放数据和 Redis 配置文件。目录结构如下:
# 创建目录
$ mkdir -p /opt/redis/cluster/{7000,7001,7002,7003,7004,7005}
# 目录结构
/opt/redis/cluster/7000
│ redis.conf
│
├─data
- redis.conf 配置如下(以下为节点 7000 的配置,其它节点的端口号和工作目录需要调整):
port 7000
pidfile /var/run/redis_7000.pid
dir /opt/redis/cluster/7000/data
cluster-enabled yes
cluster-config-file nodes_7000.conf
cluster-node-timeout 15000
appendonly yes
pidfile /var/run/redis_7000.pid
- 复制配置文件并修改端口号为对应的节点端口:
# 给其他节点创建配置文件
$ cp /opt/redis/cluster/7000/redis.conf /opt/redis/cluster/7001/
$ cp /opt/redis/cluster/7000/redis.conf /opt/redis/cluster/7002/
$ cp /opt/redis/cluster/7000/redis.conf /opt/redis/cluster/7003/
$ cp /opt/redis/cluster/7000/redis.conf /opt/redis/cluster/7004/
$ cp /opt/redis/cluster/7000/redis.conf /opt/redis/cluster/7005/
# 修改配置文件,分别将端口号改为对应节点的端口
$ sed -i 's/^port 7000$/port 7001/' /opt/redis/cluster/7001/redis.conf
$ sed -i 's/^port 7000$/port 7002/' /opt/redis/cluster/7002/redis.conf
$ sed -i 's/^port 7000$/port 7003/' /opt/redis/cluster/7003/redis.conf
$ sed -i 's/^port 7000$/port 7004/' /opt/redis/cluster/7004/redis.conf
$ sed -i 's/^port 7000$/port 7005/' /opt/redis/cluster/7005/redis.conf
3. 启动 redis 节点
- 启动每个节点(以下为启动 7000 节点,其它节点同理):
redis-server /opt/redis/cluster/7000/redis.conf
4. 创建 redis 集群
使用 redis-trib 工具来创建并管理 redis 集群。
下载 redis-trib
# 解压 redis-5.0.9.tar.gz 文件
$ tar xzf redis-5.0.9.tar.gz
# 进入 redis-5.0.9/src
$ cd redis-5.0.9/src
# 编译 redis-trib
$ make redis-trib
创建集群
连接 redis-trib 工具,创建集群(以下为创建一个三节点的集群,其它节点同理):
./redis-trib.rb create --replicas 1 192.168.1.101:7000 192.168.1.101:7001 192.168.1.101:7002 192.168.1.101:7003 192.168.1.101:7004 192.168.1.101:7005
验证集群
# 连接任意节点
$ redis-cli -c -p 7000
# 输入命令
192.168.1.101:7000> get foo
# 输出结果
-> Redirected to slot [12182] located at 192.168.1.101:7004
"bar"
5. 示例说明
以下是两个使用 redis 集群的示例:
示例 1:集群下的 set / get
向集群中的某个节点 set 值:
$ redis-cli -c -p 7000
192.168.1.101:7000> set key value
-> Redirected to slot [8543] located at 192.168.1.101:7002
OK
获取该值:
# 获取 value 值
$ redis-cli -c -p 7000 get key
-> Redirected to slot [8543] located at 192.168.1.101:7002
"value"
示例 2:分片式的 list
在这个例子中,我们会将一个数据分片成 6 份储存在集群的不同节点中。这里我们会在客户端代码中编写运行分片算法的代码,然后将数据存储到集群上。
require 'redis'
require 'digest'
class ShardedRedis
def initialize(nodes)
@nodes = nodes.sort
@shards = @nodes.map { |node| Redis.new(host: node.split(':')[0], port: node.split(':')[1].to_i) }
end
def set(key, value)
shard(key).set(key, value)
end
def get(key)
shard(key).get(key)
end
private
def shard(key)
@shards[hash_slot(key) % @nodes.size]
end
def hash_slot(key)
Digest::CRC32.checksum(key)
end
end
# Nodes
nodes = [
'192.168.1.101:7000',
'192.168.1.101:7001',
'192.168.1.101:7002',
'192.168.1.101:7003',
'192.168.1.101:7004',
'192.168.1.101:7005'
]
# 初始化客户端
client = ShardedRedis.new(nodes)
# 存入数据
100.times do |i|
client.set("key#{i}", "value#{i}")
end
# 获取数据
10.times do |i|
puts client.get("key#{i}")
end
在以上示例中,我们使用了 hash_slot 方法将 key 映射到对应的节点。这里的哈希函数使用了 CRC32 算法,这也是 redis 集群中使用的哈希函数。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:redis集群搭建过程(非常详细,适合新手) - Python技术站