栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

基于Docker环境下的redis主从、哨兵、集群环境搭建

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于Docker环境下的redis主从、哨兵、集群环境搭建

一、准备工作
# 查询docker上的redis镜像
huxing@localhost data % docker search redis
# 下载redis镜像
huxing@localhost data % docker pull redis
二、搭建redis主从配置环境 1. 先创建两个redis的conf目录
huxing@localhost data % mkdir /Users/huxing/Desktop/dev/redis/redis-6379
huxing@localhost data % mkdir /Users/huxing/Desktop/dev/redis/redis-6380
2. 在这两个目录下创建conf文件
# 跳转到文件夹内
huxing@localhost data % cd /Users/huxing/Desktop/dev/redis/redis-6379
# 创建conf文件
huxing@localhost redis-6379 % touch redis.conf

 配置文件中几个关键的配置参数如下:

# 指定 redis 只接收来自于该IP地址的请求,如果不进行设置,那么将处理所有请求
bind 127.0.0.1

#是否开启保护模式,默认开启。要是配置里没有指定bind和密码。开启该参数后,redis只会本地进行访问,
拒绝外部访问。要是开启了密码和bind,可以开启。否则最好关闭,设置为no
protected-mode yes

#redis监听的端口号
port 6379

#是否在后台执行,yes:后台运行;no:不是后台运行
daemonize yes

#指定了记录日志的文件。空字符串的话,日志会打印到标准输出设备。后台运行的redis标准输出是/dev/null
logfile /usr/local/redis/var/redis.log

#是否打开记录syslog功能
# syslog-enabled no
 
#syslog的标识符。
# syslog-ident redis
 
#日志的来源、设备
# syslog-facility local0
 
#数据库的数量,默认使用的数据库是0。可以通过”SELECT 【数据库序号】“命令选择一个数据库,序号从0开始
databases 16

#指定本地数据库文件名,一般采用默认的 dump.rdb
dbfilename dump.rdb
 
#数据目录,数据库的写入会在这个目录。rdb、aof文件也会写在这个目录
dir /usr/local/redis/var

# 复制选项,slave复制对应的master。
# replicaof  

#如果master设置了requirepass,那么slave要连上master,需要有master的密码才行。masterauth就是用来配置master的密码,这样可以在连上master后进行认证。
# masterauth 

# 当master不可用,Sentinel会根据slave的优先级选举一个master。最低的优先级的slave,当选master。
而配置成0,永远不会被选举
replica-priority 100

#aof持久化策略的配置
#no表示不执行fsync,由操作系统保证数据同步到磁盘,速度最快
#always表示每次写入都执行fsync,以保证数据同步到磁盘
#everysec表示每秒执行一次fsync,可能会导致丢失这1s数据
# appendfsync always
appendfsync everysec
# appendfsync no

# redis6.0以后提供的多线程模式,注:这里的多线程模式是指的redis的连接池采用NIO的模式提供,而不是redis本身保存缓存采用多线程模式
# io-threads 4
3. 在docker中挂在redis容器

docker run 运行命令如下:

docker run --privileged=true -p 6379:6379 --name redis-6379 -v /Users/huxing/Desktop/dev/redis/redis-6379/conf/redis.conf:/etc/redis/redis.conf -v /Users/huxing/Desktop/dev/redis/redis-6379/log:/redis/log -v /Users/huxing/Desktop/dev/redis/redis-6379/data:/usr/local/redis/data -d redis:latest redis-server /etc/redis/redis.conf --appendonly yes 

# 命令拆解描述
docker run 
-d  后台运行容器,并返回容器ID;
# 容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限
--privileged=true 
# 指定端口映射,格式:主机(宿主)端口:容器端口
-p 6379:6379 
# 指定一个容器名称
--name redis-6379
# 映射配置文件
/Users/huxing/Desktop/dev/redis/redis-6379/conf/redis.conf:/etc/redis/redis.conf
# 映射日志目录
/Users/huxing/Desktop/dev/redis/redis-6379/log:/redis/log
# 映射数据目录
/Users/huxing/Desktop/dev/redis/redis-6379/data:/usr/local/redis/data
# 指定配置文件启动redis-server进程,latest镜像版本,docker images查看
redis-server /etc/redis/redis.conf
# 开启数据持久化
--appendonly yes 

运行成功以后检查redis是否启动正常:

# 进入docker容器
huxing@localhost dev % docker exec -it redis-6379 /bin/bash
# 进入redis client客户端
root@f4ec152b5007:/data# redis-cli
# 成功然后查询下当前的key
127.0.0.1:6379> keys *

同样的操作步骤启动一个端口为6380的redis服务.

4. 检查docker内的redis访问是否正常
# 尝试直接从宿主机系统访问
127.0.0.1:6379> redis-cli -h 127.0.0.1 -p 6380
Error: Server closed the connection
127.0.0.1:6379> exit;
Error: Server closed the connection

 这时候提示错误Error: Server closed the connection,原因是因为redis在docker容器内存在虚拟ip,需要通过绑定宿主机的ip地址来实现对应的访问请求

# 查看宿主机的IP地址
huxing@localhost data % docker inspect --format='{{.NetworkSettings.IPAddress}}' redis-6379
172.17.0.4
# 修改redis的配置文件,绑定ip
bind 127.0.0.1 172.17.0.4

修改成功以后,重启redis服务,访问顺利通过。

5. redis主从环境搭建
# 直接通过命令行处理
127.0.0.1:6380> slaveof 172.17.0.4 6379
OK
127.0.0.1:6380> keys *
1) "huxing"
# 测试在主从备份
127.0.0.1:6379> set hzz 123456
OK
127.0.0.1:6379> get hzz
"123456"
127.0.0.1:6380> get hzz
"123456"

 顺利的完成redis主从相关的配置信息。

三、redis哨兵机制配置

        首先部署3个docker容器内的redis服务,分别是redis-6379、redis-6380、redis-6381.

1. 配置redis-sentinel哨兵conf文件
# 哨兵响应端口号
port 26379
# 默认主节点 和 多少个哨兵认为主节点失效就重新选举
sentinel monitor mymaster 172.17.0.4 6379 2
# 哨兵也默认为一个redis支持连接
daemonize yes
2. 在docker容器内运行redis哨兵
# 操作命令
docker run --privileged=true -p 26379:26379 --name redis-26379 -v /Users/huxing/Desktop/dev/redis/redis-26379/conf/sentinel.conf:/etc/redis/sentinel.conf -d redis:latest redis-server /etc/redis/sentinel.conf --sentinel

 

 这里启动了3个哨兵,为了保证选举的可靠性。

现在来验证哨兵的有效性,先检查下目前的redis服务的主从情况,检查如下:

# 主服务
127.0.0.1:6379> info
# Replication
role:master
connected_slaves:2

# 从服务 - 6380
127.0.0.1:6380> info
# Replication
role:slave
master_host:172.17.0.4
master_port:6379

# 从服务 - 6381
127.0.0.1:6380> info
# Replication
role:slave
master_host:172.17.0.4
master_port:6379

 把6379服务停止以后,结果如下:

127.0.0.1:6380> info
# Replication
role:master
connected_slaves:1

 可以看到6380顺利的提升为主库,接下来测试节点恢复的自动同步

# 在6380增加了如下key
127.0.0.1:6380> keys *
1) "huxing"
2) "hzz"
3) "bbb"
4) "ccc"
5) "aaa"

# 重启6379服务
127.0.0.1:6379> keys *
1) "bbb"
2) "huxing"
3) "aaa"
4) "ccc"
5) "hzz"

 可以看到,已经同步过来了,重新启动的服务已经自动加载的主从群里面了。

四、redis-cluster集群模式搭建
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/361131.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号