磁盘挂载、docker搭建redis哨兵集群

本文详细介绍如何在Docker环境下修改挂载路径、挂载磁盘,以及搭建Redis的主从模式和哨兵集群,包括配置文件的编写、容器的启动步骤及验证主从同步、读写分离和哨兵监控的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.修改docker挂载路径

1.首先一定要先停止docker服务,容易产生错误

systemctl stop docker

2.创建目录

  mkdir /qj

3.进入目录后,要先拷贝文件进行备份,然后将文件拷贝到本地

 sudo mv docker/ jkl (随意起得名)
 sudo cp -ar jkl/data/docker/ .  (-a :复制属性  -r:递归复制目录及其子目录内的所有内容)

4.在/etc/docker/目录下创建daemon.json文件

sudo vim /etc/docker/daemon.json

5.在daemon.json文件里填入下列字符

{
         "graph": "/qj/docker"
 }

6.保存之后重新启动docker服务

sudo systemctl start docker

7.查看docker服务信息

sudo docker info

二.挂载磁盘

1.检查是否安装了docker

 sudo docker ps 

2.查看磁盘

df -h

3. 列出分区表状况

 sudo fdisk -l

4.格式化分区

sudo mkfs.ext4 /dev/vdb1

5.创建/qj/目录

sudo mkdir /qj

6.进入目录后将/dev/vdb1 挂载到/qj/下

 cd qj
    sudo mount /dev/vdb1 /qj/

7.查看磁盘

  df -h

8.查看/dev/disk/by-uuid/的id号

sudo ls -l /dev/disk/by-uuid/

9.将id号复制到/etc/fstab 下

sudo vim /etc/fstab 

具体内容如下:
在这里插入图片描述
10.停止docker服务

sudo systemctl stop docker

11.将文件复制到本地

sudo cp -ar /var/lib/docker .  (-a :复制属性  -r:递归复制目录及其子目录内的所有内容)

12.在/etc/docker/目录下创建daemon.json文件

sudo vim /etc/docker/daemon.json

13.启动docker服务

sudo systemctl start docker

14.查看docker信息

sudo docker info

15.设置开机自起

sudo systemctl enable docker

三.docker搭建redis主从模式、哨兵集群

- 注:我是在同一宿主机下进行的配置,所以端口会不同,大家参考时多注意

简介:
redis主从:
主从复制,从只读模式。

哨兵sentinel:
监控(Monitoring): Sentinel会不断地检查你的主服务器和从服务器是否运作正常。
提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作,它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器;
当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

创建redis主从模式

1.创建主redis

  • 搭建顺序一定不能乱,要先master、后slave,最后搭建哨兵,否则会达不到预期的效果

第一步先创建redis.conf文件,用于映射到容器里。
redis官方提供了一个配置文件样例,如果不知道redis.conf文件怎么写,可以通过wget工具下载下来。我用的root用户,就直接下载到/root目录里了。

wget http://download.redis.io/redis-stable/redis.conf

打开下载下来的文件后,可以看到配置有很多。我只是搭建服务进行试验所以只修改必要的几项。如果要运用到线上,那必须所有的配置都按需求进行修改。

其中redis服务器的master和slave角色使用的配置文件还会有些不同,下面分别进行说明。
创建redis_master.conf,作为主配置文件

mkdir  redis_master.conf

对于master而言,配置文件修改以下几项:

# 注释这一行,表示Redis可以接受任意ip的连接,也可以写成0.0.0.0,效果一样
# bind 127.0.0.1 

# 关闭保护模式
protected-mode no 

# 这里需要改成no,因为要映射到容器里,所以是no,二进制需要改称yes,否则会无法启动
daemonize no

# 设定密码(可选,如果这里开启了密码要求,slave的配置里就要加这个密码. 只是练习配置,就不使用密码认证了,我这里设置为123456)
requirepass 123456

# 配置日志路径,为了便于排查问题,指定redis的日志文件
logfile "redis.log"

#设置alwsys代表的含义只要存在对redis数据造成更改的操作,都要记录到磁盘文件上
appendfsync always 

其余内容默认就可以,不用做修改。

接下来我们要启动一个redis_master容器

docker run --name redis_master -p 6379:6379 -v $(pwd)/redis_master.conf:/data/redis_master.conf --restart=always -d redis:latest redis-server /data/redis_master.conf

- 注:其中的$ (pwd)代表当前路径,因为路径太长,所以用$(pwd)代替,写的时候要写全,/data/redis_master.conf是容器内的文件路径,使用此方法意味着不需要为redis容器安装Dockerfile,详情可以看dockerhub官网

2.创建从redis

接下来创建从配置:
和上面一样,创建redis_slave,conf

mkdir  redis_slave,conf

配置内容如下

bind 0.0.0.0
daemonize no
pidfile "/var/run/redis.pid"
port 6380
timeout 300
loglevel warning
logfile "redis.log"
databases 16
rdbcompression yes
dbfilename "redis.rdb"
dir "/data"
requirepass "12345678"
masterauth "12345678"
maxclients 10000
maxmemory 1000mb
maxmemory-policy allkeys-lru
appendonly no
appendfsync always            
#我指定的是本机的地址和端口,指定为master的从redis
slaveof  192.168.10.171 6379

- 注:因为我使用的是同一个宿主机,所以端口我改成了6380,使用docker-machine和虚拟机中不必这样。配置内容修改和上面一样,就不多叙述。

接下来启动容器

docker run --name redis_slave -p 6380:6380 -v $(pwd)/redis_slave.conf:/data/redis_slave.conf --restart=always -d redis:latest redis-server /data/redis_master.conf

这样主从就搭建完成了,接下来搭建sentinel哨兵

3.搭建sentinel哨兵

sentinel.conf配置文件如下所示:

daemonize no
port 26379
dir "/tmp"
sentinel monitor mymaster 192.168.10.171 6379 1
sentinel down-after-milliseconds mymaster 60000
sentinel auth-pass mymaster password
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0

docker启动命令

docker run --name sentinel -p 26379:26379 -v $(pwd)/sentinel.conf:/data/sentinel.conf --restart=always -d redis:latest redis-sentinel /data/sentinel.conf

- 注:端口我指定的为26379,daemonize一定要改成no,否则会起不来,可以自己进行尝试一下。

4.搭建完成之后测试主从同步、读写分离和哨兵监控

1.进入主redis写入数据

$ docker exec -it redis_master bash
root@4a788cdd0153:/data# redis-cli \\进入redis终端
127.0.0.1:6379> AUTH 123456\\登录
OK
127.0.0.1:6379> info replication \\查看role角色是否为master
# Replication
role:master
connected_slaves:1   #代表有一个从redis
slave0:ip=192.168.10.171,port=6379,state=online,offset=2679,lag=0
127.0.0.1:6379> set ydt 123 \\设置键值对
OK
127.0.0.1:6379> keys * \\查看所有数据
1) "ydt"
127.0.0.1:6379> exit
root@4a788cdd0153:/data# exit

2.进入从redis查看数据

docker@slave:~$ docker exec -it redis_slave bash
root@4a788cdd0153:/data# redis-cli -p 6380\\进入redis终端(因为默认端口为6379,所以我们手动指定6380端口)
127.0.0.1:6380> AUTH 12345678 \\登录
OK
127.0.0.1:6380> info replication \\查看role角色是否为slave
# Replication
role:slave
127.0.0.1:6380>  keys * \\查看所有数据
1) "ydt"
127.0.0.1:6380>exit

- 注:此时能查看到主端的数据,代表主从同步以成功。

4.查看哨兵状态

1.首先动态加载sentinel日志:

docker logs -f sentinel

动态显示为如下:
在这里插入图片描述
- 注:证明主redis为master

2.停掉master的容器

docker stop redis_master

再次加载动态sentinel日志

docker logs -f sentinel

显示如下:
在这里插入图片描述
- 注:显示slave已经变为主redis

3.再次进入slave容器,info replication查看信息
在这里插入图片描述
- 注:发现slave中的role已经变成master了

4.再次启动redis_master
进入容器后检查role,发现已经变成slave
在这里插入图片描述
5.查看哨兵日志:
在这里插入图片描述
已经变成从redis。

6.主从切换过程:
(1) slave leader升级为master
(2) 其他slave修改为新master的slave
(3) 客户端修改连接
(4) 老的master如果重启成功,变为新master的slave

7.实验结论:
 停止主redis容器
 哨兵监控会判断redis sdown(主观下线),然后odown(客观下线)
 此时哨兵会将从redis推举成主。然后去里面写入数据,set slave slave
 这时将原来停了得主库开启。然后info replication发现变成了从库。keys *查看所有库时,可以查看到slave键值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值