docker-compose搭建高可用redis服务
作者:向前的步伐 / 发表: 2020年2月2日 19:48 / 更新: 2020年2月2日 19:48 / docker / 阅读量:596
compose用于定义和运行多容器docker的应用程序工具。可以使用yml文件来配置应用程序需要的所有服务,然后使用docker-compose命令,就可以创建并启动配置文件中的所有服务。
一、安装
我们可以从github上下载它的二进制文件,使用最新的发布版本:https://github.com/docker/compose/releases。
运行以下命令进行安装:
curl -L https://github.com/docker/compose/releases/download/1.25.4-rc2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
由于github的下载速度太慢,我们也可以使用离线的方式进行安装,下载我已经下载好的docker-compose-Linux-x86_64_1.24,百度云盘:https://pan.baidu.com/s/1AZzXmo4x0xlfQTtMzSr3eA,提取码:imtb。
将文件移动到指定目录,并赋予执行权限:
mv compose-Linux-x86_64_1.24 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
安装成功后,使用命令查看是否能看到compose版本,能看到信息则为安装成功,命令是:
docker-compose version
二、redis1主2从3哨兵配置文件
1,先建一个项目文件夹,并进入到该文件夹中:
mkdir compose_pro
cd compose_pro
2,创建docker-compose.yml文件并写入下面配置信息:
version: '3.7'
services:
master:
image: redis
container_name: redis-master
restart: always
command: redis-server --port 6379 --requirepass 123456 --appendonly yes
ports:
- 6379:6379
volumes:
- ./data:/data
slave1:
image: redis
container_name: redis-slave-1
restart: always
command: redis-server --slaveof master 6379 --port 6380 --requirepass 123456 --masterauth 123456 --appendonly yes
ports:
- 6380:6380
volumes:
- ./data:/data
slave2:
image: redis
container_name: redis-slave-2
restart: always
command: redis-server --slaveof master 6379 --port 6381 --requirepass 123456 --masterauth 123456 --appendonly yes
ports:
- 6381:6381
volumes:
- ./data:/data
sentinel1:
image: redis
container_name: redis-sentinel-1
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
restart: always
ports:
- 26379:26379
volumes:
- ./sentinel1.conf:/usr/local/etc/redis/sentinel.conf
sentinel2:
image: redis
container_name: redis-sentinel-2
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
restart: always
ports:
- 26380:26379
volumes:
- ./sentinel2.conf:/usr/local/etc/redis/sentinel.conf
sentinel3:
image: redis
container_name: redis-sentinel-3
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
restart: always
ports:
- 26381:26379
volumes:
- ./sentinel3.conf:/usr/local/etc/redis/sentinel.conf
3,参数说明:
version:表示docker文件的版本。
image:指定基础容器镜像,如redis。
container_name:给这个运行的容器起一个别名。
restart:always表示开机自启。
command:该容器中执行的命令。
ports:端口映射,宿主机端口对应容易内端口。
volumes:数据卷的映射,使用具体路径直接挂载到本地,特点就是直观。
4,编写sentinel.conf文件:
port 26379
dir /tmp
# 自定义集群名,其中 master 为 redis-master 的 容器别名,也可以为IP地址,6379 为 redis-master 的端口,2 为最小投票数(因为有 3 台 Sentinel 所以可以设置成 2)
sentinel monitor mymaster master 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel auth-pass mymaster 123456
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
再执行复制命令,复制多几个文件:
cp sentinel.conf sentinel1.conf
cp sentinel.conf sentinel2.conf
cp sentinel.conf sentinel3.conf
注:这里需要复制3个哨兵的配置文件,不能使用同一个,在哨兵启动时,会将信息覆写到配置文件中,使用同一个文件会有冲突。
5,启动docker-compose:
docker-compose up -d
执行成功后显示:
6,查看docker运行的容器:
docker ps -a
7,查看容器日志,如果失败了可以看是什么原因:
docker logs -f redis-master # 可以使用name或者容器ID
8,停止compose:
docker-compose down
三、测试redis主从和哨兵模式
1,测试redis主从是否成功
先连接上redis主库:
redis-cli -h 192.168.101.201 -p 6379
连接上之后先登录并查看信息,如下:
也可以在主库设置个key,然后在从库上看是否有key的存在。这里就不做展示了。
2,测试redis哨兵是否成功
先连接上哨兵的服务:
redis-cli -h 192.168.101.201 -p 26379
连接上之后使用命令查看设置信息:
sentinel master mymaster
主要看红色框内的信息,从库数量、其他的哨兵数量和投票数。
再执行下面的命令,查看信息:
sentinel slaves mymaster
主要看红色框内的信息,主库连接状态、主库地址和主库端口号。
接着我们可以停掉主库的容器:
dorker stop redis-master
停掉之后,redis哨兵会自动从从库中选取一个当主库,这是我们只要在剩下的两个从库中找出主库就可以证明哨兵起作用(通过登录redis 6380和6381端口,使用info命令查看信息就可以看到新的主库信息)。