本文是在一台服务器上搭建的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>