【Linux开发环境搭建】之Redis及Redis集群安装

前言
什么是NoSQL?

NoSQL :全称 not only sql ,非关系型数据库。可以作为关系型数据库的一个很好的补充。

是为了解决高并发、高可扩展(集群)、高可用(不能宕机)、大数据存储问题而产生的一种数据库解决方案。

NoSQL数据库的分类?
  • 键值(Key-Value)存储数据库

    相关产品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB。
    典型应用:内容缓存,主要用于处理大量数据的高访问负载。
    数据模型:一系列键值对
    优势:快速查询
    劣势:存储的数据缺少结构化

  • 列存储数据库
    相关产品:Cassandra,HBase,Riak
    典型应用:分布式的文件系统
    数据模型:以列簇式存储,将通一列数据存在一起
    优势:查找速度快,可扩展性强,更容易进行分布式存储
    劣势:功能相对局限
  • 文档型数据库
    相关产品:CouchDB、MongoDB
    典型应用:Web应用(与key-value类似,Value是结构化的)
    数据模型:一系列键值对
    优势:数据结构要求不严格
    劣势:查询性能不强,而且缺乏统一的查询语法

  • 图形数据库
    相关产品:Neo4J、InfoGrid、Infinite Graph
    典型应用:社交网络
    数据模型:图结构
    优势:利用图结构相关算法
    劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案

什么是Redis?

Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库(nosql),应用在缓存。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型有5种:

  • 字符串类型(String)
  • 散列类型(hash)
  • 列表类型(List)
  • 集合类型(set)
  • 有序集合类型(SortedSet)

Redis的主要应用场景:

  • 缓存
  • 分布式集群架构中的session分离
  • 任务队列(秒杀、抢购、售票)
  • 应用排行榜(SoretdSet)
  • 网站访问统计
  • 数据过期处理(expire)
环境准备

VMware,centos7.3, XShell5,Xftp5

Redis安装部署
安装Redis

首先要下载Redis:http://download.redis.io/releases/
用Xftp将下载下来的redis源码包传输到Centos
在安装redis之前需要C语言的编译环境

#安装gcc
[root@localhost ~]# yum -y install gcc-c++
#gcc命令验证,出现 gcc:no input files表示安装成功
[root@localhost ~]# gcc

接着解压redis的源码包

tar -zxvf redis-3.0.0.tar.gz

进行编译,cd进入到解压后的目录,输入命令:make
然后进行安装,输入以下命令,将redis安装到 /usr/local 下

make install PREFIX=/usr/local/redis

这里写图片描述
最后检查目录是否存在,cd /usr/local/redis 下, 有bin说明安装成功。
这里写图片描述

连接Redis

前端启动

[root@localhost bin]# cd /usr/local/redis/bin
[root@localhost bin]# ./redis-server 

这里写图片描述

后台启动
1. 把/root/redis-3.0.0/redis.conf复制到/usr/local/redis/bin目录下
[root@localhost redis-3.0.0]# cp redis.conf /usr/local/redis/bin/
2. 使用vim命令修改redis.conf配置文件 将daemonize no修改为daemonize yes
这里写图片描述
3. 输入启动命令
[root@localhost bin]# ./redis-server redis.conf
4. 检查redis进程:
[root@localhost bin]# ps -ef|grep redis
这里写图片描述

客户端 Redis-cli 连接Redis

使用 Redis-cli 建立连接

[root@localhost bin]# ./redis-cli 

默认连接在 localhost 运行在6379端口的 redis 服务

[root@localhost bin]# ./redis-cli -h 127.0.0.1 -p 6379

-h: 连接的服务器的地址
-p:服务的端口号

退出连接

# 第一种
[root@localhost bin]# ./redis-cli 
127.0.0.1:6379> quit

# 第二种
[root@localhost bin]# ./redis-cli 
127.0.0.1:6379> exit

# 第三种
CRT+C
关闭服务

1.通过连接上客户端进行关闭,使用shutdown 命令。

[root@localhost bin]# ./redis-cli 
127.0.0.1:6379> shutdown
not connected>

2.使用 kill 命令,找到对应的 redis 的进程 id 然后使用命令:(pid为进程id)

kill -9 pid
Redis集群安装部署
redis-cluster架构图

这里写图片描述

说明:
1. 所有的 redis 节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
2. 节点的 fail 是通过集群中超过半数的节点检测失效时才生效.
3. 客户端与 redis 节点直连,不需要中间 proxy 层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可.
4. redis-cluster 把所有的物理节点映射到 [0-16383] slot 上,cluster 负责维护.
node<->slot<->value

Redis集群的搭建

至少 3 个节点,为了集群的高可用,为每一个节点增加到一个备份机。

搭建伪分布式集群方案:在一台机器里面运行 6 个 redis 实例。端口需要不同(7001-7006)。

使用 ruby 脚本搭建集群。需要 ruby 的运行环境
安装 ruby:

yum install ruby
yum install rubygems

下载 redis-3.0.0.gem 用 Xftp5 上传到 redis-3.0.0.gem 到 linux 中

安装 ruby 运行时所使用的包

[root@localhost ~]# gem install redis-3.0.0.gem 
Successfully installed redis-3.0.0
1 gem installed
Installing ri documentation for redis-3.0.0...
Installing RDoc documentation for redis-3.0.0.
[root@localhost ~]# cd redis-3.0.0/src
[root@localhost src]# ll *.rb
-rwxrwxr-x. 1 root root 48141 Apr  1  2015  redis-trib.rb
搭建步骤

需要6台redis服务器。搭建伪分布式。
需要6个redis实例。
需要运行在不同的端口7001-7006
使用之前搭建好的redis实例 。

注意:搭建前 如果节点里有数据,需要删除(rdb文件,aof文件)。

1.创建6个redis实例,每个实例运行在不同的端口。需要修改redis.conf配置文件。配置文件中还需要把cluster-enabled yes前的注释去掉。

# 创建目录
[root@localhost local]# mkdir redis-cluster
# copy 之前搭建好的redis 并改名为redis01
[root@localhost local]# cp redis/ redis-cluster/redis01 -r
# 进入redis-cluster目录中cd到redis01的bin目录,删除数据文件
[root@localhost local]# cd redis-cluster/redis01/bin
[root@localhost bin]# rm -rf *.rdb *.aof
# 修改redis.conf,取消注释,如图
[root@localhost bin]# vim redis.conf

这里写图片描述

按ESC:wq,保存退出。
cd到redis-cluster目录
copy六份并分别命名为redis02,redis03,redis04,redis05,redis06

[root@localhost redis-cluster]# cp redis01 redis02 -r
[root@localhost redis-cluster]# cp redis01 redis03 -r
[root@localhost redis-cluster]# cp redis01 redis04 -r
[root@localhost redis-cluster]# cp redis01 redis05 -r
[root@localhost redis-cluster]# cp redis01 redis06 -r

cd到每一个实例的bin目录,修改每一个redis实例的端口分别改为7001-7006

[root@localhost bin]# vim redis.conf

这里写图片描述

2.启动每个redis实例。

vim  redis-cluster-start-all.sh 

添加如下文字到文件中:

cd /usr/local/redis-cluster/redis01/bin
./redis-server redis.conf

cd /usr/local/redis-cluster/redis02/bin
./redis-server redis.conf

cd /usr/local/redis-cluster/redis03/bin
./redis-server redis.conf

cd /usr/local/redis-cluster/redis04/bin
./redis-server redis.conf

cd /usr/local/redis-cluster/redis05/bin
./redis-server redis.conf

cd /usr/local/redis-cluster/redis06/bin
./redis-server redis.conf

修改文件:redis-cluster-start-all.sh 的权限,让其具有执行权限

 chmod u+x redis-cluster-start-all.sh

执行启动

[root@localhost redis-cluster]# ./redis-cluster-start-all.sh

3.使用ruby脚本搭建集群
拷贝rb文件(在原来解压的redis文件夹的src目录中)到redis-cluster目录中
这里写图片描述

执行创建

./redis-trib.rb create --replicas 1 192.168.25.128:7001 192.168.25.128:7002 192.168.25.128:7003 192.168.25.128:7004 192.168.25.128:7005  192.168.25.128:7006
>>> Creating cluster
Connecting to node 192.168.25.128:7001: OK
Connecting to node 192.168.25.128:7002: OK
Connecting to node 192.168.25.128:7003: OK
Connecting to node 192.168.25.128:7004: OK
Connecting to node 192.168.25.128:7005: OK
Connecting to node 192.168.25.128:7006: OK
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.25.128:7001
192.168.25.128:7002
192.168.25.128:7003
Adding replica 192.168.25.153:7004 to 192.168.25.128:7001
Adding replica 192.168.25.153:7005 to 192.168.25.128:7002
Adding replica 192.168.25.153:7006 to 192.168.25.128:7003
M: 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3 192.168.25.128:7001
   slots:0-5460 (5461 slots) master
M: 8cd93a9a943b4ef851af6a03edd699a6061ace01 192.168.25.128:7002
   slots:5461-10922 (5462 slots) master
M: 2935007902d83f20b1253d7f43dae32aab9744e6 192.168.25.128:7003
   slots:10923-16383 (5461 slots) master
S: 74f9d9706f848471583929fc8bbde3c8e99e211b 192.168.25.128:7004
   replicates 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3
S: 42cc9e25ebb19dda92591364c1df4b3a518b795b 192.168.25.128:7005
   replicates 8cd93a9a943b4ef851af6a03edd699a6061ace01
S: 8b1b11d509d29659c2831e7a9f6469c060dfcd39 192.168.25.128:7006
   replicates 2935007902d83f20b1253d7f43dae32aab9744e6
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join.....
>>> Performing Cluster Check (using node 192.168.25.128:7001)
M: 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3 192.168.25.128:7001
   slots:0-5460 (5461 slots) master
M: 8cd93a9a943b4ef851af6a03edd699a6061ace01 192.168.25.128:7002
   slots:5461-10922 (5462 slots) master
M: 2935007902d83f20b1253d7f43dae32aab9744e6 192.168.25.128:7003
   slots:10923-16383 (5461 slots) master
M: 74f9d9706f848471583929fc8bbde3c8e99e211b 192.168.25.128:7004
   slots: (0 slots) master
   replicates 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3
M: 42cc9e25ebb19dda92591364c1df4b3a518b795b 192.168.25.128:7005
   slots: (0 slots) master
   replicates 8cd93a9a943b4ef851af6a03edd699a6061ace01
M: 8b1b11d509d29659c2831e7a9f6469c060dfcd39 192.168.25.128:7006
   slots: (0 slots) master
   replicates 2935007902d83f20b1253d7f43dae32aab9744e6
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@localhost redis-cluster]# 

4.创建关闭集群的脚本
使用 vim 命令创建一个文件 redis-cluster-stop-all.sh

cd /usr/local/redis-cluster/redis01/bin
./redis-cli -p 7001 shutdown

cd /usr/local/redis-cluster/redis02/bin
./redis-cli -p 7002 shutdown

cd /usr/local/redis-cluster/redis03/bin
./redis-cli -p 7003 shutdown

cd /usr/local/redis-cluster/redis04/bin
./redis-cli -p 7004 shutdown

cd /usr/local/redis-cluster/redis05/bin
./redis-cli -p 7005 shutdown

cd /usr/local/redis-cluster/redis06/bin
./redis-cli -p 7006 shutdown

修改文件:redis-cluster-stop-all.sh 的权限,使其可执行。

chmod u+x redis-cluster-stop-all.sh

这里写图片描述

集群的使用方法

Redis-cli连接集群。

[root@localhost redis-cluster]# redis01/bin/redis-cli -p 7002 -c

-c:代表连接的是redis集群,连上后使用命令操作redis是和单机版的一样。

猜你喜欢

转载自blog.csdn.net/qq_23483671/article/details/81437804