Redis 集群

Redis 是一个开源的内存数据结构存储系统,常用作数据库、缓存和消息中间件。随着应用规模的扩大和数据量的增加,单节点的 Redis 可能无法满足性能和可靠性的需求。Redis 集群提供了以下优势,从而成为许多应用的必然选择:

  1. 高可用性:Redis 集群通过主从复制和自动故障转移机制,确保了服务的持续可用性。即使某个节点发生故障,集群也能继续提供服务。
  2. 水平扩展:Redis 集群支持数据分片,允许将数据分布在多个节点上,从而实现水平扩展。这使得 Redis 能够处理更大的数据量和更高的访问量。
  3. 读写分离:在 Redis 集群中,可以设置主节点处理写操作,从节点处理读操作,这样可以提高读取性能并减轻单个节点的负载。
  4. 自动故障恢复:Redis 集群能够自动检测到节点的故障,并尝试进行故障恢复,如自动重新配置集群和重新分配数据。
  5. 负载均衡:Redis 集群通过数据分片,可以自动将请求分散到不同的节点,实现负载均衡。
  6. 数据持久性:虽然 Redis 本身是一个内存数据库,但集群模式下,可以通过配置持久化选项来保证数据的安全性。
  7. 更好的容错性:集群模式下的 Redis 可以容忍一定数量的节点故障,而不会影响整个集群的运行。
  8. 多数据中心部署:Redis 集群支持跨多个数据中心部署,增加了数据的安全性和访问的可靠性。
  9. 灵活的配置:Redis 集群提供了灵活的配置选项,可以根据不同的业务需求调整集群的行为。
  10. 社区和企业支持: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. 检查编译

1
$ make install

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

1
$ ps -ef | grep 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