环境:Ubuntu 20.04 64版/Centos7
docker版本:20.10.16
docker-compose版本:1.25.1
redis镜像版本:docker.io/redis:6.2.5-alpine
Docker从1.13.x开始分为社区版CE和企业版EE,版本号也改为按照时间线来发布,比如17.03就是2017年3月。
Docker的linux发行版的软件仓库目前为https://download.docker.com, 软件包名字改为docker-ce和docker-ee。
Docker的社区版(Docker Community Edition)叫做docker-ce。老版本的Docker包叫做docker或者docker-engine,docker官网推荐的安装方式都是下载docker安装脚本安装。
卸载旧版docker(若未安装过可省略此步):
sudo apt-get remove docker docker.io docker-engine
安装最新版本docker:curl -sSL https://get.docker.com/ | sh
或者
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh
确认Docker安装成功,拉取一个单机版本redis的docker:
docker run -d -p 6379:6379 -v ~/redisdata:/data redis:6.2.5 redis-server --appendonly yes
安装软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
查看有哪些版本可以装(知道要安装的版本号可直接跳过)
yum list docker-ce --showduplicates | sort -r
安装docker,注意需要输入完整的版本号
yum install docker-ce-20.10.9-3.el8
安装完成后,将docker加入开机自启动
systemctl start docker
systemctl enable docker
检查是否安装成功
docker version
daocloud下载最新版的docker-compose文件
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
从github上下载docker-compose二进制文件安装
github.com下载最新版的docker-compose文件
sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
测试安装结果
docker-compose --version
2.pip安装
sudo pip install docker-compose
建立文件目录: mkdir -p /redisMasterSlave
创建文件docker-compose.yml
version: '3'
services:
master:
environment:
- TZ=Asia/Shanghai
image: docker.io/redis:6.2.5-alpine
container_name: redis_master
restart: always
command: redis-server --requirepass redisMima1 --masterauth redisMima1
ports:
- 6379:6379
slave1:
environment:
- TZ=Asia/Shanghai
image: docker.io/redis:6.2.5-alpine
container_name: redis_slave_1
restart: always
command: redis-server --slaveof redis_master 6379 --requirepass redisMima1 --masterauth redisMima1
ports:
- 6380:6379
slave2:
environment:
- TZ=Asia/Shanghai
image: docker.io/redis:6.2.5-alpine
container_name: redis_slave_2
restart: always
command: redis-server --slaveof redis_master 6379 --requirepass redisMima1 --masterauth redisMima1
ports:
- 6381:6379
启动命令:docker-compose -f docker-compose.yml -p redisMima1 up -d
查看实例中的redis角色的命令
docker exec redis_master redis-cli -a redisMima1 info replication
不用进到容器里看,直接在shell下执行即可, 其中redis_master为容器名, -a指定redis密码
哨兵模式是基于主从的, 建立文件目录如下
redisMasterSlave
docker-compose.yml
redis_sentinel.yml
sentinel1
sentinel.conf
sentinel2
sentinel.conf
sentinel3
sentinel.conf
只需要准备三件事
docker-compose.yml配置与主从模式一样,可直接拷贝
redis_sentinel.yml配置如下
version: '3'
services:
sentinel1:
environment:
- TZ=Asia/Shanghai
image: docker.io/redis:6.2.5-alpine
container_name: redis_sentinel_1
restart: always
command: redis-sentinel /usr/local/etc/redis/conf/sentinel.conf
ports:
- 26379:26379
volumes:
- ./sentinel1/:/usr/local/etc/redis/conf/
sentinel2:
environment:
- TZ=Asia/Shanghai
image: docker.io/redis:6.2.5-alpine
container_name: redis_sentinel_2
restart: always
command: redis-sentinel /usr/local/etc/redis/conf/sentinel.conf
ports:
- 26380:26379
volumes:
- ./sentinel3/:/usr/local/etc/redis/conf/
sentinel3:
environment:
- TZ=Asia/Shanghai
image: docker.io/redis:6.2.5-alpine
container_name: redis_sentinel_3
restart: always
command: redis-sentinel /usr/local/etc/redis/conf/sentinel.conf
ports:
- 26381:26379
volumes:
- ./sentinel3/:/usr/local/etc/redis/conf/
networks:
default:
external:
name: redis_default
注意networks配是主从模式的网络, 查看主从的任意一台实例可知网络, 查看命令
docker inspect redis_master |grep Networks -A 15
结果如下 ip为172.19.0.4
以下的是sentinel1#下的sentinel.conf
port 26379
dir "/tmp"
sentinel monitor mymaster 172.19.0.4 6379 2
sentinel auth-pass mymaster root
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
sentinel2#与sentinel3#下的配置文件的port分别改为26380, 26381, 其它一样
注意其中的172.19.0.2是master的docker网络的ip
启动命令
docker network create redis_default
docker-compose -f redis_sentinel.yml -p redis up -d
完成后查看容器运行情况 docker ps
#!/bin/bash
if [ $# -gt 1 ]
then
echo 'wrong arg numbers'
exit
fi
op=$1
if test -z "$op"
then
echo "null arg"
elif [ $op == 'stop' ]
then
docker stop redis_master redis_slave_1 redis_slave_2 redis_sentinel_1 redis_sentinel_2 redis-sentinel-3
elif [ $op == 'stop1' ]
then
docker stop redis_master redis_slave_1 redis_slave_2
elif [ $op == 'stop2' ]
then
docker stop redis_sentinel_1 redis_sentinel_2 redis_sentinel_3
elif [ $op == 'clear' ]
then
docker container rm redis_master redis_slave_1 redis_slave_2 redis_sentinel_1 redis_sentinel_2 redis_sentinel_3
elif [ $op == 'clear1' ]
then
docker container rm redis_master redis_slave_1 redis_slave_2
elif [ $op == 'clear2' ]
then
docker container rm redis_sentinel_1 redis_sentinel_2 redis_sentinel_3
elif [ $op == 'start1' ]
then
docker start redis_master redis_slave_1 redis_slave_2
elif [ $op == 'start2' ]
then
docker start redis_sentinel_1 redis_sentinel_2 redis_sentinel_3
elif [ $op == 'up1' ]
then
docker-compose -f docker-compose.yml -p redis up -d
elif [ $op == 'up2' ]
then
docker-compose -f redis_sentinel.yml -p redis up -d
elif [ $op == 'info-master' ]
then
docker exec redis_master redis-cli -a root info replication
elif [ $op == 'info-slave-1' ]
then
docker exec redis_slave_1 redis-cli -a root info replication
elif [ $op == 'info-slave-2' ]
then
docker exec redis_slave_2 redis-cli -a root info replication
elif [ $op == 'test' ]
then
echo 'test pass'
else
echo "arg invalid: $1"
fi
启动主从docker-compose: ./run_REDIS up1
启动哨兵docker-compose: ./run_REDIS up2
启动主从容器: ./run_REDIS start1
启动哨兵容器: ./run_REDIS start2
停止主从与哨兵所有容器: ./run_REDIS stop
停止主从容器: ./run_REDIS stop1
停止哨兵容器: ./run_REDIS stop2
清除主从与哨兵所有容器: ./run_REDIS clear
清除主从所有容器: ./run_REDIS clear1
清除哨兵所有容器: .run_REDIS clear2
现在可以很方便地试错了~
页面更新:2024-04-20
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号