redis-单机主从哨兵-docker部署

redis-docker-单机主从哨兵部署

一、redis单机

调整系统参数
sudo vi /etc/rc.local

加入
echo never > /sys/kernel/mm/transparent_hugepage/enabled 

sudo vi /etc/sysctl.conf

加入
vm.overcommit_memory = 1
复制代码
在用户目录下 创建redis的相关文件夹
mkdir -p /home/jun/docker/redis
cd /home/jun/docker/redis
创建三个目录
mkdir shell  #构建、启动、停止等脚本
mkdir dockerfile  #dockerfile目录
mkdir volumes  #挂载配置、日志、数据文件
复制代码

在这里插入图片描述

准备dockerfile文件
cd dockerfile

vim Dockerfile
复制代码

Dockerfile内容

FROM centos:7.7.1908

# 创建者
MAINTAINER hbj

run yum install -y wget install make gcc libgcc gcc-c++ glibc-devel make && mkdir -p /docker/redis/{install,conf,data,log} && cd /docker/redis/install  && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" && tar xvzf redis.tar.gz && cd redis-5.0.3 && make && make install PREFIX=/docker/redis   && rm -rf /docker/redis/install/*.gz

USER hd
EXPOSE 6379
CMD ["/docker/redis/bin/redis-server","/docker/redis/conf/6379.conf"]
复制代码
通过dockerfile构建镜像

cd /home/hd/docker/redis/dockerfile

vim Dockerfile
复制代码

Dockerfile内容

FROM centos:7.7.1908

# 创建者
MAINTAINER hbj

run yum install -y wget install make gcc libgcc gcc-c++ glibc-devel make && mkdir -p /docker/redis/{install,conf,data,log} && cd /docker/redis/install  && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" && tar xvzf redis.tar.gz && cd redis-5.0.3 && make && make install PREFIX=/docker/redis  && useradd hd  && chown -R hd:hd /docker/redis  && rm -rf /docker/redis/install/*.gz

USER hd
EXPOSE 6379
CMD ["/docker/redis/bin/redis-server","/docker/redis/conf/6379.conf"]

复制代码

通过dockerfile构建镜像

创建shell的中脚本文件

build脚本 :构建docker镜像

vi build

#!/bin/bash
DOCKER_PATH=$PWD/../
sudo docker build -f $DOCKER_PATH/dockerfile/Dockerfile  -t redis:v1 $DOCKER_PATH/dockerfile/
复制代码

run脚本

vi run :构建并启动docker容器

#!/bin/sh
DOCKER_PATH=$PWD/../
port=6379
version=v1
imageName=redis
sudo docker run  -d -p ${port}:6379 --name  redis  -v /etc/localtime:/etc/localtime -v $DOCKER_PATH/volumes/conf:/docker/redis/conf  -v $DOCKER_PATH/volumes/data:/docker/redis/data -v $DOCKER_PATH/volumes/log:/docker/redis/log  --restart=unless-stopped  ${imageName}:${version}  /docker/redis/bin/redis-server /docker/redis/conf/${port}.conf

复制代码

exec脚本

vi exec :进入已启动成功的docker容器

#!/bin/sh
sudo docker exec -it redis /bin/bash
复制代码

logs脚本

vi logs :docker容器日志 启动容器失败时,可执行查询日志

#!/bin/bash
sudo docker logs redis
复制代码

restart

vi restart :docker容器重启

#!/bin/sh
sudo docker restart redis
复制代码

rm

vi rm :删除docker容器

#!/bin/sh
sudo docker rm redis
复制代码

rmi

vi rmi:删除docker镜像 dockerfile文件修改时 才需要执行

#!/bin/sh
sudo docker rmi redis:v1
复制代码

start

vi start:启动docker容器

#!/bin/sh
sudo docker start  redis
复制代码

stop

vi stop:停止docker容器

#!/bin/sh
sudo docker stop redis
复制代码

docker脚本执行顺序如下:

  1. 若全新 无构建镜像,则需build -》 run
  2. 若run失败,可使用logs查询日志
  3. 若失败,重新启动容器(不改dockerfile)则 stop-》rm->run
  4. 若修改dockerfile ,且已启动,则stop->rm->rmi->build->run
  5. 若不修改文件 只是重启 ,则restart 或者stop-》start

3.4 redis配置文件

logfile /docker/redis/log/6379.log
dir /docker/redis/data/
# requirepass 123456
daemonize no
#bind 127.0.0.1
复制代码

放置配置文件在volumes/conf /6379.conf 与run脚本挂载目录相同

启动与查看

先执行./build -》 run

查看docker容器状态

sudo docker ps -a
复制代码

查看日志

./logs 
或者
sudo docker logs redis
复制代码

权限设置:

文件权限
chown -R hd:hd /home/hd/docker-files/redis
可执行文件
chmod +x /home/hd/docker-files/redis/shell/*
复制代码

二、redis主从模式

i.安装主从节点redis服务


分别安装和配置主节点redis服务和从节点redis服务,方法参见单机模式的安装和配置

1、从节点的redis服务需要安装在6380端口,安装redis在不同端口  (如果在不同的服务器,大可不必)

2、主从节点必须设置访问密码 ,不要设置也可以。。。但基本都会设置
 requirepass 123456
复制代码
  1. 调整从节点redis配置

    打开配置文件6379.conf

    sudo vi /home/hd/redis/volumes/conf/6379.conf
    复制代码

    找到以下行

    # replicaof <masterip> <masterport>
    复制代码

    修改为(其中127.0.0.1和6379应该根据实际情况设置为redis主节点的ip和实际端口,此处为本机和缺省端口)

    replicaof 127.0.0.1 6379
    复制代码

    主节点和从节点设置了访问密码,需要对从节点分别进行如下配置

    找到以下行

    # masterauth <master-password>
    复制代码

    修改为(其中123456假设为访问密码,需要根据实际情况修改)

    masterauth 123456 
    复制代码

    重启主从节点redis服务

验证

进入master数据库,写入一个数据,再进入一个slave数据库,立即便可访问刚才写入master数据库的数据。如下所示
主:redis-cli
> auth 123456
> set site blog.jboost
> get site
> info replication
从:redis-cli
>auth 123456
> get site
复制代码

五 redis哨兵配置

其他与redis一样,可参考单机部署Redis

只是脚本 端口与配置文件不一样 但脚本build是一致的 因为镜像是一致的 只是容器不同

端口号分别为26379 26380 26381

vi run 修改端口号 与docker名称 启动方式

#!/bin/sh
DOCKER_PATH=$PWD/../
port=26379
version=v1
imageName=redis
sudo docker run  -d -p ${port}:26379 --name  redis-sentine-1  -v /etc/localtime:/etc/localtime -v $DOCKER_PATH/volumes/conf:/docker/redis/conf  -v $DOCKER_PATH/volumes/data:/docker/redis/data -v $DOCKER_PATH/volumes/log:/docker/redis/log  --restart=unless-stopped  ${imageName}:${version}  /docker/redis/bin/redis-server /docker/redis/conf/${port}.conf --sentinel
复制代码

exec

vi exec

#!/bin/sh
sudo docker exec -it redis-sentine-1 /bin/bash
复制代码

logs脚本

vi logs

#!/bin/bash
sudo docker logs redis-sentine-1
复制代码

restart

vi restart

#!/bin/sh
sudo docker restart redis-sentine-1
复制代码

rm

vi rm

#!/bin/sh
sudo docker rm redis-sentine-1
复制代码

rmi

vi rmi

#!/bin/sh
sudo docker rmi redis:v1
复制代码

start

vi start

#!/bin/sh
sudo docker start  redis-sentine-1
复制代码

stop

vi stop

#!/bin/sh
sudo docker stop redis-sentine-1
复制代码

哨兵配置文件

sentinel monitor修改为(其中127.0.0.1和6379应该根据实际情况设置为redis主节点的ip和实际端口,此处为本机和缺省端口)不要密码

一、关键点:哨兵要切换的话,主从配置都需要配置密码,不单单是从机
二、关键点:docker部署会存在一个问题,哨兵通信问题,需要配置sentinel announce-ip 192.212.8.117 这是通信地址,不然默认是docker内部网卡

sentinel announce-ip 10.212.8.117
port 26381
daemonize no
pidfile /var/run/redis-sentinel.pid
logfile /docker/redis/log/sentinel.log
dir /docker/redis/data/
sentinel monitor appmaster 192.212.8.114 6379 2
sentinel down-after-milliseconds appmaster 10000
sentinel failover-timeout appmaster 180000
sentinel parallel-syncs appmaster 1
sentinel auth-pass appmaster 123456
bind 0.0.0.0
复制代码

查看

在shell文件夹下执行exec脚本 进入容器

./exec
cd docker/redis/bin

./redis-cli -p 26379
复制代码
127.0.0.1:26379> info
127.0.0.1:26379>sentinel master appmaster
127.0.0.1:26379>sentinel slaves appmaster
复制代码