【Redis】redis介绍,安装,以及集群搭建

1.Redis介绍

百科定义:Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的API。

个人理解:高性能的缓存数据库,数据存放在内存中,存取性能极高,有很多种应用场景,比如可以做数据库,单点登录,分布式锁,缓存等...在高性能企业应用中几乎是必不可少的组件.


2.安装

本文以CentOS7.3,Redis3.x为例进行演示

首先需要在redis官网下载Linux环境下的redis安装包:https://redis.io/download  xx.tar.gz

1.查看linux是否已经安装redis rpm -qa | grep -i redis 若没安装,跳至步骤3,若已安装,则执行步骤2.

2.卸载已经安装的原生redis rpm -e --nodeps redis... 

#当然如果你的Redis是通过yum或者tar安装的,你用rpm是查不到信息的,请尝试用相应命令去进行1,2两步操作.

#最简单的方式是 whereis redis 如果没有返回值,说明你的系统没有安装redis

3.解压已经上传好的redis安装包 tar -zxvf redis3.xx..tar.gz ,解压到当前目录下即可.

4.cd redis...进入解压后的文件夹 ,执行 make 命令 完成后进入步骤5.

5.make PREFIX(必须大写) = /usr/local/redis install 将redis安装到指定目录下

6. cp redis.conf至安装目录下

启动redis分为前端启动和后端启动,前端启动虽然简单但无法进行后续的redis集群配置,所以新手体验下就好

7.前端启动: 进入redis安装目录,输入 ./bin/redis-server 启动服务,然后./bin/redis-cli启动客户端

8.后端启动:修改redis.conf中的daemonize为Yes,启动时指定该配置文件:

./bin/redis-server ./redis.conf

在做redis集群时可以在配置文件中修改端口号

9.关闭时可以通过kill -9杀死进程(不推荐,会丢失数据)

./bin/redis-cli shutdown 可以正常关闭

下面是Redis集群搭建

在集群搭建实施前,有必要先弄清楚原理和为什么要做redis集群.

redis集群和其它集群其实没什么大差异,主要就是为了解决单台redis负载问题,当性能遇到瓶颈时,一台服务器是不够的,而且单台服务器的redis并不是一个高可用的系统,一旦该节点宕机了,整个系统就无法正常提供服务了,但引入redis集群后,即使有一部分节点宕机了,redis仍能够通过彼此间的通信,对外正常提供服务,保证了系统的高可用性.

#特点:
所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。

节点的fail是通过集群中超过半数的节点检测失效时才生效。

客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。

redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value

Redis集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对key 使用 crc16 算法算出一个结果,
然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点.

Redis-cluster投票 容错

投票过程是集群中所有master参与,如果半数以上master节点与master节点通信超时(cluster-node-timeout),认为当前master节点挂掉.

什么时候整个集群不可用(cluster_state:fail)?

1.如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完整时进入fail状态. 
2.redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开集群兼容部分失败.
3.如果集群超过半数以上master挂掉,无论是否有slave,集群进入fail状态.

理论部分啰嗦完了,这里为了方便我搭个单机的伪集群就行了,正式环境下换点ip和端口号就OK了,方法不变.

#在刚刚安装好redis的服务器上新建一个文件夹
mkdir redis-cluster
#把刚刚安装好的redis服务复制6份至redis-cluster
cp -r redis redis-cluster
cd redis-cluster
mv redis redis1
cp  -r redis1 redis2
cp  -r redis1 redis3
cp  -r redis1 redis4
cp  -r redis1 redis5
cp  -r redis1 redis6

#然后分别redis1-redis6修改配置文件redis.conf
vi redis.conf

只需要修改以下三块内容:

daemonize yes #守护进程 开启

cluster-enabled yes #集群 开启

port 6001 #随便指定,我这里由于IP相同,所以用6001-6006来指定6个集群的端口号,如果是部署在不同的服务器上,可以都是6379

修改完成后,我们写2个脚本,用来启动和关闭着6个服务,不然能累skr人...

#在redis-cluster文件夹下新建start-all.sh
vi start-all.sh
#!/bin/bash
cd redis1
./bin/redis-server ./redis.conf
cd ..

cd redis2
./bin/redis-server ./redis.conf
cd ..

cd redis3
./bin/redis-server ./redis.conf
cd ..

cd redis4
./bin/redis-server ./redis.conf
cd ..

cd redis5
./bin/redis-server ./redis.conf
cd ..

cd redis6
./bin/redis-server ./redis.conf
cd ..

#编写stop-all.sh
vi stop-all.sh
#!/bin/bash
cd redis1
./bin/redis-cli -p 6001 shutdown
./bin/redis-cli -p 6002 shutdown
./bin/redis-cli -p 6003 shutdown
./bin/redis-cli -p 6004 shutdown
./bin/redis-cli -p 6005 shutdown
./bin/redis-cli -p 6006 shutdown
#编写完成脚本后保存并退出
 :wq
#修改两个脚本的权限
chmod 751 start-all.sh 
chmod 751 stop-all.sh 

然后可以启动redis看看:

./start-all.sh

ps -ef | grep redis

可以看到6个redis都已成功启动:

下面开始做集群,redis的集群有2种方式,分别对应不同版本的redis:

第一种:通过redis-cli搭建

第二种:通过redis-trib.rb搭建

官网的建议是:redis5采用redis-cli搭建,redis3和redis4采用redis-trib.rb搭建

第一种:

#进入redis的bin目录,并执行:
redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1
#执行后会弹出提示信息让你确认,输入yes 并按下回车.
yes

当你看到:

[OK] All 16384 slots covered

就说明你配置集群成功了!

接下来我们可以连上去看看:

#-p表示端口 -h表示连接的服务器 -c表示以集群方式连接
./redis-cli -c -p 6001 -h 127.0.0.1
#查看一下当前集群的全部节点信息
cluster nodes

#查询集群状态信息
cluster info 

ok,至此使用redis-cli方式配置的集群已经OJBK


鉴于很多人还在使用较低版本的redis,比如redis3 redis4 下面介绍下通过redis-trib.rb 来实现集群

redis-trib.rb是用rubby写的脚本,所以需要先在你的服务器上安装rubby

yum -y install ruby
yum -y install rubygems
#redis-trib.rb是在redis解压缩后的src目录下,可以先把它拷贝到redis的安装目录下,这里我直接拷贝到redis-cluster文件夹下:
cp redis-trib.rb /usr/local/redis-cluster

然后进入redis-cluster目录下,执行redis-trib.rb

./redis-trib.rb create --replicas 1  127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006

启动成功后同样可以看到:


[OK] All 16384 slots covered.

至此,redis的3主3从集群就搭建好了,至于正式环境下,你只需要改改Ip和端口以及根据服务器和现有架构安排集群的数量就好了.

关于如何添加节点和删除节点这里就不赘述了,感兴趣的直接参见官网文档:https://redis.io/

欲知 redis常用命令,操作工具类,redis分布式锁...且听下回分解

猜你喜欢

转载自blog.csdn.net/lovexiaotaozi/article/details/83411918