一、安装redis
docker pull redis
二、编辑配置文件
在docker中创建redis容器需要挂载配置文件,所以先编辑配置文件
1、主服务器配置文件(redis.conf)
bind 0.0.0.0 #绑定主机地址
protected-mode no #关闭protected-mode模式,此时外部网络可以直接访问/开启protected-mode保护模式,需配置bind ip或者设置访问密码
port 6379 #指定Redis监听端口,默认端口为6379
logfile redis.log #日志文件
dir /data #指定本地数据库存放目录
replica-read-only no #保证从库也有写的操作
appendonly yes #开启aof记录日志
appendfilename "appendonly.aof" #指定更新日志文件名
appendfsync always #表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)不建议开启除非数据不允许丢失
auto-aof-rewrite-percentage 100 #aof文件增长比例,指当前aof文件比上次重写的增长比例大小(100表示增长一倍时开始重写)
auto-aof-rewrite-min-size 64m #aof文件重写最小的文件大小,即最开始aof文件必须要达到这个文件时才触发,后面的每次重写就不会根据这个变量了(根据上一次重写完成之后的大小).此变量仅初始化启动redis有效.如果是redis恢复时,则lastSize等于初始aof文件大小.
2、编写从节点配置文件,注意端口号(redis-s1.conf&&redis-s2.conf)
redis-s1:
bind 0.0.0.0
protected-mode no
port 6380
logfile redis.log
dir /data
replicaof 172.17.0.2 6379 #docker内部容器之间的虚拟ip
replica-read-only no
save 60 10000 #使用RDB持久化60秒有10000个修改触发bgsave fork一个进程进行持久化(COW)
------------------------------------------------------------------------------------
redis-s2
bind 0.0.0.0
protected-mode no
port 6381
logfile redis.log
dir /data
replicaof 172.17.0.2 6379
replica-read-only no
save 60 10000
3、编写哨兵配置文件注意端口号(sentinel.conf&&sentinel-s1.conf&&sentinel-s2.conf)
bind 0.0.0.0
protected-mode no
port 26379
dir /data
logfile sentinel.log
daemonize yes #redis使用守护进程启动
sentinel monitor redismaster 172.17.0.2 6379 2 #指定主服务器的ip和端口号,后面的数字2表示当哨兵集群当中有两个哨兵没有检测到主节点的心跳的时候表明主节点挂掉,开始推选新的主节点
-----------------------------------------------------------------------------------
bind 0.0.0.0
protected-mode no
port 26380
dir /data
logfile sentinel.log
daemonize yes
sentinel monitor redismaster 172.17.0.2 6379 2
--------------------------------------------------------------------------------------
bind 0.0.0.0
protected-mode no
port 26381
dir /data
logfile sentinel.log
daemonize yes
sentinel monitor redismaster 172.17.0.2 6379 2
三、启动容器
1、启动主容器(端口和目录根据自身情况而定)
docker run -d -p 6379:6379 -p 26379:26379 -v /redis/redis.conf:/data/redis.conf -v /redis/sentinel.conf:/data/sentinel.conf --name redis redis redis-server redis.conf
2、启动从容器
docker run -d -p 6380:6380 -p 26380:26380 -v /redis/redis-s1.conf:/data/redis-s1.conf -v /redis/sentinel-s1.conf:/data/sentinel-s1.conf --name redis-s1 redis redis-server redis-s1.conf
docker run -d -p 6381:6381 -p 26381:26381 -v /redis/redis-s2.conf:/data/redis-s2.conf -v/redis/sentinel-s2.conf:/data/sentinel-s2.conf --name redis-s2 redis redis-server redis-s2.conf
四、验证
1、验证主容器
docker exec -it redis bash #进入容器
redis-cli -p 6379 进入客户端
info replication(如下截图)
role:master 表示主节点启动成功
2、验证从节点(两个从节点验证方式一致)
docker exec -it redis-s1 bash
redis-cli -p 6380
info replication(如下截图)
role: slave
到此主从复制已经配置成功
五、下面开始操作哨兵
1、主节点启动哨兵
redis-sentinel sentinel.conf
2、从节点启动哨兵
redis-sentinel sentinel-s1.conf
---------------------------------------
redis-sentinel sentinel-s2.conf
3、验证哨兵
redis-cli -p 26379 #主节点配置的哨兵
redis-cli -p 26380 #从节点配置的哨兵
redis-cli -p 26381 #从节点配置的哨兵
info 使用命令info查看结果(如下截图)
4、验证redis挂了是否重新选举新的主节点
退出容器exit
docker stop redis 停掉主节点
默认30秒后
查看从节点
redis-cli -p 6380
redis-cli -p 6381
使用命令
info replication
发现哨兵已经为你选了一个主节点如下截图
5、如果此时在启动之前的主节点,发现此时变成了从节点
docker start redis
docker exec -it redis bahs
redis-cli -p 6379
info replication
6、此时启动哨兵发现主节点的ip和端口也变了
redis-sentinel sentinel.conf
redis-cli -p 26379
info
六、学习总结一波
1、docker安装vim
apt-get update
apt-get install vim
2、文件操作命令
mkdir data
touch redis.conf
chmod 777 -R data
3、docker安装telnet查看主从节点通不通
apt-get update
apt-get install telnet