dockere安装reids,主从 及搭建集群

1 篇文章 0 订阅
1 篇文章 0 订阅

系列文章目录

高可用集群架构搭建及代码实现系列



前言

centos7环境下docker安装reids,主从及集群。


1.启动docker,安装镜像。

代码如下(示例):

#启动docker
systemctl start docker

#拉去最新版本redis(如果有需要可自行去搜索版本https://hub.docker.com/_/redis)
docker pull redis:latest

#查看镜像库
docker images

dockers镜像库

2.启动master镜像

直接启动的话,配置文件是默认的,且持久化文件等不好管理所有我们需要提前准备好挂载地址(就是配置文件和数据存放地):

##配置文件和data目录
mkdir -p /home/soft/redis/config
cd /home/soft/redis/
mkdir data

#拉取redis.conf文件命令:会在当前目录下拉去!!!
wget -c http://download.redis.io/redis-stable/redis.conf

# !需要修改的地方是
bind 127.0.0.1        #如果bind选项为空的话,则允许所有来自于可用网络接口的连接,自己搭建直接注释
protected-mode no      #保护模式,若为yes,只允许本地客户端连接
requirepass  123456  #启用密码123456可以换成任意的,不支持特殊字符
daemonize no #关闭守护进程方式启动

#启动命令
docker run  --name redis-master
-v /home/soft/redis/config/redis.conf:/etc/redis/redis.conf
-v /home/soft/redis/data/master:/data 
-d 
-p 6379:6379 
redis-server /usr/local/etc/redis/redis.conf

解释下

run:创建一个新的容器并运行一个命令
–name:给启动的容器起名
--privileged=true 容器内部root权限
-v:挂载目录 将当前宿主机的conf(/home/soft/redis/config/redis.conf)文件挂载到容器conf文件/当前宿主机data(/home/soft/redis/data/master)挂载到容器的data使用
-d:后台运行容器,并返回容器ID-p:指定端口映射,格式为:主机(宿主)端口:容器端口
最后以配置文件方式启动redis

3.查看及排错

#查看所有启动的容器 -a可以看到关闭的
docker ps

redis-master启动

#如果发现没有启动需要去查看日志排错 docker -logs 查看日志 -f是进入后查看 redis-master是你的容器名
docker logs -f redis-master

#目前有个坑就是直接拉去的conf配置启动 参数会报错 我安装的时候遇到了
# 拉去的配置文件和redis版本不匹配!需要去下一份低版本的con,推荐6
'repl-diskless-sync-max-replica 0'
#地址 可以直接下整包很小,然后conf文件从新修改下即可,但是得先删除容器
https://github.com/redis/redis/releases 

#停止 及删除
docker stop redis-master(名称或者直接id)
docker rm -f redis-master(名称或者直接id)

从新运行 run命令即可!

4.测试

#进入容器内部
 docker exec -it redis-master bash
#连接redis 密码校验
 redis-cli
 auth password

测试
客户端查看
客户端查看

5.主从

#复制一份conf
cd /home/soft/redis/config
cp redis.conf redis6380.conf

#修改端口
port 6380
#文件最后添加
replicaof 主节点IP 端口
masterauth 主节点密码

#启动
 docker run  --name redis-slave\
 --privileged=true\
 -p 6380:6380 \
 -v /home/soft/redis/config/redis6380.conf:/etc/redis/redis.conf\
 -v /home/soft/redis/6380data:/data\
 -d redis redis-server \
 /etc/redis/redis.conf \
 --appendonly yes

#查看主节点
 docker exec -it redis-master bash
 redis-cli
 auth password
 info Replication


 #下面是展示信息
role:master
connected_slaves:1
#有一个从节点
> slave0:ip=172.17.0.1,port=6380,state=online,offset=630,lag=1
master_failover_state:no-failover
master_replid:7792a6a8d0952a93214a35423b4db7e8efea1054
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:630
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:630



#查看从节点
 docker exec -it redis-slave bash
 redis-cli -h 0.0.0.0 -p 6380
 auth password
 #从节点 主任是谁
 info Replication
> role:slave
> master_host:192.168.121.129 master_port:6379
master_link_status:up
master_last_io_seconds_ago:4
master_sync_in_progress:0
slave_read_repl_offset:2125
slave_repl_offset:2125
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:7792a6a8d0952a93214a35423b4db7e8efea1054
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:2125
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1832
repl_backlog_histlen:294
0.0.0.0:6380> 

6.哨兵

1 准备配置文件sentinel.con,路径为 /home/soft/redis/config

# 哨兵端口号 一定要和启动命令映射的第二个端口号一致
port 26379
 
# 后台启动,守护线程
daemonize yes
 
# pid文件路径,容器中的路径
pidfile /var/run/redis-sentinel.pid
 
# 日志文件路径,容器中的路径
logfile /var/log/sentinel.log
 
# 定义工作目录,容器中的路径
dir /tmp
# sentinel 监控的master的名字叫做redis-master, IP为172.17.0.9(可以是自身ip), 端口为6379#  2代表2个及以上哨兵都认为master down了,才真正认为该master已经死亡,进行选举切换
sentinel monitor redis-master 172.17.0.2 6379 2
 
# redis master 服务的密码,如果redis设置了则哨兵中必须配置auth-pass
sentinel auth-pass redis-master aver
 
# 发送心跳PING来确认master是否存活 默认30s
# 如果master在“一定时间范围(ms)”内不回应PONG 或者是回复了一个错误消息,那么这个sentinel会主观地(单方面地)认为这个master已经不可用了
# 如果mymaster 10秒内没有响应,则认为其主观失效
sentinel down-after-milliseconds redis-master 10000
 
# 如果master重新选出来后,其它slave节点能同时并行从新master同步数据的台数有多少个,显然该值越大,所有slave节点完成同步切换的整体速度越快,但如果此时正好有人在访问这些slave,可能造成读取失败,影响面会更广。最保守的设置为1,同一时间,只能有一台干这件事,这样其它slave还能继续服务,但是所有slave全部完成缓存更新同步的进程将变慢。
sentinel parallel-syncs redis-master 1
 
# 该参数指定一个时间段,在该时间段内没有实现故障转移成功,则会再一次发起故障转移的操作,单位毫秒
sentinel failover-timeout redis-master 180000
 
# 不允许使用SENTINEL SET设置notification-script和client-reconfig-script。
sentinel deny-scripts-reconfig yes
 
# 指定了在执行故障转移时,最多可以有多少个从Redis实例在同步新的主实例,在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长
#sentinel parallel-syncs redis-master 1
 
# 哨兵自己的IP,手动设定也可自动发现,用于与其他哨兵通信
# sentinel announce-ip 172.17.0.9
# sentinel announce-port 26379

2 准备从节点哨兵 sentinel-slave1.conf , sentinel-slave2.conf

bind 0.0.0.0
protected-mode no
port 26380
dir /data
logfile sentinel.log
daemonize yes
#主节点如果配置了密码 需要 否则不需要
sentinel auth-pass redis-master aver
sentinel monitor redis-master 172.17.0.2 6379 2

7.启动哨兵

#删除原本主节点容器 redis-master为容器名
docker rm -f redis-master
#从新启动 配置路径改成自己的即可
docker run  --name redis-master\ 
  --privileged=true\
  -p 6379:6379 -p 26379:26379\
  -v /home/soft/redis/config/redis.conf:/etc/redis/redis.conf\
  -v /home/soft/redis/data:/data\
  -v /home/soft/redis/config/sentinel.conf:/data/sentinel.conf \
  -d redis redis-server /etc/redis/redis.conf\
  --appendonly yes

#删除原从主节点容器
docker rm -f slave1 slave2
#从新启动 配置路径改成自己的即可
docker run  --name slave1\
  --privileged=true\
  -p 6380:6380 -p 26380:26380\
  -v /home/soft/redis/6380config/redis6380.conf:/etc/redis/redis.conf\
  -v /home/soft/redis/6380data:/data\
  -v /home/soft/redis/6380config/sentinel-slave1.conf:/data/sentinel.conf \
  -d redis redis-server /etc/redis/redis.conf\
  --appendonly yes

#进入节点启动sentinel 
docker exec -it redis-master /bin/bash(从节点docker exec -it slave /bin/bash)
#进入节点启动sentinel (如果不确定的情况可以先ls  然后cat 查看具体内容)

查看具体的sentinel内容

#启动哨兵
redis-sentinel sentinel.conf (从redis-sentinel sentinel1.conf)
#进入查看
redis-cli -p 26379
127.0.0.1:26379> info

查看结果
三哨兵

总结

内容比较简单但是扩展性比较强,可以在这个基础上扩展你需要的集群。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值