分布式存储Redis(cluster)

  • A+
所属分类:Redis 数据库

四种集群方案

客户端分片

代理Proxy:Tweproxy

Rediscluster

Codis(豌豆荚开源项目)

Redis cluster

http://navyaijm.blog.51cto.com/4647068/1706715

Redis cluster最少要三主三从。这里配置8个节点

[root@Mike opt]#mkdir `seq 7001 7008`
[root@Mike opt]# ll
drwxr-xr-x. 2 root root 4096 Mar13 06:42 7001
drwxr-xr-x. 2 root root 4096 Mar13 06:42 7002
drwxr-xr-x. 2 root root 4096 Mar13 06:42 7003
drwxr-xr-x. 2 root root 4096 Mar13 06:42 7004
drwxr-xr-x. 2 root root 4096 Mar13 06:42 7005
drwxr-xr-x. 2 root root 4096 Mar13 06:42 7006
drwxr-xr-x. 2 root root 4096 Mar13 06:42 7007
drwxr-xr-x. 2 root root 4096 Mar13 06:42 7008
[root@Mike opt]# cp/etc/redis/6379.conf ./

修改配置为6379,批量替换

[root@Mike opt]#egrep -v '^#|^$' 6379.conf
daemonize yes
pidfile/var/run/redis_6379.pid
port 6379
cluster-enabled yes
cluster-config-filenodes.conf
cluster-node-timeout5000
appendonly yes
tcp-backlog 511
timeout 0
tcp-keepalive 0
loglevel notice
logfile"/var/log/redis_6379.log"
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilenamedump_6379.rdb
dir /opt/6379
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly yes
appendfilename"appendonly_6379.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal0 0 0
client-output-buffer-limit slave256mb 64mb 60
client-output-buffer-limit pubsub32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
sed 's/6379/7008/g' 6379.conf> 7008/redis.conf
sed 's/6379/7007/g' 6379.conf> 7007/redis.conf
sed 's/6379/7006/g' 6379.conf> 7006/redis.conf
sed 's/6379/7005/g' 6379.conf> 7005/redis.conf
sed 's/6379/7004/g' 6379.conf> 7004/redis.conf
sed 's/6379/7003/g' 6379.conf> 7003/redis.conf
sed 's/6379/7002/g' 6379.conf> 7002/redis.conf
sed 's/6379/7001/g' 6379.conf> 7001/redis.conf

启动服务

for i in `seq 7001 7008`;do cd/opt/$i && 
/usr/local/redis/bin/redis-server redis.conf;done
netstat -lntp|grep redis
ll /var/log/redis*
-rw-r--r--. 1 root root 1965 Mar 13 06:57 /var/log/redis_7001.log
-rw-r--r--. 1 root root 1965 Mar 13 06:57 /var/log/redis_7002.log
-rw-r--r--. 1 root root 1965 Mar 13 06:57 /var/log/redis_7003.log
-rw-r--r--. 1 root root 1965 Mar 13 06:57 /var/log/redis_7004.log
-rw-r--r--. 1 root root 1965 Mar 13 06:57 /var/log/redis_7005.log
-rw-r--r--. 1 root root 1965 Mar 13 06:57 /var/log/redis_7006.log
-rw-r--r--. 1 root root 1965 Mar 13 06:57 /var/log/redis_7007.log
-rw-r--r--. 1 root root 1965 Mar 13 06:57 /var/log/redis_7008.log

安装ruby工具

yum -y install ruby rubygems
gem install redis
cp/root/tools/redis-3.0.7/src/redis-trib.rb /usr/local/bin/redis-trib

创建集群

[root@Mike src]# redis-trib create --replicas 1192.168.16.129:7001 
192.168.16.129:7002 192.168.16.129:7003 192.168.16.129:7004192.168.16.129:7005 
192.168.16.129:7006 192.168.16.129:7007 192.168.16.129:7008
>>> Creating cluster
>>> Performing hashslots allocation on 8 nodes...
Using 4 masters:
192.168.16.129:7001
192.168.16.129:7002
192.168.16.129:7003
192.168.16.129:7004
Adding replica192.168.16.129:7005 to 192.168.16.129:7001
Adding replica192.168.16.129:7006 to 192.168.16.129:7002
Adding replica192.168.16.129:7007 to 192.168.16.129:7003
Adding replica192.168.16.129:7008 to 192.168.16.129:7004
M:b95fe6e6b270871164b6ae35481e2407d73c1180 192.168.16.129:7001
slots:0-4095 (4096 slots) master
M:716db4bdf43e73af41ee023fe0a375f2b0010aaf 192.168.16.129:7002
slots:4096-8191 (4096 slots) master
M:744373970b847073ee0a3d647e69800a4e640291 192.168.16.129:7003
slots:8192-12287 (4096 slots) master
M:36e83e225bc5bf170ad4c839bd0ba6c9fd0b6673 192.168.16.129:7004
slots:12288-16383 (4096 slots) master
S:d5cb64f689a862cef3db7f31f45b602c6d7ff187 192.168.16.129:7005
replicates b95fe6e6b270871164b6ae35481e2407d73c1180
S:1d1ff9718e879d8290d384e2efc5b33e494c9ef4 192.168.16.129:7006
replicates 716db4bdf43e73af41ee023fe0a375f2b0010aaf
S:d6bdcb1ad791c8093e6b971779db2a81ad4e4c54 192.168.16.129:7007
replicates 744373970b847073ee0a3d647e69800a4e640291
S:6f9e898da1523f8549c300a6b26e42bcd51ba6f8 192.168.16.129:7008
replicates 36e83e225bc5bf170ad4c839bd0ba6c9fd0b6673
Can I set the aboveconfiguration? (type 'yes' to accept): yes
>>> Nodes configurationupdated
>>> Assign a differentconfig epoch to each node
>>> Sending CLUSTER MEETmessages to join the cluster
Waiting for the cluster tojoin....
>>> Performing ClusterCheck (using node 192.168.16.129:7001)
M:b95fe6e6b270871164b6ae35481e2407d73c1180 192.168.16.129:7001
slots:0-4095 (4096 slots) master
M:716db4bdf43e73af41ee023fe0a375f2b0010aaf 192.168.16.129:7002
slots:4096-8191 (4096 slots) master
M:744373970b847073ee0a3d647e69800a4e640291 192.168.16.129:7003
slots:8192-12287 (4096 slots) master
M:36e83e225bc5bf170ad4c839bd0ba6c9fd0b6673 192.168.16.129:7004
slots:12288-16383 (4096 slots) master
M:d5cb64f689a862cef3db7f31f45b602c6d7ff187 192.168.16.129:7005
slots: (0 slots) master
replicates b95fe6e6b270871164b6ae35481e2407d73c1180
M:1d1ff9718e879d8290d384e2efc5b33e494c9ef4 192.168.16.129:7006
slots: (0 slots) master
replicates 716db4bdf43e73af41ee023fe0a375f2b0010aaf
M:d6bdcb1ad791c8093e6b971779db2a81ad4e4c54 192.168.16.129:7007
slots: (0 slots) master
replicates 744373970b847073ee0a3d647e69800a4e640291
M: 6f9e898da1523f8549c300a6b26e42bcd51ba6f8192.168.16.129:7008
slots: (0 slots) master
replicates 36e83e225bc5bf170ad4c839bd0ba6c9fd0b6673
[OK] All nodes agree about slotsconfiguration.
>>> Check for openslots...
>>> Check slotscoverage...
[OK] All 16384 slots covered.

查看状态

[root@Mike src]# redis-cli -c -h192.168.16.129 -p 7001
192.168.16.129:7001>INFO
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.16.129,port=7005,state=online,offset=239,lag=0
master_repl_offset:239
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:238
192.168.16.129:7001>set key2 2
-> Redirected to slot [4998]located at 192.168.16.129:7002
OK
192.168.16.129:7002>
192.168.16.129:7002>CLUSTER NODES
d6bdcb1ad791c8093e6b971779db2a81ad4e4c54192.168.16.129:7007 slave 
744373970b847073ee0a3d647e69800a4e640291 01457878496839 7 connected
36e83e225bc5bf170ad4c839bd0ba6c9fd0b6673192.168.16.129:7004 master - 0 
1457878497849 4 connected 12288-16383
716db4bdf43e73af41ee023fe0a375f2b0010aaf192.168.16.129:7002 myself,master - 0 
0 2 connected 4096-8191
1d1ff9718e879d8290d384e2efc5b33e494c9ef4192.168.16.129:7006 slave 
716db4bdf43e73af41ee023fe0a375f2b0010aaf 01457878496839 6 connected
6f9e898da1523f8549c300a6b26e42bcd51ba6f8192.168.16.129:7008 slave 
36e83e225bc5bf170ad4c839bd0ba6c9fd0b6673 01457878496334 8 connected
b95fe6e6b270871164b6ae35481e2407d73c1180192.168.16.129:7001 master - 0 
1457878497345 1 connected 0-4095
744373970b847073ee0a3d647e69800a4e640291192.168.16.129:7003 master - 0 
1457878497849 3 connected 8192-12287
d5cb64f689a862cef3db7f31f45b602c6d7ff187192.168.16.129:7005 slave 
b95fe6e6b270871164b6ae35481e2407d73c1180 01457878496839 5 connected
192.168.16.129:7002>
192.168.16.129:7002>CLUSTER INFO
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:8
cluster_size:4
cluster_current_epoch:8
cluster_my_epoch:2
cluster_stats_messages_sent:2044
cluster_stats_messages_received:2044

添加master节点

redis-trib.rb add-node192.168.16.129 :7007 192.168.16.129:7001

192.168.16.129 :7007是要加的新节点,192.168.16.129:7001是集群中已存在的任意节点

添加slave节点

redis-trib.rb add-node --slave--master-id 
5ef18f95f75756891aa948ea1f200044f1d3947c 
192.168.16.129:7008192.168.16.129:7001

--slave
指定要加的是从节点,--master-id指定这个从节点的主节点ID,192.168.16.129:7008是需要新加的从节点,192.168.16.129:7001是集群已存在的任意节点

YaLei

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: