前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >docker搭建redis集群

docker搭建redis集群

作者头像
小土豆Yuki
发布2020-06-15 17:21:21
1.1K0
发布2020-06-15 17:21:21
举报
文章被收录于专栏:洁癖是一只狗洁癖是一只狗

今天我们使用docker搭建redis集群,docker我们就不详细介绍了,都是些简单命令,有机会在写几篇docker的文章,只要你按照我的的步骤搞,redis集群就很容易搭建成功。

一:搜索redis镜像,拉去镜像

代码语言:javascript
复制
wangxuandeMacBook-Air:redis wangxuan$ docker search redis
NAME                             DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
redis                            Redis is an open source key-value store that…   7393                [OK]
bitnami/redis                    Bitnami Redis Docker Image                      128                                     [OK]
sameersbn/redis                                                                  77                                      [OK]
grokzen/redis-cluster            Redis cluster 3.0, 3.2, 4.0 & 5.0               58
rediscommander/redis-commander   Alpine image for redis-commander - Redis man…   31                                      [OK]
kubeguide/redis-master           redis-master with "Hello World!"                30
redislabs/redis                  Clustered in-memory database engine compatib…   23
oliver006/redis_exporter          Prometheus Exporter for Redis Metrics. Supp…   18

可以看到目前最新版本是5.0,但是我们使用4.0,往往新的版本并不一定好。

二:拉取镜像

代码语言:javascript
复制
wangxuandeMacBook-Air:redis wangxuan$ docker pull redis:4.0
4.0: Pulling from library/redis
b8f262c62ec6: Pull complete
93789b5343a5: Pull complete
49cdbb315637: Pull complete
e244975d5eb1: Pull complete
25dca704d939: Pull complete
db11ecc9cf34: Pull complete
Digest: sha256:615b872e3af387206b62ffe66c1052f1653ed31b3afcfaa292a9244c92f2007a
Status: Downloaded newer image for redis:4.0

三:配置redis集群

配置集群之前,我们必须下载一个配置文件redis.conf,直接使用

代码语言:javascript
复制
wget -c http://download.redis.io/redis-stable/redis.conf

下载,我们先介绍一下其中的关键的配置参数(今天我们配置的是一主两从的集群)

主配置文件.redis-master.conf

代码语言:javascript
复制
daemonize yes
pidfile /var/run/redis.pid
bind 0.0.0.0

从配置文件redis-slaveof1.conf ,redis-slaveof2.conf

代码语言:javascript
复制
daemonize yes
pidfile /var/run/redis.pid
slaveof master 6379
bind 0.0.0.0

我们看到slaveof master 6379 这里使用master 有两个原因

  1. docker容器重启之后,ip地址会发生变化,导致访问失效问题
  2. 还有安全问题的考虑

这里我们也解释一下bind的这个参数

默认情况下,如果没有指定bind配置指令,则 Redis 监听来自服务器上所有可用网络接口的连接。可以使用bind配置指令来监听一个或多个选定的接口,在bind后拼接一个或多个 IP 地址即可。例如:

代码语言:javascript
复制
bind 192.168.1.100 10.0.0.1
bind 127.0.0.1 ::1

这里我们把配置的配置bind 127.0.0.1 改成bind 0.0.0.0,不然我们的容器将会访问不通。

三:启动redis集群

代码语言:javascript
复制
docker run -it -v /Users/wangxuan/redis/redis-master.conf:/usr/local/bin/redis.conf --name redis-master redis:4.0 /bin/bash
docker run -it -v /Users/wangxuan/redis/redis-slaveof1.conf:/usr/local/bin/redis.conf --name redis-slave1 --link redis-master:master redis:4.0 /bin/bash
docker run -it -v /Users/wangxuan/redis/redis-slaveof2.conf:/usr/local/bin/redis.conf --name redis-slave2 --link redis-master:master redis:4.0 /bin/bash

这里我们看-v这个参数,这个是因为我们在容器里面修改文件往往不方便,一般容器是没有vim命令,需要我们自行下载,所以-v参数用于将宿主机上的某个目录挂载到容器中,我们在我们的机器上直接可以修改配置文件。

上述命令中使用--link redis-master:master参数,前面提到的redis-slaveof1.conf配置文件中slaveof配置项,这里使用了一个master作为别名,其效果和使用IP一样(IP地址在/etc/host文件中)

现在我们先运行主redis容器

代码语言:javascript
复制
wangxuandeMacBook-Air:redis wangxuan$ docker run -it -v /Users/wangxuan/redis/redis-master.conf:/usr/local/bin/redis.conf --name redis-master redis:4.0 /bin/bash
root@9874f9ec818c:/data# redis-server /usr/local/bin/redis.conf
root@9874f9ec818c:/data# redis-cli
127.0.0.1:6379> info
....
# Replication
role:master
connected_slaves:0
master_replid:b435db2264d29c74ddfa6d9b84572f343c03d770
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
.....

此时我们看到主redis的从节点是0

我们在启动一个从redis容器

代码语言:javascript
复制
wangxuandeMacBook-Air:redis wangxuan$ docker run -it -v /Users/wangxuan/redis/redis-slaveof1.conf:/usr/local/bin/redis.conf --name redis-slave1 --link redis-master:master redis:4.0 /bin/bash
root@8469ebae122c:/data# redis-server /usr/local/bin/redis.conf
root@8469ebae122c:/data# redis-cli
127.0.0.1:6379> info
# Replication
role:slave
master_host:master
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:14
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:1012f0b993083d3ac250a634997ce86827acd939
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:14
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:14

发现此时从节点的角色role变成了slave. master_host是master

同理在启动另外一个从节点

代码语言:javascript
复制
wangxuandeMacBook-Air:~ wangxuan$ docker run -it -v /Users/wangxuan/redis/redis-slaveof2.conf:/usr/local/bin/redis.conf --name redis-slave2 --link redis-master:master redis:4.0 /bin/bash
root@8d31889d7f46:/data# redis-server /usr/local/bin/redis.conf
root@8d31889d7f46:/data# redis-cli
127.0.0.1:6379> info
...
# Replication
role:slave
master_host:master
master_port:6379
master_link_status:up
master_last_io_seconds_ago:4
master_sync_in_progress:0
slave_repl_offset:308
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:1012f0b993083d3ac250a634997ce86827acd939
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:308
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:295
repl_backlog_histlen:14
...

我们现在在看一下主节点的信息

代码语言:javascript
复制
127.0.0.1:6379> info
...
# Replication
role:master
connected_slaves:2
slave0:ip=172.17.0.3,port=6379,state=online,offset=420,lag=1
slave1:ip=172.17.0.4,port=6379,state=online,offset=434,lag=0
master_replid:1012f0b993083d3ac250a634997ce86827acd939
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:434
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:434
...

connected_slaves编程了2,上面也记录了两个从节点的ip,port等信息

我们也验证一下

主节点

代码语言:javascript
复制
127.0.0.1:6379> set jiepi dog
OK

从节点

代码语言:javascript
复制
127.0.0.1:6379> get jiepi
"dog"
127.0.0.1:6379> set jiepi pig
(error) READONLY You can't write against a read only slave.

发现从节点可以获取主节点设置的值,说明从节点把主节点的数据同步了过来,并且从节点仅仅只读。到此docker搭建redis一主两从集群搭建完成,上面的一些参数代表啥意思没有说明,大家可自行谷歌,我也记不住.

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 洁癖是一只狗 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档