redis cluster安装至少要6个节点,本例安装采用单机6个实例的方式安装
安装环境:CentOS 7.6.1810
Redis版本:redis-4.0.2
Ruby版本:ruby-2.4.10
说明:由于redis cluster需要ruby 2.2以上版本,而系统自带为2.0,因此本例安装前需要卸载系统自带ruby,编译安装
Step1:安装gcc等编译工具
[root@Redis-Cluster ~]# yum -y install gcc
Step2:上传安装软件到安装服务器
[root@Redis-Cluster ~]# ls -l
total 15480
-rw-r--r-- 1 root root 1713990 Dec 6 09:45 redis-4.0.2.tar.gz
-rw-r--r-- 1 root root 14133414 Dec 6 05:01 ruby-2.4.10.tar.gz
Step3:安装ruby
[root@Redis-Cluster ~]# tar zxvf ruby-2.4.10.tar.gz
[root@Redis-Cluster ~]# cd ruby-2.4.10
[root@Redis-Cluster ruby-2.4.10]# ./configure --prefix=/usr/local/ruby
[root@Redis-Cluster ruby-2.4.10]# make
[root@Redis-Cluster ruby-2.4.10]# make install
[root@Redis-Cluster bin]# ln -s /usr/local/ruby/bin/ruby /usr/local/bin/ruby
[root@Redis-Cluster bin]# ln -s /usr/local/ruby/bin/gem /usr/local/bin/gem
Step4:安装redis
[root@Redis-Cluster ~]# tar zxvf redis-4.0.2.tar.gz
[root@Redis-Cluster ~]# cd redis-4.0.2
[root@Redis-Cluster redis-4.0.2]# make
[root@Redis-Cluster redis-4.0.2]# make install PREFIX=/usr/local/redis
[root@Redis-Cluster ~]# mkdir -pv /usr/local/redis/cluster
[root@Redis-Cluster ~]# mkdir -pv /usr/local/redis/cluster/{7001,7002,7003,7004,7005,7006}
mkdir: created directory ‘/usr/local/redis/cluster/7001’
mkdir: created directory ‘/usr/local/redis/cluster/7002’
mkdir: created directory ‘/usr/local/redis/cluster/7003’
mkdir: created directory ‘/usr/local/redis/cluster/7004’
mkdir: created directory ‘/usr/local/redis/cluster/7005’
mkdir: created directory ‘/usr/local/redis/cluster/7006’
[root@Redis-Cluster ~]# cp /root/redis-4.0.2/redis.conf /usr/local/redis/bin/
[root@Redis-Cluster ~]# cp /root/redis-4.0.2/redis.conf /usr/local/redis/bin/
[root@Redis-Cluster ~]# cp /root/redis-4.0.2/redis.conf /usr/local/redis/cluster/7001/redis-7001.conf
[root@Redis-Cluster ~]# cp /root/redis-4.0.2/redis.conf /usr/local/redis/cluster/7002/redis-7002.conf
[root@Redis-Cluster ~]# cp /root/redis-4.0.2/redis.conf /usr/local/redis/cluster/7003/redis-7003.conf
[root@Redis-Cluster ~]# cp /root/redis-4.0.2/redis.conf /usr/local/redis/cluster/7004/redis-7004.conf
[root@Redis-Cluster ~]# cp /root/redis-4.0.2/redis.conf /usr/local/redis/cluster/7005/redis-7005.conf
[root@Redis-Cluster ~]# cp /root/redis-4.0.2/redis.conf /usr/local/redis/cluster/7006/redis-7006.conf
[root@Redis-Cluster ~]# vim /usr/local/redis/cluster/7001/redis-7001.conf
bind 127.0.0.1 ->修改为 bind 0.0.0.0
port 6379 ->修改为 port 7001
daemonize no ->修改为daemonize yes
pidfile /var/run/redis_6379.pid ->修改为 pidfile /var/run/redis_7001.pid
#cluster-enabled yes ->取消#注释
#cluster-config-file nodes_7001.conf ->取消注释,指定集群配置文件
#cluster-node-timeout 15000 ->取消注释
appendonly no ->修改为appendonly yes
其他的配置文件也修改
[root@Redis-Cluster ~]# vim /usr/local/redis/cluster/7002/redis-7002.conf
[root@Redis-Cluster ~]# vim /usr/local/redis/cluster/7003/redis-7003.conf
[root@Redis-Cluster ~]# vim /usr/local/redis/cluster/7004/redis-7004.conf
[root@Redis-Cluster ~]# vim /usr/local/redis/cluster/7005/redis-7005.conf
[root@Redis-Cluster ~]# vim /usr/local/redis/cluster/7006/redis-7006.conf
Step5:安装redis-trib所需的ruby脚本
[root@Redis-Cluster ~]# cp /root/redis-4.0.2/src/redis-trib.rb /usr/local/redis/cluster/
[root@Redis-Cluster ~]# cd /usr/local/redis/cluster/
[root@Redis-Cluster ~]# gem install redis
Step6:启动redis
[root@Redis-Cluster ~]# cd /usr/local/redis/bin/
[root@Redis-Cluster bin]# ./redis-server /usr/local/redis/cluster/7001/redis-7001.conf
[root@Redis-Cluster bin]# ./redis-server /usr/local/redis/cluster/7002/redis-7002.conf
[root@Redis-Cluster bin]# ./redis-server /usr/local/redis/cluster/7003/redis-7003.conf
[root@Redis-Cluster bin]# ./redis-server /usr/local/redis/cluster/7004/redis-7004.conf
[root@Redis-Cluster bin]# ./redis-server /usr/local/redis/cluster/7005/redis-7005.conf
[root@Redis-Cluster bin]# ./redis-server /usr/local/redis/cluster/7006/redis-7006.conf
[root@Redis-Cluster bin]# netstat -ntlup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:17001 0.0.0.0:* LISTEN 40529/./redis-serve
tcp 0 0 0.0.0.0:17002 0.0.0.0:* LISTEN 40548/./redis-serve
tcp 0 0 0.0.0.0:17003 0.0.0.0:* LISTEN 40553/./redis-serve
tcp 0 0 0.0.0.0:17004 0.0.0.0:* LISTEN 40563/./redis-serve
tcp 0 0 0.0.0.0:17005 0.0.0.0:* LISTEN 40568/./redis-serve
tcp 0 0 0.0.0.0:17006 0.0.0.0:* LISTEN 40573/./redis-serve
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 9304/sshd
tcp 0 0 0.0.0.0:7001 0.0.0.0:* LISTEN 40529/./redis-serve
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 9434/master
tcp 0 0 0.0.0.0:7002 0.0.0.0:* LISTEN 40548/./redis-serve
tcp 0 0 0.0.0.0:7003 0.0.0.0:* LISTEN 40553/./redis-serve
tcp 0 0 0.0.0.0:7004 0.0.0.0:* LISTEN 40563/./redis-serve
tcp 0 0 0.0.0.0:7005 0.0.0.0:* LISTEN 40568/./redis-serve
tcp 0 0 0.0.0.0:7006 0.0.0.0:* LISTEN 40573/./redis-serve
tcp6 0 0 :::22 :::* LISTEN 9304/sshd
tcp6 0 0 ::1:25 :::* LISTEN 9434/master
Step7:创建redis集群
[root@Redis-Cluster bin]# cp /root/redis-4.0.2/src/redis-trib.rb /usr/local/redis/bin/
[root@Redis-Cluster bin]# ./redis-trib.rb create --replicas 1 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 127.0.0.1:7006
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
127.0.0.1:7001
127.0.0.1:7002
127.0.0.1:7003
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
Adding replica 127.0.0.1:7006 to 127.0.0.1:7003
M: e90a1f6133b63ff2089e23f3ee732e9b20cf37f7 127.0.0.1:7001
slots:0-5460 (5461 slots) master
M: 6bf5942ed2b76e6303f94229f23438b182a4dfda 127.0.0.1:7002
slots:5461-10922 (5462 slots) master
M: c4a5e3ab437726490a1e2a0ce0bdc84ef71f3182 127.0.0.1:7003
slots:10923-16383 (5461 slots) master
S: c9f9165639f4b48cb5738882864f9a5b2a27d272 127.0.0.1:7004
replicates e90a1f6133b63ff2089e23f3ee732e9b20cf37f7
S: bf102f5f0ab3742f2b2fe1fa2360bcc5e844e934 127.0.0.1:7005
replicates 6bf5942ed2b76e6303f94229f23438b182a4dfda
S: 655e94f61ede5d522eac3d499469b865fba6704b 127.0.0.1:7006
replicates c4a5e3ab437726490a1e2a0ce0bdc84ef71f3182
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:7001)
M: e90a1f6133b63ff2089e23f3ee732e9b20cf37f7 127.0.0.1:7001
slots:0-5460 (5461 slots) master
1 additional replica(s)
S: 655e94f61ede5d522eac3d499469b865fba6704b 127.0.0.1:7006
slots: (0 slots) slave
replicates c4a5e3ab437726490a1e2a0ce0bdc84ef71f3182
M: 6bf5942ed2b76e6303f94229f23438b182a4dfda 127.0.0.1:7002
slots:5461-10922 (5462 slots) master
1 additional replica(s)
M: c4a5e3ab437726490a1e2a0ce0bdc84ef71f3182 127.0.0.1:7003
slots:10923-16383 (5461 slots) master
1 additional replica(s)
S: bf102f5f0ab3742f2b2fe1fa2360bcc5e844e934 127.0.0.1:7005
slots: (0 slots) slave
replicates 6bf5942ed2b76e6303f94229f23438b182a4dfda
S: c9f9165639f4b48cb5738882864f9a5b2a27d272 127.0.0.1:7004
slots: (0 slots) slave
replicates e90a1f6133b63ff2089e23f3ee732e9b20cf37f7
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@Redis-Cluster bin]# ./redis-cli -c -p 7002
127.0.0.1:7002> keys *
(empty list or set)
127.0.0.1:7002> info
# Server
redis_version:4.0.2
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:77c538eb7a885142
redis_mode:cluster
os:Linux 3.10.0-957.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:4.8.5
process_id:40548
run_id:1ac0271ebbd7b942ff347fa53d4a26a8bb9f1e45
tcp_port:7002
uptime_in_seconds:537
uptime_in_days:0
hz:10
lru_clock:13432535
executable:/usr/local/redis/bin/./redis-server
config_file:/usr/local/redis/cluster/7002/redis-7002.conf
# Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
# Memory
used_memory:2625512
used_memory_human:2.50M
used_memory_rss:12177408
used_memory_rss_human:11.61M
used_memory_peak:2625512
used_memory_peak_human:2.50M
used_memory_peak_perc:100.05%
used_memory_overhead:2539496
used_memory_startup:1424432
used_memory_dataset:86016
used_memory_dataset_perc:7.16%
total_system_memory:16806588416
total_system_memory_human:15.65G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:4.64
mem_allocator:jemalloc-4.0.3
active_defrag_running:0
lazyfree_pending_objects:0
# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1607267932
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
rdb_last_cow_size:6467584
aof_enabled:1
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
aof_last_cow_size:0
aof_current_size:0
aof_base_size:0
aof_pending_rewrite:0
aof_buffer_length:0
aof_rewrite_buffer_length:0
aof_pending_bio_fsync:0
aof_delayed_fsync:0
# Stats
total_connections_received:4
total_commands_processed:144
instantaneous_ops_per_sec:1
total_net_input_bytes:60448
total_net_output_bytes:21705
instantaneous_input_kbps:0.04
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:1
sync_partial_ok:0
sync_partial_err:1
expired_keys:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:14165
migrate_cached_sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=7005,state=online,offset=168,lag=0
master_replid:a08d51af5094ee677ac18d73711a898a7aca86f7
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:168
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:168
# CPU
used_cpu_sys:0.72
used_cpu_user:0.02
used_cpu_sys_children:0.03
used_cpu_user_children:0.00
# Cluster
cluster_enabled:1
# Keyspace
127.0.0.1:7002>
Step8:插入测试数据
[root@Redis-Cluster bin]# ./redis-cli -c -p 7002
Step9:查看值
127.0.0.1:7005> keys *
Step10:检查节点
[root@Redis-Cluster bin]# ./redis-trib.rb check 127.0.0.1:7004