docker容器部署redis集群cluster

本文是在一台服务器上搭建的redis集群

1.安装docker

闭防火墙

# setenforce 0

# systemctl stop firewalld

# systemctl disable firewalld

# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

# yum -y install docker-ce

启动docker

# systemctl start docker

# systemctl enable docker

# curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-u `name -s-uname -m `> /usr/local/bin/docker-compose

# chmod +x /usr/local/bin/docker-compose

2.在同一目录下,添加以下文件

# vim cluster.sh

#!/bin/bash

BASEPATH='/usr/local/redis'         #redis节点数据和配置文件存放路径

IP=192.168.184.128          #修改为环境对应地址

docker pull redis:5.0.3        #redis镜像版本

for i in `seq 7001 7006`        #redis节点端口范围

do

 mkdir -p $BASEPATH/${i}/data/

 mkdir -p $BASEPATH/${i}/config/

 cp ./redis.conf $BASEPATH/${i}/config/

 sed -i "s/port 6379/port ${i}/" $BASEPATH/${i}/config/redis.conf

 echo "cluster-announce-ip $IP" >> $BASEPATH/${i}/config/redis.conf

 echo "cluster-announce-port ${i}" >> $BASEPATH/${i}/config/redis.conf

 echo "cluster-announce-bus-port 1${i}" >> $BASEPATH/${i}/config/redis.conf

done

cp docker-compose.yml redis-cli $BASEPATH/

cd $BASEPATH

docker-compose up -d

chmod u+x redis-cli

./redis-cli -h $IP -p 7001 --cluster create $IP:7001 $IP:7002 $IP:7003 $IP:7004 $IP:7005 $IP:7006 --cluster-replicas 1        #创建redis集群

# vim docker-compose.yml

version: '3'

services:

 redis1:

  image: redis:5.0.3

  restart: always  

  container_name: redis1

  volumes:

   - ./7001/config/redis.conf:/etc/redis/redis.conf

   - ./7001/data:/data

  environment:

   - TZ=Asia/Shanghai

   - LANG=en_US.UTF-8

  ports:

    - '7001:7001'

    - '17001:17001'

  command: ["redis-server", "/etc/redis/redis.conf"]

  privileged: true

  



 redis2:

  image: redis:5.0.3

  restart: always

  container_name: redis2

  volumes:

   - ./7002/config/redis.conf:/etc/redis/redis.conf

   - ./7002/data:/data

  environment:

   - TZ=Asia/Shanghai

   - LANG=en_US.UTF-8

  ports:

    - '7002:7002'

    - '17002:17002'

  command: ["redis-server", "/etc/redis/redis.conf"]

  privileged: true



 redis3:

  image: redis:5.0.3

  restart: always

  container_name: redis3

  volumes:

   - ./7003/config/redis.conf:/etc/redis/redis.conf

   - ./7003/data:/data

  environment:

   - TZ=Asia/Shanghai

   - LANG=en_US.UTF-8

  ports:

    - '7003:7003'

    - '17003:17003'

  command: ["redis-server", "/etc/redis/redis.conf"]

  privileged: true



 redis4:

  image: redis:5.0.3

  restart: always

  container_name: redis4

  volumes:

   - ./7004/config/redis.conf:/etc/redis/redis.conf

   - ./7004/data:/data

  environment:

   - TZ=Asia/Shanghai

   - LANG=en_US.UTF-8

  ports:

    - '7004:7004'

    - '17004:17004'

  command: ["redis-server", "/etc/redis/redis.conf"]

  privileged: true



 redis5:

  image: redis:5.0.3

  restart: always

  container_name: redis5

  volumes:

   - ./7005/config/redis.conf:/etc/redis/redis.conf

   - ./7005/data:/data

  environment:

   - TZ=Asia/Shanghai

   - LANG=en_US.UTF-8

  ports:

    - '7005:7005'

    - '17005:17005'

  command: ["redis-server", "/etc/redis/redis.conf"]

  privileged: true  



 redis6:

  image: redis:5.0.3

  restart: always

  container_name: redis6

  volumes:

   - ./7006/config/redis.conf:/etc/redis/redis.conf

   - ./7006/data:/data

  environment:

   - TZ=Asia/Shanghai

   - LANG=en_US.UTF-8

  ports:

    - '7006:7006'

    - '17006:17006'

  command: ["redis-server", "/etc/redis/redis.conf"]

  privileged: true

# vim redis.conf

tcp-backlog 511

timeout 0

tcp-keepalive 300

daemonize no

supervised no

pidfile /var/run/redis_6379.pid

loglevel notice

logfile ""

databases 16

always-show-logo yes

save 900 1

save 300 10

save 60 10000

stop-writes-on-bgsave-error yes

rdbcompression yes

rdbchecksum yes

dbfilename dump.rdb

dir ./

replica-serve-stale-data yes

replica-read-only yes

repl-diskless-sync no

repl-diskless-sync-delay 5

repl-disable-tcp-nodelay no

replica-priority 100

lazyfree-lazy-eviction no

lazyfree-lazy-expire no

lazyfree-lazy-server-del no

replica-lazy-flush no

appendfilename "appendonly.aof"

appendfsync everysec

no-appendfsync-on-rewrite no

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

aof-load-truncated yes

aof-use-rdb-preamble yes

lua-time-limit 5000

slowlog-log-slower-than 10000

slowlog-max-len 128

latency-monitor-threshold 0

notify-keyspace-events ""

hash-max-ziplist-entries 512

hash-max-ziplist-value 64

list-max-ziplist-size -2

list-compress-depth 0

set-max-intset-entries 512

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

hll-sparse-max-bytes 3000

stream-node-max-bytes 4096

stream-node-max-entries 100

activerehashing yes

client-output-buffer-limit normal 0 0 0

client-output-buffer-limit replica 256mb 64mb 60

client-output-buffer-limit pubsub 32mb 8mb 60

hz 10

dynamic-hz yes

aof-rewrite-incremental-fsync yes

rdb-save-incremental-fsync yes



appendonly yes

bind 0.0.0.0

protected-mode no

port 6379

cluster-enabled yes

cluster-node-timeout 15000

#masterauth mypassword

#requirepass mypassword

并在此目录下放入redis-cli文件

3.构建并启动redis集群容器

 [root@localhost redis]# sh cluster.sh

4.进到 BASEPATH定义的目录下,可以批量停启容器

 [root@localhost redis]# cd /edoc/redis

 [root@localhost redis]# docker-compose ps

 Name               Command               State                             Ports                           

------------------------------------------------------------------------------------------------------------

redis1   docker-entrypoint.sh redis ...   Up      0.0.0.0:17001->17001/tcp, 6379/tcp, 0.0.0.0:7001->7001/tcp

redis2   docker-entrypoint.sh redis ...   Up      0.0.0.0:17002->17002/tcp, 6379/tcp, 0.0.0.0:7002->7002/tcp

redis3   docker-entrypoint.sh redis ...   Up      0.0.0.0:17003->17003/tcp, 6379/tcp, 0.0.0.0:7003->7003/tcp

redis4   docker-entrypoint.sh redis ...   Up      0.0.0.0:17004->17004/tcp, 6379/tcp, 0.0.0.0:7004->7004/tcp

redis5   docker-entrypoint.sh redis ...   Up      0.0.0.0:17005->17005/tcp, 6379/tcp, 0.0.0.0:7005->7005/tcp

redis6   docker-entrypoint.sh redis ...   Up      0.0.0.0:17006->17006/tcp, 6379/tcp, 0.0.0.0:7006->7006/tcp

重启当前路径下所有的容器

[root@localhost redis]# docker-compose restart

停止当前路径下所有的容器

[root@localhost redis]# docker-compose stop

Stopping redis2 ... done

Stopping redis6 ... done

Stopping redis4 ... done

Stopping redis5 ... done

Stopping redis3 ... done

Stopping redis1 ... done

删除当前路径下所有(停止状态)服务的容器

[root@localhost redis]# docker-compose rm

Going to remove redis2, redis6, redis4, redis5, redis3, redis1

Are you sure? [yN] y

Removing redis2 ... done

Removing redis6 ... done

Removing redis4 ... done

Removing redis5 ... done

Removing redis3 ... done

Removing redis1 ... done

停止并删除当前路径下工程中所有服务的容器、网络、镜像

[root@localhost redis]# docker-compose down --rmi all

Removing network redis_default

Removing image redis:5.0.3

Removing image redis:5.0.3

WARNING: Image redis:5.0.3 not found.

Removing image redis:5.0.3

WARNING: Image redis:5.0.3 not found.

Removing image redis:5.0.3

WARNING: Image redis:5.0.3 not found.

Removing image redis:5.0.3

WARNING: Image redis:5.0.3 not found.

Removing image redis:5.0.3

WARNING: Image redis:5.0.3 not found

5.查看redis集群情况

[root@localhost redis]# ./redis-cli -c -h 192.168.184.128 -p 7001

192.168.184.128:7001> cluster nodes

86970dc61d6a910b6c692183379d2349453bbd0f 192.168.184.128:7003@17003 master - 0 1657863348643 3 connected 10923-16383

544a8b2ef01a26e70fd899825771a13f45f2237e 192.168.184.128:7006@17006 slave 98f47f82dad0d6241673608b80535ff6cc0a44c3 0 1657863347636 6 connected

ac54c2f24bcc5fd07e082e89870815a3fd9fc927 192.168.184.128:7004@17004 slave 6a74ae91a91669ac8f411eca488407daea391677 0 1657863347000 4 connected

aaf3569f32019fa54738ec42443694daed5b7df1 192.168.184.128:7005@17005 slave 86970dc61d6a910b6c692183379d2349453bbd0f 0 1657863347000 5 connected

98f47f82dad0d6241673608b80535ff6cc0a44c3 192.168.184.128:7001@17001 myself,master - 0 1657863345000 1 connected 0-5460

6a74ae91a91669ac8f411eca488407daea391677 192.168.184.128:7002@17002 master - 0 1657863348000 2 connected 5461-10922

192.168.184.128:7001>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以通过 Docker Swarm 部署 Redis 集群来实现高可用和负载均衡。下面是一些步骤: 1. 准备 Docker Swarm:首先,需要设置一个 Docker Swarm 环境。在一台机器上运行以下命令以初始化 Swarm: ``` $ docker swarm init ``` 2. 创建网络:创建一个 overlay 网络,以便在 Swarm 中的各个节点之间进行通信。 ``` $ docker network create --driver overlay redis-network ``` 3. 创建 Redis 服务:使用以下命令在 Swarm 中创建 Redis 服务: ``` $ docker service create \ --name redis-cluster \ --network redis-network \ --replicas 6 \ --publish 6379:6379 \ redis:latest \ redis-server --cluster-enabled yes --cluster-require-full-coverage no --cluster-replicas 1 ``` 此命令将创建一个名为 "redis-cluster" 的服务,并在 Swarm 中的6个副本中运行 Redis 容器。每个容器都将监听主机的6379端口,并启用 Redis 集群模式。 4. 创建 Redis 集群:使用以下命令启动 Redis 集群: ``` $ docker exec -it $(docker ps -qf "name=redis-cluster.1.") redis-cli --cluster create <ip1>:6379 <ip2>:6379 <ip3>:6379 <ip4>:6379 <ip5>:6379 <ip6>:6379 --cluster-replicas 1 ``` 其中,<ip1>、<ip2>等是 Redis 容器的 IP 地址。你可以使用 `docker service ls` 和 `docker service ps <service-name>` 命令来获取这些 IP 地址。 5. 验证 Redis 集群:使用以下命令验证 Redis 集群是否正常工作: ``` $ docker exec -it $(docker ps -qf "name=redis-cluster.1.") redis-cli cluster info ``` 你应该能够看到集群的相关信息。 通过这些步骤,你可以在 Docker Swarm 中成功部署 Redis 集群。请确保根据你的需求进行适当的调整,如副本数量和端口映射等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值