多服务器使用Docker设置一主一从三哨兵redis(完整)
本来应该续之前那篇博客Docker配置redis哨兵模式——多服务器·上写一个下篇的,但是忽然意识到应该将必要的环境打包为一个基础镜像,在此基础上建立与redis有关的镜像,这样既能够快速打包,又能够高度复用代码。
所以本篇实际上相当于一个完整的多服务器使用Docker来部署Redis哨兵模式的过程。
目录
- 服务器条件
- 安装Docker
- 制备基础镜像
- 配置redis主从节点
- 哨兵节点
服务器条件
因为我的服务器又是新租(日租)的,所以要重新恢复一下。
三台服务器(因为需要至少三个哨兵保证安全性)
- 服务器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
- 首先创建文件夹,注意不要放在home路径下,否则容易因为权限问题是容器运行失败。我创建的目录为/blue/redis01,指令比较简单:
cd /
mkdir blue && cd blue
mkdir redis01 && cd redis01
- 创建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"]
- 从官网上下载一个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
- 创建镜像和运行容器:
# 创建镜像
docker build -t myredis .
# 启动容器
docker run -d -p 7000:7000 --name redis-test myredis
# 进入容器内部
docker exec -it redis-test /bin/bash
# 查看容器内进程
ps -ef
- 测试:
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文件。
- 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"]
- 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
- 创建镜像,启动容器,进入容器内部:
# 创建镜像
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
- 主从切换测试
使用docker stop 语句可以关闭某个运行的容器。关闭主节点所在的容器后可以观察到从节点变成master。切换基本与之前单机版本相同。
多服务器使用Docker设置一主一从三哨兵redis(完整)的更多相关文章
- 为什么阿里云服务器的docker启动tomcat这么慢??
https://blog.csdn.net/tianyiii/article/details/79314597 最近在阿里云服务器使用Docker启动Tomcat,发现tomcat服务器启动过程很慢. ...
- 阿里云服务器搭建Docker版AWVS
本文严重参考该文章:https://www.sqlsec.com/2020/04/awvs.html 阿里云服务器搭建Docker版AWVS,因为之前有使用Docker的经验,所以本文只是简述一下安装 ...
- 单台服务器-利用docker搭建Redis哨兵集群模式
前言:只有一台华为云服务器,所以打算创建三个容器来模拟三个服务器了. 一:拉取redis镜像 二:拉取redis.conf文件 放在自定义的目录下:wget -c http://download.re ...
- 腾讯云轻量服务器通过Docker搭建外网可访问连接的redis5.x集群
总结记录/朱季谦 最近买了一台4核16的腾讯云轻量应用服务器,花了我快四百的大洋,打算搭建一堆docker组件集群,最先开始是通过docker搭建redis集群,计划使用三个端口,分别是7001,70 ...
- 在服务器的docker里 装anacond3深度学习环境的全流程超基础
背景: 实验室给我分配了一个服务器 已经装好了docker 和nvidi docker . 现在我的目标是创建我自己的docker 然后在我自己的docker里装上anaconda环境. 我以前从 ...
- Linux服务器安全登录设置记录
在日常运维工作中,对加固服务器的安全设置是一个机器重要的环境.比较推荐的做法是:1)严格限制ssh登陆(参考:Linux系统下的ssh使用(依据个人经验总结)): 修改ssh默认监听端口 ...
- nginx服务器绑定域名和设置根目录的方法
nginx服务器绑定域名以及设置根目录非常方便,首先进入nginx安装目录,然后执行 vim conf/nginx.conf 打开nginx的配置文件,找到 server { ..... ..... ...
- Windows Server 2008 R2服务器系统安全设置参考指南
Server 2008 R2服务器系统安全设置参考指南 重点比较重要的几部 1.更改默认administrator用户名,复杂密码 2.开启防火墙 3.安装杀毒软件 1)新做系统一定要先打上补丁(升 ...
- 【转载】 IIS服务器防盗链设置
在实际运行的服务器环境中,我们自己网站中的资源一般不希望被外部网站引用,被外部网站引用IIS网站中的资源文件,一是会加重了服务器的负担,二是占用了你自己服务器的外网带宽资源,因此我们希望防止盗链这种情 ...
随机推荐
- 028 01 Android 零基础入门 01 Java基础语法 03 Java运算符 08 逻辑“或”运算符
028 01 Android 零基础入门 01 Java基础语法 03 Java运算符 08 逻辑"或"运算符 本文知识点:Java中的逻辑"或"运算符 逻辑& ...
- Tensorflow学习笔记No.0
这里更新一些学习Tensorflow过程中可能用到的实用工具. Jupyter Notebook Jupyter Notebook 是一个非常方便的python编程工具,支持可视化,对于学习pytho ...
- 重装Windows系统 入门详解 - 基础教程
重装Windows系统 入门详解 - 基础教程 JERRY_Z. ~ 2020 / 10 / 13 转载请注明出处!️ 目录 重装Windows系统 入门详解 - 基础教程 一.说明 二.具体步骤 ( ...
- 发布TrajStat 1.4.4
发布TrajStat 1.4.4 (MeteoInfo Java版插件),在PSCF和CWT源区分析中增加了依据格点中的气团轨迹条数为权重进行结果处理的功能.之前的仅有按照轨迹节点数目进行权重处理的功 ...
- CentOS8平台php日志的定时切分
一,编写bash脚本: [root@yjweb crontab]# vi split_php_logs.sh 代码: #!/bin/bash # 备份php/php-fpm的日志 # 昨天的日期 fi ...
- centos8安装sersync为rsync实现实时同步
一,查看本地centos的版本: [root@localhost lib]# cat /etc/redhat-release CentOS Linux release 8.1.1911 (Core) ...
- CentOS7下RabbitMQ服务安装配置 (亲测有效)
erlang 21.3 rabbitmq-server 3.7.14 下载地址 链接: https://pan.baidu.com/s/1g_T1Q_6zpyO3AepS0ZPgYQ 提取码: abq ...
- selenium分布式启动(deepin)
1.deepin安装jdk: 下载地址:链接:https://pan.baidu.com/s/19-pU8G6RzMW92uBCxBH7sA 密码:1c7n 解压:tar -zxvf jdk-8u20 ...
- .Net Core单元测试规范
.Net Core单元测试规范 一. 前言 为了有效提升代码质量,保证DevOps的顺利进行.将全面开始采用单元测试进行覆盖,届时单元测试将完全纳入 到完整的持续构建生命周期中做为第一道质量把控的门槛 ...
- Drone 安装教程
Drone 安装教程 一. CentOS设置 1. 更换阿里源 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/ ...