Redis集群的搭建

实验前提:源码编译安装好了redis,详细过程请查看我上片博文:https://blog.csdn.net/y_yang666/article/details/88416159
集群的搭建

1.分配内存

[root@server1 ~]# sysctl vm.overcommit_memory
vm.overcommit_memory = 0
[root@server1 ~]# sysctl -w vm.overcommit_memory=1
vm.overcommit_memory = 1

内核参数:overcommit_memory,它是内存分配策略,可选值:0、1、2 
0    ##表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。 
1    ##表示内核允许分配所有的物理内存,而不管当前的内存状态如何。 
2    ##表示内核允许分配超过所有物理内存和交换空间总和的内

2.创建redis实例
(1)创建目录

[root@server1 ~]# mkdir /usr/local/rediscluster
[root@server1 ~]# cd /usr/local/rediscluster/
[root@server1 rediscluster]# ls
[root@server1 rediscluster]# mkdir 700{1..6}
[root@server1 rediscluster]# ls
7001  7002  7003  7004  7005  7006

Redis集群的搭建_第1张图片
(2)进入目录编写文件并开启redis-server

[root@server1 rediscluster]# cd 7001/
[root@server1 7001]# vim redis.conf
port 7001                               ##设定redis实例的端口 
cluster-enabled yes                 ##开启集群功能
cluster-config-file nodes.conf     ##集群配置文件;此配置文件不能人工编辑,它是集群节点自动维护的文件,主要用于记录集群中有哪些节点、他们的状态以及一些持久化参数等,方便在重启时恢复这些状态。通常是在收到请求之后这个文件就会被更新。 
cluster-node-timeout 5000        ##集群中的节点能够失联的最大时间;超过这个时间,该节点就会被认为故障 
appendonly yes                     
pidfile "/usr/local/rediscluster/7001/redis.pid"                ##存放pid文件路径 
logfile "/usr/local/rediscluster/7001/redis.log"                ##存放log日志路径 
dir "/usr/local/rediscluster/7001"                  

[root@server1 7001]# redis-server redis.conf     ##开启
[root@server1 7001]# ls
appendonly.aof  nodes.conf  redis.conf  redis.log  redis.pid          

Redis集群的搭建_第2张图片
(3)拷贝文件到各目录中

[root@server1 7001]# cp redis.conf ../7002
[root@server1 7001]# cp redis.conf ../7003
[root@server1 7001]# cp redis.conf ../7004
[root@server1 7001]# cp redis.conf ../7005
[root@server1 7001]# cp redis.conf ../7006

(4)依次进入各个目录编辑文件并开启redis-server
编辑各个目录 下的文件时只需将所有的7001修改为对应的7002/3/4/5/6:可以使用全局替换(%s/7001/7002/),此处以7002为例,其他与之操作一样

[root@server1 7001]# cd ../7002/
[root@server1 7002]# vim redis.conf 
port 7002
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
pidfile "/usr/local/rediscluster/7002/redis.pid"
logfile "/usr/local/rediscluster/7002/redis.log"
dir "/usr/local/rediscluster/7002"
daemonize yes
[root@server1 7002]# redis-server redis.conf
[root@server1 7002]# ls
appendonly.aof  nodes.conf  redis.conf  redis.log  redis.pid

(5)查看redis进程
Redis集群的搭建_第3张图片
3.创建redis集群

[root@server1 7006]# redis-cli --cluster create --cluster-replicas 1 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

Redis集群的搭建_第4张图片
Redis集群的搭建_第5张图片
4.查看集群信息

[root@server1 ~]# redis-cli --cluster info 127.0.0.1:7001     ##访问任何一个端口都可进入集群(redis集群特点无中心化)

Redis集群的搭建_第6张图片
5.登陆集群,插入信息并查看

[root@server1 ~]# redis-cli -c -p 7001
127.0.0.1:7001> set name yy
-> Redirected to slot [5798] located at 127.0.0.1:7002
OK

在这里插入图片描述
在这里插入图片描述

故障切换

首先查看好主从关系(我的如下)
master7001 —— slave7004
master7002 —— slave7005
master7003 —— slave7006

1.模拟7002宕机

[root@server1 ~]# redis-cli -c -p 7002
127.0.0.1:7002> shutdown
not connected> exit

查看进程,7002消失
Redis集群的搭建_第7张图片
2.查看集群信息,7005接管master(7002的slave为7005)
Redis集群的搭建_第8张图片
当7005再次宕机时,集群中才会少一个master
Redis集群的搭建_第9张图片

3.恢复集群节点

[root@server1 ~]# cd /usr/local/rediscluster/
[root@server1 rediscluster]# ls
7001  7002  7003  7004  7005  7006
[root@server1 rediscluster]# cd 7002/
[root@server1 7002]# redis-server redis.conf
[root@server1 7002]# cd ../7005
[root@server1 7005]# redis-server redis.conf

查看集群信息(此时7005为7002的master端)
在这里插入图片描述

添加新节点到集群中

1.创建实例

[root@server1 rediscluster]# mkdir 7007
[root@server1 rediscluster]# mkdir 7008
[root@server1 rediscluster]# ls
7001  7002  7003  7004  7005  7006  7007  7008
[root@server1 rediscluster]# cd 7001
[root@server1 7001]# cp redis.conf ../7007
[root@server1 7001]# cp redis.conf ../7008
[root@server1 7001]# cd ../7007
[root@server1 7007]# vim redis.conf      ##将7001改为7007
[root@server1 7007]# redis-server redis.conf 
[root@server1 7007]# 
[root@server1 7007]# cd ../7008
[root@server1 7008]# vim redis.conf      ##将7001改为7008
[root@server1 7008]# redis-server redis.conf

2,查看进程
Redis集群的搭建_第10张图片
3.将实例添加到集群中

[root@server1 7007]# redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7001   ##默认添加的是master ;7001是给定一个入口

Redis集群的搭建_第11张图片
检测集群,查看7007是否添加到集群中

[root@server1 7007]# redis-cli --cluster check 127.0.0.1:7001

Redis集群的搭建_第12张图片
添加7008为7007的slave

[root@server1 7007]# redis-cli --cluster add-node --cluster-slave --cluster-master-id "42a77a0e9a99c8841201a362ff8f6cf47d1d2aa0" 127.0.0.1:7008 127.0.0.1:7001
[root@server1 7007]# redis-cli --cluster check 127.0.0.1:7001

Redis集群的搭建_第13张图片
4.查看集群信息
Redis集群的搭建_第14张图片
5.迁移哈希槽

[root@server1 7007]# redis-cli --cluster reshard --cluster-from all --cluster-to 42a77a0e9a99c8841201a362ff8f6cf47d1d2aa0 --cluster-slots 300 --cluster-yes 127.0.0.1:7001

## --cluster-from all   所有节点 ; --cluster-slots 300  迁移哈希槽个数

Redis集群的搭建_第15张图片 Redis集群的搭建_第16张图片 6.查看集群信息
Redis集群的搭建_第17张图片7.均衡哈希槽个数

[root@server1 7007]# redis-cli --cluster rebalance --cluster-threshold 1 --cluster-use-empty-masters 127.0.0.1:7001

Redis集群的搭建_第18张图片检测并查看集群信息
Redis集群的搭建_第19张图片

你可能感兴趣的:(Redis集群的搭建)