本文共 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 i 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 0 tcp 0 0 0.0.0.0:17001 0.0.0.0:* LISTEN 6737 /redis-server 0 tcp 0 0 0.0.0.0:17002 0.0.0.0:* LISTEN 6743 /redis-server 0 tcp 0 0 0.0.0.0:17003 0.0.0.0:* LISTEN 6747 /redis-server 0 tcp 0 0 0.0.0.0:17004 0.0.0.0:* LISTEN 6749 /redis-server 0 tcp 0 0 0.0.0.0:17005 0.0.0.0:* LISTEN 6755 /redis-server 0 tcp 0 0 0.0.0.0:7000 0.0.0.0:* LISTEN 6735 /redis-server 0 tcp 0 0 0.0.0.0:7001 0.0.0.0:* LISTEN 6737 /redis-server 0 tcp 0 0 0.0.0.0:7002 0.0.0.0:* LISTEN 6743 /redis-server 0 tcp 0 0 0.0.0.0:7003 0.0.0.0:* LISTEN 6747 /redis-server 0 tcp 0 0 0.0.0.0:7004 0.0.0.0:* LISTEN 6749 /redis-server 0 tcp 0 0 0.0.0.0:7005 0.0.0.0:* LISTEN 6755 /redis-server 0 [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集群搭建成功