Redis-cluster快速實現
阿新 • • 發佈:2018-06-22
evel lock app lang x86_64 list 基本安裝 grep -v ted
1、環境規劃
ip | node-port | os-version | redis-version |
---|---|---|---|
10.10.16.40 | 6379,6380 | CentOS7.4 | redis-4.0.7 |
10.10.16.41 | 6379,6380 | CentOS7.4 | redis-4.0.7 |
10.10.16.42 | 6379,6380 | CentOS7.4 | redis-4.0.7 |
Redis-Cluster要求至少6個節點
2、安裝redis
基本安裝腳本
~]# cat redis_install.sh #!/bin/bash cd yum install gcc cmake make wget -y wget http://download.redis.io/releases/redis-4.0.7.tar.gz tar -xf redis-4.0.7.tar.gz cd redis-4.0.7 make MALLOC=jemalloc -j 8 make PREFIX=/usr/local/redis install echo 'PATH=/usr/local/redis/bin/:$PATH' >> /etc/profile source /etc/profile echo 'vm.overcommit_memory=1' >> /etc/sysctl.conf echo never > /sys/kernel/mm/transparent_hugepage/enabled echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >>/etc/rc.local sysctl -p echo "Installed"
服務啟動腳本
6379
~]# cd redis-4.0.7/utils/ utils]# ./install_server.sh Welcome to the redis service installer This script will help you easily set up a running redis server Please select the redis port for this instance: [6379] Selecting default: 6379 Please select the redis config file name [/etc/redis/6379.conf] Selected default - /etc/redis/6379.conf Please select the redis log file name [/var/log/redis_6379.log] Selected default - /var/log/redis_6379.log Please select the data directory for this instance [/var/lib/redis/6379] Selected default - /var/lib/redis/6379 Please select the redis executable path [/usr/local/redis/bin/redis-server] Selected config: Port : 6379 Config file : /etc/redis/6379.conf Log file : /var/log/redis_6379.log Data dir : /var/lib/redis/6379 Executable : /usr/local/redis/bin/redis-server Cli Executable : /usr/local/redis/bin/redis-cli Is this ok? Then press ENTER to go on or Ctrl-C to abort. Copied /tmp/6379.conf => /etc/init.d/redis_6379 Installing service... Successfully added to chkconfig! Successfully added to runlevels 345! Starting Redis server... Installation successful!
6380
utils]# ./install_server.sh Welcome to the redis service installer This script will help you easily set up a running redis server Please select the redis port for this instance: [6379] 6380 Please select the redis config file name [/etc/redis/6380.conf] Selected default - /etc/redis/6380.conf Please select the redis log file name [/var/log/redis_6380.log] Selected default - /var/log/redis_6380.log Please select the data directory for this instance [/var/lib/redis/6380] Selected default - /var/lib/redis/6380 Please select the redis executable path [/usr/local/redis/bin/redis-server] Selected config: Port : 6380 Config file : /etc/redis/6380.conf Log file : /var/log/redis_6380.log Data dir : /var/lib/redis/6380 Executable : /usr/local/redis/bin/redis-server Cli Executable : /usr/local/redis/bin/redis-cli Is this ok? Then press ENTER to go on or Ctrl-C to abort. Copied /tmp/6380.conf => /etc/init.d/redis_6380 Installing service... Successfully added to chkconfig! Successfully added to runlevels 345! Starting Redis server... Installation successful!
3、配置redis
6379
~]# egrep -v '^#|^$' /etc/redis/6380.conf
bind 10.10.16.40
protected-mode no
port 6380
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis_6380.pid
loglevel notice
logfile /var/log/redis_6380.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 /var/lib/redis/6380
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-6380.conf
cluster-node-timeout 15000
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
[root@redis-cluster-16-40 ~]# egrep -v '^#|^$' /etc/redis/6379.conf
bind 10.10.16.40
protected-mode no
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile /var/log/redis_6379.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 /var/lib/redis/6379
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-6379.conf
cluster-node-timeout 15000
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
6380
~]# egrep -v '^#|^$' /etc/redis/6380.conf
bind 10.10.16.40
protected-mode no
port 6380
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis_6380.pid
loglevel notice
logfile /var/log/redis_6380.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 /var/lib/redis/6380
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-6380.conf
cluster-node-timeout 15000
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
基本都是默認的配置
- 其他2臺服務器也這樣配置
服務開機啟動
systemctl enable redis_6379
systemctl enable redis_6380
服務啟動腳本shutdown默認是host是127.0.0.1,需要修改為對應的bind ip
具體步驟:
HOST="10.10.16.40" // 添加一個變量,本機的ip地址
$CLIEXEC -h $HOST -p $REDISPORT shutdown // 修改
4、創建redis-cluster
使用redis-trib
,其中任意一個節點安裝就行
編譯安裝ruby
centos 7自帶的ruby版本太低,需要2.4及以上的
~]# yum install -y zlib-devel openssl-devel
~]# wget https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.2.tar.gz
~]# tar -xf ruby-2.4.2.tar.gz
~]# cd ruby-2.4.2
ruby-2.4.2]# ./configure && make -j 8 && make install
~]# ruby -v
ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-linux]
安裝trib
~]# cd redis-4.0.7
redis-4.0.7]# gem install redis
# cp src/redis-trib.rb /usr/bin/redis-trib
創建集群
# redis-trib create --replicas 1 10.10.16.40:6379 10.10.16.40:6380 10.10.16.41:6379 10.10.16.41:6380 10.10.16.42:6379 10.10.16.42:6380
# redis-cli -c -h 10.10.16.40 -p 6379
10.10.16.40:6379> 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_ping_sent:46
cluster_stats_messages_pong_sent:57
cluster_stats_messages_sent:103
cluster_stats_messages_ping_received:52
cluster_stats_messages_pong_received:46
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:103
10.10.16.40:6379> cluster nodes
2ba99a87a1d1c5e959fcd0fddf03ee0bdfd3e130 10.10.16.41:6379@16379 master - 0 1516967513049 3 connected 5461-10922
2cd2f229d0e1792deca10930a64f33567defad5a 10.10.16.40:6379@16379 myself,master - 0 1516967511000 1 connected 0-5460
7773317ea089c843f148fda4cb7083cba9bdaa8e 10.10.16.42:6380@16380 slave 2ba99a87a1d1c5e959fcd0fddf03ee0bdfd3e130 0 1516967510042 6 connected
603b4205533264399118ab9ba85ed284b336947f 10.10.16.41:6380@16380 slave 2cd2f229d0e1792deca10930a64f33567defad5a 0 1516967510000 4 connected
8b80a3611f4057781329ac276922f775ab529b02 10.10.16.40:6380@16380 slave ca112f48145059a210febf3fd01d6025f5697ff2 0 1516967512046 5 connected
ca112f48145059a210febf3fd01d6025f5697ff2 10.10.16.42:6379@16379 master - 0 1516967511044 5 connected 10923-16383
Redis-cluster快速實現