redis-哨兵-高可用部署方案

redis 高可用&集群部署方案

1. redis安装部署

redis安装建议采用源码编译安装,适用大部分linux系统

# 下载redis文件,建议在想安装的地方新建文件夹然后下载到文件夹内,可根据自己的需求选择版本号。
wget http://download.redis.io/releases/redis-5.0.7.tar.gz 
# 解压源码文件
tar -xzf redis-5.0.7.tar.gz
# 创建连接
ln -s redis-5.0.7 redis
# 编译(编译之前需要确认系统安装了gcc环境,如果没安装,centos可采用 sudo yum -y install gcc安装)
make
# 安装
make install
# 启动redis,建议采用配置文件的方式启动
# 启动路径有三个:当前安装目录、创建软连接的目录、/usr/local/bin
nohup ./redis-server /opt/redis/redis/redis.conf &

2. redis哨兵解决方案

2.1 配置前准备

本次模拟在本机部署了三台虚拟机作为部署准备,分别为:

  • master:192.168.159.128
  • slave-1:192.168.159.129
  • salve-2:192.168.159.130
    计划用一台作为主,两台作为从,三台服务器互为哨兵sentinel节点,实现主从复制,并不在人为干扰的情况下,实现故障自动迁移
    架构图如下:
    在这里插入图片描述

2.2 master主节点配置

logfile "redis.log"  # 配置日志文件存放位置
port 6379    # 配置端口,此处使用默认端口即可
daemonize yes   # 配置以守护进程的方式启动
dir /opt/redis/redis/data/   # 配置文件写入目录
bind 0.0.0.0  # 这个参数网上说法比较多,自己试了几次如果几个节点配置在同一台设备上,用端口号来区分的话,配置为127.0.0.1,否则配置为0.0.0.0

配置完成重启redis服务

2.3 slave 节点配置

logfile "redis.log"  # 配置日志文件存放位置
port 6379    # 配置端口,此处使用默认端口即可
daemonize yes   # 配置以守护进程的方式启动
dir /opt/redis/redis/data/   # 配置文件写入目录
bind 0.0.0.0  # 这个参数网上说法比较多,自己试了几次如果几个节点配置在同一台设备上,用端口号来区分的话,配置为127.0.0.1,否则配置为0.0.0.0
replicaof 192.168.159.128 6379  # 配置主节点的IP和端口,有的配置文件里面没有这一项,直接在配置文件里加入就可以;
masterauth 123  # 配置主节点redis的密码;如果密码为空,则可以省去这一项

2.4 验证

主节点视角
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.159.129,port=6379,state=online,offset=11335,lag=0
slave1:ip=192.168.159.130,port=6379,state=online,offset=11335,lag=1
master_replid:013734ec7f21c521d15d003f57165c290c88bdaf
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:11335
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:11335

从节点视角
127.0.0.1:6379> INFO replication
# Replication
role:slave
master_host:192.168.159.128
master_port:6379
master_link_status:up
master_last_io_seconds_ago:5
master_sync_in_progress:0
slave_repl_offset:14583
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:013734ec7f21c521d15d003f57165c290c88bdaf
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:14583
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:14583

主从复制验证
#  主节点生成键值对
127.0.0.1:6379> set redis best
OK
127.0.0.1:6379> get redis
"best"
#  从节点1验证复制
127.0.0.1:6379> get redis
"best"

# 从节点2验证复制
127.0.0.1:6379> get redis
"best"

到此为止,主从复制功能完成

2.5 此阶段踩过的坑
  • 报错《ERROR CONDITION ON SOCKET FOR SYNC: NO ROUTE TO HOST》
    发现通过telnet主节点ip:port也不通,检查原因为主节点服务器防火墙限制
    解决方案:关闭主节点服务器防火墙(这种方式不建议,建议在主节点配置防火墙允许通过就好了)

2.6 哨兵sentinel配置

sentinel 最后会实现故障转移,转移时会随机选一台salve做为master

踩过的坑,以及解决方案
  • 如果redis节点需要配置密码,则所有节点都需要配置同样的密码,以及配置要同步,主要体现在:
    redis.conf–>masterquth xxx
  • 同样的,为了保证故障可以准确跳转,所有节点均需要注意防火墙设置(三个节点需要能互相正常访问)
sentinel.conf 配置:
sentinel.conf
# 配置端口,bind参数屏蔽了
port 26379
daemonize yes
logfile "redis-sentinel.log"
dir /opt/redis/redis/data
# 配置监听的redis主节点IP、端口、后面的2的意思为需要有两个及以上的哨兵同意才会认定主节点down掉并共同选举新的master节点
sentinel monitor mymaster 192.168.159.128 6379 2
# 后面三项配置为sentinel里面的默认配置
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000

启动sentinel哨兵

./redis-sentinel sentinel.conf

当所有sentinel节点都起来之后,sentinel的配置文件会有所变化,变化如下:

# 除了主节点之外,寻找到两台从节点
sentinel known-replica mymaster 192.168.159.128 6379
sentinel known-replica mymaster 192.168.159.130 6379
# 另外两台哨兵节点
sentinel known-sentinel mymaster 192.168.159.129 26379 e3a68083cc8f7bb61f217e923963cadfb856ed40
sentinel known-sentinel mymaster 192.168.159.128 26379 9341e0e29c853e035bbfdcd02b0f0e6e79ad7dae

当发生如上变化之后,侧面证明所有哨兵节点均已经起来了;

模拟故障转移
  • 没发生故障:
    在这里插入图片描述
  • 主节点故障
    在这里插入图片描述
  • 故障转移
    在这里插入图片描述
  • 原先down掉的主节点起来之后:
    -在这里插入图片描述
    总结一下:
  • 安装redis建议采用源码安装
  • 如果redis有密码、则所有redis节点都需要配置同样的密码,并且都需要配置masyerauth字段;

由于第一次部署,过程中还是遇到不少问题,没有一一记录下载,多看日志报错,基本问题不大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值