本来应该续之前那篇博客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. 5分钟快速掌握Jenkins,项目一键自动部署

    5分钟快速掌握Jenkins,项目一键自动部署 目录 前言 Jenkins是什么? Jenkins环境安装搭建 Jenkins基本使用介绍 Jenkins快速构建项目,项目自动化部署 学习总结 前言 ...

  2. Docker(Docker Toolbox)配置镜像加速更换国内源

    自己当时装的是Win10专业工作室版本,不知道为什么不支持window for docker, 所以选择了Docker Toolbox 的方式,主要是为了学习,虽然这种方式是不建议安装的,但是基础的学 ...

  3. 自动创建新序列号的Cookies脚本

    已知一个网站在被访问的时候会读取电脑上存储的cookies 如果已经有cookie变量存在 则在存在的变量后按顺序增加新的序列 如电脑上有vst1变量的cookie了 那么新用户则自动创建为 vst2 ...

  4. 租房数据分析,knn算法使用

    import numpy as np import pandas as pd import matplotlib.pyplot as plt data = pd.read_excel('jiemo.x ...

  5. 快速掌握ES6语法

    常量变量 let and const 先说说常量和变量的概念吧, 常量是说那种进行一次赋值后不会更改的值,比如说游戏账户的 ID, 变量是说赋值后有更改的需求的,比如游戏名,游戏密码. 在之前的 Ja ...

  6. gin+gorm 用户服务

    package main import ( "fmt" "github.com/gin-gonic/gin" "github.com/jinzhu/g ...

  7. vue中跳转页面逻辑

    跳转详情页面具体代码 写这个页面需要安装两个 1.安装axios命令 Cnpm install axios --save 2.安装vant Cnpm install vant --save 在inde ...

  8. Shell脚本学习指南笔记(一)

    脚本语言通常是解释型的,这类程序的运行.是由解释器读入程序代码,并将其转换成内部的形式, 再执行,解释器本身是一般的编译型程序. 第一行的开头处使用#!这两个字符,当内核扫描到改行的其余部分,看是否存 ...

  9. frida框架hook参数获取方法入参模板

    python脚本 # -*- coding: utf-8 -*- import logging import frida import sys logging.basicConfig(level=lo ...

  10. 没事学学KVM(一)

    学习KVM肯定要找来一台虚机来学习呀,通过VMware workstation创建虚机,现在的电脑CPU,包括INTER,AMD都支持,公司发的电脑CPU为inter,通过开启inter VT-X可在 ...