Docker quickly set up master-slave + sentry monitoring

Install Redis Execute command ...
Install Redis
Deployment plan
Start preparations
directory structure
Redis.conf configuration file
Sentinel.conf configuration file
run.sh startup script file
sentinel.sh startup script file
Start Redis service
Start main service
Start slave service
Start Sentinel service
Manually stop the main service

Install Redis

Execute command

My official group Click here .

docker pull redis

Deployment plan

Start three machines, 6379 container as master node, the rest as slave node

Start preparations

directory structure

├── conf │ ├── redis_6379.conf │ ├── redis_6380.conf │ ├── redis_6381.conf │ ├── sentinel_26379.conf │ ├── sentinel_26380.conf │ └── sentinel_26381.conf ├── data_6379 │ ├── appendonly.aof │ └── dump.rdb ├── data_6380 │ └── dump.rdb ├── data_6381 │ └── dump.rdb └── scripts ├── run.sh └── sentinel.sh

Redis.conf configuration file

Download the configuration file. The specific configuration can be adjusted separately

https://raw.githubusercontent.com/antirez/redis/5.0/redis.conf

Sentinel.conf configuration file

port 26379 dir "/etc/redis" sentinel monitor mymaster 172.17.0.2 6379 1 sentinel down-after-milliseconds mymaster 60000 sentinel failover-timeout mymaster 180000

run.sh startup script file

#!/usr/bin/env bash set -e # Script current directory cPath=$(cd $(dirname "$0") || exit; pwd) # root directory dirPath=$(dirname "$cPath") # Get port port="$1" if [[ ! "$port" ]]; then port=6379 fi # Create data directory mkdir -p "$dirPath"/data_"$port" # Delete started services containerId=$(docker ps -a | grep "redis_$port" | awk -F' ' '') if [[ "$containerId" ]]; then echo "Deleting service: $" docker rm -f $ > /dev/null fi # Start service docker run -itd --privileged=true -p "$port":6379 --name redis_"$port" \ -v="$dirPath"/conf/redis_"$port".conf:/etc/redis/redis.conf \ -v="$dirPath"/data_"$port":/data \ redis \ redis-server /etc/redis/redis.conf

sentinel.sh startup script file

#!/usr/bin/env bash set -e # Script current directory cPath=$(cd $(dirname "$0") || exit; pwd) # root directory dirPath=$(dirname "$cPath") # Set port port=$1 if [[ ! "$port" ]]; then port=26379 fi # Delete started services containerId=$(docker ps -a | grep "sentinel_$port" | awk -F' ' '') if [[ "$containerId" ]]; then echo "Deleting service: $" docker rm -f $ > /dev/null fi # Start service docker run -itd --privileged=true -p "$port":26379 --name "sentinel_$port" \ -v="$/conf/sentinel_$.conf":/etc/redis/sentinel.conf \ -w=/etc/redis/ \ redis \ redis-server /etc/redis/sentinel.conf --sentinel

be careful

Start the sentinel service if the following error occurs

1:X 10 May 2020 08:10:48.234 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 1:X 10 May 2020 08:10:48.235 # Sentinel config file /etc/redis/sentinel.conf is not writable: Permission denied. Exiting...

Solution

  • Add = = - w=/etc/redis / = = = in docker run. See sentinel.sh script for details
  • Modify directory permissions
docker run -it --rm --privileged=true -v=/root/docker-config/redis/conf/:/etc/redis/ redis chown -R redis /etc/redis

Main statement: = = chown -R redis /etc/redis==

View modified permissions

root@DESKTOP-Q13EI52:~/docker-config/redis# docker run -it --rm --privileged=true -v=/root/docker-config/redis/conf/:/etc/redis/ redis ls -l /etc/redis/ total 204 -rw-r--r-- 1 redis root 61793 May 10 07:41 redis_6379.conf -rw-r--r-- 1 redis root 61864 May 10 12:52 redis_6380.conf -rw-r--r-- 1 redis root 61890 May 10 12:52 redis_6381.conf -rw-r--r-- 1 redis root 459 May 10 12:52 sentinel_26379.conf -rw-r--r-- 1 redis root 161 May 10 07:56 sentinel_26380.conf -rw-r--r-- 1 redis root 161 May 10 10:16 sentinel_26381.conf

Start Redis service

Start main service

sh scripts/run.sh 6379

Start slave service

sh scripts/run.sh 6380 sh scripts/run.sh 6381

Access from service

docker exec -it redis_6380 bash docker exec -it redis_6381 bash # Execute command after entering container redis-cli # Set to slave slaveof 172.17.0.2 6379

design sketch

Start Sentinel service

sh scripts/sentinel.sh

design sketch

Manually stop the main service

  • The current machine service structure is as follows
root@DESKTOP-Q13EI52:~/docker-config/redis# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e518580ce8eb redis "docker-entrypoint.s..." About a minute ago Up About a minute 6379/tcp, 0.0.0.0:26379->26379/tcp sentinel_26379 e2ef253d3513 redis "docker-entrypoint.s..." 2 hours ago Up 2 hours 0.0.0.0:6381->6379/tcp redis_6381 15fdc81eb530 redis "docker-entrypoint.s..." 2 hours ago Up 2 hours 0.0.0.0:6380->6379/tcp redis_6380 77f4fdc84cb1 redis "docker-entrypoint.s..." 2 hours ago Up 2 hours 0.0.0.0:6379->6379/tcp redis_6379

Execute command: docker stop redis

1:X 10 May 2020 12:52:15.634 # +sdown master mymaster 172.17.0.2 6379 1:X 10 May 2020 12:52:15.634 # +odown master mymaster 172.17.0.2 6379 #quorum 1/1 1:X 10 May 2020 12:52:15.634 # +new-epoch 1 1:X 10 May 2020 12:52:15.634 # +try-failover master mymaster 172.17.0.2 6379 1:X 10 May 2020 12:52:15.649 # +vote-for-leader 6905a137af7baedbdfce4978d1d9126fdaad4faf 1 1:X 10 May 2020 12:52:15.649 # +elected-leader master mymaster 172.17.0.2 6379 1:X 10 May 2020 12:52:15.649 # +failover-state-select-slave master mymaster 172.17.0.2 6379 1:X 10 May 2020 12:52:15.725 # +selected-slave slave 172.17.0.3:6379 172.17.0.3 6379 @ mymaster 172.17.0.2 6379 1:X 10 May 2020 12:52:15.725 * +failover-state-send-slaveof-noone slave 172.17.0.3:6379 172.17.0.3 6379 @ mymaster 172.17.0.2 6379 1:X 10 May 2020 12:52:15.781 * +failover-state-wait-promotion slave 172.17.0.3:6379 172.17.0.3 6379 @ mymaster 172.17.0.2 6379 1:X 10 May 2020 12:52:16.798 # +promoted-slave slave 172.17.0.3:6379 172.17.0.3 6379 @ mymaster 172.17.0.2 6379 1:X 10 May 2020 12:52:16.798 # +failover-state-reconf-slaves master mymaster 172.17.0.2 6379 1:X 10 May 2020 12:52:16.845 * +slave-reconf-sent slave 172.17.0.4:6379 172.17.0.4 6379 @ mymaster 172.17.0.2 6379 1:X 10 May 2020 12:52:17.837 * +slave-reconf-inprog slave 172.17.0.4:6379 172.17.0.4 6379 @ mymaster 172.17.0.2 6379 1:X 10 May 2020 12:52:17.837 * +slave-reconf-done slave 172.17.0.4:6379 172.17.0.4 6379 @ mymaster 172.17.0.2 6379 1:X 10 May 2020 12:52:17.937 # +failover-end master mymaster 172.17.0.2 6379 # Generate execute failover 1:X 10 May 2020 12:52:17.937 # +switch-master mymaster 172.17.0.2 6379 172.17.0.3 6379 1:X 10 May 2020 12:52:17.938 * +slave slave 172.17.0.4:6379 172.17.0.4 6379 @ mymaster 172.17.0.3 6379 1:X 10 May 2020 12:52:17.938 * +slave slave 172.17.0.2:6379 172.17.0.2 6379 @ mymaster 172.17.0.3 6379 1:X 10 May 2020 12:53:18.010 # +sdown slave 172.17.0.2:6379 172.17.0.2 6379 @ mymaster 172.17.0.3 6379

be careful

172.17.0.2:6379 the primary node will automatically switch to the slave service after it is online again

For more information, please visit:

Tencent T3-T4 standard boutique PHP architect tutorial directory, as long as you read it to ensure a higher salary (continuous update)

11 May 2020, 10:06 | Views: 3252

Add new comment

For adding a comment, please log in
or create account

0 comments