This article is a redis cluster built on a server
1.Install docker
Close firewall
# setenforce 0
# systemctl stop firewalld
# systemctl disable firewalld
# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
# yum -y install docker-ce
Start 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. In the same directory, add the following files
# 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
And put the redis-cli file in this directory
3. Build and start the redis cluster container
[root@localhost redis]# sh cluster.sh
4. Go to the directory defined by BASEPATH to stop and start containers in batches
[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
Restart all containers under the current path
[root@localhost redis]# docker-compose restart
Stop all containers under the current path
[root@localhost redis]# docker-compose stop
Stopping redis2 ... done
Stopping redis6 ... done
Stopping redis4 ... done
Stopping redis5 ... done
Stopping redis3 ... done
Stopping redis1 ... done
Delete all (stopped) service containers under the current path
[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
Stop and delete the containers, networks, and images of all services in the project under the current path
[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. Check the redis cluster situation
[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>