Redis 是一个开源的内存数据结构存储系统,常用作数据库、缓存和消息中间件。随着应用规模的扩大和数据量的增加,单节点的 Redis 可能无法满足性能和可靠性的需求。Redis 集群提供了以下优势,从而成为许多应用的必然选择:
- 高可用性:Redis 集群通过主从复制和自动故障转移机制,确保了服务的持续可用性。即使某个节点发生故障,集群也能继续提供服务。
- 水平扩展:Redis 集群支持数据分片,允许将数据分布在多个节点上,从而实现水平扩展。这使得 Redis 能够处理更大的数据量和更高的访问量。
- 读写分离:在 Redis 集群中,可以设置主节点处理写操作,从节点处理读操作,这样可以提高读取性能并减轻单个节点的负载。
- 自动故障恢复:Redis 集群能够自动检测到节点的故障,并尝试进行故障恢复,如自动重新配置集群和重新分配数据。
- 负载均衡:Redis 集群通过数据分片,可以自动将请求分散到不同的节点,实现负载均衡。
- 数据持久性:虽然 Redis 本身是一个内存数据库,但集群模式下,可以通过配置持久化选项来保证数据的安全性。
- 更好的容错性:集群模式下的 Redis 可以容忍一定数量的节点故障,而不会影响整个集群的运行。
- 多数据中心部署:Redis 集群支持跨多个数据中心部署,增加了数据的安全性和访问的可靠性。
- 灵活的配置:Redis 集群提供了灵活的配置选项,可以根据不同的业务需求调整集群的行为。
- 社区和企业支持:Redis 拥有活跃的社区和企业支持,提供了丰富的文档和工具,帮助用户更好地构建和管理 Redis 集群。
Redis
1. 下载
1
| http://www.redis.cn/download.html
|
2. 下载、解压、编译Redis
1 2 3 4 5
| $ yum install gcc $ wget http://download.redis.io/releases/redis-5.0.3.tar.gz $ tar xzf redis-5.0.3.tar.gz $ cd redis-5.0.3 $ make
|
3. 检查编译
4. 文件抽取存放
1 2 3 4 5
| $ mkdir -p /usr/local/redis/etc $ mkdir -p /usr/local/redis/bin
$ cp redis.conf /usr/local/redis/etc #配置 $ mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-cli redis-server /usr/local/redis/bin #命令
|
5. 启动redis(后台)
1 2
| $ vim etc/redis.conf #daemonize yes $ bin/redis-server etc/redis.conf
|
6. 检查redis
Redis集群
1. 集群搭建,创建集群文件夹
1 2
| $ mkdir -p /usr/local/redis-cluster $ mkdir 8001,mkdir 8002.... mkdir 8006
|
2. 把之前的redis.conf配置文件拷贝到 8002-8006
1 2 3 4 5 6 7 8 9 10
| $ cp redis.conf ../../redis-cluster/8001/
1.daemonzie yes 2.port 8001 3.bind 192.168.1.101 4.dir /usr/local/redis-cluster/8001/ 5.cluster-enable yes 6.cluster-config-file nodes-8001.conf 7.cluster-node-timeout 5000 8.appendonly yes
|
3. 批量修改配置文件8002-8006
1 2
| $ vi redis.conf :%s/8001/8002/g
|
4. 启动6个redis实例,并检查启动状态
1 2 3 4 5 6 7
| $ /usr/local/redis/bin/redis-server /usr/local/redis-cluster/8001/redis.conf . . . $ /usr/local/redis/bin/redis-server /usr/local/redis-cluster/8006/redis.conf
$ ps -ef | grep redis
|
1 2 3 4 5 6 7 8 9
| [root@localhost /]# ps -ef | grep redis root 9016 1 0 12:07 ? 00:00:02 redis-server 127.0.0.1:6379 root 9129 1 0 12:35 ? 00:00:00 /usr/local/redis/bin/redis-server 192.168.1.101:8001 [cluster] root 9134 1 0 12:35 ? 00:00:00 /usr/local/redis/bin/redis-server 192.168.1.101:8002 [cluster] root 9139 1 0 12:35 ? 00:00:00 /usr/local/redis/bin/redis-server 192.168.1.101:8003 [cluster] root 9144 1 0 12:35 ? 00:00:00 /usr/local/redis/bin/redis-server 192.168.1.101:8004 [cluster] root 9149 1 0 12:35 ? 00:00:00 /usr/local/redis/bin/redis-server 192.168.1.101:8005 [cluster] root 9154 1 0 12:36 ? 00:00:00 /usr/local/redis/bin/redis-server 192.168.1.101:8006 [cluster] root 9159 4650 0 12:36 pts/0 00:00:00 grep --color=auto redis
|
5. ruby实现集群
不建议(默认版本为2.0)
1 2 3
| $ yum install -y ruby $ yum install -y rubygems $ gem install redis --version 5.0.3 (安装redis和ruby的接口)
|
建议
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
| $ wget http://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.5.tar.gz $ tar zxvf ruby-2.3.5.tar.gz $ cd ruby-2.3.5 $ ./configure --prefix=/opt/ruby $ make && make install $ ln -s /opt/ruby/bin/ruby /usr/bin/ruby $ ln -s /opt/ruby/bin/gem /usr/bin/gem $ ruby -v
$ wget http://rubygems.org/downloads/redis-4.0.1.gem $ gem install -l redis-4.0.1.gem
报错解决: ERROR: Loading command: install (LoadError) cannot load such file -- zlib ERROR: While executing gem ... (NoMethodError) undefined method `invoke_with_build_args' for nil:NilClass
$ yum -y install zlib-devel 进入ruby源码文件夹,安装ruby自身提供的zlib包 $ cd ruby-2.3.5/ext/zlib $ ruby ./extconf.rb $ make $ make install
再次安装: $ gem install -l redis-4.0.1.gem $ gem install redis --version 4.0.1
|
6. 执行Ruby脚本创建集群
1 2 3 4 5 6 7 8 9
| 1.开启所有redis实例 $ /usr/local/redis/bin/redis-server /usr/local/redis-cluster/8001/redis.conf . . . $ /usr/local/redis/bin/redis-server /usr/local/redis-cluster/8006/redis.conf
2.启动 $ redis-cli --cluster create 192.168.1.101:8001 192.168.1.101:8002 192.168.1.101:8003 192.168.1.101:8004 192.168.1.101:8005 192.168.1.101:8006 --cluster-replicas 1
|
7. 测试连接集群
1 2 3 4 5 6 7 8 9
| 开启端口 1.firewall-cmd --get-active-zones 2.firewall-cmd --zone=public --add-port=6379/tcp --permanent 3.firewall-cmd --zone=public --add-port=8001/tcp --permanent 4. .... 5.firewall-cmd --zone=public --add-port=8006/tcp --permanent 6.firewall-cmd --reload
7.iptables -L -n
|
1 2 3 4 5
| [root@localhost bin]# redis-cli -c -h 192.168.1.101 -p 8001 192.168.1.101:8001> exit [root@localhost bin]# redis-cli -c -h 192.168.1.101 -p 8002 192.168.1.101:8002>
|
8. 检查集群状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| [root@localhost bin]# redis-cli -c -h 192.168.1.101 -p 8001 192.168.1.101:8001> 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:701 cluster_stats_messages_pong_sent:185 cluster_stats_messages_fail_sent:6 cluster_stats_messages_sent:892 cluster_stats_messages_ping_received:185 cluster_stats_messages_pong_received:198 cluster_stats_messages_fail_received:3 cluster_stats_messages_received:386
|