搜档网
当前位置:搜档网 › Redis安装部署文档

Redis安装部署文档

Redis安装部署文档
Redis安装部署文档

服务器安装配置手册

Redis服务器安装分册

目录

1概要 (3)

2缩略语和术语 (3)

3要求 (3)

4升级注意事项 (3)

5操作步骤说明 (3)

5.1安装前环境说明 (3)

5.2下载 (3)

5.3Redis 介绍 (4)

5.4解压 (5)

5.5编译及安装 (5)

5.6配置 (6)

5.7设置环境变量 (6)

5.8启动、停止重新加载Redis配置 (6)

5.8.1启动Redis服务器 (8)

5.8.2停止Redis (9)

5.8.3连接Redis (9)

5.9redis常用命令详解 (9)

5.9.1redis-benchmark (9)

5.9.2redis-server (10)

5.9.3redis-cli (11)

5.9.4redis-check-aof (11)

5.9.5redis-check-dump (11)

5.9.6查看、删除key信息 (12)

5.9.7获取服务器的信息和统计 (12)

5.9.8Redis的query分析 (13)

5.10创建主从服务器 (15)

5.10.1配置主从服务器 (15)

5.10.2备份服务器方案 (17)

6FAQ (17)

6.1Redis编译失败怎么办 (17)

6.2Redis启动失败 (17)

6.3Redis虚拟内存无法启动 (17)

6.4升级安装前没有停止已经运行Redis进程,怎么处理 (18)

6.5Redis主从结构,主服务器宕机解决方法 (18)

6.6调整overcommit_memory参数 (18)

6.7安装tcmalloc包 (18)

7Redis配置说明 (19)

8参考文献 (29)

1概要

Redis服务器环境的安装。指导系统部署和维护使用,

以64位Linux环境下安装使用

2缩略语和术语

3要求

编译Redis的要求如下:

磁盘空间

必须保证有50G以上的临时磁盘自由空间。Redis安装完毕后会占据10MB左右的空间,实际磁盘需求会因编译设置和是否安装第三方模块而有所不同。

4升级注意事项

如果Redis已经安装过,请先备份原Redis的所有配置文件,即目录下的所有文件

5操作步骤说明

5.1 安装前环境说明

N/A

5.2 下载

Redis可以到官方网站:http://www.redis.io/download下载

本文档用https://www.sodocs.net/doc/612332796.html,/files/redis-2.4.14.tar.gz稳定版。

当前稳定版:2.8 http://download.redis.io/releases/redis-2.8.19.tar.gz

Win版下载地址:https://https://www.sodocs.net/doc/612332796.html,/dmajkic/redis/downloads

5.3 Redis 介绍

Redis是Remote Dictionary Server的缩写。他本质上一个Key/Value数据库,与Memcached 类似的NoSQL型数据库,但是他的数据可以持久化的保存在磁盘上,解决了服务重启后数据不丢失的问题,他的值可以是string(字符串)、list(列表)、sets(集合)或者是ordered sets(被排序的集合),所有的数据类型都具有push/pop、add/remove、执行服务端的并集、交集、两个sets集中的差别等等操作,这些操作都是具有原子性的,Redis还支持各种不同的排序能力。

目录结构:

根目录下:

redis.conf 默认配置文件

Src目录:

make命令执行完成后,会在src目录下生成5个可执行文件,分别是redis-server、redis-cli、

redis-benchmark、redis-check-aof、redis-check-dump,各命令详情请参考5.7redis命令详解

5.4 解压

解压Redis的tar包很简单:

tar -zxvf redis-2.4.14.tar.gz

对解压出来的文件夹做一个链接,进入链接包

ln -s redis-2.6.14 redis #建立一个链接

这样就在当前目录下新建了一个包含发行版源代码的目录,必须cd进入这个目录以继续服务器的编译。

5.5 编译及安装

进入redis解压目录,执行如下命令编译Redis:

cd

make test

make prefix= install

因为对一个基本的配置的编译,一般需要1分钟左右的时间,实际需要的时间因你的硬件和选择的模块数量会有很大不同。

希望将redis安装到此目录

那么安装过程指令如下:

注意上面的最后一行,我们通过PREFIX指定了安装的目录。如果make失败,一般是你们系统中还未安装gcc,那么可以通过yum安装:

安装完成后,继续执行make.

在安装redis成功后,你将可以在/usr/local/redis看到一个bin的目录,里面包括了以下文件:

5.6 配置

接着,复制redis.conf到/conf/下,修改配置文件,来配置Redis服务器。vi /conf/redis.conf

我们一般只需要作简单的配置,参考7 Redis说明

查看配置文件:grep -v '^#\|^$' redis.conf

需设置内核针对内存分配的策略:6.6调整overcommit_memory参数

5.7 设置环境变量

进入当前用户主目录:

vi .bash_profile

PATH=$PATH:.:$/bin:$PATH

保存后执行如下命令

. .bash_profile

退出终端后,重新登录后查看环境变量是否生效

5.8 将redis做成服务

脚本内容:

#!/bin/bash

#

# redis - this script starts and stops the redis-server daemon

#

# chkconfig: - 80 12

# description: Redis is a persistent key-value database

# processname: redis-server

# config: /usr/local/redis/etc/redis.conf

# pidfile: /usr/local/redis/var/redis.pid

# before of optatioin:

# vi /etc/sysctl.conf

# vm.overcommit_memory = 1

# sysctl -p

source /etc/init.d/functions

BIN="/home/redisserver/bin"

CONFIG="/home/redisserver/bin/redis.conf"

PIDFILE="/home/redisserver/bin/redis.pid"

### Read configuration

[ -r "$SYSCONFIG" ] && source "$SYSCONFIG"

RETV AL=0

prog="redis-server"

desc="Redis Server"

start() {

if [ -e $PIDFILE ];then

echo "$desc already running...."

exit 1

fi

echo -n $"Starting $desc: "

daemon $BIN/$prog $CONFIG &

RETV AL=$?

echo

[ $RETV AL -eq 0 ] && touch /var/lock/subsys/$prog

return $RETV AL

}

stop() {

echo -n $"Stop $desc: "

killproc $prog

RETV AL=$?

echo

[ $RETV AL -eq 0 ] && rm -f /var/lock/subsys/$prog $PIDFILE

return $RETV AL

}

默认情况下,Redis未启用认证,可以通过开启redis.conf的requirepass 指定一个验证密码。

修改profile文件:

在最后行追加:

然后马上应用这个文件:

至此,redis 就成功安装了。

5.9 启动、停止重新加载Redis配置

进入的bin目录下。

5.9.1启动Redis服务器

命令:

cd /bin

redis-server conf/redis.conf

可做成服务器启动

注:此命令仅有一个启动参数,指定目录下的配置文件,不加参数执行默认配置。

测试启动redis-cli ping返回PONG,启动成功。

查看端口是否被占用:netstat -ntlp |grep 6379

5.9.2停止Redis

关闭服务

redis-cli shutdown

如果非默认端口,可指定端口:

redis-cli -p 6380 shutdown

5.9.3连接Redis

两种连接方式:

1:window DOS方式:tentel主机IP端口号(默认为127.0.0.1:6379)

2:linux客户端方式:redis-cli主机IP端口号(默认为127.0.0.16379)

5.10 redis常用命令详解

5.10.1redis-benchmark

Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能。

redis的基准信息和性能检测。

redis-benchmark -h localhost -p 6379 -c 100 -n 100000

100个并发连接,100000个请求,检测host为localhost 端口为6379的redis服务器性能./redis-benchmark -n 100000 –c 50

====== –c 50 ======

100000 requests completed in 1.93 seconds(100000个请求完成于 1.93 秒 )

50 parallel clients (每个请求有50个并发客户端)

3 bytes payload (每次写入3字节)

58.50% <= 0 milliseconds

99.17% <= 1 milliseconds

99.58% <= 2 milliseconds

99.85% <= 3 milliseconds

99.90% <= 6 milliseconds

100.00% <= 9 milliseconds

(所有请求在62毫秒内完成)

114293.71 requests per second(每秒 114293.71 次查询)

5.10.2redis-server

Redis服务器的daemon启动程序

redis-server 启动并加装默认配置文件[/path/to/redis.conf]

redis-server /biran/conf/redis.conf启动并加装指定配置文件

redis-server - (read config from stdin)使用标准输入读取配置为启动参数

redis-server --test-memory 256检测256MB内存redis-server –version查版本号

5.10.3redis-cli

5.10.4redis-check-aof

更新日志检查,加--fix参数为修复log文件

redis-check-aofappendonly.aof

5.10.5redis-check-dump

检查本地数据库文件

redis-check-dump dump.rdb

5.10.6查看、删除key信息

redis-cli keys \* #查看所有键值信息

redis-cli -n 1 keys "test*" | xargs redis-cli -n 1 del删除DBID为1的test开头的key值5.10.7获取服务器的信息和统计

redis-cli info查询系统信息。默认为localhost,端口为6379。

redis-cli -p 6379 info | grep '\'过滤查询used_memory属性

当used_memory_rss接近maxmemory或者used_memory_peak超过maxmemory时,要加大maxmemory 负责性能下降

redis服务的统计信息:

5.10.8Redis的query分析

redis-faina(https://https://www.sodocs.net/doc/612332796.html,/Instagram/redis-faina)是由Instagram 开发并开源的一个Redis 查询分析小工具,需安装python环境。

redis-faina 是通过Redis的MONITOR命令来实现的,通过对在Redis上执行的query进行监控,统计出一段时间的query特性,需root权限。

通过管道从stdin读取N条命令,直接分析

redis-cli -p 6439 monitor | head -n | ./redis-faina.py

从一个文件中读取117773条命令,再分析

redis-cli -p 6439 monitor | head -n 117773> /tmp/outfile.txt

./redis-faina.py /tmp/outfile.txt

其输出结果如下:

Overall Stats

Lines Processed 117773

Commands/Sec 11483.44

Top Prefixes(按key前缀统计)

======================================== friendlist 69945

followedbycounter 25419

followingcounter 10139

recentcomments 3276

queued 7

Top Keys(操作最频繁的key)

======================================== friendlist:zzz:1:2 534

followingcount:zzz 227

friendlist:zxz:1:2 167

friendlist:xzz:1:2 165

friendlist:yzz:1:2 160

friendlist:gzz:1:2 160

friendlist:zdz:1:2 160

friendlist:zpz:1:2 156

Top Commands(执行最多的命令)

======================================== SISMEMBER 59545

HGET 27681

HINCRBY 9413

SMEMBERS 9254

MULTI 3520

EXEC 3520

LPUSH 1620

EXPIRE 1598

Command Time (microsecs)(命令执行时长)

======================================== Median 78.25

75% 105.0

90% 187.25

99% 411.0

Heaviest Commands (microsecs)(耗时最多的命令) ======================================== SISMEMBER 5331651.0

HINCRBY 961192.5

SMEMBERS 856817.5

MULTI 311339.5

SADD 54900.75

SREM 40771.25

EXEC 28678.5

Slowest Calls(最慢的命令)

========================================

3490.75 "SMEMBERS" "friendlist:zzz:1:2"

2362.0 "SMEMBERS" "friendlist:xzz:1:3"

2061.0 "SMEMBERS" "friendlist:zpz:1:2"

1961.0 "SMEMBERS" "friendlist:yzz:1:2"

1947.5 "SMEMBERS" "friendlist:zpz:1:2"

1459.0 "SISMEMBER" "friendlist:hzz:1:2" "zzz"

1416.25 "SMEMBERS" "friendlist:zhz:1:2"

1389.75 "SISMEMBER" "friendlist:zzx:1:2" "zzz"

从上面结果我们可以看到对Redis的操作规律,比如针对哪些key在进行操作,进行了什么操作,这些操作的效率如何等相关有用信息。

由于Redis的MONITOR 也对性能有所影响,所以建议在使用时不要一直开启MONITOR来分析。可以采用定时抽样一段时间来做样本分析。

5.11 创建主从服务器

5.11.1配置主从服务器

方式可以有2种:

1 master -> slave,

2master -> slave -> slave -> slave..

一个集群可以包含最多4096个节点(主节点master和从节点slave),建议最多设置几百个节点

进入Redis安装目录,创建主从配置文件

cd

创建主从服务器工作目录及对应的配置、日志等目录,服务器目录创建规则

mkdir Master100_6379 Slave101_6380

mkdir Master100_6379/conf Master100_6379/log Master100_6379/data

mkdir Slave101_6380/conf Slave101_6380/log Slave101_6380/data

复制配置文件到服务器的conf目录

cp redis.conf Master100_6379/conf/redis.conf

cp redis.conf Slave101_6380/conf/slave.conf

修改主服务器配置文件:

pidfile/redis/redis/Master100_6379/run/redis_Master100_6379.pid

port 6379

logfile /redis/redis/Master100_6379/log/stdout.log

dbfilename/redis/redis/Master100_6379/data/dump.rdb

appendfilename/redis/redis/Master100_6379/log//appendonly.aof

修改从服务器配置文件:

pidfile/redis/redis/Slave101_6380/run/redis_Slave101_6380.pid

port 6380

logfile /redis/redis/Slave101_6380/log/stdout.log

dbfilename/redis/redis/Slave101_6380/data/dump.rdb

slaveof 127.0.0.1 6379

appendfilename/redis/redis/Slave101_6380/log//appendonly.aof

启动主服务器:

redis-server /redis/redis/Master100_6379/conf/redis.conf

插入测试数据:

redis-benchmark

启动从服务器:

redis-server /redis/redis/Slave101_6380/conf/slave.conf

查询主从服务是否已运行:

ps xal|grep redis

进入主从服务器目录,查询对比所有服务器数据文件的散列值和文件大小:

find . -type f -name "*.rdb" | xargs md5sum

find . -type f -name "*.rdb" | xargs ls -l

生成报文摘要并验证,如果对比成功则数据已同步:

find . -type f -name "*.rdb" | xargs md5sum >biran

md5sum --check biran

强制同步数据到磁盘:

redis-cli save或redis-cli -p 6380 save(根据端口号指定某台服务器同步)

5.11.2备份服务器方案

增设一台主机备份服务器,执行定时启动,同步,停止脚本,或直接在服务器上cp rdb数据文件

redis-server conf/bak.conf

redis-cli save

redis-cli shutdown

6FAQ

6.1 Redis编译失败怎么办

●检查配置参数是否正确

●当前用户对--prefix目录是否有权限

●系统是否安装gcc编译工具

●如果编译失败再次编译出现故障,请删除Redis的源代码目录,再次解压Redis,

重新编译。

6.2 Redis启动失败

启动redis服务失败,一般情况下是因为redis.conf文件有问题,建议检查或找个可用的配置文件进行覆盖

6.3 Redis虚拟内存方式无法启动

启动redis服务失败,提示如下信息:

ARE YOU SURE YOU W ANT TO USE VM?

Redis Virtual Memory is going to be deprecated soon,

we think you should NOT use it, but use Redis only if

your data is suitable for an in-memory database.

If you *really* want VM add this in the config file:

really-use-vm yes

此时需在配置文件中增加really-use-vm yes,重启即可。

6.4 升级安装前没有停止已经运行Redis进程,怎么处理

此种情况下,在启动Redis时报告端口已经被占用。

解决办法,只有用命令行Kill -9逐个杀掉所有本用户启动的Redis进程。然后再启动Redis。

6.5 Redis主从结构,主服务器宕机解决方法

绝对不能重新启动主服务器,如果主服务器没有配置持久化,否则数据会全部丢失。

解决方法是连接从服务器,做save操作。将会在从服务器的data目录保存一份从服务器最新的dump.rdb文件。将这份dump.rdb文件拷贝到主服务器的data目录下。再重启主服务器。

6.6 调整overcommit_memory参数

如果内存情况比较紧张的话,需要设定内核参数overcommit_memory,指定内核针对内存分配的策略,其值可以是0、1、2。

0,表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。

1,表示内核允许分配所有的物理内存,而不管当前的内存状态如何。

2,表示内核允许分配超过所有物理内存和交换空间总和的内存

Redis在dump数据的时候,会fork出一个子进程,理论上child进程所占用的内存和parent是一样的,比如parent占用的内存为8G,这个时候也要同样分配8G的内存给child, 如果内存无法负担,往往会造成redis服务器的down机或者IO负载过高,效率下降。所以这里比较优化的内存分配策略应该设置为1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何)。

设置方式有两种,需确定当前用户的权限活使用root用户修改:

1:重设文件echo 1 > /proc/sys/vm/overcommit_memory(默认为0)

2:echo "vm.overcommit_memory=1" >> /etc/sysctl.conf

/sbin/sysctl -p

6.7 安装tcmalloc包

Redis并没有自己实现内存池,没有在标准的系统内存分配器上再加上自己的东西。所以系统内存分配器的性能及碎片率会对Redis造成一些性能上的影响。在最新版本中,jemalloc 已经作为源码包的一部分包含在源码包中,所以可以直接被使用。如果要使用tcmalloc的话,是需要自己安装的。

tcmalloc是google-proftools( https://www.sodocs.net/doc/612332796.html,/p/gperftools/downloads/list)中的一部分,所以我们实际上需要安装google-proftools。如果你是在64位机器上进行安装,需要先安装其依赖的libunwind库

cd /

wget https://www.sodocs.net/doc/612332796.html,/releases/libunwind/libunwind-0.99-alpha.tar.gz

tar -zxvf libunwind-0.99-alpha.tar.gz

cd libunwind-0.99-alpha/

CFLAGS=-fPIC ./configure

make CFLAGS=-fPIC

make CFLAGS=-fPIC install

然后再进行google-preftools的安装

wget https://www.sodocs.net/doc/612332796.html,/files/google-perftools-1.8.1.tar.gz

tar -zxvf google-perftools-1.8.1.tar.gz

cd google-perftools-1.8.1/

./configure --disable-cpu-profiler --disable-heap-profiler --disable-heap-checker --disable-debugalloc --enable-minimal

make && make install

sudo echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf #如果没有这个文件,自己建一个

sudo /sbin/ldconfig

然后再进行Redis的安装,在make时指定相应的参数以启用tcmalloc

6.8 systl –p错误解决

问题症状

修改linux 内核文件

#vi /etc/sysctl.conf后执行sysctl -P 报错

error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key

error: "net.bridge.bridge-nf-call-iptables" is an unknown key

error: "net.bridge.bridge-nf-call-arptables" is an unknown key

解决方法如下:

modprobe bridge

lsmod|grep bridge

7Redis配置说明

# Redis示例配置文件

# 注意单位问题:当需要设置内存大小的时候,可以使用类似1k、5GB、4M这样的常见格式:

# 1k => 1000 bytes

# 1kb => 1024 bytes

# 1m => 1000000 bytes

# 1mb => 1024*1024 bytes

# 1g => 1000000000 bytes

# 1gb => 1024*1024*1024 bytes

# 当配置中需要配置内存大小时,可以使用 1k, 5GB, 4M 等类似的格式,其内存单位转换方式如下(不区分大小写,比如 1gb 1Gb 1GB 1gB均可)

##########基本配置##########

# 默认情况下,redis不是在后台模式运行的,如果需要在后台进程运行,把该项的值更改为yes,默认为no

daemonize no

# 如redis服务以后台进程运行的时候,Redis默认会把pid写入/var/run/redis.pid文件组,你可以配置到其他文件路径。

# 当运行多个redis服务时,需要指定不同的pid文件和端口

pidfile /var/run/redis.pid

# 指定redis监听端口,默认为6379

# 如果端口设置为0,Redis就不会监听TCP套接字。

port 6379

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

# 在生产环境中最好设置该项

# bind 127.0.0.1

# 指定用来监听连接的unxi套接字的路径。这个没有默认值,所以如果不指定的话,Redis就不会通过unix套接字来监听。

# unixsocket /tmp/redis.sock

相关主题