本来应该续之前那篇博客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. Eclipse 重命名工程、包、类

    Eclipse版本 重命名工程,使用鼠标右键点击工程,选Refactor > Rename...(快捷键:Alt + Shift + R) 重命名包.类的操作与重命名工程一样. 其实,最简单的操 ...

  2. P 4315 月下毛景树

    题目描述 毛毛虫经过及时的变形,最终逃过的一劫,离开了菜妈的菜园. 毛毛虫经过千山万水,历尽千辛万苦,最后来到了小小的绍兴一中的校园里. 爬啊爬~爬啊爬毛毛虫爬到了一颗小小的"毛景树&quo ...

  3. Web前后端:如何分离,如何解耦?

    摘要:在本文中我们一起来探讨一下为什么要在软件开发中进行前后端的分离,如何做到前后端分离,如何解耦. 简单地说,就是要把复杂的问题简单化,把一个从0到N的问题转化为N个0到1的问题.另一个相近的说法就 ...

  4. 111 01 Android 零基础入门 02 Java面向对象 04 Java继承(上)02 继承的实现 01 继承的实现

    111 01 Android 零基础入门 02 Java面向对象 04 Java继承(上)02 继承的实现 01 继承的实现 本文知识点: 继承的实现 说明:因为时间紧张,本人写博客过程中只是对知识点 ...

  5. 状压DP——【蜀传之单刀赴会】

    某王   老师今天考了一套三国题,AK了...就挑一道最恶心的题来写一写吧. 题目描述: [题目背景] 公元215年,刘备取益州,孙权令诸葛瑾找刘备索要荆州.刘备不答应,孙权极为恼恨,便派吕蒙率军取长 ...

  6. Anaconda安装和使用 akshare获取股票数据

    介绍 Anaconda是开源的Python包管理器.既是Python各种库的大礼包集合,特别是数据分析和科学计算方面的库都预装了,也是一个能创建虚拟机环境的工具. 我为什么安装 我安装它的原因不是科学 ...

  7. MeteoInfoLab脚本示例:计算涡度、散度

    用U/V分量数据计算涡度和散度,计算涡度的函数是hcurl,计算散度的函数是hdivg,参数都是U, V.脚本程序: f = addfile('D:/Temp/GrADS/model.ctl') u ...

  8. 《python 网络数据采集》代码更新

    <python 网络数据采集>这本书中会出现很多这一段代码: 1 from urllib.request import urlopen 2 from bs4 import Beautifu ...

  9. 单调队列优化题:最大数(P1198)

    题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:不超过当前数列的长度.(L>0) ...

  10. js 如何获取浏览器的高度?

    <SCRIPT LANGUAGE="JavaScript"><!--var s = ""; s += " 网页可见区域宽:" ...