dokcer部署Redis哨兵模式
架构图
- 哨兵的介绍
sentinel , 中文是哨兵。
哨兵是redis 集群架构中非常重要的一个组件,主要功能如下:
(1)集群监控:负责监控reidis master 和slave 进程是否正常工作;
(2)消息通知:如果某个redis实例有故障,那么哨兵负责发送消息作为报警通知给管理员;
(3)故障转移:如果master node挂掉了,会自动转移到slave node上;
(4)配置中心:如果故障转移发生了,通知client 客户端新的master 地址;
哨兵本身也是分布式的作为一个哨兵集群去运行,互相协同工作;
(1)故障转移时, 判断一个master node宕机了,需要大部分的哨兵都同意才行,涉及到了分布式选举的问题;
(2)即使部分哨兵节点挂了,哨兵集群还是能正常工作的,因为如果 一个作为高可用机制重要组成部分的故障转移系统本身是单点的,那就坑爹了;目前采用的是sentinel 2 版本,sentinel2 相对于 sentinel 1 来说,重写了很多代码,主要是让故障转移的机制和算法变得更加健壮和简单。 - 哨兵的核心知识
(1)哨兵至少需要3个实例,来保证自己的健壮性;
(2)哨兵+redis 主从的部署架构,是不会保证数据0丢失的,只能保证redis 集群的高可用性;
(3)对于哨兵+redis主从这种负责的部署架构,尽量在测试环境和生产环境,都进行充足的测试和演练
部署
准备docker环境
hostnamectl set-hostname l-gz-txy-lyy-uat-redis-master-001
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io -y
systemctl start docker
systemctl enable docker
三台虚拟机
10.180.3.125:7000 主节点
10.180.3.181:7000 从节点
10.180.3.90:7000 从节点
主节点创建redis data和conf目录
mkdir -p /data/redis/7000
mkdir /data/redis/7000/conf
mkdir /data/redis/7000/data
cd /data/redis/7000/conf
修改redis.conf主要配置
cat > /data/redis/7000/conf/redis.conf <<EOF
port 7000
masterauth "YACEheyuan@123"
requirepass "YACEheyuan@123"
protected-mode yes
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
#logfile "/var/redis.log"
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-timeout 1
repl-disable-tcp-nodelay no
replica-priority 100
maxmemory 1024000kb
maxmemory-policy volatile-lru
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 512mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
cluster-enabled no
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
EOF
配置sentinel
cat >/data/redis/7000/conf/sentinel.conf <<EOF
port 27000
daemonize yes
sentinel monitor mymaster 10.180.3.125 7000 1
sentinel auth-pass mymaster YACEheyuan@123
EOF
拷贝整个/data/redis目录到备节点
scp -r /data/redis root@10.180.3.181:/data/
主从节点都启动redis容器
cat >start.sh<<EOF
docker run -d -ti -p 7000:7000 -p 27000:27000 \
-v /data/redis/7000/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /data/redis/7000/conf/sentinel.conf:/usr/local/etc/redis/sentinel.conf \
-v /data/redis/7000/data:/data \
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime \
--privileged=true --restart always --name redis_7000 \
uhub.service.ucloud.cn/jackhe/redis-sentinel:latest redis-server /usr/local/etc/redis/redis.conf
EOF
chmod +x start.sh
sh start.sh
从节点进去容器,设置自己为从节点
docker exec -it redis_7000 bash
redis-cli -h 127.0.0.1 -c -p 7000 -a YACEheyuan@123
SLAVEOF 10.180.3.125 7000
分别进去主从节点的容器,启动sentinel
redis-sentinel /usr/local/etc/redis/sentinel.conf
输入info查看是否设置成功
启动完成后,关闭主节点redis容器,等待30秒查看备节点是否切换为主节点
启动回主节点redis容器,查看主节点是否已经作为备节点连接上,同时启动sentinel
部署逻辑
docker 启动redis——》从节点声明为slave——》启动sentinel
验证可用性
- 在master上set key
# Keyspace
127.0.0.1:7000> set a 1
OK
127.0.0.1:7000> get a
"1"
- 在任意slave上get
# Keyspace
127.0.0.1:7000> get a
"1"
- 脚本测试
from redis.sentinel import Sentinel
sentinel = Sentinel([('10.180.3.198', 27000)],
password='YACEheyuan@123',socket_timeout=0.5)
master = sentinel.discover_master("mymaster")
print(master)
压测
redis-benchmark -h 10.180.3.125 -p 27000 -a YACEheyuan@123 -c 100 -n 100000 -q
dokcer部署Redis哨兵模式的更多相关文章
- [Redis] Redis哨兵模式部署 - zz胖的博客
1. 部署Redis集群 redis的安装及配置参考[redis部署] 本文以创建一主二从的集群为例. 1.1 部署与配置 先创建sentinel目录,在该目录下创建8000,8001,8002三个以 ...
- Redis哨兵模式主从同步不可以绑定127.0.0.1或者0.0.0.0,不然无法进行主从同步
Redis哨兵模式主从同步不可以绑定127.0.0.1或者0.0.0.0,不然无法进行主从同步,一定要绑定内网IP,而对于跨机房的问题,可以使用iptables进行nat转发来解决.
- helm部署Redis哨兵集群
介绍 Redis Sentinel集群是由若干Sentinel节点组成的分布式集群,可以实现故障发现.故障自动转移.配置中心和客户端通知. 如下图: Redis Sentinel 故障转移过程: 从这 ...
- Redis哨兵模式大key优化
目前,Redis哨兵模式,内存资源有限,有很多key大于500M,性能待优化.需要迁移至Redis-cluster集群中. 涉及到的key如下: 0,hash,duser_record, ...
- Springboot2.x集成Redis哨兵模式
Springboot2.x集成Redis哨兵模式 说明 Redis哨兵模式是Redis高可用方案的一种实现方式,通过哨兵来自动实现故障转移,从而保证高可用. 准备条件 pom.xml中引入相关jar ...
- Spring Boot 入门(十):集成Redis哨兵模式,实现Mybatis二级缓存
本片文章续<Spring Boot 入门(九):集成Quartz定时任务>.本文主要基于redis实现了mybatis二级缓存.较redis缓存,mybaits自带缓存存在缺点(自行谷歌) ...
- Redis 哨兵模式(Sentinel)
上一篇我们介绍了 redis 主从节点之间的数据同步复制技术,通过一次全量复制和不间断的命令传播,可以达到主从节点数据同步备份的效果,一旦主节点宕机,我们可以选择一个工作正常的 slave 成为新的主 ...
- 搭建redis哨兵模式
搭建redis哨兵模式,一主两从三哨兵 1.从官网下载redis安装包:此处是redis-5.0.7.tar.gz 2.上传到目录 /utxt/soft 3.解压 4.cd /utxt/soft/ ...
- Redis哨兵模式的配置
绪论 现有三台设备,192.168.137.11.192.168.137.12和192.168.137.13,要求在三台设备上实现redis哨兵模式,其中192.168.137.11为master,其 ...
随机推荐
- Linux:sqlplus
[oracle@hb shell_test]$ cat echo_time #!/bin/sh 一.最简单的调用sqlplus sqlplus -S "sys/unimas as sysdb ...
- linux 让.net 控制台后台运行
命令 nohup 你的shell命令 & 例如 nohup dotnet MQTTClient.dll & 输入完成后,终端会有提示 这时再按下回车 回到shell命 ...
- 【Vulfocus解题系列】手把手教你使用Vulfocus公开靶场对Apache Log4j2远程命令执行漏洞复现
前言 关于这个漏洞,啥都不用说了,直接发车. 工具下载 JNDIExploit:https://github.com/0x727/JNDIExploit 复现过程 启动靶场环境 直接用vulfocus ...
- 【dva】如何监听异步请求是否完成(页面loading)
方案1.你可以在model里面操作 在model里面的state里面声明一个变量state,默认是false,effect函数执行开始就将其改为true,然后等call()然后结束后又将其改为fals ...
- Spring Cloud Eureka源码分析之三级缓存的设计原理及源码分析
Eureka Server 为了提供响应效率,提供了两层的缓存结构,将 Eureka Client 所需要的注册信息,直接存储在缓存结构中,实现原理如下图所示. 第一层缓存:readOnlyCache ...
- 【WP】【web】中学生CTF | web部分wp
$_GET 源码: <?php show_source(__FILE__); include 'config.php'; if(!isset($_GET['args'])){ die(); } ...
- 深刨显式锁ReentrantLock原理及其与内置锁的区别,以及读写锁ReentrantReadWriteLock使用场景
13.显示锁 在Java5.0之前,在协调对共享对象的访问时可以使用的机制只有synchronized和volatile.Java5.0增加了一种新的机制:ReentrantLock.与之前提到过的机 ...
- CF507A Amr and Music 题解
Content 有一个容量为 \(k\) 的背包.有 \(n\) 个物品,第 \(i\) 个物品的体积为 \(c_i\).请求出背包最多能够装下的物品的个数,并输出任意一个方案. 数据范围:\(1\l ...
- 【PS算法理论探讨二】 Photoshop中图层样式之 投影样式 算法原理初探讨。
接下来几篇文章我们将稍微简单的探索下PS中多种图层混合模式的算法内部原理,因为毕竟没有这方面的官方资料,所以很多方面也只是本人自己的探索和实践,有可能和实际的情况有着较大的差异. 在PS的实践中,图层 ...
- JS将时间戳转换为日期格式
function getDate(time){ var date =(new Date(parseInt(time))).toLocaleDateString() return date; } tim ...