主機 | 端口1 | 端口2 |
---|---|---|
192.168.15.231 | 7001 | 7002 |
192.168.15.232 | 7001 | 7002 |
192.168.15.233 | 7001 | 7002 |
1、下載下傳redis最新穩定版(redis-5.0.4.tar.gz)
wget http://download.redis.io/releases/redis-5.0.4.tar.gz
2、解壓,建立相關目錄
tar zxvf redis-5.0.4.tar.gz
mv redis-5.0.4 redis
cd redis && mkdir {bin,conf,data,log}
3、在conf下建立配置檔案(啟動時候指定即可)
[lakala@master1 conf]$ cat redis-common.conf
#GENERAL
daemonize yes
tcp-backlog 100
timeout 0
tcp-keepalive 0
#log級别 notice info warning error
loglevel warning
databases 16
save 900 1
save 300 10
save 60 10000
#最大可用記憶體 根據實際修改
maxmemory 2048m
dir /home/lakala/redis/data
loglevel warning
slave-serve-stale-data yes
#slave隻讀
slave-read-only yes
#not use default
repl-disable-tcp-nodelay yes
slave-priority 100
#打開aof持久化
appendonly yes
#每秒一次aof寫
appendfsync everysec
#關閉在aof rewrite的時候對新的寫操作進行fsync
no-appendfsync-on-rewrite yes
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
#打開redis叢集
cluster-enabled yes
#節點互連逾時的閥值
cluster-node-timeout 15000
cluster-migration-barrier 1
slowlog-log-slower-than 10000
slowlog-max-len 128
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
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
[lakala@master1 conf]$ cat redis-7001.conf
#包含通用配置
include /home/lakala/redis/conf/redis-common.conf
#監聽tcp端口
bind 192.168.15.231
port 7001
logfile "/home/lakala/redis/log/redis-7001.log"
#記憶體耗盡時采用的淘汰政策:
# volatile-lru -> remove the key with an expire set using an LRU algorithm
# allkeys-lru -> remove any key accordingly to the LRU algorithm
# volatile-random -> remove a random key with an expire set
# allkeys-random -> remove a random key, any key
# volatile-ttl -> remove the key with the nearest expire time (minor TTL)
# noeviction -> don't expire at all, just return an error on write operations
maxmemory-policy allkeys-lru
#aof存儲檔案
appendfilename "appendonly-7001.aof"
#不開啟rdb存儲,隻用于添加slave過程
dbfilename dump-7001.rdb
#cluster配置檔案(啟動自動生成)
cluster-config-file nodes-7001.conf
#部署在同一機器的redis執行個體,把auto-aof-rewrite搓開,因為cluster環境下記憶體占用基本一緻.
#防止同意機器下瞬間fork所有redis程序做aof rewrite,占用大量記憶體(ps:cluster必須開啟aof)
auto-aof-rewrite-percentage 80-100
[lakala@master1 conf]$ cat redis-7002.conf
#包含通用配置
include /home/lakala/redis/conf/redis-common.conf
#監聽tcp端口
bind 192.168.15.231
port 7002
logfile "/home/lakala/redis/log/redis-7002.log"
#記憶體耗盡時采用的淘汰政策:
# volatile-lru -> remove the key with an expire set using an LRU algorithm
# allkeys-lru -> remove any key accordingly to the LRU algorithm
# volatile-random -> remove a random key with an expire set
# allkeys-random -> remove a random key, any key
# volatile-ttl -> remove the key with the nearest expire time (minor TTL)
# noeviction -> don't expire at all, just return an error on write operations
maxmemory-policy allkeys-lru
#aof存儲檔案
appendfilename "appendonly-7002.aof"
#不開啟rdb存儲,隻用于添加slave過程
dbfilename dump-7002.rdb
#cluster配置檔案(啟動自動生成)
cluster-config-file nodes-7002.conf
#部署在同一機器的redis執行個體,把auto-aof-rewrite搓開,因為cluster環境下記憶體占用基本一緻.
#防止同意機器下瞬間fork所有redis程序做aof rewrite,占用大量記憶體(ps:cluster必須開啟aof)
auto-aof-rewrite-percentage 80-100
4、在bin目錄下建立啟停腳本
[lakala@master1 bin]$ cat start-redis.sh
#!/bin/bash
/home/lakala/redis/src/redis-server /home/lakala/redis/conf/redis-7001.conf
/home/lakala/redis/src/redis-server /home/lakala/redis/conf/redis-7002.conf
[lakala@master1 bin]$ cat stop-redis.sh
#!/bin/bash
ps -ef |grep redis |grep -v grep |awk '{print $2}' |xargs kill
5、以上步驟在另外兩台機器上面重複做一遍,注意修改ip即可,最後把redis都啟動起來
6、在其中一台機器上啟動redis叢集
/home/lakala/redis/src/redis-cli --cluster create 192.168.15.231:7001 192.168.15.232:7001 192.168.15.233:7001 192.168.15.231:7002 192.168.15.232:7002 192.168.15.233:7002 --cluster-replicas 1
7、檢視叢集情況
[lakala@master1 redis]$ ./src/redis-cli -c -h 192.168.15.231 -p 7001
192.168.15.231:7001> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:18
cluster_my_epoch:18
cluster_stats_messages_ping_sent:1263
cluster_stats_messages_pong_sent:1277
cluster_stats_messages_sent:2540
cluster_stats_messages_ping_received:1277
cluster_stats_messages_pong_received:1262
cluster_stats_messages_received:2539
192.168.15.231:7001> cluster nodes
5857256d73532aaf02a3788c80332f6d38563807 192.168.15.231:7001@17001 myself,slave eaf36b2c8e1618cd6abbd2ca87ec38e0552f386c 0 1555406223000 9 connected
1dd073577ae8b27e43555345c3706e6e3e1cf54d 192.168.15.231:7002@17002 slave b2878a4d06b38580e107f5b04b1561620c8af175 0 1555406221000 16 connected
3a98f61b8a9c92ccb819cf4883576f1bea16638b 192.168.15.233:7002@17002 slave 4419323fa73993873ad0212f3645cc6b77632683 0 1555406224781 15 connected
b2878a4d06b38580e107f5b04b1561620c8af175 192.168.15.233:7001@17001 master - 0 1555406223779 16 connected 10923-16383
eaf36b2c8e1618cd6abbd2ca87ec38e0552f386c 192.168.15.232:7002@17002 master - 0 1555406222775 18 connected 0-5460
4419323fa73993873ad0212f3645cc6b77632683 192.168.15.232:7001@17001 master - 0 1555406224000 15 connected 5461-10922
8、輸入和擷取鍵值對
192.168.15.231:7001> set hello world
-> Redirected to slot [866] located at 192.168.15.232:7002
OK
192.168.15.232:7002> get hello
"world"
9、叢集故障轉移測試
先斷掉叢集中的一台master節點,可以看到叢集依舊是正常,且會自動将這故障master對應的slave節點頂替上,變為master
192.168.15.232:7001> cluster nodes
4419323fa73993873ad0212f3645cc6b77632683 192.168.15.232:7001@17001 myself,master - 0 1555406865000 15 connected 5461-10922
5857256d73532aaf02a3788c80332f6d38563807 192.168.15.231:7001@17001 slave eaf36b2c8e1618cd6abbd2ca87ec38e0552f386c 0 1555406863000 18 connected
1dd073577ae8b27e43555345c3706e6e3e1cf54d 192.168.15.231:7002@17002 slave b2878a4d06b38580e107f5b04b1561620c8af175 0 1555406865647 16 connected
b2878a4d06b38580e107f5b04b1561620c8af175 192.168.15.233:7001@17001 master - 0 1555406864645 16 connected 10923-16383
3a98f61b8a9c92ccb819cf4883576f1bea16638b 192.168.15.233:7002@17002 slave 4419323fa73993873ad0212f3645cc6b77632683 0 1555406864000 15 connected
eaf36b2c8e1618cd6abbd2ca87ec38e0552f386c 192.168.15.232:7002@17002 master - 0 1555406862637 18 connected 0-5460
192.168.15.232:7001>
[lakala@master2 redis]$ ps aux | grep redis
lakala 8143 0.3 0.1 164636 15164 ? Ssl 15:17 0:27 /home/lakala/redis/src/redis-server 192.168.15.232:7001 [cluster]
lakala 8148 0.3 0.1 161052 14260 ? Ssl 15:17 0:27 /home/lakala/redis/src/redis-server 192.168.15.232:7002 [cluster]
lakala 16709 0.0 0.0 112708 980 pts/0 S+ 17:27 0:00 grep --color=auto redis
[lakala@master2 redis]$ kill 8148
[lakala@master2 redis]$ ./src/redis-cli -c -h 192.168.15.232 -p 7001
192.168.15.232:7001> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:19
cluster_my_epoch:15
cluster_stats_messages_ping_sent:78503
cluster_stats_messages_pong_sent:6919
cluster_stats_messages_fail_sent:15
cluster_stats_messages_auth-req_sent:5
cluster_stats_messages_auth-ack_sent:3
cluster_stats_messages_update_sent:2
cluster_stats_messages_sent:85447
cluster_stats_messages_ping_received:6916
cluster_stats_messages_pong_received:7559
cluster_stats_messages_fail_received:10
cluster_stats_messages_auth-req_received:4
cluster_stats_messages_auth-ack_received:2
cluster_stats_messages_received:14491
192.168.15.232:7001> cluster nodes
4419323fa73993873ad0212f3645cc6b77632683 192.168.15.232:7001@17001 myself,master - 0 1555406915000 15 connected 5461-10922
5857256d73532aaf02a3788c80332f6d38563807 192.168.15.231:7001@17001 master - 0 1555406915825 19 connected 0-5460
1dd073577ae8b27e43555345c3706e6e3e1cf54d 192.168.15.231:7002@17002 slave b2878a4d06b38580e107f5b04b1561620c8af175 0 1555406915000 16 connected
b2878a4d06b38580e107f5b04b1561620c8af175 192.168.15.233:7001@17001 master - 0 1555406916829 16 connected 10923-16383
3a98f61b8a9c92ccb819cf4883576f1bea16638b 192.168.15.233:7002@17002 slave 4419323fa73993873ad0212f3645cc6b77632683 0 1555406914000 15 connected
eaf36b2c8e1618cd6abbd2ca87ec38e0552f386c 192.168.15.232:7002@17002 master,fail - 1555406892929 1555406892000 18 disconnected
測試一台機器上面斷掉某個master節點後,在此節點上的資料有無丢失,從下面可以看出master節點斷掉後,從叢集中讀取該節點下的資料會自動切換到該master節點的slave節點下,而slave節點已經替代原master節點成為新的master節點
192.168.15.231:7001> keys *
1) "b"
2) "f"
3) "hello"
[lakala@master1 redis]$ ps aux | grep redis
lakala 7834 0.2 0.1 168732 15024 ? Ssl Apr16 2:09 /home/lakala/redis/src/redis-server 192.168.15.231:7001 [cluster]
lakala 7839 0.2 0.1 161052 14208 ? Ssl Apr16 2:05 /home/lakala/redis/src/redis-server 192.168.15.231:7002 [cluster]
lakala 11289 0.0 0.0 112708 980 pts/0 S+ 09:30 0:00 grep --color=auto redis
[lakala@master1 redis]$ kill 7834
[lakala@master1 redis]$ ./src/redis-cli -c -h 192.168.15.231 -p 7002
192.168.15.231:7002> get b
-> Redirected to slot [3300] located at 192.168.15.232:7002
"wei"
192.168.15.232:7002> get f
"ling"
192.168.15.232:7002> get hello
"world"