以上就是给各位分享dockertoolbox的redis配置主从及哨兵模式保证高可用,其中也会对docker搭建redis哨兵模式进行解释,同时本文还将给你拓展(二)使用docker搭建redis主从
以上就是给各位分享docker toolbox的redis 配置主从及哨兵模式保证高可用,其中也会对docker搭建redis哨兵模式进行解释,同时本文还将给你拓展(二)使用 docker 搭建 redis 主从哨兵模式,并整合进 springboot 项目、(六) Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)、167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo、2020-05-29:redis 怎么保证高可用,高可用模式有那些?对比下优缺点?等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:- docker toolbox的redis 配置主从及哨兵模式保证高可用(docker搭建redis哨兵模式)
- (二)使用 docker 搭建 redis 主从哨兵模式,并整合进 springboot 项目
- (六) Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)
- 167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo
- 2020-05-29:redis 怎么保证高可用,高可用模式有那些?对比下优缺点?
docker toolbox的redis 配置主从及哨兵模式保证高可用(docker搭建redis哨兵模式)
redis 的缓存中间件安装方法,简单举例如下:
环境: docker toolbox
一 主从模式
1 搜索redis镜像
docker search redis
2 拉取镜像
docker pull redis:4.0
3 建立master容器
docker run -p 6379:6379 -v $pwd/data:/data -d redis redis-server --appendonly yes
4 建立slave容器
docker run --name redis-6380 -p 6380:6379 -d redis redis-server
docker run --name redis-6381 -p 6381:6379 -d redis redis-server
5 查看容器IP
docker inspect containerid(容器ID)
6 进入2台从容器,分别设置
docker exec -it containerid(容器ID)bash
redis-cli
设置分别主从命令
SLAVEOF 172.17.0.2 6379
二 Sentinel哨兵
1进入3台容器分别部署sentinel文件
docker exec -it containerid(容器ID)bash
2 建立文件
cd / && touch sentinel.conf && touch log.txt
安装vim
apt-get update
apt-get install vim
3修改sentinel.conf文件内容为
sentinel monitor mymaster 172.17.0.3 6379 1
#添加为后台运行
daemonize yes
#指定日志目录
logfile "/log.txt"
4 运行哨兵
redis-sentinel /sentinel.conf
5 验证
tail -f /log.txt
至此,部署完毕。
redis的原理及击穿,穿透,高可用等概念自行学习,这里不涉及。
(二)使用 docker 搭建 redis 主从哨兵模式,并整合进 springboot 项目
其实上一篇的思路做法是百度后参考各种博客文章搭的,但是发现最后还是有问题后,就直接去官网看文档了,于是在之前的熟悉的基础的下,重新搭了一遍,在基于容器网络的情况下,实现主备来回自动切换功能。
1,先上 redis 主备编排文件,master-slave/docker-compose.yml
version: "3"
services:
master:
image: redis:latest
container_name: redis-master
command: redis-server /usr/local/etc/redis/redis.conf
ports:
- "6379:6379"
volumes:
- "/root/redis/redis-master.conf:/usr/local/etc/redis/redis.conf"
networks:
- sentinel-master
slave1:
image: redis:latest
container_name: redis-slave-1
command: redis-server /usr/local/etc/redis/redis.conf
depends_on:
- master
ports:
- "6380:6379"
volumes:
- "/root/redis/redis-slave-1.conf:/usr/local/etc/redis/redis.conf"
networks:
- sentinel-master
slave2:
image: redis:latest
container_name: redis-slave-2
command: redis-server /usr/local/etc/redis/redis.conf
depends_on:
- master
ports:
- "6381:6379"
volumes:
- "/root/redis/redis-slave-2.conf:/usr/local/etc/redis/redis.conf"
networks:
- sentinel-master
networks:
sentinel-master:
这里还是使用配置文件,加多了两个配置项,用于宣布 ip 和端口给哨兵,防止哨兵取容器内网 ip
redis-master.conf
port 6379
requirepass 123456
# 防止重启后,作为从节点加入集群时认证失败
masterauth 123456
# 宣布给哨兵的ip,如不配置,哨兵会取容器内部ip,这样客户端就无法访问了
slave-announce-ip 192.168.1.254
# 宣布给哨兵的端口
slave-announce-port 6379
redis-slave-1.conf
port 6379
requirepass 123456
slaveof 192.168.1.254 6379
masterauth 123456
slave-announce-ip 192.168.1.254
slave-announce-port 6380
redis-slave-2.conf
port 6379
requirepass 123456
slaveof 192.168.1.254 6379
masterauth 123456
slave-announce-ip 192.168.1.254
slave-announce-port 6381
2,哨兵编排文件,sentinel/docker-compose.yml
# Example sentinel.conf can be downloaded from http://download.redis.io/redis-stable/sentinel.conf
version: "3"
services:
sentinel1:
image: redis:latest
container_name: redis-sentinel-1
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
ports:
- "26379:26379"
volumes:
- "/root/redis/sentinel1.conf:/usr/local/etc/redis/sentinel.conf"
sentinel2:
image: redis:latest
container_name: redis-sentinel-2
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
ports:
- "26380:26379"
volumes:
- "/root/redis/sentinel2.conf:/usr/local/etc/redis/sentinel.conf"
sentinel3:
image: redis:latest
container_name: redis-sentinel-3
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
ports:
- "26381:26379"
volumes:
- "/root/redis/sentinel3.conf:/usr/local/etc/redis/sentinel.conf"
networks:
default:
external:
name: "master-slave_sentinel-master"
sentinel1.conf,sentinel2.conf, sentinel3.conf 初始的内容完全一样,只是会在哨兵启动重写会变得不一样,这个是由哨兵自动完成的
port 26379
dir /tmp
sentinel monitor mymaster 192.168.1.254 6379 2
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 10000
sentinel deny-scripts-reconfig yes
3,springboot 整合,及测试程序还是一样
引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
application.yml
spring:
redis:
sentinel:
master: mymaster
nodes:
- "192.168.1.254:26379"
- "192.168.1.254:26380"
- "192.168.1.254:26381"
host: 192.168.1.254
password: 123456
jedis:
pool:
min-idle: 8
max-active: 100
max-wait: 3000
max-idle: 100
测试程序,3 个线程模拟并发插入数据,一共 3000 条
@Test
public void testRedisMasterSlave() throws Exception {
ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
ExecutorService es = Executors.newFixedThreadPool(3);
for (int j = 0; j < 3; j++) {
es.submit(() -> {
for (int i = 0; i < 1000; i++) {
try {
String threadName = Thread.currentThread().getName();
valueOperations.set(threadName + i, i + "", 30L, TimeUnit.MINUTES);
TimeUnit.MILLISECONDS.sleep(200L);
} catch (InterruptedException e) {
System.out.println("error: " + e.getMessage());
}
}
});
}
es.shutdown();
es.awaitTermination(30L, TimeUnit.MINUTES);
}
准备完成,分别启动 redis( master-slave/docker-compose.yml),哨兵(sentinel/docker-compose.yml)
执行 junit 测试程序,并在中途停掉 redis-master 节点
2019-10-06 21:50:24.199 INFO 128256 --- [pool-1-thread-1] io.lettuce.core.EpollProvider : Starting without optional epoll library
2019-10-06 21:50:24.201 INFO 128256 --- [pool-1-thread-1] io.lettuce.core.KqueueProvider : Starting without optional kqueue library
2019-10-06 21:51:11.141 INFO 128256 --- [xecutorLoop-1-6] i.l.core.protocol.ConnectionWatchdog : Reconnecting, last destination was /192.168.1.254:6379
2019-10-06 21:51:13.161 WARN 128256 --- [ioEventLoop-4-4] i.l.core.protocol.ConnectionWatchdog : Cannot reconnect: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: /192.168.1.254:6379
2019-10-06 21:51:17.440 INFO 128256 --- [xecutorLoop-1-7] i.l.core.protocol.ConnectionWatchdog : Reconnecting, last destination was 192.168.1.254:6379
2019-10-06 21:51:19.450 WARN 128256 --- [ioEventLoop-4-2] i.l.core.protocol.ConnectionWatchdog : Cannot reconnect: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: /192.168.1.254:6379
2019-10-06 21:51:23.741 INFO 128256 --- [xecutorLoop-1-8] i.l.core.protocol.ConnectionWatchdog : Reconnecting, last destination was 192.168.1.254:6379
2019-10-06 21:51:25.748 WARN 128256 --- [ioEventLoop-4-8] i.l.core.protocol.ConnectionWatchdog : Cannot reconnect: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: /192.168.1.254:6379
2019-10-06 21:51:30.840 INFO 128256 --- [xecutorLoop-1-3] i.l.core.protocol.ConnectionWatchdog : Reconnecting, last destination was 192.168.1.254:6379
2019-10-06 21:51:32.848 WARN 128256 --- [ioEventLoop-4-6] i.l.core.protocol.ConnectionWatchdog : Cannot reconnect: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: /192.168.1.254:6379
2019-10-06 21:51:38.041 INFO 128256 --- [xecutorLoop-1-7] i.l.core.protocol.ConnectionWatchdog : Reconnecting, last destination was 192.168.1.254:6379
2019-10-06 21:51:40.050 WARN 128256 --- [ioEventLoop-4-2] i.l.core.protocol.ConnectionWatchdog : Cannot reconnect: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: /192.168.1.254:6379
2019-10-06 21:51:44.241 INFO 128256 --- [xecutorLoop-1-2] i.l.core.protocol.ConnectionWatchdog : Reconnecting, last destination was 192.168.1.254:6379
2019-10-06 21:51:44.248 INFO 128256 --- [ioEventLoop-4-4] i.l.core.protocol.ReconnectionHandler : Reconnected to 192.168.1.254:6380
控制台打印的消息由 6379 端口,切换到了 6380 端口,证明哨兵已经完成主备切换了。
接下来再把 redis-master 节点重新启动,查看容器启动日志
2019-10-05T19:05:51.594625998Z 1:S 05 Oct 2019 19:05:51.594 * Before turning into a replica, using my master parameters to synthesize a cached master: I may be able to synchronize with the new master with just a partial transfer.
2019-10-05T19:05:51.594679191Z 1:S 05 Oct 2019 19:05:51.594 * REPLICAOF 192.168.1.254:6380 enabled (user request from ''id=4 addr=172.23.0.1:43460 fd=9 name=sentinel-36a0e6b8-cmd age=10 idle=0 flags=x db=0 sub=0 psub=0 multi=3 qbuf=153 qbuf-free=32615 obl=36 oll=0 omem=0 events=r cmd=exec'')
2019-10-05T19:05:51.594683850Z 1:S 05 Oct 2019 19:05:51.594 # CONFIG REWRITE failed: Permission denied
2019-10-05T19:05:51.961959923Z 1:S 05 Oct 2019 19:05:51.961 * Connecting to MASTER 192.168.1.254:6380
2019-10-05T19:05:51.961989715Z 1:S 05 Oct 2019 19:05:51.961 * MASTER <-> REPLICA sync started
2019-10-05T19:05:51.961995348Z 1:S 05 Oct 2019 19:05:51.961 * Non blocking connect for SYNC fired the event.
2019-10-05T19:05:51.962964412Z 1:S 05 Oct 2019 19:05:51.962 * Master replied to PING, replication can continue...
2019-10-05T19:05:51.963959151Z 1:S 05 Oct 2019 19:05:51.963 * Trying a partial resynchronization (request d0c6a5694d17b9337656d0ef009aa580e0743431:1).
2019-10-05T19:05:51.967159605Z 1:S 05 Oct 2019 19:05:51.966 * Full resync from master: bfcd3bb8bbfb2393ded951443e9e2100ed490548:133911
2019-10-05T19:05:51.967200123Z 1:S 05 Oct 2019 19:05:51.966 * Discarding previously cached master state.
2019-10-05T19:05:52.064097244Z 1:S 05 Oct 2019 19:05:52.062 * MASTER <-> REPLICA sync: receiving 51791 bytes from master
2019-10-05T19:05:52.064114578Z 1:S 05 Oct 2019 19:05:52.062 * MASTER <-> REPLICA sync: Flushing old data
2019-10-05T19:05:52.064124761Z 1:S 05 Oct 2019 19:05:52.062 * MASTER <-> REPLICA sync: Loading DB in memory
2019-10-05T19:05:52.064128120Z 1:S 05 Oct 2019 19:05:52.063 * MASTER <-> REPLICA sync: Finished with success
发现节点已经主动找到当前 master 节点 192.168.1.254:6380,并进行全量复制了。
再进入哨兵节点查看 slave 节点信息
127.0.0.1:26379> sentinel slaves mymaster
1) 1) "name"
2) "192.168.1.254:6379"
3) "ip"
4) "192.168.1.254"
5) "port"
6) "6379"
7) "runid"
8) "d4d7ce3f1cc4d5c6cca2345318e4dcfebe12fcce"
9) "flags"
10) "slave"
11) "link-pending-commands"
12) "0"
13) "link-refcount"
14) "1"
15) "last-ping-sent"
16) "0"
17) "last-ok-ping-reply"
18) "872"
19) "last-ping-reply"
20) "872"
21) "down-after-milliseconds"
22) "30000"
23) "info-refresh"
24) "2519"
25) "role-reported"
26) "slave"
27) "role-reported-time"
28) "5867007"
29) "master-link-down-time"
30) "0"
31) "master-link-status"
32) "ok"
33) "master-host"
34) "192.168.1.254"
35) "master-port"
36) "6380"
37) "slave-priority"
38) "100"
39) "slave-repl-offset"
40) "1526467"
2) 1) "name"
2) "192.168.1.254:6381"
3) "ip"
4) "192.168.1.254"
5) "port"
6) "6381"
7) "runid"
8) "2fecd472915d77b55d230c339f5982491ee55d69"
9) "flags"
10) "slave"
11) "link-pending-commands"
12) "0"
13) "link-refcount"
14) "1"
15) "last-ping-sent"
16) "0"
17) "last-ok-ping-reply"
18) "872"
19) "last-ping-reply"
20) "872"
21) "down-after-milliseconds"
22) "30000"
23) "info-refresh"
24) "6520"
25) "role-reported"
26) "slave"
27) "role-reported-time"
28) "5940478"
29) "master-link-down-time"
30) "0"
31) "master-link-status"
32) "ok"
33) "master-host"
34) "192.168.1.254"
35) "master-port"
36) "6380"
37) "slave-priority"
38) "100"
39) "slave-repl-offset"
40) "1525639"
发现 6379 节点也已经加入到 slave 节点了,到此哨兵模式高可用方案就算完成了。
(六) Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)
参考并感谢
- 官方文档 https://hub.docker.com/_/redis
- GitHub https://github.com/antirez/redis
- happyJared https://blog.csdn.net/qq_28804275/article/details/80938659
下载 redis 镜像 (不带 tag 标签则表示下载 latest 版本)
docker pull redis
从 github 下载最新的 redis.conf, 注意重要参数
# 端口 port 6379 # 密码 requirepass Mypwd@123456 # 支持数据持久化 appendonly yes # 关闭守护进程 daemonize no # 默认多少个数据库 databases 16 # 从库时需要增加主库配置 # 主库密码(一个集群密码需要保持一致) masterauth Mypwd@123456 # 主库地址和端口 slaveof 172.17.0.1 6379
启动 redis6379 主库
docker run -d \ -p 6379:6379 \ --name redis6379 \ --mount type=bind,source=/var/docker/configs/redis/6379/redis.conf,target=/usr/local/etc/redis/redis.conf \ --mount type=bind,source=/var/docker/datas/redis/6379,target=/data \ --restart always \ redis:latest \ redis-server /usr/local/etc/redis/redis.conf
启动 redis6380 从库 (需要修改 redis.conf 的 port 和从服务器相关配置)
docker run -d \ -p 6380:6380 \ --name redis6380 \ --mount type=bind,source=/var/docker/configs/redis/6380/redis.conf,target=/usr/local/etc/redis/redis.conf \ --mount type=bind,source=/var/docker/datas/redis/6380,target=/data \ --restart always \ redis:latest \ redis-server /usr/local/etc/redis/redis.conf
启动 redis6381 从库 (需要修改 redis.conf 的 port 和从服务器相关配置)
docker run -d \ -p 6381:6381 \ --name redis6381 \ --mount type=bind,source=/var/docker/configs/redis/6381/redis.conf,target=/usr/local/etc/redis/redis.conf \ --mount type=bind,source=/var/docker/datas/redis/6381,target=/data \ --restart always \ redis:latest \ redis-server /usr/local/etc/redis/redis.conf
从 github 下载最新的 sentinel.conf, 注意重要参数
# 端口 port 26379 # 关闭守护进程 daemonize no # 设定监听的redis集群的名称(mymaster)+IP+主库端口+最少从库数量 sentinel monitor mymaster 172.17.0.1 6379 2 # 设定监听的redis集群的密码(集群中主库和从库密码需要保持一致) sentinel auth-pass mymaster Mypwd@123456
开放 redis 和 sentinel 端口并立即生效
firewall-cmd --zone=public --add-port=6379/tcp --permanent firewall-cmd --zone=public --add-port=6380/tcp --permanent firewall-cmd --zone=public --add-port=6381/tcp --permanent firewall-cmd --zone=public --add-port=26379/tcp --permanent firewall-cmd --zone=public --add-port=26380/tcp --permanent firewall-cmd --zone=public --add-port=26381/tcp --permanent firewall-cmd --reload
不修改 redis.conf, 通过命令方式使从库加入集群
docker exec -it redis6380 bash redis-cli -a Mypwd@123456 -p 6380 slaveof 172.17.0.1 6379 config set masterauth Mypwd@123456
docker exec -it redis6381 bash redis-cli -a Mypwd@123456 -p 6381 slaveof 172.17.0.1 6379 config set masterauth Mypwd@123456
主容器查询集群状态
docker exec -it redis6379 bash redis-cli -a Mypwd@123456 -p 6379 info Replication
查看哨兵监控情况 (不同的哨兵登录不同的容器使用客户端 26379 26380 26381)
redis-cli -p 26379 # 查看集群主库情况 sentinel master mymaster # 查看集群从库情况 sentinel slaves mymaster
从库退出集群并保持原先数据 (通过 bash 登录从库容器后,使用 redis-cli 客户端)
slaveof no one
验证哨兵模式 + 集群是否高可用 (通过 bash 登录从库容器后,使用 redis-cli 客户端)
redis-cli -a Mypwd@123456 -p 6379 DEBUG sleep 60
PS: 启动容器之前,需要创建好对应的宿主机的文件目录,宿主机缺少文件会导致容器启动失败
《(六) Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)》CSDN 地址:https://blog.csdn.net/madmarszff/article/details/100902662
《(六) Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)》博客园地址:https://www.cnblogs.com/godzff/p/11530290.html
《(六) Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)》简书地址:
167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo
background : 最近为小伙伴们筹划docker系列的技术分享,研究了一会docker相关技术, 在此记录一下构建nginx容器时候的坑
1.nginx服务器根目录问题
docker 官方镜像提供的nginx基于debian/jessie平台,其文件结构和ubuntu中的nginx中并不相同
eg:
run一个niginx容器
<span>//80端口被占用,so...</span> $ sudo docker run <span>-it</span><span>-p</span><span>800</span>:<span>800</span> nginx $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES <span>1801</span>a32aab54 nginx <span>"nginx -g ''daemon off"</span><span>2</span> minutes ago Up <span>2</span> minutes <span>80</span>/tcp, <span>443</span>/tcp, <span>0.0</span><span>.0</span><span>.0</span>:<span>800</span><span>-></span><span>800</span>/tcp berserk_kare
进入容器内部
<span>$ </span>sudo docker exec -it <span>1801</span>a32aab54 /bin/bash root<span>@1801a32aab54</span><span>:/</span><span># </span>
查看nginx目录
<span># cd /etc/nginx/</span> conf<span>.d</span>/ koi-utf mime<span>.types</span> nginx<span>.conf</span> uwsgi_params fastcgi_params koi-win modules/ scgi_params win-utf
可以看到不仅没有熟悉的 /sites-available,也没有 /sites-enabled
继续查看nginx配置
<span># cat /conf.d/default.conf</span><span>server</span> { listen <span>80</span>; server_name localhost; <span>#charset koi8-r;</span><span>#access_log /var/log/nginx/log/host.access.log main;</span> location / { root /usr/share/nginx/html; <span>index</span><span>index</span>.html <span>index</span>.htm; } <span>#error_page 404 /404.html;</span><span># redirect server error pages to the static page /50x.html</span><span>#</span> error_page <span>500</span><span>502</span><span>503</span><span>504</span> /<span>50</span>x.html; location = /<span>50</span>x.html { root /usr/share/nginx/html; } <span>#...省略php-fpm配置,好长..</span> }
根目录配置: root /usr/share/nginx/html;
测试
<span># cd /usr/share/nginx/html</span><span># touch index.html</span><span># echo "test nginx in docker" >index.html</span>
php-fpm配置相关
'').addClass(''pre-numbering'').hide(); $(this).addClass(''has-numbering'').parent().append($numbering); for (i = 1; i '').text(i)); }; $numbering.fadeIn(1700); }); });以上就介绍了167 docker docker构建nginx容器系列问题,包括了docker,nginx方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
2020-05-29:redis 怎么保证高可用,高可用模式有那些?对比下优缺点?
Redis 高可用架构如下:
1.Redis Sentinel 集群 + 内网 DNS + 自定义脚本。
2.Redis Sentinel 集群 + VIP + 自定义脚本。
3. 封装客户端直连 Redis Sentinel 端口。
4.JedisSentinelPool,适合 Java。
5.PHP 基于 phpredis 自行封装。
6.Redis Sentinel 集群 + Keepalived/Haproxy。
7.Redis M/S + Keepalived。
8.Redis Cluster。
9.Twemproxy。
10.Codis。
1.Redis Sentinel 集群 + 内网 DNS + 自定义脚本。
优点:
秒级切换;
脚本自定义,架构可控;
对应用透明。
缺点:
维护成本略高;
依赖 DNS,存在解析延时;
Sentinel 模式存在短时间的服务不可用。
2.Redis Sentinel 集群 + VIP + 自定义脚本。
优点:
秒级切换;
脚本自定义,架构可控;
对应用透明。
缺点:
维护成本略高;
Sentinel 模式存在短时间的服务不可用。
3. 封装客户端直连 Redis Sentinel 端口。
优点:
服务探测故障及时;
DBA 维护成本低。
缺点:
依赖客户端支持 Sentinel;
Sentinel 服务器需要开放访问权限;
对应用有侵入性。
4.JedisSentinelPool,适合 Java。
5.PHP 基于 phpredis 自行封装。
6.Redis Sentinel 集群 + Keepalived/Haproxy。
优点:
秒级切换;
对应用透明。
缺点:
维护成本高;
存在脑裂;
Sentinel 模式存在短时间的服务不可用。
7.Redis M/S + Keepalived。
优点:
秒级切换;
对应用透明;
部署简单,维护成本低。
缺点:
需要脚本实现切换功能;
存在脑裂。
8.Redis Cluster。
优点:
组件 all-in-box,部署简单,节约机器资源;
性能比 proxy 模式好;
自动故障转移、Slot 迁移中数据可用;
官方原生集群方案,更新与支持有保障。
缺点:
架构比较新,最佳实践较少;
多键操作支持有限(驱动可以曲线救国);
为了性能提升,客户端需要缓存路由表信息;
节点发现、reshard 操作不够自动化。
9.Twemproxy。
优点:
开发简单,对应用几乎透明;
历史悠久,方案成熟。
缺点:
代理影响性能;
LVS 和 Twemproxy 会有节点性能瓶颈;
Redis 扩容非常麻烦;
Twitter 内部已放弃使用该方案,新使用的架构未开源。
10.Codis。
优点:
开发简单,对应用几乎透明;
性能比 Twemproxy 好;
有图形化界面,扩容容易,运维方便。
缺点:
代理依旧影响性能;
组件过多,需要很多机器资源;
修改了 Redis 代码,导致和官方无法同步,新特性跟进缓慢;
开发团队准备主推基于 Redis 改造的 reborndb。
评论
今天的关于docker toolbox的redis 配置主从及哨兵模式保证高可用和docker搭建redis哨兵模式的分享已经结束,谢谢您的关注,如果想了解更多关于(二)使用 docker 搭建 redis 主从哨兵模式,并整合进 springboot 项目、(六) Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)、167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo、2020-05-29:redis 怎么保证高可用,高可用模式有那些?对比下优缺点?的相关知识,请在本站进行查询。
本文标签: