1、设置密码(redis)
先在redis.conf里面找到这个 后面写上要设置的密码即可
2、哨兵模式
监控redis集群中master状态的的工具
在做了主从的前提下
主 从1 从2
作用
1):Master状态检测
2):如果Master异常,则会进行Master-Slave切换,将其中一个Slave作为Master,将之前的Master作为Slave
3):Master-Slave切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof/replicaof的配置,sentinel.conf的监控目标会随之调换
怎么做
redis-sentinel—哨兵模式**
1、哨兵简介:Redis Sentinel
Sentinel(哨兵)是用于监控redis集群中Master状态的工具,其已经被集成在redis2.4+的版本中是Redis官方推荐的高可用性(HA)解决方案。
2、作用
1):Master状态检测
2):如果Master异常,则会进行Master-Slave切换,将其中一个Slave作为Master,将之前的Master作为Slave
3):Master-Slave切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof/replicaof的配置,sentinel.conf的监控目标会随之调换
3、工作模式
1):每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令
2):如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线。
3):如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。
4):当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线
4、主观下线和客观下线
主观下线:Subjectively Down,简称 SDOWN,指的是当前 Sentinel 实例对某个redis服务器做出的下线判断。
客观下线:Objectively Down, 简称 ODOWN,指的是多个 Sentinel 实例在对Master Server做出 SDOWN 判断,并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的Master Server下线判断,然后开启failover
5、配置哨兵模式
1.每台机器上修改redis主配置文件redis.conf文件设置:bind 0.0.0.0 ---已经操作
2.每台机器上修改sentinel.conf配置文件:修改如下配置
[root@redis-master src]# cd ..
[root@redis-master redis]# vim sentinel.conf
sentinel monitor mymaster 10.0.0.137 6379 2 #当集群中有2个sentinel认为master死了时,才能真正认为该master已经不可用了。 (slave上面写的是master的ip,master写自己ip)
sentinel down-after-milliseconds mymaster 3000 #单位毫秒
sentinel failover-timeout mymaster 10000 #若sentinel在该配置值内未能完成failover(故障转移)操作(即故障时master/slave自动切换),则认为本次failover失败。
protected-mode no #关闭加密模式--新添加到sentinel配置文件中
3.每台机器启动哨兵服务:
[root@redis-master redis]# ./src/redis-sentinel sentinel.conf
注意:在生产环境下将哨兵模式启动放到后台执行: ./src/redis-sentinel sentinel.conf &
将master的哨兵模式退出,再将redis服务stop了,在两台slave上面查看其中一台是否切换为master:(没有优先级,为随机切换)
^C4854:signal-handler (1564349039) Received SIGINT scheduling shutdown...
4854:X 29 Jul 05:23:59.592 # User requested shutdown...
4854:X 29 Jul 05:23:59.592 # Sentinel is now ready to exit, bye bye...
[root@redis-master redis]# systemctl stop redis.service
在slave机器上面查看:
slave-2
登陆slave服务器查看有没有切换
登陆master机器查看:
如果要给哨兵设置密码
三个都要设置一样的密码,不然会启动不起来
做集群
在做好集群之后,不添加 -c get name 就会失败
-c 创建集群
gcc-c++ = g++ 能更好的编译c++程序
2.1 创建节点目录
创建一个新目录以及redis实例已端口号命名的以下目录
可以用一台机器做六个实例也可以分三台机器,
[root@redis-cluster module]# mkdir redis-Cluster
[root@redis-cluster module]# cd redis-Cluster
[root@redis-cluster redis-Cluster]# mkdir 7000 7001 7002 7003 7004 7005
2.2 创建配置文件
在每个节点目录中创建一个文件redis.conf,从7000到7005.作为配置文件的模板,以下是最小的Redis群集配置文件,每个节点实例配置稍作修改
我们只需要修改一个节点,然后把其他节点的利用正则修改端口即可
[root@redis-cluster redis-Cluster]# cd 7000
[root@redis-cluster 7000]# vi redis.conf
port 7000 #端口7000,7001,7002,7003,7004,7005
cluster-enabled yes #开启集群
cluster-config-file nodes.conf #集群配置信息,开启集群后自动生成
cluster-node-timeout 5000 #请求超时时长
appendonly yes #开启aof日志,它会每次写操作都记录一条日志
daemonize yes #redis后台运行
bind 192.168.100.21 #默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群
pidfile /opt/module/redis-Cluster/7000/redis_7000.pid #pidfile文件对应7000,7001,7002,7003,7004,7005
dir /opt/module/redis-Cluster/7000/ #数据文件存放位置对应7000,7001,7002,7003,7004,7005
sed -i "s/7000/70001/g" 跟上文件
2.3 启动节点服务
分别启动6个实例,可执行文件redis-server用之前单机版的,已配过环境变量
[root@redis-cluster redis-Cluster]# redis-server 7000/redis.conf
[root@redis-cluster redis-Cluster]# redis-server 7001/redis.conf
[root@redis-cluster redis-Cluster]# redis-server 7002/redis.conf
[root@redis-cluster redis-Cluster]# redis-server 7003/redis.conf
[root@redis-cluster redis-Cluster]# redis-server 7004/redis.conf
[root@redis-cluster redis-Cluster]# redis-server 7005/redis.conf
6台实例运行起来后,查看进程,下一步创建集群
[root@redis-cluster redis-Cluster]# ps -ef |grep redis
root 9240 1 0 18:11 ? 00:00:00 redis-server 192.168.100.21:7000 [cluster]
root 9245 1 0 18:11 ? 00:00:01 redis-server 192.168.100.21:7001 [cluster]
root 9265 1 0 18:14 ? 00:00:00 redis-server 192.168.100.21:7002 [cluster]
root 9270 1 0 18:14 ? 00:00:00 redis-server 192.168.100.21:7003 [cluster]
root 9275 1 0 18:14 ? 00:00:00 redis-server 192.168.100.21:7004 [cluster]
root 9280 1 0 18:14 ? 00:00:00 redis-server 192.168.100.21:7005 [cluster]
2.4 创建集群
redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1
2.5 添加主从
添加主(可以在任意一个节点)
/redis-Cluster/7004/src redis-cli -p 7004 cluster meet 192.168.91.137 8001
/redis-Cluster/7004/src redis-cli -p 7004 cluster nodes (查询主是否添加成功)
添加从
在添加主的节点执行,先添加
redis-cli -p 7001 cluster meet 127.0.0.1 7008
这个从在从的那个节点配置
redis-cli -p 7008 cluster replicate 6fa23f41cb41d37dbd1c81de633ffbe744f8432b
查看自己的节点
/redis-Cluster/8002/src/redis-cli -c -p 8002 cluster nodes
2.6 分配槽位(自动)
8、自动分配槽位
在新的节点机器里面执行
[root@192.168.91.137 ~]# /redis-Cluster/8002/src/redis-cli --cluster rebalance --cluster-threshold 1 --cluster-use-empty-masters 192.168.91.150:7000
后面的7000是最开始的节点,0-5460 他就会从其他三个master拿一部分给这个新的master
查询
./redis-cli -p 7004 cluster nodes
注意:
可以坏掉任意几个主或几个从,但是不能坏掉一对主从,这样集群就会崩掉。
后面的7000是最开始的节点,0-5460 他就会从其他三个master拿一部分给这个新的master
查询
./redis-cli -p 7004 cluster nodes
注意:
可以坏掉任意几个主或几个从,但是不能坏掉一对主从,这样集群就会崩掉。
# 面试
```shell
redis有哪些好处
(1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
(2) 支持丰富数据类型,支持string,list,set,sorted set,hash
(3) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
(4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
redis相比memcached有哪些优势
(1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型
(2) redis可以持久化其数据
redis常见性能问题和解决方案
(1) Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件
(2) 如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次
(3) 为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内
(4) 尽量避免在压力很大的主库上增加从库
(5) 主从复制不要用树状结构,用单向链表结构更为稳定,即:Master(写) <- Slave1(读) <- Slave2(读) <- Slave3(读)...
这样的结构方便解决单点故障问题,实现Slave对Master的替换。如果Master挂了,可以立刻启用Slave1做Master,其他不变。
redis集群的工作原理
主多从+哨兵模式(keelalived)