redis的集群部署,redis添加高可用节点

mac2024-12-16  24

一台服务器上的redis集群

基于内存上的非关系型数据库(key-value) 不能存储太多数据,速度快,主要用于mysql的缓存

redis 是一个高性能的 key-value 数据库。 redis 的出现,很大程度补偿了 memcached 这类 keyvalue存储的不足,在部分场合可以对关系数据库起到很 好的补充作用。它提供了 Python,Ruby,Erlang,PHP 客户端,使用很方便。 Redis 的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上 (这称为“半持久化模式”);也可以把每一次数据变化都写入到一个append only file(aof)里面(这称为“全持久化模式”)。

关闭之前的数据库

[root@server4 redis]# /etc/init.d/redis_6379 stop Stopping ... Redis stopped [root@server5 utils]# /etc/init.d/redis_6379 stop Stopping ... Redis stopped

server3:

[root@server3 redis]# mkdir /usr/local/rediscluster [root@server3 redis]# cd /usr/local/rediscluster [root@server3 rediscluster]# mkdir 700{1..6} [root@server3 rediscluster]# ls 7001 7002 7003 7004 7005 7006 [root@server3 rediscluster]# 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 pidfile "/usr/local/rediscluster/7001/redis.pid" # 不同的实例pid分别放在不同的文件 logfile "/usr/local/rediscluster/7001/redis.log" # 不同的实例log分别放在不同的文件 daemonize yes # 允许打入后台 dir "/usr/local/rediscluster/7001" # 数据目录 [root@server3 7001]# redis-server redis.conf [root@server3 7001]# ls appendonly.aof nodes.conf redis.conf redis.log redis.pid [root@server3 7001]# scp redis.conf ../7002 [root@server3 7001]# scp redis.conf ../7003 [root@server3 7001]# scp redis.conf ../7004 [root@server3 7001]# scp redis.conf ../7005 [root@server3 7001]# scp redis.conf ../7006 将复制过去的文件端口改为与目录名对应的 启动 [root@server3 7006]# ps ax 11370 ? Ssl 0:01 redis-server *:7002 [cluster] 11377 ? Ssl 0:01 redis-server *:7003 [cluster] 11385 ? Ssl 0:01 redis-server *:7004 [cluster] 11391 ? Ssl 0:01 redis-server *:7005 [cluster] 11398 ? Ssl 0:00 redis-server *:7006 [cluster] 11419 ? R 0:00 [kworker/0:0] 11434 ? Rsl 0:00 redis-server *:7001 [cluster] [root@server3 7001]# redis-cli -c -p 7001 ##进入查看规则,发现集群之间没有联系起来 127.0.0.1:7001> info # Replication role:master connected_slaves:0 master_replid:a5872a30f2e1762379c8273b85ace1f5c2623032 [root@server3 7001]# 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 >>> Performing hash slots allocation on 6 nodes... Master[0] -> Slots 0 - 5460 Master[1] -> Slots 5461 - 10922 Master[2] -> Slots 10923 - 16383 Adding replica 127.0.0.1:7004 to 127.0.0.1:7001 Adding replica 127.0.0.1:7005 to 127.0.0.1:7002 Adding replica 127.0.0.1:7006 to 127.0.0.1:7003 >>> Trying to optimize slaves allocation for anti-affinity [WARNING] Some slaves are in the same host as their master M: 07d22430d580aa5d6d07c985ad05f9b8be201747 127.0.0.1:7001 ##每个主,都有一个备 slots:[0-5460] (5461 slots) master M: 255ab813914181bc6bdfeb2f53cfd9881e0e7833 127.0.0.1:7002 slots:[5461-10922] (5462 slots) master M: eae70c18aa650530c526c751da78606e65c74b4d 127.0.0.1:7003 slots:[10923-16383] (5461 slots) master S: 80db2cccbe13f65cbb339eacb74555a533c4d413 127.0.0.1:7004 replicates 255ab813914181bc6bdfeb2f53cfd9881e0e7833 S: 0e67ef838df44ee8cdc40bafed7621eee1d91c8e 127.0.0.1:7005 replicates eae70c18aa650530c526c751da78606e65c74b4d S: 1459c5e059b55103bc3efbdde59a7f3f0f3b77c6 127.0.0.1:7006 replicates 07d22430d580aa5d6d07c985ad05f9b8be201747 Can I set the above configuration? (type 'yes' to accept): yes ##是否创建自动安排的关系 >>> Nodes configuration updated >>> Assign a different config epoch to each node >>> Sending CLUSTER MEET messages to join the cluster Waiting for the cluster to join ... >>> Performing Cluster Check (using node 127.0.0.1:7001) M: 07d22430d580aa5d6d07c985ad05f9b8be201747 127.0.0.1:7001 slots:[0-5460] (5461 slots) master 1 additional replica(s) M: 255ab813914181bc6bdfeb2f53cfd9881e0e7833 127.0.0.1:7002 slots:[5461-10922] (5462 slots) master 1 additional replica(s) S: 0e67ef838df44ee8cdc40bafed7621eee1d91c8e 127.0.0.1:7005 slots: (0 slots) slave replicates eae70c18aa650530c526c751da78606e65c74b4d S: 1459c5e059b55103bc3efbdde59a7f3f0f3b77c6 127.0.0.1:7006 slots: (0 slots) slave replicates 07d22430d580aa5d6d07c985ad05f9b8be201747 S: 80db2cccbe13f65cbb339eacb74555a533c4d413 127.0.0.1:7004 slots: (0 slots) slave replicates 255ab813914181bc6bdfeb2f53cfd9881e0e7833 M: eae70c18aa650530c526c751da78606e65c74b4d 127.0.0.1:7003 slots:[10923-16383] (5461 slots) master 1 additional replica(s) [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. [root@server3 7001]# redis-cli --cluster info 127.0.0.1:7001 127.0.0.1:7001 (07d22430...) -> 0 keys | 5461 slots | 1 slaves. 127.0.0.1:7002 (255ab813...) -> 0 keys | 5462 slots | 1 slaves. 127.0.0.1:7003 (eae70c18...) -> 0 keys | 5461 slots | 1 slaves.

测试:

[root@server3 7001]# redis-cli -c -p 7001 ##连接的是7001,写入到了7002 127.0.0.1:7001> set name su -> Redirected to slot [5798] located at 127.0.0.1:7002 OK 127.0.0.1:7002> get name "su" [root@server3 7001]# redis-cli -c -p 7004 ##连接7004,获得从7002 127.0.0.1:7004> get name -> Redirected to slot [5798] located at 127.0.0.1:7002 "su" [root@server3 7001]# redis-cli --cluster info 127.0.0.1:7002 127.0.0.1:7002 (255ab813...) -> 1 keys | 5462 slots | 1 slaves. ##存入了数据 127.0.0.1:7001 (07d22430...) -> 0 keys | 5461 slots | 1 slaves. 127.0.0.1:7003 (eae70c18...) -> 0 keys | 5461 slots | 1 slaves. [OK] 1 keys in 3 masters. 0.00 keys per slot on average. [root@server3 7001]# redis-cli -c -p 7002 127.0.0.1:7002> get name "su" 127.0.0.1:7002> SHUTDOWN ##将7002宕机 not connected> [root@server3 7001]# redis-cli -c -p 7001 127.0.0.1:7001> get name ##再次查看数据,从备库获取 -> Redirected to slot [5798] located at 127.0.0.1:7004 "su" 127.0.0.1:7004> SHUTDOWN ##把备库也宕机 [root@server3 7001]# redis-cli -c -p 7001 127.0.0.1:7001> get name ##无法获取数据 (error) CLUSTERDOWN The cluster is down

但是redis数据库是基于内存的,只要没有关机,数据仍旧是可以恢复的

[root@server3 7001]# cd ../7002 [root@server3 7002]# ls appendonly.aof dump.rdb nodes.conf redis.conf redis.log [root@server3 7002]# cat appendonly.aof ##appendonly.aof文件记录数据 *2 $6 SELECT $1 0 *3 $3 set $4 name $2 su [root@server3 7002]# cd ../7004 [root@server3 7004]# cat appendonly.aof REDIS0009� redis-ver5.0.3� �]used-mem�xy'�ime– aof-preamble� ##无法获取数据�Yy h��*2 $6 SELECT $1 0 *3 $3 [root@server3 7004]# redis-server redis.conf ##到目录下重启 [root@server3 7004]# cd ../7002 [root@server3 7002]# redis-server redis.conf [root@server3 7002]# redis-cli -c -p 7001 127.0.0.1:7001> get name ##再次查看可以查看到数据 -> Redirected to slot [5798] located at 127.0.0.1:7004 "su" [root@server3 7002]# redis-cli --cluster info 127.0.0.1:7002 ##再次查看7002变为7004的备库,两者交换 127.0.0.1:7004 (80db2ccc...) -> 1 keys | 5462 slots | 1 slaves. 127.0.0.1:7001 (07d22430...) -> 0 keys | 5461 slots | 1 slaves. 127.0.0.1:7003 (eae70c18...) -> 0 keys | 5461 slots | 1 slaves. [OK] 1 keys in 3 masters. 0.00 keys per slot on average.

redis是基于内存的,所以作高可用集群时,没有必要将集群分布在多台主机上

redis添加高可用节点

创建节点目录

[root@server3 rediscluster]# mkdir 7007 [root@server3 rediscluster]# mkdir 7008 [root@server3 rediscluster]# ls 7001 7002 7003 7004 7005 7006 7007 7008 [root@server3 rediscluster]# cp 7001/redis.conf 7007/ [root@server3 rediscluster]# cp 7001/redis.conf 7008/ [root@server3 rediscluster]# cd 7007 [root@server3 7007]# vi redis.conf [root@server3 7007]# redis-server redis.conf [root@server3 7007]# cd ../7008 [root@server3 7008]# vi redis.conf [root@server3 7008]# redis-server redis.conf [root@server3 7008]# redis-cli --cluster info 127.0.0.1:7001 ##创建了节点但是并为将节点联系起来 127.0.0.1:7001 (07d22430...) -> 0 keys | 5461 slots | 1 slaves. 127.0.0.1:7003 (eae70c18...) -> 0 keys | 5461 slots | 1 slaves. 127.0.0.1:7004 (80db2ccc...) -> 1 keys | 5462 slots | 1 slaves. [OK] 1 keys in 3 masters. 0.00 keys per slot on average.

添加7007作为主节点

[root@server3 7008]# redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7001 >>> Adding node 127.0.0.1:7007 to cluster 127.0.0.1:7001 >>> Performing Cluster Check (using node 127.0.0.1:7001) M: 07d22430d580aa5d6d07c985ad05f9b8be201747 127.0.0.1:7001 slots:[0-5460] (5461 slots) master 1 additional replica(s) S: 1459c5e059b55103bc3efbdde59a7f3f0f3b77c6 127.0.0.1:7006 slots: (0 slots) slave replicates 07d22430d580aa5d6d07c985ad05f9b8be201747 S: 0e67ef838df44ee8cdc40bafed7621eee1d91c8e 127.0.0.1:7005 slots: (0 slots) slave replicates eae70c18aa650530c526c751da78606e65c74b4d M: eae70c18aa650530c526c751da78606e65c74b4d 127.0.0.1:7003 slots:[10923-16383] (5461 slots) master 1 additional replica(s) S: 255ab813914181bc6bdfeb2f53cfd9881e0e7833 127.0.0.1:7002 slots: (0 slots) slave replicates 80db2cccbe13f65cbb339eacb74555a533c4d413 M: 80db2cccbe13f65cbb339eacb74555a533c4d413 127.0.0.1:7004 slots:[5461-10922] (5462 slots) master 1 additional replica(s) [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. >>> Send CLUSTER MEET to node 127.0.0.1:7007 to make it join the cluster. [OK] New node added correctly. 再次查看节点信息,添加成功 [root@server3 7008]# redis-cli --cluster info 127.0.0.1:7001 127.0.0.1:7001 (07d22430...) -> 0 keys | 5461 slots | 1 slaves. 127.0.0.1:7003 (eae70c18...) -> 0 keys | 5461 slots | 1 slaves. 127.0.0.1:7007 (f4e58fdd...) -> 0 keys | 0 slots | 0 slaves. 127.0.0.1:7004 (80db2ccc...) -> 1 keys | 5462 slots | 1 slaves. [OK] 1 keys in 4 masters. 0.00 keys per slot on average.

查看节点UUID,添加7008为7007的slave

[root@server3 7008]# redis-cli -c -p 7007 127.0.0.1:7007> cluster nodes eae70c18aa650530c526c751da78606e65c74b4d 127.0.0.1:7003@17003 master - 0 1572140111841 3 connected 10923-16383 0e67ef838df44ee8cdc40bafed7621eee1d91c8e 127.0.0.1:7005@17005 slave eae70c18aa650530c526c751da78606e65c74b4d 0 1572140111540 3 connected 80db2cccbe13f65cbb339eacb74555a533c4d413 127.0.0.1:7004@17004 master - 0 1572140111339 7 connected 5461-10922 255ab813914181bc6bdfeb2f53cfd9881e0e7833 127.0.0.1:7002@17002 slave 80db2cccbe13f65cbb339eacb74555a533c4d413 0 1572140111540 7 connected 1459c5e059b55103bc3efbdde59a7f3f0f3b77c6 127.0.0.1:7006@17006 slave 07d22430d580aa5d6d07c985ad05f9b8be201747 0 1572140110336 1 connected f4e58fddbea05109cfcea59bd40225f784ec82cb 127.0.0.1:7007@17007 myself,master - 0 1572140110000 0 connected 07d22430d580aa5d6d07c985ad05f9b8be201747 127.0.0.1:7001@17001 master - 0 1572140110036 1 connected 0-5460 127.0.0.1:7007> exit [root@server3 7008]# redis-cli --cluster add-node 127.0.0.1:7008 127.0.0.1:7007 --cluster-slave --cluster-master-id f4e58fddbea05109cfcea59bd40225f784ec82cb >>> Adding node 127.0.0.1:7008 to cluster 127.0.0.1:7007 >>> Performing Cluster Check (using node 127.0.0.1:7007) M: f4e58fddbea05109cfcea59bd40225f784ec82cb 127.0.0.1:7007 slots: (0 slots) master M: eae70c18aa650530c526c751da78606e65c74b4d 127.0.0.1:7003 slots:[10923-16383] (5461 slots) master 1 additional replica(s) S: 0e67ef838df44ee8cdc40bafed7621eee1d91c8e 127.0.0.1:7005 slots: (0 slots) slave replicates eae70c18aa650530c526c751da78606e65c74b4d M: 80db2cccbe13f65cbb339eacb74555a533c4d413 127.0.0.1:7004 slots:[5461-10922] (5462 slots) master 1 additional replica(s) S: 255ab813914181bc6bdfeb2f53cfd9881e0e7833 127.0.0.1:7002 slots: (0 slots) slave replicates 80db2cccbe13f65cbb339eacb74555a533c4d413 S: 1459c5e059b55103bc3efbdde59a7f3f0f3b77c6 127.0.0.1:7006 slots: (0 slots) slave replicates 07d22430d580aa5d6d07c985ad05f9b8be201747 M: 07d22430d580aa5d6d07c985ad05f9b8be201747 127.0.0.1:7001 slots:[0-5460] (5461 slots) master 1 additional replica(s) [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. >>> Send CLUSTER MEET to node 127.0.0.1:7008 to make it join the cluster. Waiting for the cluster to join >>> Configure node as replica of 127.0.0.1:7007. [OK] New node added correctly. 添加slave成功 [root@server3 7008]# redis-cli --cluster info 127.0.0.1:7001 127.0.0.1:7001 (07d22430...) -> 0 keys | 5461 slots | 1 slaves. 127.0.0.1:7003 (eae70c18...) -> 0 keys | 5461 slots | 1 slaves. 127.0.0.1:7007 (f4e58fdd...) -> 0 keys | 0 slots | 1 slaves. 127.0.0.1:7004 (80db2ccc...) -> 1 keys | 5462 slots | 1 slaves. [OK] 1 keys in 4 masters. 0.00 keys per slot on average.

添加数据槽

[root@server3 7008]# redis-cli --cluster reshard 127.0.0.1:7007 >>> Performing Cluster Check (using node 127.0.0.1:7007) M: f4e58fddbea05109cfcea59bd40225f784ec82cb 127.0.0.1:7007 slots: (0 slots) master 1 additional replica(s) M: eae70c18aa650530c526c751da78606e65c74b4d 127.0.0.1:7003 slots:[10923-16383] (5461 slots) master 1 additional replica(s) S: 00ad8d58728f221e177bb8708594acb6151b2eb3 127.0.0.1:7008 slots: (0 slots) slave replicates f4e58fddbea05109cfcea59bd40225f784ec82cb S: 0e67ef838df44ee8cdc40bafed7621eee1d91c8e 127.0.0.1:7005 slots: (0 slots) slave replicates eae70c18aa650530c526c751da78606e65c74b4d M: 80db2cccbe13f65cbb339eacb74555a533c4d413 127.0.0.1:7004 slots:[5461-10922] (5462 slots) master 1 additional replica(s) S: 255ab813914181bc6bdfeb2f53cfd9881e0e7833 127.0.0.1:7002 slots: (0 slots) slave replicates 80db2cccbe13f65cbb339eacb74555a533c4d413 S: 1459c5e059b55103bc3efbdde59a7f3f0f3b77c6 127.0.0.1:7006 slots: (0 slots) slave replicates 07d22430d580aa5d6d07c985ad05f9b8be201747 M: 07d22430d580aa5d6d07c985ad05f9b8be201747 127.0.0.1:7001 slots:[0-5460] (5461 slots) master 1 additional replica(s) [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. How many slots do you want to move (from 1 to 16384)? 300 What is the receiving node ID? f4e58fddbea05109cfcea59bd40225f784ec82cb Please enter all the source node IDs. Type 'all' to use all the nodes as source nodes for the hash slots. Type 'done' once you entered all the source nodes IDs. Source node #1: all 查看添加数据槽成功 [root@server3 7008]# redis-cli --cluster info 127.0.0.1:7001 127.0.0.1:7001 (07d22430...) -> 0 keys | 5362 slots | 1 slaves. 127.0.0.1:7003 (eae70c18...) -> 0 keys | 5362 slots | 1 slaves. 127.0.0.1:7007 (f4e58fdd...) -> 0 keys | 299 slots | 1 slaves. 第一位作为标志位 127.0.0.1:7004 (80db2ccc...) -> 1 keys | 5361 slots | 1 slaves. [OK] 1 keys in 4 masters. 0.00 keys per slot on average.

平均分配数据槽

[root@server3 7008]# redis-cli --cluster rebalance --cluster-threshold 1 --cluster-user-empty-masters 127.0.0.1:7007 Unrecognized option or bad number of args for: '--cluster-user-empty-masters' [root@server3 7008]# redis-cli --cluster rebalance --cluster-threshold 1 --cluster-use-empty-masters 127.0.0.1:7001 >>> Performing Cluster Check (using node 127.0.0.1:7001) [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. >>> Rebalancing across 4 nodes. Total weight = 4.00 Moving 1266 slots from 127.0.0.1:7003 to 127.0.0.1:7007 ################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################## Moving 1266 slots from 127.0.0.1:7001 to 127.0.0.1:7007 ################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################## Moving 1265 slots from 127.0.0.1:7004 to 127.0.0.1:7007 ################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################# 查看分配成功 [root@server3 7008]# redis-cli --cluster info 127.0.0.1:7001127.0.0.1:7001 (07d22430...) -> 0 keys | 4096 slots | 1 slaves. 127.0.0.1:7003 (eae70c18...) -> 0 keys | 4096 slots | 1 slaves. 127.0.0.1:7007 (f4e58fdd...) -> 1 keys | 4096 slots | 1 slaves. 127.0.0.1:7004 (80db2ccc...) -> 0 keys | 4096 slots | 1 slaves. [OK] 1 keys in 4 masters. 0.00 keys per slot on average. 连接一个节点,查看之前的存入的数据,数据因为均分分配到了7007节点上 [root@server3 7008]# redis-cli -c -p 7008 127.0.0.1:7008> get name -> Redirected to slot [5798] located at 127.0.0.1:7007 "su" 127.0.0.1:7007>
最新回复(0)