redis多個redis節點網絡互聯,數據共享所有的節點都是一主一從(可以是多個從),其中從不提供服務,僅作爲備用
不支持同時處理多個鍵(如mset/mget),因爲redis需要把鍵均勻分佈在各個節點上,併發量很高的情況下同時創建鍵值會降低性能並導致不可預測的行爲。
支持在線增加、刪除節點
客戶端可以連任何一個主節點進行讀寫
實驗環境
centos6.9_x64
redis_master 192.168.0.14 6379/6380/6381/ 虛擬節點
reids_slave 192.168.0.15 6382/6383/6384/ 虛擬節點
實驗軟件
redis-4.0.8.tar.gz
軟件安裝
yum install -y wget lrzsz make gcc gcc-c++
yum install centos-release-scl-rh
ls /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo
/etc/yum.repos.d/CentOS-SCLo-scl-rh.repo
yum install -y rh-ruby23
scl enable rh-ruby23 bash
ruby -v
ruby 2.3.8p459 (2018-10-18 revision 65136) [x86_64-linux-gnu]
gem install redis redis服務端操作
tar zxvf /root/redis-4.0.8.tar.gz
cd /root/redis-4.0.8
make && make PREFIX=/usr/local/redis install
ll /usr/local/redis/
bin
cluster
redis-trib.rb
mkdir -pv /usr/local/redis/cluster
cp -pv /root/redis-4.0.8/src/redis-trib.rb /usr/local/redis/
cp -pv /root/redis-4.0.8/redis.conf /usr/local/redis/cluster/6379.conf 6379/6380/6381相同配置
echo > /usr/local/redis/cluster/6379.conf 6379/6380/6381相同配置
cat /usr/local/redis/cluster/6379.conf 6379/6380/6381配置文件修改內容
bind 192.168.0.14
protected-mode yes
port 6379
daemonize yes
pidfile /var/run/redis_6380.pid
dbfilename dump_6379.rdb
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 5000
cluster-slave-validity-factor 10
#cluster-migration-barrier 1
cluster-require-full-coverage yes
/usr/local/redis/bin/redis-server /usr/local/redis/cluster/6379.conf & 啓動服務
/usr/local/redis/bin/redis-server /usr/local/redis/cluster/6380.conf & 啓動服務
/usr/local/redis/bin/redis-server /usr/local/redis/cluster/6381.conf & 啓動服務
netstat -tuplna | grep redis
tcp 0 0 192.168.0.14:6379 0.0.0.0:* LISTEN 9989/redis-server 1
tcp 0 0 192.168.0.14:6380 0.0.0.0:* LISTEN 9994/redis-server 1
tcp 0 0 192.168.0.14:6381 0.0.0.0:* LISTEN 9999/redis-server 1
ps -ef | grep redis
root 9989 1 0 14:58 ? 00:00:00 /usr/local/redis/bin/redis-server 192.168.0.14:6379 [cluster]
root 9994 1 0 14:58 ? 00:00:00 /usr/local/redis/bin/redis-server 192.168.0.14:6380 [cluster]
root 9999 1 0 14:58 ? 00:00:00 /usr/local/redis/bin/redis-server 192.168.0.14:6381 [cluster] 以上操作爲redis_master端操作
scp /root/redis-4.0.8.tar.gz [email protected]:/root/
scp /usr/local/redis/cluster/6379.conf [email protected]:/usr/local/redis/cluster/6382.conf 6382/6382/6384相同配置
tar zxvf /root/redis-4.0.8.tar.gz
cd /root/redis-4.0.8
make && make PREFIX=/usr/local/redis install
ll /usr/local/redis/
bin
cluster
redis-trib.rb
mkdir -pv /usr/local/redis/cluster
cp -pv /root/redis-4.0.8/redis.conf /usr/local/redis/cluster/6382.conf
echo > /usr/local/redis/cluster/6381.conf
echo > /usr/local/redis/cluster/6382.conf
cat /usr/local/redis/cluster/6382.conf 6382/63843/6382相同配置
bind 192.168.0.15
protected-mode yes
port 6382
daemonize yes
pidfile /var/run/redis_6382.pid
dbfilename dump_6382.rdb
cluster-enabled yes
cluster-config-file nodes-6382.conf
cluster-node-timeout 5000
cluster-slave-validity-factor 10
#cluster-migration-barrier 1
cluster-require-full-coverage yes
/usr/local/redis/bin/redis-server /usr/local/redis/cluster/6382.conf & 啓動服務
/usr/local/redis/bin/redis-server /usr/local/redis/cluster/6383.conf &
/usr/local/redis/bin/redis-server /usr/local/redis/cluster/6384.conf &
netstat -tuplna | grep redis
tcp 0 0 192.168.0.15:6382 0.0.0.0:* LISTEN 7165/redis-server 1
tcp 0 0 192.168.0.15:6383 0.0.0.0:* LISTEN 7158/redis-server 1
tcp 0 0 192.168.0.15:6384 0.0.0.0:* LISTEN 7170/redis-server 1
ps -ef | grep redis
root 7158 1 0 20:55 ? 00:00:00 /usr/local/redis/bin/redis-server 192.168.0.15:6383 [cluster]
root 7165 1 0 20:56 ? 00:00:00 /usr/local/redis/bin/redis-server 192.168.0.15:6382 [cluster]
root 7170 1 0 20:56 ? 00:00:00 /usr/local/redis/bin/redis-server 192.168.0.15:6384 [cluster]
/usr/local/redis/redis-trib.rb create --replicas 1 192.168.0.14:6379 192.168.0.14:6380 192.168.0.14:6381 192.168.0.15:6382 192.168.0.15:6383 192.168.0.15:6384 redis_master端操作,創建羣集少於6個節點會報錯
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.0.14:6379
192.168.0.15:6382
192.168.0.14:6380
Adding replica 192.168.0.15:6384 to 192.168.0.14:6379
Adding replica 192.168.0.14:6381 to 192.168.0.15:6382
Adding replica 192.168.0.15:6383 to 192.168.0.14:6380
M: 083354570b0596e14e474554d28a6f1cb2e567c8 192.168.0.14:6379
slots:0-5460 (5461 slots) master
M: ce932aef7c6fbeb6571898c6923c55032067b43b 192.168.0.14:6380
slots:10923-16383 (5461 slots) master
S: 168f68a61b035be5fab4dfe9a109a2e1c472c7da 192.168.0.14:6381
replicates c4305af229ddeb679c4783da856bfb2f6f1d4b38
M: c4305af229ddeb679c4783da856bfb2f6f1d4b38 192.168.0.15:6382
slots:5461-10922 (5462 slots) master
S: b3e868782e1c5142c9c30317f214741aa380bfdd 192.168.0.15:6383
replicates ce932aef7c6fbeb6571898c6923c55032067b43b
S: 7897e6cd7f5de220fa7f9248d617254405e408dc 192.168.0.15:6384
replicates 083354570b0596e14e474554d28a6f1cb2e567c8
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 192.168.0.14:6379)
M: 083354570b0596e14e474554d28a6f1cb2e567c8 192.168.0.14:6379
slots:0-5460 (5461 slots) master
1 additional replica(s)
S: 168f68a61b035be5fab4dfe9a109a2e1c472c7da 192.168.0.14:6381
slots: (0 slots) slave
replicates c4305af229ddeb679c4783da856bfb2f6f1d4b38
S: b3e868782e1c5142c9c30317f214741aa380bfdd 192.168.0.15:6383
slots: (0 slots) slave
replicates ce932aef7c6fbeb6571898c6923c55032067b43b
M: ce932aef7c6fbeb6571898c6923c55032067b43b 192.168.0.14:6380
slots:10923-16383 (5461 slots) master
1 additional replica(s)
S: 7897e6cd7f5de220fa7f9248d617254405e408dc 192.168.0.15:6384
slots: (0 slots) slave
replicates 083354570b0596e14e474554d28a6f1cb2e567c8
M: c4305af229ddeb679c4783da856bfb2f6f1d4b38 192.168.0.15:6382
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.
/usr/local/redis/bin/redis-cli -c -h 192.168.0.14 redis_master端操作,查看羣集狀態
192.168.0.14:6379> cluster nodes
168f68a61b035be5fab4dfe9a109a2e1c472c7da 192.168.0.14:6381@16381 slave c4305af229ddeb679c4783da856bfb2f6f1d4b38 0 1570777795825 4 connected
b3e868782e1c5142c9c30317f214741aa380bfdd 192.168.0.15:6383@16383 slave ce932aef7c6fbeb6571898c6923c55032067b43b 0 1570777795826 5 connected
ce932aef7c6fbeb6571898c6923c55032067b43b 192.168.0.14:6380@16380 master - 0 1570777795321 2 connected 10923-16383
7897e6cd7f5de220fa7f9248d617254405e408dc 192.168.0.15:6384@16384 slave 083354570b0596e14e474554d28a6f1cb2e567c8 0 1570777795523 6 connected
083354570b0596e14e474554d28a6f1cb2e567c8 192.168.0.14:6379@16379 myself,master - 0 1570777795000 1 connected 0-5460
c4305af229ddeb679c4783da856bfb2f6f1d4b38 192.168.0.15:6382@16382 master - 0 1570777794315 4 connected 5461-10922
192.168.0.14:6379>
/usr/local/redis/redis-trib.rb add-node --slave 192.168.0.15:6388 192.168.0.15:6389 添加新slave節點
/usr/local/redis/redis-trib del-node 192.168.0.15:6388 移除節點