本来应该续之前那篇博客Docker配置redis哨兵模式——多服务器·上写一个下篇的,但是忽然意识到应该将必要的环境打包为一个基础镜像,在此基础上建立与redis有关的镜像,这样既能够快速打包,又能够高度复用代码。

所以本篇实际上相当于一个完整的多服务器使用Docker来部署Redis哨兵模式的过程。

目录

  1. 服务器条件
  2. 安装Docker
  3. 制备基础镜像
  4. 配置redis主从节点
  5. 哨兵节点

服务器条件

因为我的服务器又是新租(日租)的,所以要重新恢复一下。

三台服务器(因为需要至少三个哨兵保证安全性)

  • 服务器1:123.57.234.161
  • 服务器2:123.56.85.138
  • 服务器3:8.131.68.191
  • 端口号7000、17000已在安全组上放行(阿里云)
  • 环境:centos8.0

安装Docker

逐行执行以下指令:

# 1. 更新编译环境
yum -y install gcc # 2. 同上
yum -y install gcc-c++ # 3. 安装docker
# 3.1 卸载旧版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 3.2 安装需要的安装包
yum install -y yum-utils
# 3.3设置镜像的仓库,推荐使用国内的镜像,比较快
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 3.4 更新yum软件包索引,功能是将软件包缓存在本地一份
yum makecache
# 3.5 安装docker相关的 docker-ce 社区版
yum install -y https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/edge/Packages/containerd.io-1.2.13-3.1.el7.x86_64.rpm
# 3.6 安装
yum install docker-ce docker-ce-cli containerd.io
# 3.7 启动docker
systemctl start docker
# 3.8 设置为后台启动
systemctl enable docker
# 3.9 使用docker version查看是否按照成功
docker version
# 3.10 测试(可以不做)
docker run hello-world
# 3.11 卸载删除(仅供参考,本次不做)
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker # 4. 配置加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://qdxc3615.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

制备基础镜像

docker仓库中的centos镜像非常简单,缺少一些功能,不方便我们安装和调试,所以我们把与redis本身无关但有助于我们使用的部分打包成一个常用的基础镜像。

主要安装的是vim编辑器和procps(查看容器内运行的进程)所以创建一个目录为basecentos,在其中创建并编写Dockerfile如下:

# 创建Dockerfile
vi Dockerfile # 以下所有代码为Dockerfile的内容 FROM redis
MAINTAINER blue<blue@email.com>
# 安装一些环境
RUN apt-get update
RUN apt-get install -y vim
RUN apt-get install procps --assume-yes

保存Dockerf后可以创建名为base-centos的镜像,以后就可以直接从这个镜像生成新的容器,不需要一直下载。步骤如下:

docker build -t base-centos .

# 查看现有的镜像:
[root@docker001 baseimage]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
base-centos latest 646e329bb8db 2 minutes ago 157MB # 使用docker login 登录自己的docker账号

将它push到我们的dockerhub上,再在另外两个服务器上pull下来,现在三个服务器上都有这个镜像啦,我给他起的名字叫lanblue/mygoodcentos。

配置redis主从节点

我们使用的服务器是服务器1和服务器2。

TIPS: 对于xshell可以使用右键选择发送键输入到所有会话,这样就不需要配置两遍了。或者使用scp语句将配置好的文件共享给其他服务器:

# scp local_file remote_username@remote_ip:remote_folder
scp redis.conf root@58.131.71.196:/blue/redis02
  1. 首先创建文件夹,注意不要放在home路径下,否则容易因为权限问题是容器运行失败。我创建的目录为/blue/redis01,指令比较简单:
cd /
mkdir blue && cd blue
mkdir redis01 && cd redis01
  1. 创建Dockerfile,内容如下:
FROM lanblue/mygoodcentos
MAINTAINER blue<blue@email.com> COPY redis.conf /usr/local/etc/redis/redis.conf VOLUME ["/data1"] WORKDIR /etc/redis # 开放端口7000
EXPOSE 7000 # 使用配置文件启动
CMD [ "redis-server", "/usr/local/etc/redis/redis.conf"]
  1. 从官网上下载一个redis.conf放在redis01目录下,redis.conf则是redis的一些配置,这个和之前单机版的redis一主一从三哨兵的配置基本相同,做如下修改:
# 注释掉bind 127.0.0.1
# bind 127.0.0.1 port 7000 # 这里如果是yes会影响使用配置文件启动
daemonize no pidfile /var/run/redis_7000.pid # 需要设置以下两处密码,密码要一致
requirepass testmaster123
masterauth testmaster123 # 修改保护模式,如果是yes会导致外部服务器无法访问
protected-mode no # 对于服务器2,还需要加上一句,表示是服务器1的从服务器
# slaveof 主.机.I.P 端口
slaveof 123.57.234.161 7000
  1. 创建镜像和运行容器:
# 创建镜像
docker build -t myredis .
# 启动容器
docker run -d -p 7000:7000 --name redis-test myredis
# 进入容器内部
docker exec -it redis-test /bin/bash
# 查看容器内进程
ps -ef
  1. 测试:

root@9692ae0ac72c:/etc/redis# redis-cli -p 7000
127.0.0.1:7000> auth testmaster123
OK
127.0.0.1:7000> info replication

哨兵节点

在/blue下创建文件夹sentinel01。其内存放Dockerfile和sentinel.conf文件。

  1. Dockerfile文件内容如下:
FROM lanblue/mygoodcentos
MAINTAINER blue<blue@email.com> COPY sentinel.conf /usr/local/etc/redis/sentinel.conf # VOLUME ["/data2"] # 开放端口17000
EXPOSE 17000 # 使用配置文件启动
CMD [ "redis-sentinel", "/usr/local/etc/redis/sentinel.conf"]
  1. sentinel.conf文件如下,注意不能在配置文件里设置daemonize yes,会导致我们的指定配置失败:
port 17000
sentinel monitor mymaster 123.57.234.161 7000 2
sentinel auth-pass mymaster testmaster123 sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
# 设置为no才会被其他主机发现
protected-mode no
  1. 创建镜像,启动容器,进入容器内部:
# 创建镜像
docker build -t mysentinel .
# 启动容器
docker run -d -p 17000:17000 --name sentinel-test mysentinel
# 进入容器内部
docker exec -it sentinel-test /bin/bash
# 访问17000端口
redis-cli -p 17000
# 查看哨兵情况
# 以下是端口返回的信息
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=123.57.234.161:7000,slaves=1,sentinels=4 # 哨兵节点会自动发现其他哨兵,如果某些哨兵线程已经失效了,可以用下列语句更新
127.0.0.1:17000> SENTINEL RESET *
(integer) 1
  1. 主从切换测试

    使用docker stop 语句可以关闭某个运行的容器。关闭主节点所在的容器后可以观察到从节点变成master。切换基本与之前单机版本相同。

多服务器使用Docker设置一主一从三哨兵redis(完整)的更多相关文章

  1. 为什么阿里云服务器的docker启动tomcat这么慢??

    https://blog.csdn.net/tianyiii/article/details/79314597 最近在阿里云服务器使用Docker启动Tomcat,发现tomcat服务器启动过程很慢. ...

  2. 阿里云服务器搭建Docker版AWVS

    本文严重参考该文章:https://www.sqlsec.com/2020/04/awvs.html 阿里云服务器搭建Docker版AWVS,因为之前有使用Docker的经验,所以本文只是简述一下安装 ...

  3. 单台服务器-利用docker搭建Redis哨兵集群模式

    前言:只有一台华为云服务器,所以打算创建三个容器来模拟三个服务器了. 一:拉取redis镜像 二:拉取redis.conf文件 放在自定义的目录下:wget -c http://download.re ...

  4. 腾讯云轻量服务器通过Docker搭建外网可访问连接的redis5.x集群

    总结记录/朱季谦 最近买了一台4核16的腾讯云轻量应用服务器,花了我快四百的大洋,打算搭建一堆docker组件集群,最先开始是通过docker搭建redis集群,计划使用三个端口,分别是7001,70 ...

  5. 在服务器的docker里 装anacond3深度学习环境的全流程超基础

    ​ 背景: 实验室给我分配了一个服务器 已经装好了docker 和nvidi docker . 现在我的目标是创建我自己的docker 然后在我自己的docker里装上anaconda环境. 我以前从 ...

  6. Linux服务器安全登录设置记录

    在日常运维工作中,对加固服务器的安全设置是一个机器重要的环境.比较推荐的做法是:1)严格限制ssh登陆(参考:Linux系统下的ssh使用(依据个人经验总结)):     修改ssh默认监听端口    ...

  7. nginx服务器绑定域名和设置根目录的方法

    nginx服务器绑定域名以及设置根目录非常方便,首先进入nginx安装目录,然后执行 vim conf/nginx.conf 打开nginx的配置文件,找到 server { ..... ..... ...

  8. Windows Server 2008 R2服务器系统安全设置参考指南

    Server 2008 R2服务器系统安全设置参考指南  重点比较重要的几部 1.更改默认administrator用户名,复杂密码 2.开启防火墙 3.安装杀毒软件 1)新做系统一定要先打上补丁(升 ...

  9. 【转载】 IIS服务器防盗链设置

    在实际运行的服务器环境中,我们自己网站中的资源一般不希望被外部网站引用,被外部网站引用IIS网站中的资源文件,一是会加重了服务器的负担,二是占用了你自己服务器的外网带宽资源,因此我们希望防止盗链这种情 ...

随机推荐

  1. 晶振(crystal)与谐振荡器(oscillator)

    参考: 1. https://wenku.baidu.com/view/e609af62f5335a8102d2202f.html 2. 晶体振荡器也分为无源晶振和有源晶振两种类型.无源晶振与有源晶振 ...

  2. [POI2009]ARC-Architects

    [POI2009]ARC-Architects 题意: 给定一个序列,从中挑选k个数,满足下标单调递增,并且字典序最小: 思路: 由于字典序最小,所以考虑贪心,即前面的数尽可能大,所以用单调队列维护最 ...

  3. laravel重写

    laravel location / { try_files $uri $uri/ /index.php?$query_string; } ci location / { try_files $uri ...

  4. javascript arcgis 取区域中心点

    javascript arcgis 取区域中心点 //graphic是绘制完多边形之后返回的对象 //获得多边形的中心点坐标 var centerPoint=graphic.geometry.getE ...

  5. 第七章 HTTP协议原理

    一.HTTP协议概述 1.什么是HTTP? HTTP 全称:Hyper Text Transfer Protocol 中文名:超文本传输协议 http就是将用户的请求发送到服务器,将服务器请求到的内容 ...

  6. 第三章 虚拟机的简单使用及其xshell远程工具的使用

    一.虚拟机的快照 1.虚拟机的几种状态: 开机状态 === 运行状态 关机状态 挂起状态 === 虚拟机不关机,但是你使用不了 定身术 快照就是虚拟机的某种状态 === 月光宝盒 2.快照分类: 开机 ...

  7. C# Timer用法及实例讲解

    摘自:http://www.cnblogs.com/xcsn/archive/2013/05/10/3070485.html 1.C# Timer用法及实例详解 http://developer.51 ...

  8. date命令之移动修改日志日期

    [16:19:50 root@C8[ 2020-06-16DIR]#touch app.log [16:21:25 root@C8[ 2020-06-16DIR]#ll total 0 -rw-r-- ...

  9. spring-boot-route(二十一)quartz实现动态定时任务

    Quartz是一个定时任务的调度框架,涉及到的主要概念有以下几个: Scheduler:调度器,所有的调度都由它控制,所有的任务都由它管理. Job:任务,定义业务逻辑. JobDetail:基于Jo ...

  10. Linux系统安装Redis(2020最新最详细)

    2020最新Linux系统发行版ContOS7演示安装Redis 为防止操作权限不足,建议切换root用户,当然如果你对Linux命令熟悉,能够自主完成权限更新操作,可以不考虑此推荐. 更多命令学习推 ...