docker进行Redis集群部署

环境:

(1)Centos7
(2)JDK1.8
(3)docker
(4)redis6.0

集群模式:

主从+哨兵,一个主节点,两个从节点,三个哨兵

概念:

哨兵 sentinel

主要功能:
监控(Monitoring):Sentinel会不断地检查你的主服务器和从服务器是否运作正常。
通知(Notification):当被监控的某个 Redis 服务器出现问题时, Sentinel可以通过API向管理员或者其他应用程序发送通知。
故障迁移:当主服务器不能正常工作时,Sentinel会自动进行故障迁移,也就是主从切换。
统一的配置管理:连接者询问sentinel取得主从的地址。

持久化方式

有两种,RDB和AOF

RDB :英文是Redis DataBase 把当前数据生成快照持久化成dump.rdb文件,类似于mysql备份输入成.sql文件。可以用save和bgsave(Background save)命令手动触发持久化,前者是同步的会阻塞客户端命令,后者是异步的开启子进程去io操作备份持久化,不会阻塞客户端命令。除了手动输入命令进行备份也可以在redis.conf配置文件中配置触发条件:

// rdb快照的触发条件格式:save m n  可以配置多个,满足任一条件都会被触发,触发执行的是异步bgsave命令而不是同步save命令,虽然配置的时候叫做save
save 900 1     // 900秒内至少有一个key发生改动就保存一次数据
save 300 10    // 300秒内至少有10个key发生改动就保存一次数据
save 60 10000  // 60秒内有10000个key发生改动就保存一次数据
# 指定本地数据库文件名,默认值为 dump.rdb
dbfilename dump.rdb

AOF:英文是 Append-Only-File(只允许追加不允许修改的文件之意) 把每次的操作都追加到文件中记录,类似于mysql的binlog,这个文件一般会比rdb的文件大,可以在redis.conf配置文件中进行配置。
默认的 AOF 持久化策略是每秒钟 fsync 一次(fsync 是指把缓存中的写指令记录到磁盘中),因为在这种情况下,redis 仍然可以保持很好的处理性能,即使 redis 故障,也只会丢失最近 1 秒钟的数据。

# 开启aof持久化 默认是关闭的
appendonly yes
# AOF文件的名字
appendfilename "appendonly.aof"
# 持久化策略 默认everysec  
# no:表示等操作系统进行数据缓存同步到磁盘(快)
# always:表示每次更新操作后手动调用 fsync() 将数据写到磁盘(慢,安全)
# everysec:表示每秒同步一次(折衷,默认值)
appendfsync everysec

建议:

(1)服务器建议3台
只有两台的话一般是搭建一主一从两个哨兵,一旦有一个服务器宕机了,那么其所在redis和哨兵都没了,就只剩下另外一个,相当于单机版了。

部署:

1、手动新建redis配置文件 redis.conf

分别在三台服务器 /home/docker/redis/conf目录下 创建redis.conf文件,从节点配置文件需要配置
replicaof

cd /home/docker
mkdir redis
cd redis
mkdir conf
cd conf
vi  redis.conf

内容如下

# 绑定ip 允许所有ip访问
bind 0.0.0.0

# 端口
port 6379

# 是否开启保护模式 yes开启的情况下,只能通过设置bind绑定的ip或者密码验证访问
protected-mode no

# 以守护进程的方式运行
daemonize no

# 日志存放地址
logfile ./redis.log

# 密码验证
requirepass 123456

# 主节点访问密码 当master服务设置了密码保护时,slav服务连接master的密码
masterauth 123456

# 开启aof持久化 类似于mysql的binlog
appendonly yes

# 从节点需要设置主节点的IP和端口
#replicaof 192.168.8.49 6379

2、手动新建哨兵配置文件sentinel.conf

cd /home/docker
mkdir redis
cd redis
mkdir conf
cd conf
vi  sentinel.conf

内容如下:

# 端口
port 26379

# 是否开启保护模式
protected-mode no

# 以守护进程的方式运行
daemonize no

# 日志存放地址
logfile ./sentinel.log

# 哨兵sentinel监控的redis主节点的 ip port quorum 
# 配置多少个sentinel哨兵统一认为master主节点失联 那么这时客观上认为主节点失联了
sentinel monitor mymaster 192.168.8.49 6379 2

# 密码认证
sentinel auth-pass mymaster 123456

# master在连续多长时间无法响应PING指令后,就会主观判定节点下线
sentinel down-after-milliseconds mymaster 3000

# 主备切换时最多可以有多少个slave同时对新的master进行同步
sentinel parallel-syncs mymaster 1

# 故障转移的超时时间
sentinel failover-timeout mymaster 180000

3、获取镜像

docker pull redis:6.0

4、启动redis

三台服务器的启动命令都是一样
启动顺序:先主后从再哨兵

docker run -d -p 6379:6379 \
-v /home/docker/redis/data:/data \
-v /home/docker/redis/conf/redis.conf:/etc/redis/redis.conf \
--name redis \
--network=host \
--restart=always \
-d redis redis-server /etc/redis/redis.conf

5、启动哨兵sentinel

docker run -p 26379:26379 \
--name sentinel-26379 \
--network=host \
--restart=always \
-v /home/docker/redis/conf/sentinel.conf:/etc/redis/sentinel.conf \
-v /home/docker/redis/data/sentinel:/data \
-d redis redis-sentinel /etc/redis/sentinel.conf

遇到的问题:

1、docekr 的网络模式 需要选择为host ,不然哨兵有时候无法连通
所以我们启动命令中使用了–network=host

参考博客及资料:

https://www.redis.com.cn/redis-persistence.html
https://www.redis.com.cn/redis-configuration.html

https://blog.csdn.net/succing/article/details/121265307?spm=1001.2014.3001.5506
https://blog.csdn.net/IT_rookie_newbie/article/details/120430807?spm=1001.2014.3001.5506

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值