博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis 集群搭建
阅读量:6885 次
发布时间:2019-06-27

本文共 10053 字,大约阅读时间需要 33 分钟。

#

#redis 官网: https://redis.io

#redis 文档:https://redis.io/documentation

#redis 集群:https://redis.io/topics/cluster-tutorial

#redis 常用配置解释:https://yq.aliyun.com/articles/38806;https://github.com/linli8/cnblogs/blob/master/redis%E5%89%AF%E6%9C%AC.conf

#软件下载

1
[root@node3 ~]
#  wget http://download.redis.io/releases/redis-3.2.9.tar.gz

#编译

1
2
3
4
5
[root@node3 ~]
# mkdir /usr/local/redis
[root@node3 ~]
# mkdir /usr/local/redis/{data,conf,bin}
[root@node3 ~]
# tar -xf redis-3.2.9.tar.gz 
[root@node3 ~]
# cd redis-3.2.9/
[root@node3 redis-3.2.9]
# make

#拷贝编译后的文件

1
2
3
4
[root@node3 redis-3.2.9]
# cd src/
[root@node3 src]
# \cp -p mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server redis-trib.rb /usr/local/redis/bin/
[root@node3 src]
# cd ..
[root@node3 redis-3.2.9]
# cp -p redis.conf /usr/local/redis/conf/

#创建数据目录

1
2
3
4
5
[root@node3 redis-3.2.9]
# cd /usr/local/redis/data/
[root@node3 data]
# mkdir {7000..7005}
[root@node3 data]
# ls
7000  7001  7002  7003  7004  7005
[root@node3 data]
#

#修改相应端口(大致如下)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
[root@node3 conf]
# grep '^[a-Z]' redis.conf 
bind 0.0.0.0
dir 
/usr/local/redis/data/7000
pidfile 
/var/run/redis_7000
.pid
appendfilename 
"appendonly-7000.aof"
port 7000
cluster-config-
file 
nodes-7000.conf 
cluster-enabled 
yes
cluster-node-timeout 15000
protected-mode no
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize 
yes
supervised no
loglevel warning
logfile 
""
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error 
yes
rdbcompression 
yes
rdbchecksum no
dbfilename dump.rdb
slave-serve-stale-data 
yes
slave-
read
-only 
yes
repl-diskless-
sync 
yes
repl-diskless-
sync
-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly 
yes
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 100000
slowlog-max-len 128
hash
-max-ziplist-entries 512
hash
-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
latency-monitor-threshold 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 64mb 16mb 60
hz 10
aof-rewrite-incremental-fsync 
yes
maxmemory-policy allkeys-lru
maxmemory-samples 5
maxclients 10000

#拷贝配置文件

1
2
3
4
5
6
[root@node3 conf]
# for i in {7000..7005};do cp redis.conf $i.conf;done
[root@node3 conf]
# ls
7000.conf  7001.conf  7002.conf  7003.conf  7004.conf  7005.conf  redis.conf
[root@node3 conf]
# rm -f redis.conf
#批量修改
[root@node3 conf]
# for i in {7000..7005};do sed -i "s/7000/$i/g" "$i".conf;done

#修改脚本(十分粗糙的脚本,不建议采纳,望读者自行编写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
[root@node3 ~]
# cp -p  redis-3.2.9/utils/redis_init_script /etc/init.d/redis
[root@node3 ~]
# vim /etc/init.d/redis 
[root@node3 ~]
# cat /etc/init.d/redis 
#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
#REDISPORT=$2
EXEC=
/usr/local/redis/bin/redis-server
CLIEXEC=
/usr/local/redis/bin/redis-cli
CONFDIR=
"/usr/local/redis/conf/"
#PIDFILE=/var/run/redis_${REDISPORT}.pid
#CONF="$CONFDIR${REDISPORT}.conf"
function 
main(){
REDISPORT=$2
PIDFILE=
/var/run/redis_
${REDISPORT}.pid
CONF=
"$CONFDIR${REDISPORT}.conf"
  
case 
"$1" 
in
    
start)
        
if 
[ -f $PIDFILE ]
        
then
                
echo 
"$PIDFILE exists, process is already running or crashed"
        
else
                
echo 
"Starting Redis server..."
                
$EXEC $CONF
        
fi
        
;;
    
stop)
        
if 
[ ! -f $PIDFILE ]
        
then
                
echo 
"$PIDFILE does not exist, process is not running"
        
else
                
PID=$(
cat 
$PIDFILE)
                
echo 
"Stopping ..."
                
$CLIEXEC -p $REDISPORT 
shutdown
                
while 
[ -x 
/proc/
${PID} ]
                
do
                    
echo 
"Waiting for Redis to shutdown ..."
                    
sleep 
1
                
done
                
echo 
"Redis stopped"
        
fi
        
;;
    
*)
        
echo 
"Please use start or stop as first parameter,port or all as second parameter."
        
;;
  
esac
}
if 
"$2" 
== 
"all" 
]
then
    
for 
in 
`
ls 
$CONFDIR | 
grep 
[0-9] | 
cut 
-c 1-4` ;
do
main $1 $i
    
done
else
    
main $1 $2
fi

#启动服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@node3 ~]
# service redis start all
[root@node3 ~]
# netstat -lntup | grep redis
tcp        0      0 0.0.0.0:17000           0.0.0.0:*               LISTEN      6735
/redis-server 
tcp        0      0 0.0.0.0:17001           0.0.0.0:*               LISTEN      6737
/redis-server 
tcp        0      0 0.0.0.0:17002           0.0.0.0:*               LISTEN      6743
/redis-server 
tcp        0      0 0.0.0.0:17003           0.0.0.0:*               LISTEN      6747
/redis-server 
tcp        0      0 0.0.0.0:17004           0.0.0.0:*               LISTEN      6749
/redis-server 
tcp        0      0 0.0.0.0:17005           0.0.0.0:*               LISTEN      6755
/redis-server 
tcp        0      0 0.0.0.0:7000            0.0.0.0:*               LISTEN      6735
/redis-server 
tcp        0      0 0.0.0.0:7001            0.0.0.0:*               LISTEN      6737
/redis-server 
tcp        0      0 0.0.0.0:7002            0.0.0.0:*               LISTEN      6743
/redis-server 
tcp        0      0 0.0.0.0:7003            0.0.0.0:*               LISTEN      6747
/redis-server 
tcp        0      0 0.0.0.0:7004            0.0.0.0:*               LISTEN      6749
/redis-server 
tcp        0      0 0.0.0.0:7005            0.0.0.0:*               LISTEN      6755
/redis-server 
[root@node3 ~]
#

#创建集群

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
[root@node3 conf]
# yum install ruby ruby-devel rubygems rpm-build
[root@node3 conf]
# gem install redis        #如果没有反应,可以更换源
#更换源 参考:http://gems.ruby-china.org/
# gem update --system # 这里请翻墙一下
#gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
#
[root@node3 conf]
# cd /usr/local/redis/bin/
[root@node3 bin]
# ls
mkreleasehdr.sh  redis-check-aof  redis-cli       redis-server
redis-benchmark  redis-check-rdb  redis-sentinel  redis-trib.rb
[root@node3 bin]
# ./redis-trib.rb create --replicas 1 127.0.0.1:7000 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
>>> Creating cluster
>>> Performing 
hash 
slots allocation on 6 nodes...
Using 3 masters:
127.0.0.1:7000
127.0.0.1:7001
127.0.0.1:7002
Adding replica 127.0.0.1:7003 to 127.0.0.1:7000
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
M: de6c4b00953b0e354ea375106f29bd627ed3ab2e 127.0.0.1:7000
   
slots:0-5460 (5461 slots) master
M: fce2cebafefeb540592c624c68b741d465ce095b 127.0.0.1:7001
   
slots:5461-10922 (5462 slots) master
M: 83474177e39b72145adaad60cad1fe4523a0ee79 127.0.0.1:7002
   
slots:10923-16383 (5461 slots) master
S: af00ce59424417ab1cfba4edc145223d4b3ac999 127.0.0.1:7003
   
replicates de6c4b00953b0e354ea375106f29bd627ed3ab2e
S: 64391b1f359b6bfdfdd5373c71388fb119dc2bb3 127.0.0.1:7004
   
replicates fce2cebafefeb540592c624c68b741d465ce095b
S: 3509837665c9cfe7a798513b87c84c9b2d3c9f1d 127.0.0.1:7005
   
replicates 83474177e39b72145adaad60cad1fe4523a0ee79
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:7000)
M: de6c4b00953b0e354ea375106f29bd627ed3ab2e 127.0.0.1:7000
   
slots:0-5460 (5461 slots) master
   
1 additional replica(s)
M: fce2cebafefeb540592c624c68b741d465ce095b 127.0.0.1:7001
   
slots:5461-10922 (5462 slots) master
   
1 additional replica(s)
S: af00ce59424417ab1cfba4edc145223d4b3ac999 127.0.0.1:7003
   
slots: (0 slots) slave
   
replicates de6c4b00953b0e354ea375106f29bd627ed3ab2e
M: 83474177e39b72145adaad60cad1fe4523a0ee79 127.0.0.1:7002
   
slots:10923-16383 (5461 slots) master
   
1 additional replica(s)
S: 64391b1f359b6bfdfdd5373c71388fb119dc2bb3 127.0.0.1:7004
   
slots: (0 slots) slave
   
replicates fce2cebafefeb540592c624c68b741d465ce095b
S: 3509837665c9cfe7a798513b87c84c9b2d3c9f1d 127.0.0.1:7005
   
slots: (0 slots) slave
   
replicates 83474177e39b72145adaad60cad1fe4523a0ee79
[OK] All nodes agree about slots configuration.
>>> Check 
for 
open 
slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

#登陆集群

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[root@node3 ~]
# /usr/local/redis/bin/redis-cli -c -h 127.0.0.1 -p 7000
127.0.0.1:7000> cluster nodes
fce2cebafefeb540592c624c68b741d465ce095b 127.0.0.1:7001 master - 0 1495358027725 2 connected 5461-10922
de6c4b00953b0e354ea375106f29bd627ed3ab2e 127.0.0.1:7000 myself,master - 0 0 1 connected 0-5460
af00ce59424417ab1cfba4edc145223d4b3ac999 127.0.0.1:7003 slave de6c4b00953b0e354ea375106f29bd627ed3ab2e 0 1495358029772 4 connected
83474177e39b72145adaad60cad1fe4523a0ee79 127.0.0.1:7002 master - 0 1495358025682 3 connected 10923-16383
64391b1f359b6bfdfdd5373c71388fb119dc2bb3 127.0.0.1:7004 slave fce2cebafefeb540592c624c68b741d465ce095b 0 1495358028748 5 connected
3509837665c9cfe7a798513b87c84c9b2d3c9f1d 127.0.0.1:7005 slave 83474177e39b72145adaad60cad1fe4523a0ee79 0 1495358026706 6 connected
127.0.0.1:7000> 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:6
cluster_my_epoch:1
cluster_stats_messages_sent:77
cluster_stats_messages_received:77
127.0.0.1:7000> cluster nodes
fce2cebafefeb540592c624c68b741d465ce095b 127.0.0.1:7001 master - 0 1495358038300 2 connected 5461-10922
de6c4b00953b0e354ea375106f29bd627ed3ab2e 127.0.0.1:7000 myself,master - 0 0 1 connected 0-5460
af00ce59424417ab1cfba4edc145223d4b3ac999 127.0.0.1:7003 slave de6c4b00953b0e354ea375106f29bd627ed3ab2e 0 1495358039395 4 connected
83474177e39b72145adaad60cad1fe4523a0ee79 127.0.0.1:7002 master - 0 1495358036106 3 connected 10923-16383
64391b1f359b6bfdfdd5373c71388fb119dc2bb3 127.0.0.1:7004 slave fce2cebafefeb540592c624c68b741d465ce095b 0 1495358033918 5 connected
3509837665c9cfe7a798513b87c84c9b2d3c9f1d 127.0.0.1:7005 slave 83474177e39b72145adaad60cad1fe4523a0ee79 0 1495358040489 6 connected
127.0.0.1:7000>

#redis集群搭建成功

本文转自 chaunceyjiang  51CTO博客,原文链接:http://blog.51cto.com/cqwujiang/1927918,如需转载请自行联系原作者
你可能感兴趣的文章