Linux 安装 Redis - docker

Redis - Linux下环境搭建 - docker

【部署单节点模式】

一、安装过程

[root@VM-16-12-centos docker]# docker pull redis
Using default tag: latest
Trying to pull repository docker.io/library/redis ... 
latest: Pulling from docker.io/library/redis
bf5952930446: Pull complete 
911b8422b695: Pull complete 
093b947e0ade: Pull complete 
5b1d5f59e382: Pull complete 
7a5f59580c0b: Pull complete 
f9c63997c980: Pull complete 
Digest: sha256:09c33840ec47815dc0351f1eca3befe741d7105b3e95bc8fdb9a7e4985b9e1e5
Status: Downloaded newer image for docker.io/redis:latest
[root@VM-16-12-centos docker]# 
[root@VM-16-12-centos docker]# 
[root@VM-16-12-centos docker]# 
[root@VM-16-12-centos docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/redis     latest              1319b1eaa0b7        7 hours ago         104 MB
[root@VM-16-12-centos docker]# 
[root@VM-16-12-centos docker]# 
[root@VM-16-12-centos docker]# docker run -p 6379:6379 --name redis -d docker.io/redis redis-server
099ef0f5b1bfe45172b46e2511bdcf78203ff40450dc61140182e797a5d49e2d
[root@VM-16-12-centos docker]# 
[root@VM-16-12-centos docker]# 
[root@VM-16-12-centos docker]# 
[root@VM-16-12-centos docker]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS          
          NAMES099ef0f5b1bf        docker.io/redis     "docker-entrypoint..."   10 seconds ago      Up 10 seconds       0.0.0.0:6379->6
379/tcp   redis[root@VM-16-12-centos docker]# 
[root@VM-16-12-centos docker]# 
[root@VM-16-12-centos docker]# 
[root@VM-16-12-centos docker]# docker exec -it 099ef0f5b1bf redis-cli
127.0.0.1:6379> 

 

二、以配置方式启动 redis

配置文件修改项

bind 127.0.0.1 #注释掉这部分,这是限制redis只能本地访问
protected-mode no #默认yes,开启保护模式,限制为本地访问
daemonize no#默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方#式启动redis失败
appendonly yes #redis持久化(可选)
requirepass 123456 #个人测试使用的密码

启动

docker run -p 6379:6379 --name myredis \
-v /usr/local/redis/config/redis.conf:/etc/redis/redis.conf \
-v /usr/local/redis/data:/data \
-d docker.io/redis redis-server /etc/redis/redis.conf \
--appendonly yes

命令解释说明:

-p 6379:6379 端口映射:前表示主机部分,:后表示容器部分。

--name myredis  指定该容器名称,查看和进行操作都比较方便。

-v 挂载目录,规则与端口映射相同。

为什么需要挂载目录:个人认为docker是个沙箱隔离级别的容器,这个是它的特点及安全机制,不能随便访问外部(主机)资源目录,所以需要这个挂载目录机制。

-d redis 表示后台启动redis

redis-server /etc/redis/redis.conf  以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录/usr/local/docker/redis.conf

 

三、问题

1、以配置方式启动后 容器没有启动,原因未知。

原因:daemonize 配置成了 yes 导致的问题

daemonize no#默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方#式启动redis失败

 

解决方法:

  • 更改配置
daemonize no
  • 进入容器手动启动

a、以默认方式启动 ,即 不指定配置文件

b、进入容器

c、找到 redis-server 所在目录

d、然后以 配置文件方式启动

f、退出 容器

docker exec -it 61acfe1a5b88 bash

whereis redis-server

./redis-server /etc/redis/redis.conf

exit

 

 【部署redis集群(三主三从)】

一、创建6个redis实例,端口号(6381~6386)

docker run -d \
 --name redis-node-1 \
 --net host \
 --privileged=true \
 -v /data/redis/share/redis-node-1:/data \
 redis:6.0.8 \
 --cluster-enabled yes \
 --appendonly yes \
 --port 6381

命令详解

docker run : 创建并运行docker容器实例
 --name redis-node-x : 容器的名称
 --net host :使用宿主机的IP和端口
 --privileged=true :获取宿主机root用户的权限
 -v /data/redis/share/redis-node-x:/data :挂载容器数据卷,宿主机地址:docker内部地址
 redis:6.0.8 :redis镜像和版本号
 --cluster-enabled yes : 开启redis集群
 --appendonly yes : 开启持久化
 --port xxxx : 设置redis端口

二、进入容器:

docker exec -it redis-node-1 /bin/bash

三、构建主从关系: 注意:进入docker容器后才能执行以下的命令,并且注意自己的真实IP地址。

redis-cli --cluster create \
> 172.21.32.111:6381 \
> 172.21.32.111:6382 \
> 172.21.32.111:6383 \
> 172.21.32.111:6384 \
> 172.21.32.111:6385 \
> 172.21.32.111:6386 \
> --cluster-replicas 1
--cluster-replicas 1 表示为每个master创建一个slave节点,集群关联一比一,1主1从对半分。

四、执行结果

>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 172.21.32.111:6385 to 172.21.32.111:6381
Adding replica 172.21.32.111:6386 to 172.21.32.111:6382
Adding replica 172.21.32.111:6384 to 172.21.32.111:6383
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 3520267c04c794e71ec705c991f60f59e4f191e6 172.21.32.111:6381
   slots:[0-5460] (5461 slots) master
M: 58836913b23f18b86bc09b3f8290df6e3559540e 172.21.32.111:6382
   slots:[5461-10922] (5462 slots) master
M: 9457606fb3fd928f579cb19e997a236f4046ea5a 172.21.32.111:6383
   slots:[10923-16383] (5461 slots) master
S: d34a81571e08265a1c52f548ba872ba5958a8ae7 172.21.32.111:6384
   replicates 9457606fb3fd928f579cb19e997a236f4046ea5a
S: e3165dfc95b5476dab82e99eb31f789bf3fd2c10 172.21.32.111:6385
   replicates 3520267c04c794e71ec705c991f60f59e4f191e6
S: db0c7055313f15527e76355601454f5a22336a5b 172.21.32.111:6386
   replicates 58836913b23f18b86bc09b3f8290df6e3559540e
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
..
>>> Performing Cluster Check (using node 172.21.32.111:6381)
M: 3520267c04c794e71ec705c991f60f59e4f191e6 172.21.32.111:6381
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: 9457606fb3fd928f579cb19e997a236f4046ea5a 172.21.32.111:6383
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: e3165dfc95b5476dab82e99eb31f789bf3fd2c10 172.21.32.111:6385
   slots: (0 slots) slave
   replicates 3520267c04c794e71ec705c991f60f59e4f191e6
S: db0c7055313f15527e76355601454f5a22336a5b 172.21.32.111:6386
   slots: (0 slots) slave
   replicates 58836913b23f18b86bc09b3f8290df6e3559540e
M: 58836913b23f18b86bc09b3f8290df6e3559540e 172.21.32.111:6382
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: d34a81571e08265a1c52f548ba872ba5958a8ae7 172.21.32.111:6384
   slots: (0 slots) slave
   replicates 9457606fb3fd928f579cb19e997a236f4046ea5a
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

到这里,如果OK的话,那3主3从就搞定了,可以看到分配了3个master,3个slave。

五、查看集群状态

链接进入6381作为切入点,查看集群状态。

链接客户端

redis-cli -p 6381

 

cluster info

root@VM-32-111-centos:/data# redis-cli -p 6381
127.0.0.1:6381> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:150
cluster_stats_messages_pong_sent:170
cluster_stats_messages_sent:320
cluster_stats_messages_ping_received:165
cluster_stats_messages_pong_received:150
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:320
127.0.0.1:6381> 

 

cluster nodes

127.0.0.1:6381> cluster nodes
9457606fb3fd928f579cb19e997a236f4046ea5a 172.21.32.111:6383@16383 master - 0 1672213788024 3 connected 10923-16383
e3165dfc95b5476dab82e99eb31f789bf3fd2c10 172.21.32.111:6385@16385 slave 3520267c04c794e71ec705c991f60f59e4f191e6 0 1672213789027 1 connected
db0c7055313f15527e76355601454f5a22336a5b 172.21.32.111:6386@16386 slave 58836913b23f18b86bc09b3f8290df6e3559540e 0 1672213787000 2 connected
3520267c04c794e71ec705c991f60f59e4f191e6 172.21.32.111:6381@16381 myself,master - 0 1672213788000 1 connected 0-5460
58836913b23f18b86bc09b3f8290df6e3559540e 172.21.32.111:6382@16382 master - 0 1672213787023 2 connected 5461-10922
d34a81571e08265a1c52f548ba872ba5958a8ae7 172.21.32.111:6384@16384 slave 9457606fb3fd928f579cb19e997a236f4046ea5a 0 1672213786000 3 connected
127.0.0.1:6381> 

 

 

参考资料:

Docker安装redis的使用

docker安装redis并以配置文件方式启动

docker安装redis集群--分布式存储案例

posted @ 2020-08-05 21:59  风过无痕521  阅读(264)  评论(0编辑  收藏  举报