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脚本执行顺序如下:
- 若全新 无构建镜像,则需build -》 run
- 若run失败,可使用logs查询日志
- 若失败,重新启动容器(不改dockerfile)则 stop-》rm->run
- 若修改dockerfile ,且已启动,则stop->rm->rmi->build->run
- 若不修改文件 只是重启 ,则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
-
调整从节点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