Please enable Javascript to view the contents
容器化部署 Redis
1. Redis 主从模式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| export CONTAINER_CLI=nerdctl
export IMAGE=redis:7
export REDIS_INSTANCE_NAME=redis-instance
export REDIS_MASTER_INSTANCE_NAME="${REDIS_INSTANCE_NAME}-master"
export REDIS_REPLICA_INSTANCE_NAME="${REDIS_INSTANCE_NAME}-replica"
export REDIS_PASSWORD=xxxxxx
export REDIS_MASTER_PORT=6379
export REDIS_MASTER_IP=10.0.0.1
export REDIS_REPLICA_PORT=6380
export REDIS_DATA=/data/ops/redis/$REDIS_INSTANCE_NAME
mkdir -p $REDIS_DATA/data $REDIS_DATA/log
|
1
2
3
4
5
6
7
8
9
10
11
| $CONTAINER_CLI run -d \
--name $REDIS_MASTER_INSTANCE_NAME \
--restart always \
--network host \
--ulimit memlock=-1 \
--ulimit stack=67108864 \
--ulimit nofile=1048576:1048576 \
--memory-swappiness=0 \
-v $REDIS_DATA/data:/data \
-v $REDIS_DATA/log:/var/log/redis \
$IMAGE redis-server --port $REDIS_MASTER_PORT --requirepass $REDIS_PASSWORD
|
应该可以这样的日志:
1
| Ready to accept connections tcp
|
1
2
3
4
5
6
7
8
9
10
11
12
| $CONTAINER_CLI run -d \
--name $REDIS_REPLICA_INSTANCE_NAME \
--restart always \
--network host \
--ulimit memlock=-1 \
--ulimit stack=67108864 \
--ulimit nofile=1048576:1048576 \
--memory-swappiness=0 \
-v $REDIS_DATA/data:/data \
-v $REDIS_DATA/log:/var/log/redis \
$IMAGE redis-server --port $REDIS_REPLICA_PORT --requirepass $REDIS_PASSWORD \
--replicaof $REDIS_MASTER_IP $REDIS_MASTER_PORT --masterauth $REDIS_PASSWORD
|
应该可以看到这样的日志:
1
| MASTER <-> REPLICA sync: Finished with success
|
主节点上,响应 PONG 表示连接成功
1
| $CONTAINER_CLI exec -it $REDIS_MASTER_INSTANCE_NAME redis-cli -p $REDIS_MASTER_PORT -a $REDIS_PASSWORD ping
|
从节点上,响应 PONG 表示连接成功
1
| $CONTAINER_CLI exec -it $REDIS_REPLICA_INSTANCE_NAME redis-cli -p $REDIS_REPLICA_PORT -a $REDIS_PASSWORD ping
|
1
2
3
4
5
| echo "Redis:
Instance Name:$REDIS_INSTANCE_NAME
IP:$(hostname -I | awk '{print $1}')
Port:$REDIS_MASTER_PORT
Password:$REDIS_PASSWORD" | column -t -s ':'
|
1
| apt install redis-tools -y
|
1
| redis-benchmark -h $REDIS_MASTER_IP -p $REDIS_MASTER_PORT -a $REDIS_PASSWORD
|