基于centos7.

前置下载

安装GCC和wget

yum install wget
yum -y install gcc automake autoconf libtool make

安装ruby(如果做集群,redis-trib.rb 要求必须2.2以上)

在Centos7.3中,通过yum安装ruby的版本是2.0.0,但是如果有些应用需要高版本的ruby环境,比如2.2,2.3,2.4...在Centos7.3中,通过yum安装ruby的版本是2.0.0,但是如果有些应用需要高版本的ruby环境,比如2.2,2.3,2.4...

方法一:换yum源安装

#会在/etc/yum.repos.d/目录下多出一个CentOS-SCLo-scl-rh.repo源
yum install centos-release-scl-rh
#直接yum安装即可
yum install rh-ruby23  -y 
#必要一步
scl  enable  rh-ruby23 bash
#查看安装版本
ruby -v

下载redis

$ wget http://download.redis.io/releases/redis-4.0.9.tar.gz
$ tar xzf redis-4.0.9.tar.gz
$ cd redis-4.0.9
$ mv redis-4.0.9 /opt/redis
# 如果未安装gcc编译失败则需要执行下面这个命令
$ make distclean
$ make

运行单机redis

现在编译的二进制文件在src 目录中可用 。运行Redis:

$ src/redis-server
# 或者指定
$ /opt/redis/src/redis-server /opt/redis/redis.conf

您可以使用内置客户端与Redis进行交互:

$ src/redis-cli or $redis-cli -h 192.168.42.151
redis> set foo bar
OK
redis> get foo
"bar"

注意 redis.conf的相关配置:

#端口7000,7001,7002
port 7000

#默认ip为127.0.0.1,需要改为其他节点机器可访问的ip,否则创建集群时无法访问对应的端口,无法创建集群
bind 192.168.252.101

#redis后台运行
daemonize yes

#pidfile文件对应7000,7001,7002
pidfile /var/run/redis_7000.pid

#开启集群,把注释#去掉
cluster-enabled yes

#集群的配置,配置文件首次启动自动生成 7000,7001,7002          
cluster-config-file nodes_7000.conf

#请求超时,默认15秒,可自行设置 
cluster-node-timeout 10100    

#aof日志开启,有需要就开启,它会每次写操作都记录一条日志
appendonly yes

将redis安装为服务

  1. 进入到redis安装目录,具体位置看你安装时的路径了。
cd /usr/local/redis/
  1. 编辑配置文件
sudo vim ./redis.conf
  1. 将如下配置项注释掉
#bind 127.0.0.1
  1. 如下项修改为yes,默认是no
daemonize yes
  1. 修改pid文件路径,此处可选,使用默认路径也可以。
pidfile /usr/local/redis/redis.pid
  1. 取消保护模式,此处可选。取消了便不要求使用密码验证了。
protected-mode no
  1. 配置日志文件路径
logfile "/usr/local/redis/logs/redis.log"
  1. 保存文件。
  2. 新建文件
sudo vim /usr/lib/systemd/system/redis.service
  1. 写入如下内容,具体文件路径,各异。
[Unit]
Description=Redis
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/redis/redis.pid
ExecStart=/usr/local/redis/src/redis-server /usr/local/redis/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID 
ExecStop=/bin/kill -s QUIT $MAINPID 
PrivateTmp=true

[Install]
WantedBy=multi-user.target
  1. 重载系统服务
sudo systemctl daemon-reload
  1. 启动redis
sudo systemctl start redis

redis集群

虽然一主一从加哨兵可以解决普通场景下服务可用的问题,但是两个节点分别存储所有的缓存数据,这不仅导致容量受限,更是让我们受限于机器配置最差的那一台,这就是木桶效应。硬件垂直扩容并不能解决日益庞大的缓存数据量和提供能搞得可用性。

在古老的Redis版本中,水平扩容的能力来自于发送命令的客户端,由客户端路由不同的key给到不同的节点,下次读取的时候,也按照相同方式路由key到指定节点拿到数据。如果接下来还希望增加扩容节点的话,就要对历史缓存数据做迁移,迁移过程中为保证数据一致性也要付出一定代价。为了解决节点的不断扩容,设计初期可以预先设置很多节点,以备日后使用,所有设计的节点都参与到分片当中,鉴于初期数据较少,可单台服务器多个节点,在日后数据增多的情况下,只需要迁移节点到新的服务器。而不需要对数据进行重新分配等操作。但是这种做法依然让我们觉得难维护,难迁移,难应对故障,迁移过程中也很难保证数据一致性,比如50个节点,任意一个节点想要停止并迁移服务器,都会引发数据不一致或者出现故障,只能停止集群,等待迁移完成后,集群上线。

Redis3.0提供了Cluster集群。这个集群的概念和前面提到的集群有所不同。前面的集群仅代表,多个节点间没有相互的关系,只是根据客户端路由分配key到不同的节点,所有节点共同分配所有数据。3.0的Cluster功能,拥有和单机实例相同的性能,几乎支持所有命令,对于涉及多个键的命令,比如MGET,如果每一个键都在同一个节点则可以正常返回数据,否则提示错误。另外集群中限制了0号数据库,如果切换数据库则会提示错误。

哨兵和集群是两个独立的功能,但从特性来看哨兵可以视为集群的子集。当不需要数据分片或者已经利用客户端分片的场景下哨兵已经足够使用,如果需要水平扩容,Cluster是非常好的选择。

每个集群至少三台主节点。

/opt/redis/src/redis-trib.rb create --replicas 1 10.1.2.75:6379 10.1.2.81:6379 10.1.2.82:6379 10.1.2.75:7379 10.1.2.75:8379 10.1.2.81:7379

CentOs7.3搭建Redis-4.0.1 Cluster集群服务