二、redis–单机版,主从复制模式,哨兵模式,集群模式搭建
redis前言
Redis 是一种基于 键值对 的 NoSQL 数据库。与很多键值对数据库不同,Redis 提供了丰富的 值数据存储结构,包括 string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、bitmap(位图)等等。
redis正文
Redis 是一个使用 ANSI C 编写的开源、支持 网络、基于 内存、单线程模型、可选持久性 的 键值对存储数据库
1.redis的特性
速度快,基于键值对,丰富的功能(缓存,发布订阅,lua脚本,事务,pipeline等),简单稳定,客户端语言多,持久性,高可用,分布式,水平扩容。
2.redis的应用场景
缓存,排行榜,计数器,社交网络,消息队列
3.redis的安装配置
3.1 redis单机版安装
1)下载源码并解压
cd /usr/local/
wget http://download.redis.io/releases/redis-4.0.11.tar.gz
tar -zxvf redis-4.0.2.tar.gz
2)编译安装
cd /usr/local/redis-4.0.11
make install PREFIX=/usr/local/redis
3)复制redis命令到/usr/local/bin目录下
cd /usr/local/redis/bin/
cp redis-cli redis-server redis-sentinel /usr/local/bin
4)修改redis配置文件redis.conf 默认端口是6379
cp /usr/local/redis-4.0.11/redis.conf /usr/local/
5)设置后台启动
修改redis.conf 把daemonize no 改正daemonize yes
6)设置远程访问
bind 0.0.0.0
7)配置redis日志记录
logfile /var/log/redis_6379.log
8)设置redis请求密码
requirepass "123456"
9)客户端访问
redis-cli -h 127.0.0.1 -p 6379 -a 123456
10)redis的常用命令
启动命令:redis-server /usr/local/redis.conf
关闭命令:redis-cli -h 127.0.0.1 -p 6379 shutdown
查看是否启动:ps -ef | grep redis
进入客户端:redis-cli
关闭客户端:redis-cli shutdown
11)开放防火墙端口
添加规则
iptables -I INPUT -p tcp -m tcp --dport 6379 -j ACCEPT
保存规则
service iptables save
重启iptables
service iptables restart
3.2 redis主从复制模式安装
角色 | ip地址 | 端口号 |
---|---|---|
Redis Master | 10.206.20.231 | 16379 |
Redis Slave | 10.206.20.231 | 26379 |
1)基本步骤参考单机版安装,修改master节点配置,redis.conf
修改bind ,port
2)修改slave节点配置,redis.conf
修改bind,port
slaveof 10.206.20.231 16379
masterauth 123456
3)启动master,salve服务
4)redis客户端分别连入maser,slave节点
redis-cli -h 10.206.20.231 -p 16379 -a 123456
redis-cli -h 10.206.20.231 -p 26379
5)验证主从复制模式
在master节点set master_port "16379"
在slave节点 get master_port
3.2 redis哨兵模式模式安装
Redis Sentinel的基本概念:
Redis Sentinel 是 Redis 高可用 的实现方案。
Sentinel 是一个管理多个 Redis 实例的工具,它可以实现对 Redis 的 监控、通知、自动故障转移
主从复制,哨兵模式架构对比:
Redis Sentinel的架构
1) Redis Sentinel的主要功能
主节点存活检测、主从运行情况检测、自动故障转移、主从切换
2)Redis Sentinel的工作原理
1))每个 Sentinel 以 每秒钟 一次的频率,向它所知的 主服务器、从服务器 以及其他 Sentinel 实例 发送一个 PING 命令。
2))如果一个 实例(instance)距离 最后一次 有效回复 PING 命令的时间超过 down-after-milliseconds 所指定的值,那么这个实例会被 Sentinel 标记为 主观下线。
3))如果一个 主服务器 被标记为 主观下线,那么正在 监视 这个 主服务器 的所有 Sentinel 节点,要以 每秒一次 的频率确认 主服务器 的确进入了 主观下线 状态。
4))如果一个 主服务器 被标记为 主观下线,并且有 足够数量 的 Sentinel(至少要达到 配置文件 指定的数量)在指定的 时间范围 内同意这一判断,那么这个 主服务器 被标记为 客观下线。
5))在一般情况下, 每个 Sentinel 会以每 10 秒一次的频率,向它已知的所有 主服务器 和 从服务器 发送 INFO 命令。当一个 主服务器 被 Sentinel 标记为 客观下线 时,Sentinel 向 下线主服务器 的所有 从服务器 发送 INFO 命令的频率,会从 10 秒一次改为 每秒一次。
6))Sentinel 和其他 Sentinel 协商 主节点 的状态,如果 主节点 处于 SDOWN 状态,则投票自动选出新的 主节点。将剩余的 从节点 指向 新的主节点 进行 数据复制
7))当没有足够数量的 Sentinel 同意 主服务器 下线时, 主服务器 的 客观下线状态 就会被移除。当 主服务器 重新向 Sentinel 的 PING 命令返回 有效回复 时,主服务器 的 主观下线状态 就会被移除。
3)Redis Sentinel搭建
1))Redis Sentinel的节点规划
角色 | ip地址 | 端口号 |
---|---|---|
Redis Master | 10.206.20.231 | 16379 |
Redis Slave1 | 10.206.20.231 | 26379 |
Redis Slave1 | 10.206.20.231 | 36379 |
Redis Sentinel1 | 10.206.20.231 | 16380 |
Redis Sentinel2 | 10.206.20.231 | 26380 |
Redis Sentinel3 | 10.206.20.231 | 36380 |
2))Redis-Server的配置管理,分别拷贝三份 redis.conf 文件到 /usr/local/redis-sentinel 目录下面。三个配置文件分别对应 master、slave1 和 slave2 三个 Redis 节点的 启动配置。
cp /usr/local/redis-4.0.11/redis.conf /usr/local/redis-sentinel/redis-16379.conf
cp /usr/local/redis-4.0.11/redis.conf /usr/local/redis-sentinel/redis-26379.conf
cp /usr/local/redis-4.0.11/redis.conf /usr/local/redis-sentinel/redis-36379.conf
3)) 分别修改三分配置文件:
主节点:redis-16379.conf
daemonize yes
pidfile /var/run/redis-16379.pid
logfile /var/log/redis/redis-16379.log
port 16379
bind 0.0.0.0
timeout 300
databases 16
dbfilename dump-16379.db
dir ./redis-workdir
masterauth 123456
requirepass 123456
从节点1:redis-26379.conf
daemonize yes
pidfile /var/run/redis-26379.pid
logfile /var/log/redis/redis-26379.log
port 26379
bind 0.0.0.0
timeout 300
databases 16
dbfilename dump-26379.db
dir ./redis-workdir
masterauth 123456
requirepass 123456
slaveof 127.0.0.1 16379
从节点2:redis-36379.conf
daemonize yes
pidfile /var/run/redis-36379.pid
logfile /var/log/redis/redis-36379.log
port 36379
bind 0.0.0.0
timeout 300
databases 16
dbfilename dump-36379.db
dir ./redis-workdir
masterauth 123456
requirepass 123456
slaveof 127.0.0.1 16379
4))Redis-Server启动验证
redis-server /usr/local/redis-sentinel/redis-16379.conf
redis-server /usr/local/redis-sentinel/redis-26379.conf
redis-server /usr/local/redis-sentinel/redis-36379.conf
5))Sentinel的配置管理
分别拷贝三份 redis-sentinel.conf 文件到 /usr/local/redis-sentinel 目录下面。三个配置文件分别对应 master、slave1 和 slave2 三个 Redis 节点的 哨兵配置。
cp /usr/local/redis-4.0.11/sentinel.conf /usr/local/redis-sentinel/sentinel-16380.conf
cp /usr/local/redis-4.0.11/sentinel.conf /usr/local/redis-sentinel/sentinel-26380.conf
cp /usr/local/redis-4.0.11/sentinel.conf /usr/local/redis-sentinel/sentinel-36380.conf
节点1:sentinel-16380.conf
protected-mode no
bind 0.0.0.0
port 16380
daemonize yes
sentinel monitor master 127.0.0.1 16379 2
sentinel down-after-milliseconds master 5000
sentinel failover-timeout master 180000
sentinel parallel-syncs master 1
sentinel auth-pass master 123456
logfile /var/log/redis/sentinel-16380.log
节点2:sentinel-26380.conf
protected-mode no
bind 0.0.0.0
port 26380
daemonize yes
sentinel monitor master 127.0.0.1 16379 2
sentinel down-after-milliseconds master 5000
sentinel failover-timeout master 180000
sentinel parallel-syncs master 1
sentinel auth-pass master 123456
logfile /var/log/redis/sentinel-26380.log
节点3:sentinel-36380.conf
protected-mode no
bind 0.0.0.0
port 36380
daemonize yes
sentinel monitor master 127.0.0.1 16379 2
sentinel down-after-milliseconds master 5000
sentinel failover-timeout master 180000
sentinel parallel-syncs master 1
sentinel auth-pass master 123456
logfile /var/log/redis/sentinel-36380.log
6))Sentinel启动验证
redis-sentinel /usr/local/redis-sentinel/sentinel-16380.conf
redis-sentinel /usr/local/redis-sentinel/sentinel-26380.conf
redis-sentinel /usr/local/redis-sentinel/sentinel-36380.conf
7)) Sentinel配置刷新 sentinel 服务启动完毕后,会自动组成集群,并通过master节点,关联到slave节点。
----------------------------------------------------------------------------------------------------------------------------------------------
3.3 redis集群模式安装
1)集群规划:
节点名称 | 端口号 | 是主是从 | 所属主节点 |
---|---|---|---|
redis-6379 | 6379 | 主节点 | — |
redis-6389 | 6389 | 从节点 | redis-6379 |
redis-6380 | 6380 | 主节点 | — |
redis-6390 | 6390 | 从节点 | redis-6380 |
redis-6381 | 6381 | 主节点 | — |
redis-6391 | 6391 | 从节点 | redis-6381 |
2)集群目录统一,划分 为conf,data,log目录
mkdir -p /usr/local/redis-cluster
cd /usr/local/redis-cluster、mkdir conf data log
mkdir -p data/redis-6379 data/redis-6389 data/redis-6380 data/redis-6390 data/redis-6381 data/redis-6391
3)复制修改6个节点的配置
redis-6379.conf
::::::::::
daemonize yes
bind 127.0.0.1
dir /usr/local/redis-cluster/data/redis-6379
pidfile /var/run/redis-cluster/redis-6379.pid
logfile /usr/local/redis-cluster/log/redis-6379.log
port 6379
cluster-enabled yes
cluster-config-file /usr/local/redis-cluster/conf/node-6379.conf
cluster-node-timeout 10000
appendonly yes
4)安装Ruby环境
brew install ruby
5)准备rubygem redis依赖
gem install redis
6)拷贝redis-trib.rb到集群根目录
cp /usr/local/redis-4.0.11/src/redis-trib.rb /usr/local/redis-cluster
7)启动redis服务节点
redis-server conf/redis-6379.conf
redis-server conf/redis-6389.conf
redis-server conf/redis-6380.conf
redis-server conf/redis-6390.conf
redis-server conf/redis-6381.conf
redis-server conf/redis-6391.conf
8)redis-trib关联集群节点,按照 从主到从 的方式 从左到右 依次排列 6 个 redis 节点。
./redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6389 127.0.0.1:6390 127.0.0.1:6391