redis30以上版本集群安装.docx

上传人:b****8 文档编号:23826480 上传时间:2023-05-21 格式:DOCX 页数:27 大小:356.25KB
下载 相关 举报
redis30以上版本集群安装.docx_第1页
第1页 / 共27页
redis30以上版本集群安装.docx_第2页
第2页 / 共27页
redis30以上版本集群安装.docx_第3页
第3页 / 共27页
redis30以上版本集群安装.docx_第4页
第4页 / 共27页
redis30以上版本集群安装.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

redis30以上版本集群安装.docx

《redis30以上版本集群安装.docx》由会员分享,可在线阅读,更多相关《redis30以上版本集群安装.docx(27页珍藏版)》请在冰豆网上搜索。

redis30以上版本集群安装.docx

redis30以上版本集群安装

1、Redis集群安装方法

1、环境介绍

操作系统版本:

centos7[CentOSLinuxrelease7.0.1406(Core)]

详细版本信息:

Linuxversion3.10.0-123.el7.x86_64(builder@kbuilder.dev.centos.org)(gccversion4.8.220140120(RedHat4.8.2-16)(GCC))#1SMPMonJun3012:

09:

22UTC2014

【查看系统命令:

cat/proc/version或者cat/etc/redhat-release或者uname-a】

Redis版本:

redis-3.0.6

Ruby安装包:

 

参考网址:

安装步骤:

1、下载redis。

官网下载3.0.6版本,之前2.几的版本不支持集群模式,最新版本3.2支持集群模式,但是目前并不稳定,因此建议使用3.0.6版本redis。

目前redis3.0以上版本暂无支持windows系统客户端。

下载地址:

2、下载之后,会得到一个名字为redis-3.0.6.tar.gz的压缩文件,可以在本地解压,也可以传至linux上解压文件,前提是你的linux操作系统有ftp且已安装解压文件包。

3、如果已经是当前目录,则直接解压文件,如果不是当前目录,要将redis压缩包移动至目标目录,使用如下命令移动文件:

mvredis-3.0.0-rc2.tar.gz /ftp/private/redis-3.0/

4、进入目标文件夹,即redis压缩包所在的文件夹,本人使用文件夹为/ftp/private/redis-3.0/,同时解压redis的压缩包,进入目录和解压命令如下:

Cd/ftp/private/redis-3.0/

tar -zxvf redis-3.0.0-rc2.tar.gz

5、解压完成之后,将在当前目录生成一个redis-3.0.6文件夹,进入该文件夹,将看到如下文件目录:

cdredis-3.0.6

执行编译命令,将看到如下图效果【必须在redis-3.0.6文件夹下执行该命令,该命令是编译源文件命令】:

make

执行编译命令,将看到如下图效果【makeinstall命令是安装软件命令】:

makeinstall

执行完上述命令,进入src目录,将看到redis的服务启动文件redis-server,同时还有客户端文件redis-cli:

cd/ftp/private/redis-3.0/redis-3.0.6/src

执行命令./redis-server将看到下图效果,看到如下图的效果表示你的单个redis服务安装编译正常:

./redis-server

至此完成单个redis服务的安装,同时可以测试redis是否正常,输入./redis-cli,如下图效果。

看到上图表示redis的存取正常,可以正常使用。

2、集群环境的搭建:

Redis集群环境搭建中,建议最好将所有的redis集群节点的版本统一,否则容易出现无法解决的错误或者bug。

首先创建集群需要的目录[改目录可以自定义,规划自己的服务器存放路径]:

mkdir-p/ftp/private/redis-3.0

将刚才编译完成的redis文件夹拷贝至当前文件夹,如果是一个机器放多个redis服务,可以复制多个在当前文件夹下,如果是不同机器部署的redis集群,则只需拷贝一个即可【本人使用的为一个机器部署多个节点】:

cp-rredis-3.0.6redis-3.0.6-9001

复制完成后的目录如下,其中每个文件最后四位为当前redis使用的端口:

复制完成之后,修改redis配置文件,即redis-3.0.6目录下的redis.conf,该文件包含了所有的redis的配置信息和样例说明,主要的几个配置地方如下:

port9001#使用端口

daemonizeyes#是否在后台执行,yes:

后台运行;no:

不是后台运行(老版本默认)

cluster-enabledyes#是否使用集群,yes使用,no不使用

cluster-config-filenodes.conf#集群的初始化文件存放位置

cluster-node-timeout5000#集群节点超时时间

appendonlyno#默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了。

但是redis如果中途宕机,会导致可能有几分钟的数据丢失,根据save来策略进行持久化,AppendOnlyFile是另一种持久化方式,可以提供更好的持久化特性。

Redis会把每次写入的数据在接收后都写入appendonly.aof文件,每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。

Yes为使用持久化,no为不使用持久化。

修改完成之后,将配置文件复制N分,N为你的节点个数,复制的目标目录为redis的运行文件src目录下,也可以自己规划配置文件路径,放在自己想要放置的目录,命令如下:

cpredis.conf/ftp/private/redis-3.0/redis-3.0.6-9001/src/redis.conf

cpredis.conf/ftp/private/redis-3.0/redis-3.0.6-9002/src/redis.conf

cpredis.conf/ftp/private/redis-3.0/redis-3.0.6-9003/src/redis.conf

然后分别启动所有的redis实例【注释:

如果你的每台机器都包含多个节点,则需要分别修改redis.Conf的端口port配置,如果是不同机器则无需修改端口,可以全部节点使用同一个端口】,启动方式为,进入redis实例的src目录下,然后分别运行如下命令:

./redis-server./redis.conf

如果你的redis.conf和redis-server不在同一目录则后面使用全路径,假设我的配置文件在var下,命令如下:

./redis-server/var/redis.conf

由于上面配置了redis在后台运行,所以启动完redis之后,将不会显示单击运行效果图,如果要验证

启动是否成功,则可以在src目录下执行如下命令[9001为你启动的实例所用端口号]:

./redis-cli-p9001

出现上图效果表示启动成功。

分别将所有的节点启动完成之后,执行如下命令可查看redis-server运行情况,出现下图说明运行正常:

ps -ef|grep redis

然后进入集群中一个redis节点的src目录下,运行如下命令创建集群,其中127.0.0.1需要换成你的服务器ip地址【由于我是本地安装集群,因此使用127.0.0.1。

create表示创建一个新的集群,replicas1表示指定集群中的副本集为1】:

./redis-trib.rb create --replicas 1 127.0.0.1:

9001 127.0.0.1:

9002 127.0.0.1:

9003

 

出现上图效果,说明集群启动成功。

如果你没有外网安装可以先到 https:

//rubygems.org/gems/redis 下载,然后离线安装。

sudogeminstallredis-3.0.7.gem--local

需要注意的是执行 redis-trib.rb命令需要ruby的支持,如果在线安装可以执行:

yum-yinstallruby

3、集群基本操作

查看目前集群中的状态,如下命令查看目前集群中的所有节点:

clusternodes

向集群中新加入一个节点:

./redis-trib.rbadd-node127.0.0.1:

9004127.0.0.1:

9001

第一个参数是要加入的节点,第二个参数是集群中已有的节点。

./redis-trib.rbadd-node--slave127.0.0.1:

9005127.0.0.1:

9001

第一个参数为从节点,第二个参数为主节点。

./redis-trib.rbdel-node127.0.0.1:

9001'cbb01bdfdc265b190496956354d84aaae6e7d54d'

这里要注意一下,第一个参数是集群中的任何一个主节点地址,而第二个参数是要删除节点的ID,这个ID如果你不知道的话,可以通过clusternodes命令查看。

还有一点就是要删除的节点必须是空的,也就是不能缓存任何数据,否则会删除不成功。

对于非空节点,在删除之前需要重新分片,将缓存的数据转移到别的节点。

如何重新分片:

我们先给某个节点做点数据:

./redis-cli-c-p9001

127.0.0.1:

9001>settestkey001testvalue001

->Redirectedtoslot[12786]locatedat127.0.0.1:

9003

OK

127.0.0.1:

9003> 

现在9003上已经有数据了,我们尝试删除一下:

./redis-trib.rbdel-node127.0.0.1:

9001'78ec1fd6647b79627d7c29bb2b22d04a4a6c43b3'

>>>Removingnode78ec1fd6647b79627d7c29bb2b22d04a4a6c43b3fromcluster127.0.0.1:

9001

Connectingtonode127.0.0.1:

9001:

OK

Connectingtonode127.0.0.1:

9002:

OK

Connectingtonode127.0.0.1:

9003:

OK

[ERR]Node127.0.0.1:

9003isnotempty!

Resharddataawayandtryagain.

没有删除成功,我们来重新分片,把9003上的数据转移:

./redis-trib.rbreshard127.0.0.1:

9003

然后输出了很多信息,很多数值和ID都可以从这段信息中找到。

Howmanyslotsdoyouwanttomove(from1to16384)?

5461

会问你要移动多少个哈希槽,我们把9003上的所有哈希槽都移走,5461这个数字可以从终端上看到,或许你的实际情况不是这个数字。

WhatisthereceivingnodeID?

4d2e0a8360795ce7ce8381c68746034aeba3c9b9

然后问你你要把这些哈希槽移到哪儿去,我指定了9001的节点ID。

PleaseenterallthesourcenodeIDs.

 Type'all'touseallthenodesassourcenodesforthehashslots.

 Type'done'onceyouenteredallthesourcenodesIDs.

Sourcenode#1:

78ec1fd6647b79627d7c29bb2b22d04a4a6c43b3

Sourcenode#2:

done

之后,redis列出了重新分片计划,最后问你

Doyouwanttoproceedwiththeproposedreshardplan(yes/no)?

yes

执行完成后,我们看看9003上还有没有key:

./redis-cli-p9003

127.0.0.1:

9003>keys*

(emptylistorset)

127.0.0.1:

9003> 

再看看9001上是不是有这个key了

./redis-cli-p9001

127.0.0.1:

9001>keys*

1)"testkey001"

127.0.0.1:

9001> 

没错,果然转移过来了。

最后我们试试能不能把9003删除:

./redis-trib.rbdel-node127.0.0.1:

9001'78ec1fd6647b79627d7c29bb2b22d04a4a6c43b3'

>>>Removingnode78ec1fd6647b79627d7c29bb2b22d04a4a6c43b3fromcluster127.0.0.1:

9001

Connectingtonode127.0.0.1:

9001:

OK

Connectingtonode127.0.0.1:

9002:

OK

Connectingtonode127.0.0.1:

9003:

OK

>>>SendingCLUSTERFORGETmessagestothecluster...

>>>SHUTDOWNthenode.

./redis-cli-p9003

CouldnotconnecttoRedisat127.0.0.1:

9003:

Connectionrefused

notconnected> 

看到上面结果表示已成功移除redis.

官方是推荐使用redis-trib.rbfix来修复集群….…. 通过clusternodes看到7001这个节点被干掉了…那么

./redis-trib.rbfix127.0.0.1:

9001

修复完成后再用check命令检查下是否正确

./redis-trib.rbcheck127.0.0.1:

9001

只要输入任意集群中节点即可,会自动检查所有相关节点。

可以查看相应的输出看下是否是每个Master都有了slots,如果分布不均匀那可以使用下面的方式重新分配slot:

./redis-trib.rbreshard127.0.0.1:

7001

集群

CLUSTERINFO打印集群的信息

CLUSTERNODES列出集群当前已知的所有节点(node),以及这些节点的相关信息。

节点

CLUSTERMEET将ip和port所指定的节点添加到集群当中,让它成为集群的一份子。

CLUSTERFORGET从集群中移除node_id指定的节点。

CLUSTERREPLICATE将当前节点设置为node_id指定的节点的从节点。

CLUSTERSAVECONFIG将节点的配置文件保存到硬盘里面。

槽(slot)

CLUSTERADDSLOTS[slot...]将一个或多个槽(slot)指派(assign)给当前节点。

CLUSTERDELSLOTS[slot...]移除一个或多个槽对当前节点的指派。

CLUSTERFLUSHSLOTS移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。

CLUSTERSETSLOTNODE将槽slot指派给node_id指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。

CLUSTERSETSLOTMIGRATING将本节点的槽slot迁移到node_id指定的节点中。

CLUSTERSETSLOTIMPORTING从node_id指定的节点中导入槽slot到本节点。

CLUSTERSETSLOTSTABLE取消对槽slot的导入(import)或者迁移(migrate)。

CLUSTERKEYSLOT计算键key应该被放置在哪个槽上。

CLUSTERCOUNTKEYSINSLOT返回槽slot目前包含的键值对数量。

CLUSTERGETKEYSINSLOT返回count个slot槽中的键。

二、安装过程容易出现的错误:

编译redis文件的时候,执行报错,修改redis文件的执行权限,命令如下:

chmod-R777[文件名]

执行上面的命令的时候会报错,因为是执行的ruby的脚本,需要ruby的环境

错误内容:

/usr/bin/env:

 ruby:

 No such file or directory

所以需要安装ruby的环境,这里推荐使用yum install ruby安装

执行命令:

yum install ruby--服务器能联网命令

然后再执行第6步的创建集群命令,还会报错,提示缺少rubygems组件,使用yum安装

错误内容:

./redis-trib.rb:

24:

in `require':

 no such file to load -- rubygems (LoadError)

from ./redis-trib.rb:

24

执行命令:

yum install rubygems--服务器能联网命令

再次执行第6步的命令,还会报错,提示不能加载redis,是因为缺少redis和ruby的接口,使用gem安装

错误内容:

/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:

31:

in`gem_original_require':

nosuchfiletoload--redis(LoadError)

from/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:

31:

in`require'

from./redis-trib.rb:

25

执行命令:

geminstallredis

 

错误内容:

[ERR]Node172.168.63.202:

7001isnotempty.Eitherthenodealreadyknowsothernodes(checkwithCLUSTERNODES)orcontainssome keyindatabase0.

解决方法:

1)、将需要新增的节点下aof、rdb等本地备份文件删除;

2)、同时将新Node的集群配置文件删除,即:

删除你redis.conf里面cluster-config-file所在的文件【即nodes.conf】;

3)、再次添加新节点如果还是报错,则登录新节点./redis-cli–hx–p对数据库进行清除:

127.0.0.1:

7001> flushdb #清空当前数据库

三、Redis3.0以上版本具体的配置项详解:

#redis.conf

#Redisconfigurationfileexample.

#./redis-server/path/to/redis.conf

##################################INCLUDES###################################

#这在你有标准配置模板但是每个redis服务器又需要个性设置的时候很有用。

#include/path/to/local.conf

#include/path/to/other.conf

################################GENERAL#####################################

#是否在后台执行,yes:

后台运行;no:

不是后台运行(老版本默认)

daemonizeyes

  #3.2里的参数,是否开启保护模式,默认开启。

要是配置里没有指定bind和密码。

开启该参数后,redis只会本地进行访问,拒绝外部访问。

要是开启了密码 和bind,可以开启。

否 则最好关闭,设置为no。

protected-modeyes

#redis的进程文件

pidfile/var/run/redis/redis-server.pid

#redis监听的端口号。

port6379

#此参数确定了TCP连接中已完成队列(完成三次握手之后)的长度,当然此值必须不大于Linux系统定义的/proc/sys/net/core/somaxconn值,默认是511,而Linux的默认参数值是128。

当系统并发量大并且客户端速度缓慢的时候,可以将这二个参数一起参考设定。

该内核参数默认值一般是128,对于负载很大的服务程序来说大大的不够。

一般会将它修改为2048或者更大。

在/etc/sysctl.conf中添加:

net.core.somaxconn=2048,然后在终端中执行sysctl-p。

tcp-backlog511

#指定redis只接收来自于该IP地址的请求,如果不进行设置,那么将处理所有请求

bind127.0.0.1

#配置unixsocket来让redis支持监听本地连接。

#unixsocket/var/run/redis/redis.sock

#配置unixsocket使用文件的权限#

unixsocketperm700

#此参数为设置客户端空闲超过timeout,服务端会断开连接,为0则服务端不会主动断开连接,不能小于0。

timeout0

#tcpkeepalive参数。

如果设置不为0,就使用配置tcp的SO_KEEPALIVE值,使用keepalive有两个好处:

检测挂掉的对端。

降低中间设备出问题而导致网络看似连接却已经与对端端口的问题。

在Linux内核中,设置了keepalive,redis会定时给对端发送ack。

检测到对端关闭需要两倍的设置值。

tcp-keepalive0

#指定了服务端日志的级别。

级别包括:

debug(很多信息,方便开发、测试),verbose(许多有用的信息,但是没有debug级别信息多),notice(适当的日志级别,适合生产环境),warn(只有非常重要的信息)loglevelnotice

#指定了记录日志的文件。

空字符串的话,日志会打印到标准输出设备。

后台运行的redis标准输出是/dev/null。

logfile/var/log/redis/redis-server.log

#是否打开记录syslog功能

#syslog-enabledno

#syslog的标识符。

#syslog-identredis

#日志的来源、设备

#syslog-facilitylocal0

#数据库的数量,默认使用的数据库是DB0。

可以通过”SELECT“命令选择一个

dbdatabases16

##

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 考试认证 > 其它考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1