1.关于Redis集群
Redis Cluster是一个提供在多个 Redis 节点间共享数据的程序集。
Redis 集群的优势:
1.可以是多主多从结构
2. 自带主从切换,不需要哨兵服务
3. 使用“哈希槽”算法
Redis 集群有 16384 个哈希槽,每个 key 通过 CRC16 校验后对 16384 取模来决定放置哪个槽,集群的每个节点负责一部分 hash 槽。
2.创建集群
我们想要在Linux系统中部署Redis服务集群,首先要拥有Linux的环境,这里我们采用虚拟机配和Docker的方式来创建。首先我们要清理下容器,然后看下还有没有已经打开正在运行的程序。docker ps -a
# 清理容器
docker rm -f $(docker ps -aq)
然后我们来创建一个文件夹(mkdir /opt/redis)并进入到这个文件夹中(cd /opt/redis)放我们的Redis集群,并分别创建6个文件夹分别对应各自的端口号(mkdir 7000 7001 7002 7003 7004 7005)存放我们的6个Redis程序。
# 准备配置文件
mkdir /opt/redis
cd /opt/redis
mkdir 7000 7001 7002 7003 7004 7005
然后我们创建6个配置文件,这里用到了Linux的cat命令,资料:Cat命令百科,<<EOF 代表执行到EOF标志后自动退出文件写的操作。
cat <<EOF >7000/redis.conf
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF
cat <<EOF >7001/redis.conf
port 7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF
cat <<EOF >7002/redis.conf
port 7002
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF
cat <<EOF >7003/redis.conf
port 7003
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF
cat <<EOF >7004/redis.conf
port 7004
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF
cat <<EOF >7005/redis.conf
port 7005
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF
下一步启动6个Redis服务:
# 启动6个redis服务
docker run -d --name redis7000 --restart=always \
--net host -v /opt/redis/7000/redis.conf:/redis.conf \
redis redis-server /redis.conf
docker run -d --name redis7001 --restart=always \
--net host -v /opt/redis/7001/redis.conf:/redis.conf \
redis redis-server /redis.conf
docker run -d --name redis7002 --restart=always \
--net host -v /opt/redis/7002/redis.conf:/redis.conf \
redis redis-server /redis.conf
docker run -d --name redis7003 --restart=always \
--net host -v /opt/redis/7003/redis.conf:/redis.conf \
redis redis-server /redis.conf
docker run -d --name redis7004 --restart=always \
--net host -v /opt/redis/7004/redis.conf:/redis.conf \
redis redis-server /redis.conf
docker run -d --name redis7005 --restart=always \
--net host -v /opt/redis/7005/redis.conf:/redis.conf \
redis redis-server /redis.conf
--name redis7000 为docker容器命名
-d 后台运行的意思
--restart=always 意思是总是伴随容器启动自动重启
--net host 设置网络
-v /opt/redis/7000/redis.conf:/redis.conf 把本地文件挂载到容器里 容器里如果没有就会创建
redis redis-server /redis.conf 启动redis 服务器 并且 redis-server按 redis.conf配置文件去运行
下一步我们要将上面的6个容器组成一个Redis集群
--cluster-replicas 1 这是设置从机数量为1 也就是 6个机会被分成三个主机 分别有一个从机,也就是三主三从的结构。注意,这里是同一个网段的,要不然,后期还需要调整容器网络互联
# 组成集群
docker exec -it redis7000 redis-cli --cluster create \
192.168.64.140:7000 192.168.64.140:7001 \
192.168.64.140:7002 192.168.64.140:7003 \
192.168.64.140:7004 192.168.64.140:7005 \
--cluster-replicas 1
然后向其中添加数据
# 进入redis添加数据
# 组成集群之前,服务不能使用
# 添加数据
docker exec -it redis7000 redis-cli -c -p 7000
set a aaaaaaaaaaaaaaaaaaaaaaaa
set b bbbbbbbbbbbbbbbbbbbbbbb
set c cccccccccccccccccccccccccccc
get a
get b
get c
在组成集群后 需要如下命令 随便进入其中一个端口就行 注意 如下命令多了个-c表示进入集群
docker exec -it redis7000 redis-cli -c -p 7000
keys *
docker exec -it redis7000 redis-cli -c -p 7001
keys *
docker exec -it redis7000 redis-cli -c -p 7002
keys *
```
我们在任意一个容器中都可以看到所有的keys信息