redis集群的三种方式(linux系统)
1.集群相关知识点
(1).集群概念
通过添加服务器的数量,提供相同的服务,从而让服务器达到一个稳定、高效的状态。
(2).为什么使用redis集群?
(1)单个redis存在不稳定性。当redis服务宕机了,就没有可用的服务了。
(2)单个redis的读写能力是有限的,redis集群是为了强化redis的读写能力。
(3).redis安装介绍
1. http://redis.io/download下载Redis 压缩包(redis-5.0.3.tar.gz)
2. xshell上传到 /usr/local/redis目录下
3. tar xzf redis-5.0.3.tar.gz
4. yum install gcc
5. cd redis-5.0.3
6. make (make命令进行编译,将.c文件编译为.o文件)
7. make PREFIX=/usr/local/redis install (安装)
安装完后,在/usr/local/redis/bin下有几个可执行文件
redis-benchmark ----性能测试工具
redis-check-aof ----AOF文件修复工具
redis-check-rdb ----RDB文件检查工具(快照持久化文件)
redis-cli ----命令行客户端
redis-server ----redis服务器启动命令
8. cd /usr/local/redis/redis-5.0.3
9. cp redis.conf /usr/local/redis
10. cd /usr/local/redis/bin
11. 执行 ./redis-server
12. ./bin/redis-server ./redis.conf 启动redis服务
13. 使用命令ps -ef|grep redis 查看已经启动的redis服务
14. ./bin/redis-cli shutdown 停止redis服务
15. ./bin/redis-cli 进入到redis的客户端2.redis主从复制
2.1 概念
主从复制模型中,有多个redis节点,有且仅有一个为主节点Master。从节点Slave可以有多个。只要网络连接正常,Master会一直将自己的数据更新同步给Slaves,保持主从同步。
2.2 特点
(1)主节点Master可读、可写.
(2)从节点Slave只读。(read-only)
(3) 主从模型可以提高读的能力,在一定程度上缓解写的能力。写仍然只有Master一个节点,可以将读的操作全部移交到从节点上,变相提高了写能力。
2.3 redis主从复制环境搭建
redis-主服务器
mkdir /usr/local/redis/master
cp /usr/local/redis/bin/redis-server /usr/local/redis/master/
cp /usr/local/redis/bin/redis-cli /usr/local/redis/master/
cp /usr/local/redis/redis-5.0.7/redis.conf /usr/local/redis/master/
修改redis.conf
daemonize yes
port 6370
logfile "./redis6370.log"
requirepass testmaster123 (开启密码验证,密码:testmaster123)
启动 ./redis-server redis.conf
连接 ./redis-cli -p 6370
redis-cli -p 6370 -a testmaster123(有密码时)
redis-从服务器
mkdir /usr/local/redis/slave
cp /usr/local/redis/bin/redis-server /usr/local/redis/slave/
cp /usr/local/redis/bin/redis-cli /usr/local/redis/slave/
cp /usr/local/redis/redis-5.0.7/redis.conf /usr/local/redis/slave/
修改redis.conf
daemonize yes
port 6371
slaveof 127.0.0.1 6370 //这里很重要,连接redis主服务器配置的ip
slave-read-only no //标记为只能读,不能写
logfile "./redis6370.log"
masterauth testmaster123 ( # 当master服务设置了密码保护时,slav服务连接master的密码)
启动 ./redis-server redis.conf
连接 ./redis-cli -p 6371 (无密码)
redis-cli -p 6371 -a testmaster123(有密码时)
当主-从服务器搭建好后:
查看主从状态
./redis-cli -p 6370 -a testmaster123
127.0.0.1:6370> info
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6371,state=online,offset=1427,lag=1
master_replid:4b0c21dc6eb99226dfa281112f0ad1abd6516c57
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1427
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:14272.4 主从复制原理
1. 当从库和主库建立MS关系后,会向主数据库发送SYNC命令
2. 主库接收到SYNC命令后会开始在后台保存快照(RDB持久化过程),并将期间接收到的写命令缓存起来
3. 当快照完成后,主Redis会将快照文件和所有缓存的写命令发送给从Redis
4. 从Redis接收到后,会载入快照文件并且执行收到的缓存的命令
5. 之后,主Redis每当接收到写命令时就会将命令发送从Redis,从而保证数据的一致2.5 主从复制模式缺陷
当主节点宕机了,整个集群就没有可写的节点了。
3.Redis Sentinel哨兵模式
3.1 概念
(1).Sentinel是Redis的高可用性(HA)解决方案
(2).由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器.
(3).被监视的主服务器进行下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。
(4).Redis提供的sentinel(哨兵)机制,通过sentinel模式启动redis后,自动监控master/slave的运行状态.
(5).基本原理是:心跳机制+投票裁决(每个sentinel只有一次选举的机会,当主库出现故障,哨兵会投票从库中选出一个承担主库的任务,剩下的还是从库)
3.2 特点
1. 监控:监控主从是否正常
2. 通知:出现问题时,可以通知相关人员
3. 自动故障迁移:自动主从切换
4. 统一的配置管理:连接者询问sentinel取得主从的地址3.3 哨兵网络
(1).同一个哨兵下的、不同主从模型,彼此之间相互独立
(2).监控同一个Master的Sentinel会自动连接,组成一个分布式的Sentinel网络,互相通信并交换彼此关于被监视服务器的信息
(3).为什么要有哨兵网络
1. 在sentinel网络中,只要还有一个sentinel活着,就可以实现故障切换。
2. 当只有一个sentinel的时候,这个sentinel挂掉了,就无法实现自动故障切换了3.4 redis哨兵环境搭建
哨兵一:
mkdir /usr/local/redis/sentinel
cp /usr/local/redis/bin/redis-server /usr/local/redis/sentinel/
cp /usr/local/redis/bin/redis-cli /usr/local/redis/sentinel/
cp /usr/local/redis/redis-5.0.7/sentinel.conf /usr/local/redis/sentinel/
cp /usr/local/redis/bin/redis-sentinel /usr/local/redis/sentinel/
sentinel.conf配置
port 8001
daemonize yes
logfile "./sentinel1.log"
注意: mymaster 与下文出现的 mymaster 是一 一对应关系
#哨兵监控这个master
# mymaster : 主节点别名
# 127.0.0.1 : 主节点IP
# 6370 : 主节点端口
# 1 : 触发故障切换的最少哨兵
sentinel monitor mymaster 127.0.0.1 6370 1
#设置master和slaves验证密码
sentinel auth-pass mymaster testmaster123
sentinel config-epoch mymaster 15
#除了当前哨兵, 还有哪些在监控这个master的哨兵
sentinel known-sentinel mymaster 127.0.0.1 8002 0aca3a57038e2907c8a07be2b3c0d15171e44da5
sentinel known-sentinel mymaster 127.0.0.1 8003 ac1ef015411583d4b9f3d81cee830060b2f29862
重新命名 sentinel.conf 为 sentinel1.conf
哨兵二:
复制 sentinel1.conf 命名为 sentinel2.conf
sentinel.conf配置
port 8002
logfile "./sentinel2.log"
#除了当前哨兵, 还有哪些在监控这个master的哨兵
sentinel known-sentinel mymaster 127.0.0.1 8001 1aca3a57038e2907c8a07be2b3c0d15171e44da5
sentinel known-sentinel mymaster 127.0.0.1 8003 ac1ef015411583d4b9f3d81cee830060b2f29862
哨兵三:
复制 sentinel1.conf 命名为 sentinel3.conf
sentinel.conf配置
port 8003
logfile "./sentinel3.log"
#除了当前哨兵, 还有哪些在监控这个master的哨兵
sentinel known-sentinel mymaster 127.0.0.1 8001 1aca3a57038e2907c8a07be2b3c0d15171e44da5
sentinel known-sentinel mymaster 127.0.0.1 8002 0aca3a57038e2907c8a07be2b3c0d15171e44da5
启动哨兵:
./redis-server sentinel1.conf --sentinel
./redis-server sentinel2.conf --sentinel
./redis-server sentinel3.conf --sentinel
连接哨兵:
./redis-cli -p 80013.4 redis哨兵环境测试
1. 查看master:
127.0.0.1:8001> sentinel masters
1) "name"
2) "mymaster"
3) "ip"
4) "127.0.0.1"
5) "port"
6) "6370"
2. 查看当前mastrer
127.0.0.1:8001> sentinel get-master-addr-by-name mymaster
3. 检查容灾切换情况
(1). 127.0.0.1:8001> sentinel get-master-addr-by-name mymaster
1) "127.0.0.1"
2) "6370"
(2).杀掉当前master进程 : kill -9 进程号
127.0.0.1:8001> sentinel get-master-addr-by-name mymaster
1) "127.0.0.1"
2) "6371"
(3).启动原来的master,
(4).查询当前master
127.0.0.1:8001> sentinel masters
1) "name"
2) "mymaster"
3) "ip"
4) "127.0.0.1"
5) "port"
6) "6371"
(5).查看当前slaves
127.0.0.1:8001> sentinel slaves mymaster
1) "name"
2) "127.0.0.1:6370"
3) "ip"
4) "127.0.0.1"
5) "port"
6) "6370"4 redis注意事项:
1. 最大内存问题:要设置好最大内存,以防不停的申请内存,造成系统内存都被用完。
2. Fork进程问题:'vm.overcommit_memory = 1'这一个选项要加到系统的配置中,防止fork因内存不足而失败。
3. 密码问题:需要设置复杂一些,防止暴力破解
4. 多个哨兵配置文件一样,正常情况下要配置奇数哨兵,避免切换时候票数相同,出现竞争,影响线上业务。
文章标题:redis集群的三种方式(linux系统)
发布时间:2019-12-11, 14:23:00
最后更新:2019-12-11, 14:23:01