安装:
1.获取redis资源(http://redis.io/download)
wget http://download.redis.io/releases/redis-4.0.8.tar.gz
2.解压
tar xzvf redis-4.0.8.tar.gz
3.安装
cd redis-4.0.8
make
cd src
make install PREFIX=/usr/local/redis
注意:make编译如果失败,因为没有安装gcc服务
rpm -qa |grep gcc查看安装是否成功
yum install gcc
4.移动配置文件到安装目录下
cd ../
mkdir /usr/local/redis/etc
cp redis.conf /usr/local/redis/etc
5.配置redis为后台启动
vi /usr/local/redis/etc/redis.conf //将daemonize no 改成daemonize yes
6.将redis加入到开机启动
vi /etc/rc.local //在里面添加内容:
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf (意思就是开机调用这段开启redis的命令)
7./usr/local/redis/bin目录下的几个关键文件
redis-benchmark:redis性能测试工具
redis-check-aof:检查aof日志的工具
redis-check-dump:检查rdb日志的工具
redis-cli:连接用的客户端
redis-server:redis服务进程
设置环境变量,是上述命令不用绝对路径
vi /etc/profile.d/redis.sh 新增该文件添加如下内容:
export REDIS_HOME=/usr/local/redis
export PATH=$PATH:$REDIS_HOME/bin
执行使改文件立刻生效:
source /etc/profile.d/redis.sh
8.redis使用
开启redis
redis-server /usr/local/redis/etc/redis.conf
停止redis
redis-cli shutdown (./redis-cli -h 127.0.0.1 -p 6379 shutdown)
pkill redis-server
客户端
redis-cli (./redis-cli -h 127.0.0.1 -p 6379)
查看
ps -ef | grep redis
netstat -ntlp | grep redis
9.配置内核参数
配置overcommit_memory参数
否则Redis脚本在重启或停止redis时,将会报错,并且不能自动在停止服务前同步数据到磁盘上
它是 内存分配策略
可选值:0、1、2。
0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2, 表示内核允许分配超过所有物理内存和交换空间总和的内存
将vm.overcommit_memory 设为1:
有三种方式修改内核参数,但要有root权限:
(1)编辑/etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p 使配置文件生效
(2)sysctl vm.overcommit_memory=1
(3)echo 1 > /proc/sys/vm/overcommit_memory
配置somaxconn参数
定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数,默认值为128
echo 1000 >/proc/sys/net/core/somaxconn
10.conf 配置项介绍
daemonize:如需要在后台运行,把该项的值改为yes
pdifile:把pid文件放在/var/run/redis.pid,可以配置到其他地址
bind:指定redis只接收来自该IP的请求,如果不设置,那么将处理所有请求,在生产环节中最好设置该项
port:监听端口,默认为6379
timeout:设置客户端连接时的超时时间,单位为秒
loglevel:等级分为4级,debug,revbose,notice和warning。生产环境下一般开启notice
logfile:配置log文件地址,默认使用标准输出,即打印在命令行终端的端口上
database:设置数据库的个数,默认使用的数据库是0
save:设置redis进行数据库镜像的频率
rdbcompression:在进行镜像备份时,是否进行压缩
dbfilename:镜像备份文件的文件名
dir:数据库镜像备份的文件放置的路径
slaveof:设置该数据库为其他数据库的从数据库
masterauth:当主数据库连接需要密码验证时,在这里设定
requirepass:设置客户端连接后进行任何其他指定前需要使用的密码
maxclients:限制同时连接的客户端数量
maxmemory:设置redis能够使用的最大内存
appendonly:开启appendonly模式后,redis会把每一次所接收到的写操作都追加到appendonly.aof文件中,当redis重新启动时,会从该文件恢复出之前的状态
appendfsync:设置appendonly.aof文件进行同步的频率
vm_enabled:是否开启虚拟内存支持
vm_swap_file:设置虚拟内存的交换文件的路径
vm_max_momery:设置开启虚拟内存后,redis将使用的最大物理内存的大小,默认为0
vm_page_size:设置虚拟内存页的大小
vm_pages:设置交换文件的总的page数量
vm_max_thrrads:设置vm IO同时使用的线程数量
11.卸载redis:
rm -rf /usr/local/redis //删除安装目录
rm -rf /usr/bin/redis-* //删除所有redis相关命令脚本
附加:
Redis 集群搭建
在一台节点上开启6个Redis实例,并且这6个Redis各自有自己的端口。这样的话,相当于模拟出了6台机器了。然后在以这6个实例组建Redis集群
1.获取redis资源(http://redis.io/download)
wget http://download.redis.io/releases/redis-4.0.8.tar.gz
2.解压
tar xzvf redis-4.0.8.tar.gz
解压后,目录为redis-4.0.8
3.安装
cd redis-4.0.8
make
cd src
make install PREFIX=/usr/local/redis-cluster
注意:make编译如果失败,因为没有安装gcc服务
rpm -qa |grep gcc查看安装是否成功
yum install gcc
4.移动配置文件到安装目录下
计划集群中Redis节点的端口号为7001-7006,端口号即集群下各实例文件夹。数据存放在端口号/data文件夹中。
mkdir -p /usr/local/redis-cluster/etc
mkdir -p /usr/local/redis-cluster/700{1,2,3,4,5,6}/data
cp redis-4.0.8/redis.conf /usr/local/redis-cluster/etc
cp redis-4.0.8/redis.conf /usr/local/redis-cluster/7001
cp redis-4.0.8/redis.conf /usr/local/redis-cluster/7002
cp redis-4.0.8/redis.conf /usr/local/redis-cluster/7003
cp redis-4.0.8/redis.conf /usr/local/redis-cluster/7004
cp redis-4.0.8/redis.conf /usr/local/redis-cluster/7005
cp redis-4.0.8/redis.conf /usr/local/redis-cluster/7006
5.配置redis.conf
清空7001-7006目录下的redis.conf配置,重新添加如下配置:
include /usr/local/redis-cluster/etc/redis.conf
port 7001
daemonize yes
bind 192.168.3.243
dir /usr/local/redis-cluster/7001/data/
logfile "/usr/local/redis-cluster/logs/7001.log"
pidfile /var/run/redis_7001.pid
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 15000
dbfilename dump-7001.rdb
appendonly yes
注:
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 15000
注释掉的话,只是一个服务器上开通了6个redis端口而已,即不开启集群。
6.启停redis
启动:
/usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/7001/redis.conf
/usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/7002/redis.conf
/usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/7003/redis.conf
/usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/7004/redis.conf
/usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/7005/redis.conf
/usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/7006/redis.conf
停止:
/usr/local/redis-cluster/bin/redis-cli -h 192.168.3.243 -p 7001 shutdown
pkill redis-server
客户端连接:
/usr/local/redis-cluster/bin/redis-cli -h 192.168.3.243 -p 7001
查看:
ps -ef | grep redis
netstat -ntlp | grep redis
结果如下:
#netstat -ntlp | grep redis
tcp 0 0 192.168.3.243:17001 0.0.0.0:* LISTEN 13950/redis-server
tcp 0 0 192.168.3.243:17002 0.0.0.0:* LISTEN 13967/redis-server
tcp 0 0 192.168.3.243:17003 0.0.0.0:* LISTEN 13972/redis-server
tcp 0 0 192.168.3.243:17004 0.0.0.0:* LISTEN 13974/redis-server
tcp 0 0 192.168.3.243:17005 0.0.0.0:* LISTEN 13979/redis-server
tcp 0 0 192.168.3.243:17006 0.0.0.0:* LISTEN 13987/redis-server
tcp 0 0 192.168.3.243:7001 0.0.0.0:* LISTEN 13950/redis-server
tcp 0 0 192.168.3.243:7002 0.0.0.0:* LISTEN 13967/redis-server
tcp 0 0 192.168.3.243:7003 0.0.0.0:* LISTEN 13972/redis-server
tcp 0 0 192.168.3.243:7004 0.0.0.0:* LISTEN 13974/redis-server
tcp 0 0 192.168.3.243:7005 0.0.0.0:* LISTEN 13979/redis-server
tcp 0 0 192.168.3.243:7006 0.0.0.0:* LISTEN 13987/redis-server
7.创建集群
redis官方提供了redis-trib.rb这个工具,就在解压目录的src目录中
cp redis-4.0.8/src/redis-trib.rb /usr/local/redis-cluster/bin
由于Redis集群需要使用ruby命令,所以我们需要安装ruby和相关接口。
yum -y install ruby ruby-devel rubygems rpm-build
gem install redis (安装redis和ruby的接口)
这里可能会出现这个错误:ERROR: Error installing redis: redis requires Ruby version >= 2.2.2,处理方法见文档最后 问题处理
这才是真正的创建集群
/usr/local/redis-cluster/bin/redis-trib.rb create --replicas 1 192.168.3.243:7001 192.168.3.243:7002 192.168.3.243:7003 192.168.3.243:7004 192.168.3.243:7005 192.168.3.243:7006
[WARNING] Some slaves are in the same host as their master
M: 8493eeca008f83c9a6e2d3a24509f18b0b8c6851 192.168.3.243:7001
slots:0-5460 (5461 slots) master
M: 4a54c721e2b38ee51cdd74f1a896d652c8f23981 192.168.3.243:7002
slots:5461-10922 (5462 slots) master
M: 5bcdfff3911c8991342c8edc36a384f231a102c3 192.168.3.243:7003
slots:10923-16383 (5461 slots) master
S: e743fd8969a2a7f5db687fa51f0e420c8a5c4e7d 192.168.3.243:7004
replicates 5bcdfff3911c8991342c8edc36a384f231a102c3
S: bbea0be24de5230b5f27cb3bf282813c4c2c9177 192.168.3.243:7005
replicates 8493eeca008f83c9a6e2d3a24509f18b0b8c6851
S: f9b69590139b1509a4b76a76a1603581309d9142 192.168.3.243:7006
replicates 4a54c721e2b38ee51cdd74f1a896d652c8f23981
Can I set the above configuration? (type 'yes' to accept): yes
简单解释一下这个命令:调用 ruby 命令来进行创建集群,--replicas 1表示主从复制比例为 1:1,即一个主节点对应一个从节点;然后,默认给我们分配好了每个主节点和对应从节点服务,
以及 solt 的大小,因为在 Redis 集群中有且仅有 16383 个 solt ,默认情况会给我们平均分配,当然你可以指定,后续的增减节点也可以重新分配。
M: 5bcdfff3911c8991342c8edc36a384f231a102c3 为主节点Id
S: e743fd8969a2a7f5db687fa51f0e420c8a5c4e7d 192.168.3.243:7004
replicates 5bcdfff3911c8991342c8edc36a384f231a102c3 从节点下对应主节点Id
验证一下:
依然是通过客户端命令连接上,通过集群命令看一下状态和节点信息等。
/usr/local/redis-cluster/bin/redis-cli -c -h 192.168.3.243 -p 7001
cluster info
cluster nodes
显示如下:
# /usr/local/redis-cluster/bin/redis-cli -c -h 192.168.3.243 -p 7001
192.168.3.243:7001> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:423
cluster_stats_messages_pong_sent:451
cluster_stats_messages_sent:874
cluster_stats_messages_ping_received:446
cluster_stats_messages_pong_received:423
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:874
192.168.3.243:7001> cluster nodes
4a54c721e2b38ee51cdd74f1a896d652c8f23981 192.168.3.243:7002@17002 master - 0 1521701466000 2 connected 5461-10922
e743fd8969a2a7f5db687fa51f0e420c8a5c4e7d 192.168.3.243:7004@17004 slave 5bcdfff3911c8991342c8edc36a384f231a102c3 0 1521701467962 4 connected
f9b69590139b1509a4b76a76a1603581309d9142 192.168.3.243:7006@17006 slave 4a54c721e2b38ee51cdd74f1a896d652c8f23981 0 1521701466000 6 connected
bbea0be24de5230b5f27cb3bf282813c4c2c9177 192.168.3.243:7005@17005 slave 8493eeca008f83c9a6e2d3a24509f18b0b8c6851 0 1521701467000 5 connected
5bcdfff3911c8991342c8edc36a384f231a102c3 192.168.3.243:7003@17003 master - 0 1521701466961 3 connected 10923-16383
8493eeca008f83c9a6e2d3a24509f18b0b8c6851 192.168.3.243:7001@17001 myself,master - 0 1521701465000 1 connected 0-5460
192.168.3.243:7001>
我们已经真的把 Redis 集群搭建部署成功啦!
问题处理
gem install redis命令执行时出现了:
redis requires Ruby version >= 2.2.2的报错,Centos默认支持ruby到2.0.0,可gem 安装redis需要最低是2.2.2
1.安装RVM:
gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
curl -L get.rvm.io | bash -s stable
find / -name rvm -print
source /usr/local/rvm/scripts/rvm
结果如下:
/usr/local/rvm
/usr/local/rvm/src/rvm
/usr/local/rvm/src/rvm/bin/rvm
/usr/local/rvm/src/rvm/lib/rvm
/usr/local/rvm/src/rvm/scripts/rvm
/usr/local/rvm/bin/rvm
/usr/local/rvm/lib/rvm
/usr/local/rvm/scripts/rvm
2.查看rvm库中已知的ruby版本
rvm list known
结果如下:
MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # security released on head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p330]
[ruby-]1.9.3[-p551]
[ruby-]2.0.0[-p648]
[ruby-]2.1[.10]
[ruby-]2.2[.6]
[ruby-]2.3[.3]
[ruby-]2.4[.0]
ruby-head
3.安装一个ruby版本
rvm use 2.3.3
4.使用一个ruby版本
rvm use 2.3.3
5.设置默认版本
rvm use 2.3.3 --default
6.卸载一个已知版本
rvm remove 2.0.0
7.查看ruby版本:
ruby --version
8.安装redis:
gem install redis