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信息