linux下使用Docker作为容器搭建Redis集群

我这里是在同一台宿主机上搭建的,宿主机用的是阿里云的服务器。
一、编写一个redis-cluster.tmpl文件
下载一个redis,我下载的版本是5.0.5的,复制里面的redis.conf文件,将它重命名为redis-cluster.tmpl,为了看起来简洁,我删掉了里面的注释部分。


#bind 127.0.0.1

protected-mode no

port ${PORT}

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 /data/redis

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

appendonly yes

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

cluster-enabled yes

cluster-config-file nodes-${PORT}.conf

cluster-node-timeout 15000

cluster-announce-ip 120.24.163.90
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}

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

redis-cluster.tmpl中主要注意修改这几个配置为你自己的配置:

#把bind注释掉
#bind 127.0.0.1
protected-mode no
port ${PORT}
daemonize no
dir /data/redis
appendonly yes
#如果是yes,表示启用集群,否则以单例模式启动
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
#你宿主机的ip
cluster-announce-ip 120.24.163.90
cluster-announce-port ${PORT}
#这里'1${PORT}'的意思是,例如端口是7000,一般cluster-announce-bus-port 端口是在port的基础上加1000
cluster-announce-bus-port 1${PORT}

二、开放端口
我的是阿里云服务器,所以开配置安全组,开放7000~7005端口以及17000至17005端口。(这里不知道怎样配置安全组的自行百度,不再展开)
在这里插入图片描述
一般配置了就基本是成功了的,如果想要确认一下,可以在别的机器上telnet一下试一下,注意telnet的格式是“telnet ip 端口”,ip和端口之间是空格隔开,不是冒号。

三、新建redis目录,所有命令在当前路径下执行就可以了
在这里插入图片描述

三、创建docker内部网络
由于此处所有redis实例运行在同一台宿主机,而redis-cluster之间需要通信,所以需要创建docker network

# 创建docker内部网络
docker network create redis-cluster-net

四、创建 master 和 slave 文件夹并生成配置文件,用于存放配置文件redis.conf以及redis数据

# 创建 master 和 slave 文件夹
for port in `seq 7000 7005`; do
    ms="master"
    if [ $port -ge 7003 ]; then
        ms="slave"
    fi
    mkdir -p ./$ms/$port/ && mkdir -p ./$ms/$port/data \
    && PORT=$port envsubst < ./redis-cluster.tmpl > ./$ms/$port/redis.conf;
done;

五、运行docker redis 的 master 和 slave 实例

# 运行docker redis 的 master 和 slave 实例
for port in `seq 7000 7005`; do
    ms="master"
    if [ $port -ge 7003 ]; then
        ms="slave"
    fi
    docker run -d -p $port:$port -p 1$port:1$port \
    -v $PWD/$ms/$port/redis.conf:/data/redis.conf \
    -v $PWD/$ms/$port/data:/data/redis \
    --restart always --name redis-$ms-$port --net redis-cluster-net \
    redis redis-server /data/redis.conf;
done;

六、组装masters : slaves 节点参数

# 组装masters : slaves 节点参数
matches=""
for port in `seq 7000 7005`; do
    ms="master"
    if [ $port -ge 7003 ]; then
        ms="slave"
    fi
    matches=$matches$(docker inspect --format '{{(index .NetworkSettings.Networks "redis-cluster-net").IPAddress}}' "redis-$ms-${port}"):${port}" ";
done;

八、安装redis,等会我们需要用redis-cli来创建集群
https://redis.io/download
在这里插入图片描述
九、查看每个Redis节点的host
输入 docker network inspect redis-cluster-net命令查看我们上面创建的叫做redis-cluster-net的docker内部网络
在这里插入图片描述
十、启动节点

src/redis-cli --cluster create 172.20.0.2:7000 172.20.0.3:7001 172.20.0.4:7002 172.20.0.5:7003 172.20.0.6:7004 172.20.0.7:7005 --cluster-replicas 1
如果redis集群设置了密码则在后面加上 -a,例如
src/redis-cli --cluster create 172.20.0.2:7000 172.20.0.3:7001 172.20.0.4:7002 172.20.0.5:7003 172.20.0.6:7004 172.20.0.7:7005 --cluster-replicas 1 -a passwd123
在这里插入图片描述

十一、java代码里配置节点信息
在这里插入图片描述
十二、集群搭建好之后我们可以在别的机器上使用redis-cli连上去试试看能不能用
在这里插入图片描述

发布了60 篇原创文章 · 获赞 41 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/aimashi620/article/details/100694133