redis集群部署——解决单进程和多核cpu不匹配

redis数据库简介:

REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。

Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

redis集群:
是一个提供多个Redis(分布式)节点间共享数据的程序集。

一、首先在server1上部署redis服务

详细过程可以参看:redis数据库哨兵模式实现主从故障切换

二、创建redis集群目录

redis集群部署——解决单进程和多核cpu不匹配_第1张图片

三、进入各个目录下建立配置文件

7001:

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

将7001的配置文件cp到其他目录,把7001更改为相应的数值:

7002示例:

[root@server1 7001]# cp redis.conf ../7002/
[root@server1 7001]# vim ../7002/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"
daemonize yes
dir "/usr/local/rediscluster/7002"

redis集群部署——解决单进程和多核cpu不匹配_第2张图片
redis集群部署——解决单进程和多核cpu不匹配_第3张图片

四、进入各个目录启动服务

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

redis集群部署——解决单进程和多核cpu不匹配_第4张图片
查看进程:
redis集群部署——解决单进程和多核cpu不匹配_第5张图片
成功!!!

五、创建一个集群,编号为1,将启动的6个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集群部署——解决单进程和多核cpu不匹配_第6张图片
查看master和slave的设置:

[root@server1 7006]# redis-cli --cluster info 127.0.0.1:7001
127.0.0.1:7001 (37640721...) -> 0 keys | 5461 slots | 1 slaves.
127.0.0.1:7002 (b49a2382...) -> 0 keys | 5462 slots | 1 slaves.
127.0.0.1:7003 (d52d9c66...) -> 0 keys | 5461 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.

redis集群部署——解决单进程和多核cpu不匹配_第7张图片
可以看到现在7001、7002、7003为master,各有一个slave。每对master-slave各有5461个哈希槽。

附:哈希槽概念

Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。

六、测试

(1)进入1个master,写入信息

[root@server1 7006]# redis-cli -c -p 7001
127.0.0.1:7001> set name laozhao
-> Redirected to slot [5798] located at 127.0.0.1:7002	#在7001上写,实际数据存储到7002里
OK
127.0.0.1:7002> get name
"laozhao"
127.0.0.1:7002> 		#取数据也是到7002上取

redis集群部署——解决单进程和多核cpu不匹配_第8张图片
(2)进入一个slave里,进行信息查看

[root@server1 7006]# redis-cli -c -p 7004
127.0.0.1:7004> get name
-> Redirected to slot [5798] located at 127.0.0.1:7002		#取数据也是到7002上取
"laozhao"
127.0.0.1:7002> 

redis集群部署——解决单进程和多核cpu不匹配_第9张图片
(3)将7002关闭
在这里插入图片描述
(4)进入slave节点查看信息:
redis集群部署——解决单进程和多核cpu不匹配_第10张图片
此时数据来自7005,数据从7002迁移到了7005
(5)查看集群的主从信息
redis集群部署——解决单进程和多核cpu不匹配_第11张图片
可以看到7005成为了master,没有slave节点,因为7002关闭了。

注意:如果此时将7005再关闭,会破坏数据库结构,因为此时的7005下没有slave。

我们模拟这个错误:

[root@server1 7006]# redis-cli -c -p 7004
127.0.0.1:7004> get name
-> Redirected to slot [5798] located at 127.0.0.1:7005
"laozhao"
127.0.0.1:7005> SHUTDOWN

redis集群部署——解决单进程和多核cpu不匹配_第12张图片
当再次进行数据查询时,会出现错误

[root@server1 7006]# redis-cli -c -p 7006
127.0.0.1:7006> get name
(error) CLUSTERDOWN The cluster is down

恢复方法:
因为数据最开始是在7002里存储的,所以进入到7002里查看,另外进入7005里查看
redis集群部署——解决单进程和多核cpu不匹配_第13张图片
redis集群部署——解决单进程和多核cpu不匹配_第14张图片
在7002和7004下分别重新加载配置文件:

[root@server1 7005]# redis-server redis.conf 
[root@server1 7005]# cd ../7002/
[root@server1 7002]# redis-server redis.conf 

此时再次进行信息的查看,并进行状态查看:
redis集群部署——解决单进程和多核cpu不匹配_第15张图片

七、添加节点

1、查看此时集群状态

[root@server1 7002]# redis-cli --cluster info 127.0.0.1:7001

redis集群部署——解决单进程和多核cpu不匹配_第16张图片
此时三主三从。

2、建立目录,编辑信息,开启服务

[root@server1 rediscluster]# ls
7001  7002  7003  7004  7005  7006
[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]# cp 7001/redis.conf 7007/
[root@server1 rediscluster]# cp 7001/redis.conf 7008/
[root@server1 rediscluster]# vim 7007/redis.conf 
[root@server1 rediscluster]# vim 7008/redis.conf 
[root@server1 rediscluster]# cd 7007/
[root@server1 7007]# redis-server redis.conf 
[root@server1 7007]# cd ../7008/
[root@server1 7008]# redis-server redis.conf

redis集群部署——解决单进程和多核cpu不匹配_第17张图片
ps ax查看后端服务:
redis集群部署——解决单进程和多核cpu不匹配_第18张图片

3、再次查看集群状态,并且添加节点

在这里插入图片描述
将7007添加到集群里,选择添加的节点位置为7001

[root@server1 7008]# redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7001

redis集群部署——解决单进程和多核cpu不匹配_第19张图片
查看状态(可以查看到7007的id号,后续要用)

[root@server1 7008]# redis-cli -c -p 7007
127.0.0.1:7007> cluster nodes
d52d9c6611aac64ec721195118ccf54ff1664a95 127.0.0.1:7003@17003 master - 0 1557722374000 3 connected 10923-16383
7be15f956fcb99f4846cba004edffd19a22b23c2 127.0.0.1:7007@17007 myself,master - 0 1557722373000 0 connected
f8c69852450d5286a4bb744b89b35eba8b7b481d 127.0.0.1:7004@17004 slave 37640721cde352f225d033081d5833b1a5fba41b 0 1557722374862 1 connected
974e4c4c3bfa192987116a2a5fe89903e3d44ad1 127.0.0.1:7005@17005 master - 0 1557722374563 7 connected 5461-10922
f3210a46f6d80e1263a3c6ee08704a7db7562570 127.0.0.1:7006@17006 slave d52d9c6611aac64ec721195118ccf54ff1664a95 0 1557722374000 3 connected
b49a2382720efa1eb8d418b58144dfef5f27b8e5 127.0.0.1:7002@17002 slave 974e4c4c3bfa192987116a2a5fe89903e3d44ad1 0 1557722374563 7 connected
37640721cde352f225d033081d5833b1a5fba41b 127.0.0.1:7001@17001 master - 0 1557722375564 1 connected 0-5460

redis集群部署——解决单进程和多核cpu不匹配_第20张图片
添加7008节点为7007的slave:

[root@server1 7008]# redis-cli --cluster add-node 127.0.0.1:7008 127.0.0.1:7007 --cluster-slave --cluster-master-id 7be15f956fcb99f4846cba004edffd19a22b23c2

redis集群部署——解决单进程和多核cpu不匹配_第21张图片
查看新节点的哈希槽情况:
redis集群部署——解决单进程和多核cpu不匹配_第22张图片
此时7008也添加了,但是主7007节点并没有添加数据槽,不能存储数据。

4、给新的master:7007节点添加数据槽

(1)手动分配固定数量的哈希槽

redis-cli --cluster reshard 127.0.0.1:7007
How many slots do you want to move (from 1 to 16384)? 300		#分配多少数量的哈希槽
What is the receiving node ID? 7be15f956fcb99f4846cba004edffd19a22b23c2		给哪个节点分配哈西曹,这里填ID
Source node #1: all				#从哪个主节点分离哈西曹
Do you want to proceed with the proposed reshard plan (yes/no)? yes		#确认

redis集群部署——解决单进程和多核cpu不匹配_第23张图片
查看哈西曹:
redis集群部署——解决单进程和多核cpu不匹配_第24张图片
300个哈希槽已经分配给7007节点。

(2)对master进行均分数据槽(master的数据槽一定要均分,不均分可能会导致数据的丢失)

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

redis集群部署——解决单进程和多核cpu不匹配_第25张图片
查看哈西曹:
redis集群部署——解决单进程和多核cpu不匹配_第26张图片
每个主节点都是4096个哈希槽,均分了!!!

你可能感兴趣的:(运维)