第三篇:以哨兵模式搭建redis集群环境

一、服务器准备

172.30.2.223 master
172.30.2.133 slave
172.30.2.225 slave

每个节点上部署一个redis实例和一个哨兵实例
redis实例端口 6379
哨兵实例端口 9999

二、准备镜像

从原有服务器上导出镜像 
docker save harbor.neuqsoft.com/common/redis:3.2.5 > redis.tar

三、主节点上安装redis

1、创建工作目录并授权

 cd /
 sudo mkdir work_nosql
 sudo chown -R ubuntu:ubuntu /work_nosql/
 cd /work_nosql
 mkdir redis
 cd redis
 mkdir bin dockerfile conf data logs backup

2、上传redis镜像redis.tar到/work_nosql,并导入

cd /work_nosql
docker load < redis.tar

3、编写启动脚本

cd /work_nosql/redis/bin
vim startredis.sh

脚本内容:

#!/bin/bash
set -e
#############################################################################################################
docker run  -d -p 6379:6379 --name redisserver --restart=always \
			-v /work_nosql/redis/logs:/var/log/redis/ \
			-v /work_nosql/redis/data:/data \
			-v /etc/timezone:/etc/timezone \
			-v /etc/localtime:/etc/localtime \
			-h redisserver harbor.neuqsoft.com/common/redis:3.2.5 \

4、授权限并执行脚本

chmod +x ./startredis.sh
./startredis.sh

5、查看运行状态

	docker ps -a 发现状态一直是restarting
	docker logs -f --tail 200 redisserver查看日志,报如下错误:
	*** FATAL CONFIG FILE ERROR ***
	Reading the configuration file, at line 163
	>>> 'logfile "/var/log/redis/redis-server.log"'
	Can't open the log file: Permission denied

	*** FATAL CONFIG FILE ERROR ***
	Reading the configuration file, at line 163
	>>> 'logfile "/var/log/redis/redis-server.log"'
	Can't open the log file: Permission denied

6、解决启动报错问题
执行:

docker run -it --name temp -v /work_nosql/redis/logs:/var/log/redis/ harbor.neuqsoft.com/common/redis:3.2.5 /bin/bash
进入临时容器,处理日志文件权限问题:
cd /var/log
chown -R root:root ./redis
cd /var/log/redis 
echo '' > redis-server.log
chmod 777 ./redis-server.log
exit
docker rm -f temp

7、将配置文件映射到宿主机

docker cp redisserver:/usr/local/etc/redis/redis.conf /work_nosql/redis/conf

修改启动脚本,增加目录映射-v /work_nosql/redis/conf/redis.conf:/etc/redis/redis.conf ,并把/etc/redis/redis.conf追加到镜像后,使用此配置文件启动。便于后期修改配置文件对redis调优

#!/bin/bash
set -e
#############################################################################################################
docker run  -d -p 6379:6379 --name redisserver --restart=always \
			-v /work_nosql/redis/logs:/var/log/redis/ \
			-v /work_nosql/redis/data:/data \
			-v /etc/timezone:/etc/timezone \
			-v /etc/localtime:/etc/localtime \
			-v /work/redis/conf/redis.conf:/etc/redis/redis.conf \
			-h redisserver harbor.neuqsoft.com/common/redis:3.2.5 \
			/etc/redis/redis.conf

8、删除容器,重新启动

docker rm -f redisserver
cd /work_nosql/redis/bin
./startredis.sh
此时redis单点部署完成,但是从外面不能访问,需要修改/work/redis/conf下redis.conf文件
cd /work/redis/conf
vi redis.conf
输入/bind一直按N,直至找到bind 127.0.0.1 将这个注释掉
vi redis.conf
输入/protected-mod一直按N,直至找到protected-mod yes 将yes修改为no
docker restart redisserver   重启redis服务

四、部署其他slave节点

按着部署主节点的方式部署其他两个slave节点

五、配置主节点和从节点

1、配置主节点

cd /work_nosql/redis/conf/
vim redis.conf
查看并修改以下参数配置:
port 6379
slave-read-only yes
appendonly yes
cluster-enabled no       (只有集群cluster模式部署时此参数才设置为yes,否则redis实例不能单独运行插入数据)

重启 docker restart redisserver

2、配置两个从节点

cd /work_nosql/redis/conf/
vim redis.conf
查看以下参数配置:
port 6379
slave-read-only yes
appendonly yes
slaveof 172.30.2.223 6379     表明该节点是主节点的salve(主节点的ip和端口)
cluster-enabled no       (只有集群cluster模式部署时此参数才设置为yes,否则redis实例不能单独运行插入数据)

重启 docker restart redisserver

验证是否主从:
在主节点上插入数据,在从节点上能看到,说明主从搭建成功,接下来需要搭建哨兵集群

六、每个节点安装哨兵

	mkdir /work_nosql/redis_sen
	cd /work_nosql/redis
	cp -r ./* /work_nosql/redis_sen/
	cd /work_nosql/redis_sen/conf/
	mv redis.conf redis.conf.bak
	vim redis.conf

插入如下信息:

port 9999
dir "/tmp"
##sentinel监控的redis的名字、IP和端口,最后一个数字是sentinel做决策的时候需要投赞同票的最少的sentinel的数量。(172.30.2.223为master的ip)
sentinel monitor mymaster 172.30.2.223 6379 2
##选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长。
sentinel config-epoch mymaster 1
sentinel leader-epoch mymaster 1
sentinel current-epoch 1

###logfile "/logs/log_sentinel_9999.log"

修改启动脚本:

cd /work_nosql/redis_sen/bin
vim startredis.sh

最后脚本如下:

#!/bin/bash
set -e
#############################################################################################################
docker run  -d -p 9999:9999 --name redissenserver --restart=always \
			-v /work_nosql/redis_sen/logs:/var/log/redis/ \
			-v /work_nosql/redis_sen/data:/data \
			-v /etc/timezone:/etc/timezone \
			-v /etc/localtime:/etc/localtime \
			-v /work_nosql/redis_sen/conf/redis.conf:/etc/redis/redis.conf \
			-h redisserver harbor.neuqsoft.com/common/redis:3.2.5 \
			/etc/redis/redis.conf --sentinel \
启动: ./startredis.sh
查看日志发现报错:
Sentinel config file /etc/redis/redis.conf is not writable: Permission denied. Exiting...

解决:

docker rm -f redissenserver
docker run -it --name temp -v /work_nosql/redis_sen/conf/redis.conf:/etc/redis/redis.conf  harbor.neuqsoft.com/common/redis:3.2.5 /bin/bash
cd /etc/redis
chown -R root:root ./*
chmod 777 ./*
exit
docker rm -f temp 
docker rm -f redissenserver
cd /work_nosql/redis_sen/bin
./startredis.sh

每个节点都需要安装哨兵

七、redis及哨兵启用密码认证

1、主节点及从节点都配置

/work_nosql/redis/conf下redis.conf增加:
-----配置redis Slave密码为123456
requirepass 123456           
-----由于slave需要和master交互,在slave上需配置master的密码验证
masterauth 123456

配置完成后重启所有节点的redis服务。这时候主从复制没问题。但是如果主节点挂了之后不会自动选举,因为哨兵也需要配置验证的密码

2、哨兵配置文件配置

/work_nosql/redis_sen/conf下redis.conf增加:
----master为你的自定义哨兵集群master字符串

sentinel auth-pass master 123456         


重启所有的哨兵服务

3、测试停止主节点是否能够自动切换

附上详细搭建的过程

你可能感兴趣的:(redis学习总结)