今天主要分享一下 redis 3主3从 集群的搭建过程。redis经常用来做缓存,可以提升读取数据的速度,数据都是存在内存中的,采用 RDB 或者 AOF 持久化存储后便可以实时落地到硬盘。本次主要是3主3从。架构原理如下:
题图:来自于网络
图片中的每一个圆圈都代表一台服务器。客户端访问任何一台服务器便可以连通任何服务器。当老的主节点也就是 master 节点挂掉时,会进行重新选举,当半数以上的 master 节点投票出现失败状态时(也就是和该故障matser连不通),就会认为该 master 挂掉。
什么时候集群不可用? 1、当master挂掉时,这个master没有slave节点时,该集群则进入fail状态。 2、当集群超过半数以上master挂掉,则不论有没有slave节点,则该集群都会挂掉
tigergao
大型的互联网公司都会采用集群方式或者哨兵方式来保证高可用以及实现读写分离。下来进行搭建集群。
1、上redis官网网站,下载源码包,之后进行编译安装。官方网站说明如下。
官方网站说明安装过程如下:
Installation
Download, extract and compile Redis with:
$ wget http://download.redis.io/releases/redis-5.0.4.tar.gz
$ tar xzf redis-5.0.4.tar.gz
$ cd redis-5.0.4
$ make
The binaries that are now compiled are available in the src directory. Run Redis with:
$ src/redis-server
You can interact with Redis using the built-in client:
$ src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"
按照官网说明进行安装即可。进行编译将redis安装。

2、安装后进行修改配置文件,并命名为redis6389.conf。
save 900 1
bind 10.131.156.170
daemonize yes port 6389loglevel warning
timeout 60
logfile "6389.log"
dbfilename dump6389.rdb
pidfile /var/run/redis_6389.pid
maxmemory-policy volatile-ttl
auto-aof-rewrite-min-size 10GB
cluster-enabled yes
cluster-node-timeout 15000
cluster-config-file nodes-6389.conf
protected-mode no

3、同时将redis6389.conf拷贝几份按照如上配置,进行修改端口。

4、安装ruby和ruby依赖rubygem。安装ruby的目的是进行创建和管理redis集群。Redis-trib.rb是采用ruby实现的redis集群管理工具。内部通过cluster相关命令简化集群创建,检查,槽迁移和均衡等常见运维操作。同样进行解压并编译安装。
mkdir rubydata
tar -zxvf ruby-2.4.0.tar.gz
./configure -prefix=/app/redis-cluster/rubydata
make && make install

5、安装ruby的gem。
./gem install -l redis-3.2.2.gem
./gem list redis

6、分别进行启动不同端口的redis,如图。
./redis-server /app/redis-cluster/redis-4.0.9/redis-conf/redis6389.conf
./redis-server /app/redis-cluster/redis-4.0.9/redis-conf/redis6399.conf
./redis-server /app/redis-cluster/redis-4.0.9/redis-conf/redis6489.conf
./redis-server /app/redis-cluster/redis-4.0.9/redis-conf/redis6499.conf
./redis-server /app/redis-cluster/redis-4.0.9/redis-conf/redis6589.conf
./redis-server /app/redis-cluster/redis-4.0.9/redis-conf/redis6599.conf

7、进行集群创建。执行./redis-trib.rb help如图。

1、 create :创建集群
2、 check :检查集群
3、 info :查看集群信息
4、 fix :修复集群
5、 reshard :在线迁移slot
6、 rebalance :平衡集群节点slot数量
7、 add-node :将新节点加入集群
8、 del-node :从集群中删除节点
9、 set-timeout :设置集群节点间心跳连接的超时时间
10、 call :在集群全部节点上执行命令
11、 import :将外部redis数据导入集群
8、创建集群。创建的时候碰到了一个问题,提示需要调整内核参数vm.overcommit_memory。
vm.overcommit_memory=0
vm.overcommit_memory=1
vm.overcommit_memory=2
0表示内核将检查是否有足够的内存来供应用进程使用,如果没有将会将错误状态返回给应用程序。
1表示允许分配物理内存不管当前内存状态。
2表示内核允许分配超过物理内存+交换内存的综合。
需要给/etc/sysctl.conf中加入参数并执行sysctl.conf -p 生效

执行集群创建命令开始创建集群。
./redis-trib.rb create --replicas 1 10.131.156.170:6389 10.131.156.170:6399 10.131.156.170:6489 10.131.156.170:6499 10.131.156.170:6589 10.131.156.170:6599
./redis-trib.rb create --replicas 1 10.131.156.170:6389 10.131.156.170:6399 10.131.156.170:6489 10.131.156.170:6499 10.131.156.170:6589 10.131.156.170:6599
----replicas 1 表示附带几个slave也就是从节点。

9、登录6389节点,进行设置key。

10、登录6599节点,进行获取key,验证数据是否同步。如图,可以看到集群数据已经自动同步。

至此,3主3从的redis集群已经搭建完毕。