当前位置:首页 > 技术分析 > 正文内容

Docker实战之Redis集群搭建

ruisui8819小时前技术分析2

Redis集群搭建主要有Sentinel(哨兵)、Cluster(分片)两种模式。哨兵模式就是利用哨兵监听Redis的master节点,若master宕机则从集群中选举出其它节点作为master继续工作。Cluster模式,实现了Redis的分布式存储,对数据进行分片存储,每个redis节点存储的数据不同,cluster采用哈希槽slot来处理数据和实例之间的关系,一个集群有16384个slot,每个节点负责的slot数=16384/节点数

redis分片集群

在三台主机做集群,3个master,3个slave。实战中最少6台服务器,3个master节点和3个slave节点,由于资源有限,采用三台独立主机来做案例。

1、在三台服务器分别执行一下命令,创建配置文件目录

$ mkdir -p /redis/node-1/conf
$ mkdir -p /redis/node-2/conf$ mkdir -p /redis/node-3/conf
$ mkdir -p /redis/node-4/conf$ mkdir -p /redis/node-5/conf
$ mkdir -p /redis/node-6/conf

2、在配置文件目录写入配置信息,shell脚本批量写入

$ for node in $(seq 1 2); \
do \
touch /redis/node-${node}/conf/redis.conf
cat << EOF >/redis/node-${node}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 173.30.0.1${node}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
$ for node in $(seq 3 4); \
do \
touch /redis/node-${node}/conf/redis.conf
cat << EOF >/redis/node-${node}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 173.30.0.1${node}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
$ for node in $(seq 5 6); \
do \
touch /redis/node-${node}/conf/redis.conf
cat << EOF >/redis/node-${node}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 173.30.0.1${node}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done

3、在3台服务器分别启动6个redis服务

(1) 第一台服务器创建并启动2个redis容器,分别是redis-1,redis-2

$ docker run -p 63791:6379 -p 16379:16379 --name redis-1 \
-v /redis/node-1/data:/data \
-v /redis/node-1/conf/redis.conf:/etc/redis/redis.conf \
--restart always \
-d --net microservice-net --ip 173.30.0.11 redis:5.0.10-alpine3.13 \
redis-server /etc/redis/redis.conf
$ docker run -p 63792:6379 -p 26379:16379 \
-v /redis/node-2/data:/data \
-v /redis/node-2/conf/redis.conf:/etc/redis/redis.conf \
--name redis-2 \
--restart always \
-d --net microservice-net --ip 173.30.0.12 \
redis:5.0.10-alpine3.13 redis-server /etc/redis/redis.conf

(2) 第二台服务器创建并启动2个redis容器,分别是redis-3,redis-4

$ docker run -p 63793:6379 -p 36379:16379 \
-v /redis/node-3/data:/data \
-v /redis/node-3/conf/redis.conf:/etc/redis/redis.conf \
--name redis-3 \
--restart always \
-d --net microservice-net --ip 173.30.0.13 \
redis:5.0.10-alpine3.13 redis-server /etc/redis/redis.conf

$ docker run -p 63794:6379 -p 46379:16379 \
-v /redis/node-4/data:/data \
-v /redis/node-4/conf/redis.conf:/etc/redis/redis.conf \
--name redis-4 \
--restart always \
-d --net microservice-net --ip 173.30.0.14 \
redis:5.0.10-alpine3.13 redis-server /etc/redis/redis.conf

(3) 第三台服务器创建并启动2个redis容器,分别是redis-5,redis-6

$ docker run -p 63795:6379 -p 56379:16379 \
-v /redis/node-5/data:/data \
-v /redis/node-5/conf/redis.conf:/etc/redis/redis.conf \
--name redis-5 \
--restart always \
-d --net microservice-net --ip 173.30.0.15 \
redis:5.0.10-alpine3.13 redis-server /etc/redis/redis.conf

$ docker run -p 63796:6379 -p 16376:16379 \
-v /redis/node-6/data:/data \
-v /redis/node-6/conf/redis.conf:/etc/redis/redis.conf \
--name redis-6 \
--restart always \
-d --net microservice-net --ip 173.30.0.16 \
redis:5.0.10-alpine3.13 redis-server /etc/redis/redis.conf

4、进入第一个节点redis-1容器,创建集群

$ docker exec -it redis-1 /bin/sh

创建集群,并为每个master节点创建一个salve节点

$ docker exec -it redis-1 /bin/shredis-cli --cluster create 173.30.0.11:6379 173.30.0.12:6379 173.30.0.13:6379 \
173.30.0.14:6379 173.30.0.15:6379 173.30.0.16:6379 --cluster-replicas 1

5、设置主节点,1、3、5节点设为主节点,主备不要在同一台服务器,防止服务器宕机后主备都不可用,如果主备都是独立服务器,不用考虑此问题

$ redis-cli --cluster create 173.30.0.11:6379 173.30.0.13:6379 173.30.0.15:6379

6、添加slave节点

slave节点绑定到master节点,需要master-id

查看节点信息

$ cluster nodes

slave绑定到master

node1->node4, node3->node6, node5->node2

$ redis-cli --cluster add-node 173.30.0.14:6379 173.30.0.11:6379 --cluster-slave --cluster-master-id 6260af5d88db48c892c69646229fdbb4410ae7d7

$ redis-cli --cluster add-node 173.30.0.16:6379 173.30.0.13:6379 --cluster-slave --cluster-master-id 705110bc6a1d432f4274ab4726751c6d079b36a9

$ redis-cli --cluster add-node 173.30.0.12:6379 173.30.0.15:6379 --cluster-slave --cluster-master-id 6ded0048f1af943e6e526a4243a6129e27232372

7、访问集群

可以进入任意节点访问集群

$ redis-cli -c


更多实战部署会陆续推出,请关注

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/4053.html

分享给朋友:

“Docker实战之Redis集群搭建” 的相关文章

云时代,Linux和容器为王,微软推出自己的发行版Azure Linux

看到今天的微软,其前CEO史蒂夫.鲍尔默肯定会后悔在15年前说过的一句话“Linux 是一种癌症(Linux is a cancer)”。 因为今天的微软不光靠Linux赚的钵满盆满,而且还发行了自己的Linux发行版Azure Linux。为了提高其云服务和容器化服务水平,其Azure公有云平台提...

面试官:聊聊你知道的Vue与React的区别

最近面到很多大公司的时候,小编都会碰到一个很尴尬的问题,很多大公司的技术栈都是React,但是小编学的是Vue,其实从本质上来说两者都是比较优秀的前端框架,所以有些面试官会问到Vue和React的区别。小编认真整理了一些自己所知道的Vue和React的区别,给大家分享分享。1. 模板语法 vs JS...

gitlab常用命令大全

GitLab常用命令大全GitLab是一个基于Git的Web平台,它不仅提供代码托管,还集成了持续集成/持续交付(CI/CD)、代码审查、问题追踪等功能。在日常使用GitLab的过程中,我们常常需要使用一系列命令来管理代码仓库、处理分支和标签等。以下是GitLab常用的Git命令大全,并附上详细解释...

程序员开发必会之git常用命令,git配置、拉取、提交、分支管理

整理日常开发过程中经常使用的git命令![送心]git配置SSH刚进入项目开发中,我们首先需要配置git的config、配置SSH方式拉取代码,以后就免输入账号密码了!# 按顺序执行 git config --global user.name "自己的账号" git config -...

美国民众负债累累 但今年假期消费者支出仍将创下新高

智通财经APP获悉,在迎接假期之际,许多美国人已经背负了创纪录的信用卡债务。然而,今年假期消费者支出仍将创下新高。根据美国零售联合会(NRF)上周发布的报告,预计今年11月1日至12月31日期间的消费总额将达到创纪录的9795亿至9890亿美元之间。NRF首席经济学家Jack Kleinhenz表示...

el-table内容\n换行解决办法

问题请求到的数据带有换行符 '\n'但页面展示时不换行statusRemark: "\"1、按期完成计划且准确率100%,得100分;\n2、各项目每延误1天,扣1分;每失误1次或者员工投诉1次,扣3分,失误层面达到公司级影响较大的,该项绩效分数为0\"\n&...