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>
参考资料: