centos7 搭建 redis集群(手动搭建)

环境
linux版本 centos_6.5 32 位
redis redis-4.0.1

为什么要搭建集群,哨兵它不香么?

redis集群演变过程
1.单机版
核心技术:持久化
持久化是最简单的高可用方法(有时甚至不被归为高可用的手段),主要作用是数据备份,即将数据存储在硬盘,
保证数据不会因进程退出而丢失。
2.主从复制
复制是高可用Redis的基础,哨兵和集群都是在复制基础上实现高可用的。复制主要实现了数据的多机备份,以及
对于读操作的负载均衡和简单的故障恢复。缺陷是故障恢复无法自动化;写操作无法负载均衡;存储能力受到单机
的限制。
3.哨兵
在复制的基础上,哨兵实现了自动化的故障恢复。缺陷是写操作无法负载均衡;存储能力受到单机的限制。
4.集群
通过集群,Redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高可用方案

配置步骤

  1. 创建配置文件
    为了测试在/etc/redis/下建立6个文件夹分别是
    在这里插入图片描述

复制redis 安装包中的redis.conf 文件到 /etc/redis/redis7000下

[root@999 redis-4.0.1]# cp redis.conf /etc/redis/redis7000/redis-7000.conf

修改文件内容

大致思路就是把port 修改为7000,pidfile有6379改成7000,
rdb文件加上7000后缀,cluster配置 文件加上7000后缀
主要是为了区分配置文件、批量修改配置文件,加快开发速度
其他配置暂且不变

配置如下

	 port 7000
	 daemonize yes
	 pidfile /var/run/redis_7000.pid
	 dbfilename dump-7000.rdb
	 dir /etc/redis/redis7000
	 cluster-enabled yes
	 cluster-config-file nodes-7000.conf
	 cluster-node-timeout 15000
	 cluster-slave-validity-factor 10
	 cluster-migration-barrier 1
	 cluster-require-full-coverage yes

批量修改文件

	[root@999 redis]# sed 's/7000/7001/g' redis7000/redis-7000.conf > ./redis7001/redis-7001.conf
	[root@999 redis]# sed 's/7000/7002/g' redis7000/redis-7000.conf > ./redis7002/redis-7002.conf
	[root@999 redis]# sed 's/7000/7003/g' redis7000/redis-7000.conf > ./redis7003/redis-7003.conf
	[root@999 redis]# sed 's/7000/7004/g' redis7000/redis-7000.conf > ./redis7004/redis-7004.conf
	[root@999 redis]# sed 's/7000/7005/g' redis7000/redis-7000.conf > ./redis7005/redis-7005.conf

分别启动6个redis集群

[root@999 redis]# redis-server redis7000/redis-7000.conf 
7757:C 13 Nov 09:17:20.109 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
7757:C 13 Nov 09:17:20.109 # Redis version=4.0.1, bits=32, commit=00000000, modified=0, pid=7757, just started
7757:C 13 Nov 09:17:20.109 # Configuration loaded
[root@999 redis]# redis-server redis7001/redis-7001.conf 
7762:C 13 Nov 09:17:28.931 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
7762:C 13 Nov 09:17:28.931 # Redis version=4.0.1, bits=32, commit=00000000, modified=0, pid=7762, just started
7762:C 13 Nov 09:17:28.931 # Configuration loaded
[root@999 redis]# redis-server redis7002/redis-7002.conf 
7767:C 13 Nov 09:17:36.188 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
7767:C 13 Nov 09:17:36.189 # Redis version=4.0.1, bits=32, commit=00000000, modified=0, pid=7767, just started
7767:C 13 Nov 09:17:36.189 # Configuration loaded
[root@999 redis]# redis-server redis7003/redis-7003.conf 
7772:C 13 Nov 09:17:44.539 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
7772:C 13 Nov 09:17:44.539 # Redis version=4.0.1, bits=32, commit=00000000, modified=0, pid=7772, just started
7772:C 13 Nov 09:17:44.539 # Configuration loaded
[root@999 redis]# redis-server redis7004/redis-7004.conf 
7777:C 13 Nov 09:17:52.114 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
7777:C 13 Nov 09:17:52.114 # Redis version=4.0.1, bits=32, commit=00000000, modified=0, pid=7777, just started
7777:C 13 Nov 09:17:52.114 # Configuration loaded
[root@999 redis]# redis-server redis7005/redis-7005.conf 
7784:C 13 Nov 09:17:59.220 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
7784:C 13 Nov 09:17:59.220 # Redis version=4.0.1, bits=32, commit=00000000, modified=0, pid=7784, just started
7784:C 13 Nov 09:17:59.220 # Configuration loaded

查看进程信息

[root@999 redis]# ps -ef|grep redis
root      7758     1  0 09:17 ?        00:00:00 redis-server *:7000 [cluster]         
root      7763     1  0 09:17 ?        00:00:00 redis-server *:7001 [cluster]         
root      7768     1  0 09:17 ?        00:00:00 redis-server *:7002 [cluster]         
root      7773     1  0 09:17 ?        00:00:00 redis-server *:7003 [cluster]         
root      7778     1  0 09:17 ?        00:00:00 redis-server *:7004 [cluster]         
root      7785     1  0 09:17 ?        00:00:00 redis-server *:7005 [cluster]             
root      7797  6004  0 09:19 pts/11   00:00:00 grep redis

在创建集群后,没有分配槽位是不可以添加数据的

[root@999 redis]# redis-cli -p 7000
127.0.0.1:7000> set ee ee
(error) CLUSTERDOWN Hash slot not served

meet 节点握手

cluster meet ip port
127.0.0.1:7000> cluster meet 127.0.0.1 7001
127.0.0.1:7000> cluster meet 127.0.0.1 7002
127.0.0.1:7000> cluster meet 127.0.0.1 7003
127.0.0.1:7000> cluster meet 127.0.0.1 7004
127.0.0.1:7000> cluster meet 127.0.0.1 7005

分配槽位

redis-cli -h 127.0.0.1 -p 7000 cluster addslots {0..5461}
redis-cli -h 127.0.0.1 -p 7001 cluster addslots {5462..10922}
redis-cli -h 127.0.0.1 -p 7002 cluster addslots {10923..16383}

执行命令

127.0.0.1:7000> cluster nodes
434dc1459dc5d965048c59c406f9ea04f60cc200 127.0.0.1:7004@17004 master - 0 1605232781177 4 connected
99560a01ae5ad6b76e4357a7c9fb478bd6b9cf98 127.0.0.1:7000@17000 myself,master - 0 1605232781000 1 connected 0-5461
d18ad06808df94a5baa9366c55e5b017790c0cf5 127.0.0.1:7005@17005 master - 0 1605232782183 5 connected
9dc3a724c0b69a01ff0e1f7fc684ecc6a33d8db4 127.0.0.1:7003@17003 master - 0 1605232783190 3 connected
de46c1b61cd4f052da620ea7d21d7e466267046d 127.0.0.1:7001@17001 master - 0 1605232779000 0 connected 5462-10922
32e4b1313dae3ddac0c2dca1c36d9695e9cbebac 127.0.0.1:7002@17002 master - 0 1605232781000 2 connected 10923-16383

配置从节点

使用cluster replicate{nodeId}命令让一个节点成为从节点 使用方法
之前配置槽位的节点是主节点,在没有配置槽位的节点上执行命令依次为

[root@999 redis]# redis-cli -p 7003
127.0.0.1:7003> cluster replicate 99560a01ae5ad6b76e4357a7c9fb478bd6b9cf98
OK
[root@999 redis]# redis-cli -p 7004
127.0.0.1:7004> cluster replicate de46c1b61cd4f052da620ea7d21d7e466267046d
OK
[root@999 redis]# redis-cli -p 7005
127.0.0.1:7005> cluster replicate 32e4b1313dae3ddac0c2dca1c36d9695e9cbebac
OK

测试、启动

当我们在后面加上 -c 就可以使用集群功能,不然就和普通的redis 客户端一样不可以使用集群功能

[root@999 redis]# redis-cli -p 7000 -c
127.0.0.1:7000> set k1 v1
-> Redirected to slot [12706] located at 127.0.0.1:7002
OK
127.0.0.1:7002> exit
[root@999 redis]# redis-cli -p 7000 
127.0.0.1:7000> set k1 v1
(error) MOVED 12706 127.0.0.1:7002
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值