实验前提:源码编译安装好了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
(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
(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进程
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
4.查看集群信息
[root@server1 ~]# redis-cli --cluster info 127.0.0.1:7001 ##访问任何一个端口都可进入集群(redis集群特点无中心化)
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消失
2.查看集群信息,7005接管master(7002的slave为7005)
当7005再次宕机时,集群中才会少一个master
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,查看进程
3.将实例添加到集群中
[root@server1 7007]# redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7001 ##默认添加的是master ;7001是给定一个入口
检测集群,查看7007是否添加到集群中
[root@server1 7007]# redis-cli --cluster check 127.0.0.1:7001
添加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
4.查看集群信息
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 迁移哈希槽个数
6.查看集群信息
7.均衡哈希槽个数
[root@server1 7007]# redis-cli --cluster rebalance --cluster-threshold 1 --cluster-use-empty-masters 127.0.0.1:7001
检测并查看集群信息