一、部署Redis
六个节点部署Redis,过程略。
二、修改配置文件
172.16.254.124
bind 172.16.254.124
protected-mode yes
port 7004
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile "/var/run/redis_7004.pid"
loglevel notice
logfile "/redis/log/redis_7004.log"
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /redis/data/
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
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble no
lua-time-limit 5000
cluster-enabled yes
cluster-config-file nodes-7004.conf
cluster-node-timeout 15000
cluster-slave-validity-factor 10
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-size -2
list-compress-depth 0
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 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
172.16.254.125
bind 172.16.254.125
protected-mode yes
port 7005
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile "/var/run/redis_7005.pid"
loglevel notice
logfile "/redis/log/redis_7005.log"
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /redis/data/
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
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble no
lua-time-limit 5000
cluster-enabled yes
cluster-config-file nodes-7005.conf
cluster-node-timeout 15000
cluster-slave-validity-factor 10
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-size -2
list-compress-depth 0
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 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
172.16.254.126
bind 172.16.254.126
protected-mode yes
port 7006
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile "/var/run/redis_7006.pid"
loglevel notice
logfile "/redis/log/redis_7006.log"
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /redis/data/
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
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble no
lua-time-limit 5000
cluster-enabled yes
cluster-config-file nodes-7006.conf
cluster-node-timeout 15000
cluster-slave-validity-factor 10
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-size -2
list-compress-depth 0
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 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
172.16.254.127
bind 172.16.254.127
protected-mode yes
port 7007
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile "/var/run/redis_7007.pid"
loglevel notice
logfile "/redis/log/redis_7007.log"
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /redis/data/
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
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble no
lua-time-limit 5000
cluster-enabled yes
cluster-config-file nodes-7007.conf
cluster-node-timeout 15000
cluster-slave-validity-factor 10
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-size -2
list-compress-depth 0
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 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
172.16.254.128
bind 172.16.254.128
protected-mode yes
port 7008
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile "/var/run/redis_7008.pid"
loglevel notice
logfile "/redis/log/redis_7008.log"
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /redis/data/
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
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble no
lua-time-limit 5000
cluster-enabled yes
cluster-config-file nodes-7008.conf
cluster-node-timeout 15000
cluster-slave-validity-factor 10
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-size -2
list-compress-depth 0
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 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
172.16.254.129
bind 172.16.254.129
protected-mode yes
port 7009
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile "/var/run/redis_7009.pid"
loglevel notice
logfile "/redis/log/redis_7009.log"
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /redis/data/
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
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble no
lua-time-limit 5000
cluster-enabled yes
cluster-config-file nodes-7009.conf
cluster-node-timeout 15000
cluster-slave-validity-factor 10
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-size -2
list-compress-depth 0
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 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
分别启动每个节点的redis
redis-server /redis/conf/nodes-7004.conf
redis-server /redis/conf/nodes-7005.conf
redis-server /redis/conf/nodes-7006.conf
redis-server /redis/conf/nodes-7007.conf
redis-server /redis/conf/nodes-7008.conf
redis-server /redis/conf/nodes-7009.conf
在任意节点创建cluster
redis-cli --cluster create 172.16.254.124:7004 172.16.254.125:7005 172.16.254.126:7006 172.16.254.127:7007 172.16.254.128:7008 172.16.254.129:7009 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 172.16.254.128:7008 to 172.16.254.124:7004
Adding replica 172.16.254.129:7009 to 172.16.254.125:7005
Adding replica 172.16.254.127:7007 to 172.16.254.126:7006
M: dae116bae245c1d9b94643c627243f0122dec6ad 172.16.254.124:7004
slots:[0-5460] (5461 slots) master
M: a489464dfd1321cdbe2a0f464856218a38127e19 172.16.254.125:7005
slots:[5461-10922] (5462 slots) master
M: 5aa077444a506afad1ff796616124a0b7298c125 172.16.254.126:7006
slots:[10923-16383] (5461 slots) master
S: 8205aa9f24882516bb8bbe0fb7d2c593271de152 172.16.254.127:7007
replicates 5aa077444a506afad1ff796616124a0b7298c125
S: 804ecd22d3de6dc2080a8de572a320407596b6fb 172.16.254.128:7008
replicates dae116bae245c1d9b94643c627243f0122dec6ad
S: 0600bacf8e9be9572c780090cb242e1e1e0206a2 172.16.254.129:7009
replicates a489464dfd1321cdbe2a0f464856218a38127e19
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 172.16.254.124:7004)
M: dae116bae245c1d9b94643c627243f0122dec6ad 172.16.254.124:7004
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: 0600bacf8e9be9572c780090cb242e1e1e0206a2 172.16.254.129:7009
slots: (0 slots) slave
replicates a489464dfd1321cdbe2a0f464856218a38127e19
S: 804ecd22d3de6dc2080a8de572a320407596b6fb 172.16.254.128:7008
slots: (0 slots) slave
replicates dae116bae245c1d9b94643c627243f0122dec6ad
S: 8205aa9f24882516bb8bbe0fb7d2c593271de152 172.16.254.127:7007
slots: (0 slots) slave
replicates 5aa077444a506afad1ff796616124a0b7298c125
M: a489464dfd1321cdbe2a0f464856218a38127e19 172.16.254.125:7005
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
M: 5aa077444a506afad1ff796616124a0b7298c125 172.16.254.126:7006
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.
从日志可以看出,cluster创建成功。
172.16.254.124(slots:[0-5460])、
172.16.254.125(slots:[5461-10922])、
172.16.254.126(slots:[10923-16383])为master
172.16.254.127、172.16.254.128、172.16.254.129为slave
并且
三、集群验证
172.16.254.124
redis-cli -c -h 172.16.254.124 -p 7004
172.16.254.124:7004>
172.16.254.124:7004> set handong dongge1
-> Redirected to slot [15462] located at 172.16.254.126:7006
OK
172.16.254.126:7006>
可以看到会话被分到172.16.254.126:7006,数据被存在15462。
172.16.254.125
redis-cli -c -h 172.16.254.125 -p 7005
172.16.254.125:7005> get handong
-> Redirected to slot [15462] located at 172.16.254.126:7006
"dongge1"
172.16.254.126:7006>
可以看到会话被分到172.16.254.126:7006,数据被存在15462。
172.16.254.127(slave)
redis-cli -c -h 172.16.254.127 -p 7007
172.16.254.127:7007> get handong
-> Redirected to slot [15462] located at 172.16.254.126:7006
"dongge1"
172.16.254.126:7006>
可以看到会话被分到172.16.254.126:7006,数据被存在15462。
如果在slave节点进行写操作会怎么样呢?
[redis@redis7 conf]$ redis-cli -c -h 172.16.254.127 -p 7007
172.16.254.127:7007> set city1 hangzhou
-> Redirected to slot [3536] located at 172.16.254.124:7004
OK
172.16.254.124:7004> exit
[redis@redis7 conf]$ redis-cli -c -h 172.16.254.127 -p 7007
172.16.254.127:7007> set city2 beijing
-> Redirected to slot [15795] located at 172.16.254.126:7006
OK
172.16.254.126:7006> exit
[redis@redis7 conf]$ redis-cli -c -h 172.16.254.127 -p 7007
172.16.254.127:7007> set city3 shanghai
-> Redirected to slot [11666] located at 172.16.254.126:7006
OK
172.16.254.126:7006> exit
[redis@redis7 conf]$ redis-cli -c -h 172.16.254.127 -p 7007
172.16.254.127:7007> set city4 shengzhou
-> Redirected to slot [7541] located at 172.16.254.125:7005
OK
172.16.254.125:7005> exit
[redis@redis7 conf]$ redis-cli -c -h 172.16.254.127 -p 7007
172.16.254.127:7007> set city5 tianjin
-> Redirected to slot [3412] located at 172.16.254.124:7004
OK
172.16.254.124:7004> exit
[redis@redis7 conf]$ redis-cli -c -h 172.16.254.127 -p 7007
172.16.254.127:7007> set city6 wuhan
-> Redirected to slot [15671] located at 172.16.254.126:7006
OK
172.16.254.126:7006> exit
[redis@redis7 conf]$ redis-cli -c -h 172.16.254.127 -p 7007
172.16.254.127:7007> set city7 nanchang
-> Redirected to slot [11542] located at 172.16.254.126:7006
OK
172.16.254.126:7006> exit
[redis@redis7 conf]$ redis-cli -c -h 172.16.254.127 -p 7007
172.16.254.127:7007> set city8 xianggang
-> Redirected to slot [7417] located at 172.16.254.125:7005
OK
172.16.254.125:7005>
可以看到每次set都被分到了172.16.254.124、172.16.254.125或172.16.254.126三个节点其中的一个。
四、配置开机启动
每个节点都修改 rc.local,如172.16.254.124:
vi /etc/rc.local
redis-server /redis/conf/nodes-7004.conf