前言
在现如今数据量越来越大的时代,一台redis进行数据缓存是远远不够的,这时候就需要使用到了集群技术。来帮助master解决读的压力,让读的操作去slave进行。这样可以保证redis不会宕机。下面进行实践操作。搭建集群是根据这位博主的操作来的
一:创建一个文件夹,用于适用docker-compose.yml文件
cd /usr/local #进入usr/local 目录
sudo mkdir -p docker/redis docker/sentinel #创建docker文件夹并在其下创建redis和sentinel文件夹
二:进入redis和sentinel文件夹,并创建如下docker-compose.yml文件
cd docker/redis #进入redis文件夹
sudo vi docker-compose.yml #在redis文件夹下编写docker-compose.yml
cd docker/sentinel #进入redis文件夹
sudo vi docker-compose.yml #在redis文件夹下编写docker-compose.yml
这是redis文件夹下的docker-compose.yml文件
version: '3'
services:
master:
image: redis
container_name: redis-master
ports:
- 6379:6379
slave1:
image: redis
container_name: redis-slave-1
ports:
- 6380:6379
command: redis-server --slaveof redis-master 6379
slave2:
image: redis
container_name: redis-slave-2
ports:
- 6381:6379
command: redis-server --slaveof redis-master 6379
这是sentinel文件夹下的docker-compose.yml文件
version: '3'
services:
sentinel1:
image: redis
container_name: redis-sentinel-1
ports:
- 26379:26379
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
volumes:
- ./sentinel1.conf:/usr/local/etc/redis/sentinel.conf
sentinel2:
image: redis
container_name: redis-sentinel-2
ports:
- 26380:26379
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
volumes:
- ./sentinel2.conf:/usr/local/etc/redis/sentinel.conf
sentinel3:
image: redis
container_name: redis-sentinel-3
ports:
- 26381:26379
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
volumes:
- ./sentinel3.conf:/usr/local/etc/redis/sentinel.conf
创建哨兵文件,并将如下内容复制进去,保存并退出
sudo vi sentinel.conf
port 26379
dir /tmp
sentinel monitor redis-slave 192.168.213.130 6379 2 #redis-slave这里是集群名字,你随意,后面是ip和端口号请配置好
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
注意:
1.第三行中 redis-slave是可以自定义集群的名字,如果使用其他语言连接集群,需要写上该名字。
2.192.168.223.129是我虚拟机的ip,请换成自己的ip,不要127.0.0.1 否则会链接到你的应用程序去,写IP就可以。
3.那个2呢,是因为我有3台哨兵,2个投票超过50%了,所以设置2即可,如果是更多,设置超过50%概率就好,自己喜欢。
将文件copy3份,并改下名字
sudo cp sentinel.conf sentinel1.conf
sudo cp sentinel.conf sentinel2.conf
sudo cp sentinel.conf sentinel3.conf
启动集群,先启动master-slave,在启动sentinel。
cd /usr/local/docker/redis
sudo docker-compose up -d #-d表示后台运行,就是守护态运行
cd /usr/local/docker/sentinel/
sudo docker-compose up -d #-d表示后台运行,就是守护态运行
查看集群启动情况
docker ps

进入redis去操作一下


补充说明
前面的集群已经搭建完毕,可是却出现一个问题,谁都可以连接你的redis集群,这是非常不安全的。为此,这里将补充为集群添加密码,加强安全。
version: '3'
services:
master:
image: redis
container_name: redis-master
command: redis-server --requirepass 123456
ports:
- 6379:6379
slave1:
image: redis
container_name: redis-slave-1
ports:
- 6380:6379
command: redis-server --slaveof redis-master 6379 --requirepass 123456 --masterauth 123456
slave2:
image: redis
container_name: redis-slave-2
ports:
- 6381:6379
command: redis-server --slaveof redis-master 6379 --requirepass 123456 --masterauth 123456
上面标红色的地方,就是添加的密码校验,123456是我们可以自己修改的密码,这一步做完基本搞定一半了,接下来我们要去修改哨兵的文件。
哨兵下的sentinel3.conf,sentinel2.conf,sentinel1.conf都需要去添加,添加在sentinel monitor redis-slave 192.168.213.130 6379 2下面就可以了
sentinel auth-pass mymaster 123456
保存退出,按照上面的步骤重新启动整个容器即可。
进入redis操作一下

这个错误就是你之前设置了密码,此时你进入需要输入密码就可以
auth 123456

我在写入时有报错了,这个错误提示说这个副本只能读不能写操作

config get slave-read-only #查看你当前的文档是否是可读的
config set slave-read-only no #设置你操作为no就可以进行写操作了
config get slave-read-only #查看你当前的文档是否是可读的

再次写入


这就说明你的集群搭建好了,上面使用docker-compose搭建redis集群是查看的这位博主的.后续出现的问题都是自己解决的

本文档详细介绍了如何使用docker-compose在Linux环境下部署redis集群,包括创建配置文件、启动master-slave节点、配置sentinel哨兵以及设置集群密码,确保数据安全。在搭建过程中,强调了关键配置项的解释和注意事项,如自定义集群名称、IP地址的正确设定以及哨兵的密码保护。
2525





