Redis各架构安装与服务端使用
单机
主从架构
哨兵架构
集群
单机安装
- 确保本机已安装wget和gcc,如未安装执行
yum install gcc wget -y
- 下载redis.tar.gz 本次使用的redis版本为5.08
wget http://download.redis.io/releases/redis-5.0.8.tar.gz
- 解压包到/usr/local/下
tar -zxvf redis-5.0.8.tar.gz -C /usr/local/
- 编译
cd /usr/local/redis-5.0.8/ && make
出现Hint: It's a good idea to run 'make test' ;)
表示编译成功 - 配置redis (log,data,)
daemonize yes
开启后台运行#bind 127.0.0.1
注释protected-mode no
关闭安全模式logfile "/usr/local/redis-5.0.8/log/6379.log"
方便查看日志dbfilename 6379dump.rdb
rdb文件dir /usr/local/redis-5.0.8/data/
rdb文件保存位置appendonly yes
开启aofappendfilename "6379appendonly.aof"
aof文件名
- 启动
src/redis-server config/redis6379.conf
- 检测是否启动成功
ps -ef|grep redis
- 客户端连接
src/redis-cli -h 127.0.0.1 -p 6379
(-p 6379可省略) - 关闭服务端使用
ps -ef|grep redis
查询到pidkill [查询到的pid]
主从架构
一台master负责写请求 slave只负责读请求 master与slave直接通讯同步数据
部分复制
若slave与master直接通讯断开 重连后slave会发送通讯请求并携带当前slave中数据的偏移量(理解为当前slave中数据的最大下标), 如果偏移量在master的数据缓存区内则返回偏移量到最近数据数据若不在触发全量备份
全量复制
master执行bgsave生成最新数据的rdb快照 在执行bgsave之间的操作会写入缓存区,操作执行完后将rdb快照和缓存区命令发送给slave,slave清空内存加载rdb文件与缓存区命令
- 配置主从
- 复制一份配置文件
- 将配置文件中6379替换为6380 :%s/6379/6380
- 配置主从 找到
replicaof <masterip> <masterport>
在下方输入replicaof 127.0.0.1 6379
- 配置只读
replica-read-only yes
- 启动 指定此配置文件
src/redis-server config/redis6380.conf
- 客户端连接
src/redis-cli -h 127.0.0.1 -p 6380
输入info
可以看到当前角色为slave - 测试使用6379 set值 6380可以查询到 6380是不能写入的
[root@localhost redis-5.0.8]# src/redis-cli -h 127.0.0.1 -p 6379 127.0.0.1:6379> set key value OK 127.0.0.1:6379> set key0 value0 OK 127.0.0.1:6379> exit [root@localhost redis-5.0.8]# src/redis-cli -h 127.0.0.1 -p 6380 127.0.0.1:6380> keys * 1) "key" 2) "key0" 127.0.0.1:6380> set key1 value1 (error) READONLY You can't write against a read only replica.
哨兵架构
- 主从架构的缺点: 主节点至关重要,一旦主节点挂 整个redis就不能使用了 只能改从节点的配置文件将其变为主节点
- 基本结构
- 客户端与哨兵通讯 获取master节点地址
- 哨兵之间通讯,当主节点挂了进行选举,下节详细说
- salve与哨兵通讯 当slave发现master挂了会进行选举 哨兵会将选举出的slave作为master 并将其他节点作为其从节点
- 配置(三个哨兵两个从节点,建议奇数个与选举策略有关)
- 配置哨兵
- 将sentinel复制到config下
- 配置sentinel文件
daemonize yes
后台运行pidfile /var/run/redis-sentinel26379.pid
pid文件sentinel monitor mymaster 127.0.0.1 6379 2
监视主节点ip,端口 投票数info
可以查看详细信息
- 复制两份命名为26380,26381替换文本中端口号
:%s/26379/26380
- 再配置一个从节点,方便后面演示故障转移,配置方法和配置主从一样
- 启动两个主从节点
- 启动哨兵
src/redis-sentinel config/sentinel26379.conf
- 查看是否启动成功(现在是三个redis服务 三个sentinel服务)
[root@localhost redis-5.0.8]# ps -ef|grep redis root 7319 1 0 7月28 ? 00:03:02 src/redis-server *:6379 root 7937 1 0 19:53 ? 00:00:05 src/redis-server *:6380 root 7991 1 0 20:45 ? 00:00:00 src/redis-server *:6381 root 8000 1 0 20:46 ? 00:00:00 src/redis-sentinel *:26379 [sentinel] root 8005 1 0 20:46 ? 00:00:00 src/redis-sentinel *:26380 [sentinel] root 8010 1 0 20:46 ? 00:00:00 src/redis-sentinel *:26381 [sentinel]
- 连接sentienl
src/redis-cli -h 127.0.0.1 -p 26379
- sentienl命令
SENTINEL masters
显示当前监视主机信息SENTINEL slaves mymaster
显示从节点信息
- 连接sentienl
- 配置哨兵
集群架构
- 哨兵架构缺点
- 只有一个master,虽然可以故障转移,但还是要消耗时间出现短暂断连
- 虽然支持十万并发毕竟只有一个master没法支持超高并发
- 单节点内存不宜过大,开机主从同步都需要消耗不少时间
- 集群架构模型
- 几个主从架构
- 数据分片存储
- 搭建 三台机器分别一主一从
- 在三台主机安装redis 在/usr/local/下创建redis-cluster用于保存数据
- 在第一台redis-cluster创建8001,8002文件夹依次类推
- 配置redis,将配置文件复制到8001下
#bind 127.0.0.1
protected-mode no
port 8001
daemonize yes
pidfile /var/run/redis_8001.pid
logfile "/usr/local/redis-cluster/8001/8001.log"
dbfilename 8001dump.rdb
dir /usr/local/redis-cluster/8001/
appendonly yes
appendfilename "8001appendonly.aof"
- 找到
# cluster-enabled yes
取消注释,开启集群模式 cluster-config-file nodes-8001.conf
集群配置文件cluster-node-timeout 5000
超时时间requirepass jamin
redis访问密码masterauth jamin
集群间访问密码
- 按上方配置其他的几台
- 三台机器关闭并禁用防火墙
systemctl stop firewalld && systemctl stop firewalld
启动6个服务 - 集群连接
/usr/local/redis-5.0.8/src/redis-cli -a jamin --cluster create --cluster-replicas 1 192.168.150.101:8001 192.168.150.101:8002 192.168.150.102:8003 192.168.150.102:8004 192.168.150.103:8005 192.168.150.103:8006
-a 表示密码 --cluster create --cluster-replicas 创建集群 1 表示一从 - redis会自动分配询问
Can I set the above configuration? (type 'yes' to accept):
输入yes
等到[OK] All 16384 slots covered.
创建成功 - 客户端连接
/usr/local/redis-5.0.8/src/redis-cli -a jamin -c -h 192.168.150.101 -p 8001
- cluster命令
cluster info
查看集群信息CLUSTER NODES
查看集群节点 - 添加节点
/usr/local/redis-5.0.8/src/redis-cli -a jamin --cluster add-node 192.168.150.103:8007 192.168.150.101:8001
192.168.150.103:8007为新的节点 192.168.150.101:8001为已存在的节点 - 新加入的节点是无法使用的,需要数据分片
/usr/local/redis-5.0.8/src/redis-cli -a jamin --cluster reshard 192.168.150.103:8007
询问迁移多少,接接收的id,输入all进行确认,分配方案输入yes - 添加8008作为8007的从节点
/usr/local/redis-5.0.8/src/redis-cli -a jamin --cluster reshard 192.168.150.103:8008 192.168.150.103:8007
将8008加入集群/usr/local/redis-5.0.8/src/redis-cli -a jamin -c -h 192.168.150.103 -p 8008
连接到8008CLUSTER REPLICATE e089b5aff1bf2a54d45a22763703819100fe77c8
后面为8007的id 可使用CLUSTER NODES
查看
- 删除节点
- 删除从节点
/usr/local/redis-5.0.8/src/redis-cli -a jamin --cluster del-node 192.168.150.103:8008 906c2547f0ace77e8a9928bad3f29e0b51b18385
ip:端口号 id - 删除主节点
- 槽位转移
/usr/local/redis-5.0.8/src/redis-cli -a jamin --cluster reshard 192.168.150.103:8007
- 选择转移数量 输入8007槽位数
- 选择接收主机
- 资源输入8007的id
- 结束
- 删除8007
/usr/local/redis-5.0.8/src/redis-cli -a jamin --cluster del-node 192.168.150.103:8007 e089b5aff1bf2a54d45a22763703819100fe77c8
- 槽位转移
- 删除从节点