Docker——安装Redis和Redis的Cluster模式

1、总体步骤

  • 搜索镜像
docker search 镜像

  • 拉取镜像
docker pull 镜像

  • 查看镜像
docker images
  • 启动镜像(服务端口的映射)
docker run -it -p 8080:8080 tomcat
  • 停止容器
  • 移除容器

5、安装Redis

5.1、搜索镜像

# 从docker hub上(阿里云加速器)拉取redis镜像到本地标签为6.0.8
docker search redis:6.0.8

Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied
解决办法: 在挂载目录后多加一个--privileged=true参数即可

5.2、新建目录

# 在CentOS宿主机下新建目录/app/redis
mkdir -p /app/redis

5.3、拷贝文件

# 将一个redis.conf文件模板拷贝进/app/redis目录下
cp /myredis/redis.conf /app/redis/

5.4、修改文件

# 1、开启redis验证(可选)
requirepass 123

# 2、允许redis外地连接(必须)
注释掉 # bind 127.0.0.1

# 3、将daemonize yes注释起来或者 daemonize no设置,
# 因为该配置和docker run中-d参数冲突,会导致容器一直启动失败
daemonize no

# 4、开启redis数据持久化(可选)
appendonly yes

5.5、运行镜像

docker run  -p 6379:6379 --name myr3 --privileged=true 
	-v /app/redis/redis.conf:/etc/redis/redis.conf 
	-v /app/redis/data:/data 
	-d redis:6.0.8 redis-server /etc/redis/redis.conf

5.6、连接容器

docker exec -it redis容器 redis-cli

6、Redis(Cluster)集群

6.1、关闭防火墙+启动Docker

6.2、新建6个docker容器redis实例

docker run -d --name redis-node-1 --net host --privileged=true 
-v /data/redis/share/redis-node-1:/data redis:6.0.8 
--cluster-enabled yes --appendonly yes --port 6381
 
docker run -d --name redis-node-2 --net host 
--privileged=true -v /data/redis/share/redis-node-2:/data redis:6.0.8 
--cluster-enabled yes --appendonly yes --port 6382
 
docker run -d --name redis-node-3 --net host --privileged=true 
-v /data/redis/share/redis-node-3:/data redis:6.0.8 
--cluster-enabled yes --appendonly yes --port 6383
 
docker run -d --name redis-node-4 --net host --privileged=true 
-v /data/redis/share/redis-node-4:/data redis:6.0.8 
--cluster-enabled yes --appendonly yes --port 6384
 
docker run -d --name redis-node-5 --net host --privileged=true 
-v /data/redis/share/redis-node-5:/data redis:6.0.8 
--cluster-enabled yes --appendonly yes --port 6385
 
docker run -d --name redis-node-6 --net host --privileged=true 
-v /data/redis/share/redis-node-6:/data redis:6.0.8 
--cluster-enabled yes --appendonly yes --port 6386

详解

  • docker run 创建并运行docker容器实例;
  • --name redis-node-6 容器名字;
  • --net host 使用宿主机的IP和端口;
  • --privileged=true 获取宿主机root用户权限;
  • -v /data/redis/share/redis-node-6:/data 容器卷,宿主机地址:docker内部地址
  • redis:6.0.8 redis镜像和版本号;
  • --cluster-enabled yes 开启redis集群;
  • --appendonly yes 开启持久化;
  • --port 6386redis端口号。

6.3、进入容器

docker exec -it redis-node-1 /bin/bash

6.4、构建主从关系

# 注意,进入docker容器后才能执行一下命令,且注意自己的真实IP地址
# --cluster-replicas 1 表示为每个master创建一个slave节点
redis-cli --cluster create 
	192.168.111.147:6381 
	192.168.111.147:6382 
	192.168.111.147:6383 
	192.168.111.147:6384 
	192.168.111.147:6385 
	192.168.111.147:6386 
	--cluster-replicas 1

6.5、进入6381作为切入点,查看集群状态

# 集群信息
cluster info
# 节点信息
cluster nodes

6.6、查看集群信息

redis-cli --cluster check 192.168.111.147:6381

在这里插入图片描述

6.7、主从扩容

6.7.1、新建两个节点并启动

docker run -d --name redis-node-7 --net host --privileged=true 
-v /data/redis/share/redis-node-7:/data redis:6.0.8 
--cluster-enabled yes --appendonly yes --port 6387

docker run -d --name redis-node-8 --net host --privileged=true 
-v /data/redis/share/redis-node-8:/data redis:6.0.8 
--cluster-enabled yes --appendonly yes --port 6388

6.7.2、进入6387实例

docker exec -it redis-node-7 /bin/bash

6.7.3、将新增的6387节点作为master节点加入集群

# 将新增的6387作为master节点加入集群
# 6387 就是将要作为master新增节点
# 6381 就是原来集群节点里面的领路人,相当于6387通过6381的码头从而找到组织加入集群
redis-cli --cluster add-node 自己实际IP地址:6387 自己实际IP地址:6381

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gY6519IQ-1692860167205)(https://secure2.wostatic.cn/static/raAbL4DFowcEn9syc2QVJQ/image.png?auth_key=1692859370-cqQHBAWfPUuZfnWtjYaXRJ-0-3a969364973087790ea2c424c83aba52)]

6.7.4、检查集群情况

redis-cli --cluster check 真实ip地址:6381

在这里插入图片描述

6.7.5、重新分配槽号

# 重新分派槽号
# 通用
redis-cli --cluster reshard IP地址:端口号
# example
redis-cli --cluster reshard 192.168.111.147:6381

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FMCj6KWU-1692860167209)(https://secure2.wostatic.cn/static/tXyy7NMcCuGD8sB4fskwD1/image.png?auth_key=1692859370-nABzYRH5x6QCXDaHnX2SXG-0-9dd50002769d0bc40451205d19d7624e)]

6.7.6、检查集群

redis-cli --cluster check 真实ip地址:6381

为什么6387是3个新的区间,以前的还是连续?
重新分配成本太高,所以前3家各自匀出来一部分,从6381/6382/6383三个旧节点分别匀出1364个坑位给新节点6387

在这里插入图片描述

6.7.7、主节点分配从节点

# 通用
redis-cli --cluster add-node ip:新slave端口 ip:新master端口 
--cluster-slave --cluster-master-id 新主机节点ID

# e4781f644d4a4e4d4b4d107157b9ba8144631451-------这个是6387的编号,按照自己实际情况
redis-cli --cluster add-node 192.168.111.147:6388 192.168.111.147:6387 
--cluster-slave --cluster-master-id e4781f644d4a4e4d4b4d107157b9ba8144631451

6.7.8、检查集群

redis-cli --cluster check 192.168.111.147:6382

6.8、主从缩容

6.8.1、检查6388节点的Id

redis-cli --cluster check 192.168.111.147:6382

6.8.2、删除6388节点

# 通用
redis-cli --cluster del-node ip:从机端口 从机6388节点ID

# example
redis-cli --cluster del-node 192.168.111.147:6388 5d149074b7e57b802287d1797a874ed7a1a284a8

6.8.3、检测节点是否删除

redis-cli --cluster check 192.168.111.147:6382

6.8.4、重新分配

redis-cli --cluster reshard 192.168.111.147:6381

在这里插入图片描述

在这里插入图片描述

6.8.5、检测集群

# 4096个槽位都指给6381,它变成了8192个槽位,相当于全部都给6381了,不然要输入3次,一锅端
redis-cli --cluster check 192.168.111.147:6381 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tli0vtZQ-1692860167215)(https://secure2.wostatic.cn/static/vCd2cMEmqYmMf7RNfJPens/image.png?auth_key=1692859372-92M4GA27Ftkj652zth6eDz-0-88ce77d6bf2684d73671ec6489c23a30)]

6.8.6、删除6387节点

# 通用
redis-cli --cluster del-node ip:端口 6387节点ID
# example
redis-cli --cluster del-node 192.168.111.147:6387 e4781f644d4a4e4d4b4d107157b9ba8144631451

6.8.7、检查集群

redis-cli --cluster check 192.168.111.147:6381
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是使用Docker Compose部署Redis集群的步骤: 1. 在服务器上安装DockerDocker Compose。 2. 创建一个目录来存储Redis配置文件和数据文件。 ```shell mkdir -p /usr/local/redis/data /usr/local/redis/logs /usr/local/redis/conf chmod -R 777 /usr/local/redis/data* chmod -R 777 /usr/local/redis/logs* ``` 3. 创建一个Redis配置文件。 ```shell cd /usr/local/redis/conf vim redis.conf ``` 在配置文件中添加以下内容: ``` bind 0.0.0.0 protected-mode no port 6379 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes ``` 4. 创建一个Docker Compose文件。 ```shell cd /usr/local/redis vim docker-compose.yml ``` 在文件中添加以下内容: ``` version: '3' services: redis1: image: redis:6.2.5 container_name: redis1 command: redis-server /usr/local/etc/redis/redis.conf volumes: - ./conf/redis.conf:/usr/local/etc/redis/redis.conf - ./data/redis1:/data - ./logs/redis1:/logs ports: - "6379:6379" networks: redis-cluster: ipv4_address: 172.16.238.10 redis2: image: redis:6.2.5 container_name: redis2 command: redis-server /usr/local/etc/redis/redis.conf volumes: - ./conf/redis.conf:/usr/local/etc/redis/redis.conf - ./data/redis2:/data - ./logs/redis2:/logs ports: - "6380:6379" networks: redis-cluster: ipv4_address: 172.16.238.11 redis3: image: redis:6.2.5 container_name: redis3 command: redis-server /usr/local/etc/redis/redis.conf volumes: - ./conf/redis.conf:/usr/local/etc/redis/redis.conf - ./data/redis3:/data - ./logs/redis3:/logs ports: - "6381:6379" networks: redis-cluster: ipv4_address: 172.16.238.12 redis4: image: redis:6.2.5 container_name: redis4 command: redis-server /usr/local/etc/redis/redis.conf volumes: - ./conf/redis.conf:/usr/local/etc/redis/redis.conf - ./data/redis4:/data - ./logs/redis4:/logs ports: - "6382:6379" networks: redis-cluster: ipv4_address: 172.16.238.13 redis5: image: redis:6.2.5 container_name: redis5 command: redis-server /usr/local/etc/redis/redis.conf volumes: - ./conf/redis.conf:/usr/local/etc/redis/redis.conf - ./data/redis5:/data - ./logs/redis5:/logs ports: - "6383:6379" networks: redis-cluster: ipv4_address: 172.16.238.14 redis6: image: redis:6.2.5 container_name: redis6 command: redis-server /usr/local/etc/redis/redis.conf volumes: - ./conf/redis.conf:/usr/local/etc/redis/redis.conf - ./data/redis6:/data - ./logs/redis6:/logs ports: - "6384:6379" networks: redis-cluster: ipv4_address: 172.16.238.15 networks: redis-cluster: ipam: driver: default config: - subnet: 172.16.238.0/24 ``` 5. 启动Redis集群。 ```shell docker-compose up -d ``` 这将启动6个Redis容器,其中3个是主节点,3个是从节点,并且外部可以通过6379端口访问Redis集群。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值