redis主从同步(复制+哨兵) 学习笔记
目录
0 环境
- 系统环境: centos7
- 编辑器: xshell
1 准备
2 配置
1 复制3个conf
需要三个端口6379 6380 6381 我用的阿里云 所以提前在安全组配好
准备3个conf文件 redis6379.conf redis6380.conf redis6381.conf
# 复制3个conf 类似 不在追叙
cp redis.conf redis6379.conf
2 修改redis6379.conf
# 文件的复制 为了省事 可以整个项目复制 cp -R redis redis-6379 类似
vim redis6379.conf
port 6379
pidfile /var/run/redis_6379.pid
logfile "6379.log"
dbfilename dump6379.rdb
appendfilename "appendonly6379.aof"
# wq保存退出
# redis-server redis6379.conf
# 运行
redis-cli -a 123456
3 修改redis6380.conf
将redis6380.conf中6379全改为6380 下面的redis6381.conf也是一样 保存退出 如图
- 访问redis-cli -p 6380 -a 123456
# 主节点设为6379 但是重启之后 又得重新设置 所以需要在conf中配置
SLAVEOF 127.0.0.1 6379
# 查看6379里的数据 是否同步 是 --> 有数据
keys *
# 可以通过它查看 具体信息
info replication
- 在reids6380.conf中设置连接6379认证密码
- 在reids6380.conf设置主节点
- 6380节点(从节点)不可写入(reids6380.conf可以设置只读 no 即可写入)
4 修改redis6381.conf(接力棒)
和redis6380.conf修改一致
但是有一个问题出现了 都指向6379 增加了6379的负担 现在有个方式 接力的模式
6379 -> 6380 -> 6381 (6380同步6379 6381同步6380 有点血缘的传承(但不全一样 类似) 爷爷 --> 爸爸 --> 儿子)
127.0.0.1:6381> SLAVEOF 127.0.0.1 6380
OK
127.0.0.1:6381> keys *
1) "a"
127.0.0.1:6381> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6380
master_link_status:up
master_last_io_seconds_ago:6
master_sync_in_progress:0
slave_repl_offset:6468
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:8aaef6f934ddeb720218b07507ab8277837aac9c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:6468
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:6441
repl_backlog_histlen:28
127.0.0.1:6381> exit
或是在conf上修改和之前的类似
3 哨兵配置
配置一个主服务器(6379)和2个从服务(6380 6382) --> 一主二仆
1 配置sentinel
# 配置哨兵
vim sentinel.conf
# mymaster --> 监控的主机名 可以随便取
# 2代表多少个sentinel认为主机挂了 才会切换
sentinel monitor mymaster 127.0.0.1 6379 2
# 在上面的命令之下 不然启动会卡住不动
sentinel auth-pass mymaster 123456
# 保存退出
wq
vim redisxxx.conf
# 注意 在三个节点(6379 6380 6382) 都添加如下命令 不然没密码 会。。。
masterauth "123456"
# 开启主从服务
redis-server xxx.conf
# 查看一下节点 没毛病
ps -ef|grep redis
# 都ok了 启动哨兵 会看到slave slave 从节点 @ mymaster 127.0.0.1 6379(节点)
redis-server sentinel.conf
# 先开个窗口 cli 6379 输入命令SHUTDOW 关闭主服务器
redis-cli -a 123456
# 查看哨兵 稍等一会 切换过来了 主服务器挂了 内部选举 6380上位(老大) 之前的6379(小弟)
+switch-master mymaster 127.0.0.1 6379 127.0.0.1 6380
+convert-to-slave slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6380
2 查看结果
- 主服务器挂了 等一会 从服务器切换为master
- redis-cli -a 123456 -p 6380 info replication
- 重新启动6379后 是从服务器了
- 在sentinel.conf中查看 结果已经变了
3 注意
当我们客户端不连接redis服务器是没有问题的 但是当我们调用它 没问题 但是主节点挂掉了 会报错 所以需要每个conf绑定具体的ip(配置节点也是) 监控master不能写127.0.0.1也要配置具体的ip
作者:以罗伊
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。