dockercompose搭建Redis哨兵模式
环境:Ubuntu 20.04 64版/Centos7
docker版本:20.10.16
docker-compose版本:1.25.1
redis镜像版本:docker.io/redis:6.2.5-alpineDocker版本变化说明:
Docker从1.13.x开始分为社区版CE和企业版EE,版本号也改为按照时间线来发布,比如17.03就是2017年3月。
Docker的linux发行版的软件仓库目前为https://download.docker.com, 软件包名字改为docker-ce和docker-ee。ubuntu安装docker
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 yescentos安装docker
安装软件包
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两种dockercompose安装方式
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.ymlversion: "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
docker-compose.yml配置与主从模式一样,可直接拷贝 redis_sentinel.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
3. sentinel.conf
以下的是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 为方便试错, 将常用命令写成脚本run_REDIS#!/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
现在可以很方便地试错了~ 搭建哨兵模式过程中的常见问题指定sentinel.conf配置文件映射到容器内时直接使用文件映射, 这么做有可能导致哨兵没有写入配置文件的权限, 表现为WARNING: Sentinel was not able to save the new configuration on disk!!!: Device or resource busy. 解决方案:使用文件夹映射 看似搭建起来了, 可当stop掉master后哨兵却不会选举新的主节点, 可能是哨兵改写了sentinel.conf后使用了一样的myid. 解决方案: stop掉哨兵, 删掉myid那一行, 重新启动哨兵. myid会自动重新生成. 从库没有权限打开临时文件, 表现为同步时大量出现 Opening the temp file needed for MASTER <-> REPLICA synchronization: Permission denied 的log记录. 解决方案: sudo -u root ./redis-server [配置文件] 方式启动
Coinbase迈出交易加密期货的第一步Coinbase今天宣布,它已向美国全国期货协会申请成为注册期货佣金商。这表明该交易所正在寻求从单纯的现货交易转向利润丰厚的衍生品交易业务,在这种业务中,人们可以押注未来价格。典型
手机慢速度快门平移跟拍8月30日晚上七点半多在小区北门路口拍摄平移跟拍照片分享如附图。ISO2300,S16sISO2300,S16sISO2300,S18sXHD,12。5MB,ISO1225,S12
手机慢速度快门平移跟拍8月28日晚上六点半左右在小区北门路口拍摄平移跟拍,先由ISO100,S18s,陆续变暗了调整ISO值,200400,8002000,感觉拍摄够多了,结束回家。照片分享如附图。IS
手机慢速度快门跟拍旋转8月30日晚上七点半左右在小区北门路口拍摄慢速度快门跟拍旋转,照片分享如附图。XHD,12。6MB,ISO860,S120s上图裁切整理,3。4MBXHD,13。0MB,ISO33
Coinbase将为Facebook新的数字钱包子公司Novi提供加密托管服务今天,Coinbase宣布将为Facebook新的数字钱包子公司Novi的试点项目提供加密托管服务。Paxos写了一篇关于试点的文章,称这一消息代表了数字资产的潮流转变,因为这是第
银行不打算创建自己的DeFi协议替代方案摩根大通企业发展主管称,尽管投资银行在去中心化金融领域拥有大量机会,但银行不一定要建立自己的系统或现有DeFi协议的替代方案。随着主要金融机构进入DeFi领域,一些私人基础设施将是
DeFi空投如何激励多个以太坊钱包空投是DeFi用户数量几乎每天都在不断打破记录的关键原因之一,它们已成为平台感谢用户参与的最受欢迎的方式之一。Uniswap在领先的分散式交换DeFi,也许是最大的DeFi平台来做
DeFi代币Ampleforth在Avalanche上发布最初的变基代币之一Ampleforth(AMPL)现在在快速增长的Avalanche网络上运行。Ampleforth协议通过将波动性从价格转移到供应量来每天调整总供应量,并且该协议
比特币跳水未浇熄新政热情萨尔瓦多总统亲自带货数字钱包应用尽管在萨尔瓦多周二正式将比特币列为法币后,比特币当日晚间价格出现高台跳水,但这仍未浇熄萨尔瓦多政府拥抱比特币的热情。当地时间周三,萨尔瓦多总统在推特上亲自带货该国的比特币数字钱包应
印度储备银行前副行长力促印度接受加密货币印度储备银行前副行长将加密货币视为一种应税资产或商品。印度储备银行(RBI)前副行长对该国的金融和加密生态系统发表了看法,并表示需要接受数字资产。9月7日,RamaSubraman
比特币作为数字黄金具有巨大的上升潜力在一份提交给美国证券交易委员会的报告中,比尔米勒的对冲基金米勒机会信托的基金经理表示,作为数字黄金,比特币具有巨大的上升潜力。该报告表示,尽管比特币有波动性,但它的风险回报率是有吸