文章目录
一.redis编译安装
下载安装包,解压后进行编译
编辑自带安装程序的脚本文件,注释以下内容
[root@server1 redis-6.2.4]# cd utils/
[root@server1 utils]# vim install_server.sh
[root@server1 utils]# ./install_server.sh xs ##执行安装脚本
安装成功后查看端口6379已经成功开启
[root@server1 utils]# netstat -antlp
查看etc目录下的redis配置文件也已经生成,修改配置文件,编辑配置文件
启动redis
[root@server1 redis]# /etc/init.d/redis_6379 start
同样server2和server3都安装redios
二 .redis主从复制
设定server2为server1的slave.设定server1为master
编辑server上redis的配置文件,添加master
[root@server2 utils]# vim /etc/redis/6379.conf
slaveof 172.25.1.1 6379
重启1和2的redis,在1中查看redis的info信息,即可查看到他有一个slave
:[root@server1 redis]# redis-cli
127.0.0.1:6379> info
在server上同样添加master指定后重启,在server1上即可查看到一主两从
此时在1中新建库“二千”,会在2和3中都能看到
三. redis哨兵模式
Sentinel(哨兵)是用于监控redis集群中Master状态的工具,是Redis
的高可用性解决方案,sentinel哨兵模式已经被集成在redis2.4之后的版本中。sentinel是redis高可用的解决方案,sentinel系统可以监视一个或者多个redis
master服务,以及这些master服务的所有从服务;当某个master服务下线时,自动将该master下的某个从服务升级为master服务替代已下线的master服务继续处理请求。sentinel可以让redis实现主从复制,当一个集群中的master失效之后,sentinel可以选举出一个新的master用于自动接替master的工作,集群中的其他redis服务器自动指向新的master同步数据。一般建议sentinel采取奇数台,防止某一台sentinel无法连接到master导致误切换。
1.配置sentinel
在server1主机中,配置sentinel,并复制到server2和server3中
在解压目录里复制模板文件到安装目录下,
[root@server1 ~]# cd redis-6.2.4/
[root@server1 redis-6.2.4]# cp sentinel.conf /etc/redis/
[root@server1 redis-6.2.4]# vim /etc/redis/sentinel.conf
sentinel monitor mymaster 172.25.1.1 6379 2 ##master为server1,2表示需要两票通过,这台主机就被认定宕掉
sentinel down-after-milliseconds mymaster 10000 ##修改连接超时为10s
将编辑好的sentinel配置文件复制到2和3
2 开启哨兵模式
[root@server3 utils]# redis-sentinel /etc/redis/sentinel.conf
3 观察效果
此时我们打开一个新的shell,连接server1的redis,并手动关停,此时master被关闭,两台slave就会投票并选举出新的master
可以非常清楚的看到选举新master的过程,此时master已经自动变成了3
查看2的info信息,也能看到master已经变成了3
[root@server2 utils]# redis-cli
127.0.0.1:6379> info
当1重启后就会成为一个新的slave加入集群
四. redis的集群cluster
Redis集群的几个重要特征:
1.Redis 集群的分片特征在于将键空间分拆了16384个槽位,每一个节点负责其中一些槽位。2.Redis提供一定程度的可用性,可以在某个节点宕机或者不可达的情况下继续处理命令.(只要集群中大多数Master可达、且失效的Master至少有一个Slave可达,即集群非Fail状态,集群都是可用)
3.Redis 集群中不存在中心(central)节点或者代理(proxy)节点, 集群的其中一个主要设计目标是达到线性可扩展性(linear scalability)
Redis3.0版本以上
要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点
1. 集群构建
1)、手动构建集群
在server3主机(master),重启redis,开启AOF模式,建立medis目录,并建立集群7001~7006目录,切入7001,修改配置文件,启动服务。将配置文件复制到其他几个实例目录中,根据情况做修改。
[root@server3 utils]# vim /etc/redis/6379.conf
开启AOF模式
[root@server3 utils]# cd /usr/local/
[root@server3 local]# mkdir redis
[root@server3 local]# cd redis
[root@server3 local]# mkdir 700{1..6}
[root@server3 local]# cd 7001/
[root@server3 7001]# vim redis.conf
编辑配置文件
port 7001
cluster-enabled yes ##开启集群
cluster-config-file nodes.conf ##集群配置文件
cluster-node-timeout 5000 ##节点超时
appendonly yes ##开启AOF模式
daemonize yes `##用守护线程的方式开启
[root@server3 7001]# redis-server redis.conf ##启动服务
此时我们成查看pid ,已经能看到7001
将配置文件复制到其他五个节点中,并修改端口号
然后启动服务
cd使用redis-cli来进行集群的交互,客户端连接任意一个节点,使用-c表示以集群的方式登录,-p指定端口。
[root@server3 ~]# redis-cli -c -p 7001
创建集群主从节点,–cluster-replicas 参数为数字,1表示每个主节点需要1个从节点。然后检查集群,查看集群信息。
[root@server3 redis]# 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
输入yes后创建成功
[root@server3 redis]# redis-cli --cluster check 127.0.0.1:7001 ## 检查集群
[root@server3 redis]# redis-cli --cluster info 127.0.0.1:7001/ ## 集群信息查看
2) .脚本构建集群
[root@server3 redis]# cd
[root@server3 ~]# cd redis-6.2.4/
[root@server3 redis-6.2.4]# cd utils/create-cluster/
[root@server3 create-cluster]# ./create-cluster start
[root@server3 create-cluster]# ./create-cluster stop
##停止所有实例,使用手动构建的集群来做接下来的实验
2.自动切换
由cheek信息可知,主从对应关系为7006为7001的slave
当我们手动关闭7001
[root@server3 redis]# redis-cli -c -p 7001
127.0.0.1:7001> SHUTDOWN
not connected>
[root@server3 redis]# ps ax
再次cheek集群节点时,发现7006以经成为了master
3、添加节点和分片
1中相同的方式再创建两个节点,加入之前的集群
将7007节点加入集群中,执行check就能看到
[root@server3 7008]# redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7001
[root@server3 7008]# redis-cli --cluster check 127.0.0.1:7002
7007节点加入集群中,但是并没有分配slot,所以这个节点并没有真正的开始分担集群工作,所以要进行分片。重新分片基本上意味着将哈希槽从一组节点移动到另一组节点
[root@server3 7008]# redis-cli --cluster reshard 127.0.0.1:7001
How many slots do you want to move (from 1 to 16384)? 1000 ##移动的插槽数量
What is the receiving node ID? ##接收节点的ID
Source node #1: all
##从哪些节点获取这些密钥,键入all以从所有其他主节点获取哈希槽,每个节点都拿出一些
Do you want to proceed with the proposed reshard plan (yes/no)? yes ##确定是否要继续重新分片,输入yes
分片完成后check可以看到,7007有1000个哈希槽,且平均来源于其他三个主节点
现在将7008 节点加入到7001 节点的集群中,并且指定其为7007的slave,id为要添加的主节点的ID
redis-cli --cluster add-node 127.0.0.1:7008 127.0.0.1:7001 --cluster-slave --cluster-master-id
再次check 可以看到节点添加成功