redis安装,集群部署与常见调优

一、安装redis

环境

  • Redis版本 5.0.7
  • 服务器版本 Linux CentOS 7.6 64位

1、下载Redis

进入官网找到下载地址 https://redis.io/download

方式一

通过浏览器下载后,依赖工具将安装包上传至服务器。

方式二

右键Download按钮,选择复制链接。
进入到Xshell控制台(默认当前是root根目录),输入wget 将上面复制的下载链接粘贴上,如下命令:

wget http://download.redis.io/releases/redis-5.0.7.tar.gz

敲入回车键执行后如下图:

等待下载完成。

2、解压并安装Redis

解压

下载完成后需要将压缩文件解压,输入以下命令解压到当前目录

tar -zvxf redis-5.0.7.tar.gz

解压后在根目录上输入ls 列出所有目录会发现与下载redis之前多了一个redis-5.0.7.tar.gz文件和 redis-5.0.7的目录。

移动redis目录

一般都会将redis目录放置到 /usr/local/redis目录,所以这里输入下面命令将目前在/root目录下的redis-5.0.7文件夹更改目录,同时更改文件夹名称为redis。

mv /root/redis-5.0.7 /usr/local/redis

cd 到/usr/local目录下输入ls命令可以查询到当前目录已经多了一个redis子目录,同时/root目录下已经没有redis-5.0.7文件夹

依赖环境

可以进行异地编译,编译好后进行压缩,重新上传会服务器。即可直接跳至安装环节。

安装基本环境gcc,安装命令

yum install gcc-c++

编译

cd到/usr/local/redis目录,输入命令make执行编译命令,接下来控制台会输出各种编译过程中输出的内容。

make

最终运行结果如下:

安装

输入以下命令

make PREFIX=/usr/local/redis install

这里多了一个关键字 PREFIX= 这个关键字的作用是编译的时候用于指定程序存放的路径。比如我们现在就是指定了redis必须存放在/usr/local/redis目录。假设不添加该关键字Linux会将可执行文件存放在/usr/local/bin目录,

库文件会存放在/usr/local/lib目录。配置文件会存放在/usr/local/etc目录。其他的资源文件会存放在usr/local/share目录。这里指定号目录也方便后续的卸载,后续直接rm -rf /usr/local/redis 即可删除redis。

执行结果如下图:

3、启动redis

根据上面的操作已经将redis安装完成了。在目录/usr/local/redis 输入下面命令启动redis

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

上面的启动方式是采取后台进程方式,下面是采取显示启动方式(如在配置文件设置了daemonize属性为yes则跟后台进程方式启动其实一样)。

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

两种方式区别无非是有无带符号&的区别。 redis-server 后面是配置文件,目的是根据该配置文件的配置启动redis服务。redis.conf配置文件允许自定义多个配置文件,通过启动时指定读取哪个即可。

4、关闭redis

输入redis-cli 进入控制台后输入命令shutdown即可关闭运行中的Redis服务了。如下图:

或者通过命令查出进程号再通过kill -9 PID的方式结束进程。

ps -ef|grep redis

二、集群部署

主从哨兵

在部署redis 的时候,如果redis宕机,缓存将不可用,redis提供了哨兵模式保证redis实现高可用。

即一台主机两台从机,三台哨兵主机,如果主实例宕机,哨兵将将一台从机升级为主机。实现高可用。

sentinel 作用

A、Master 状态监测

B、如果Master 异常,则会进行Master-slave 转换,将其中一个Slave作为Master,将之前的Master作为Slave

C、Master-Slave切换后,redis.conf、redis1.conf和redis2.conf,sentinel.conf 的内容都会发生改变,sentinel.conf的监控目标会随之调换

1、配置方法

1.1、IP地址配置如下
192.168.130.1	主机
192.168.130.2	从机
192.168.130.3	从机
# 每一台机器中带一个哨兵
# redis端口默认为6379 哨兵端口默认为26379
1.2、修改redis.conf配置

主机配置

# 所有ip均可访问
bind 0.0.0.0
# 启动端口6379
port 6379
# redis进程是否以守护进程的方式运行,yes为是,no为否(不以守护进程的方式运行会占用一个终端)
protected-mode no
# 是否开启保护模式,默认开启。要是配置里没有指定bind和密码,开启该参数后,redis只会本地进行访问,拒绝外部访问。要是开启了密码和bind,可以开启。否则最好关闭设置为no
daemonize yes
# 日志
logfile ./redis.log
# 设置redis连接密码,如果配置了连接密码,客户端在连接redis是需要通过auth <password>命令提供密码,默认关闭
requirepass 123456
# 当master设置了密码保护时,slave服务连接master的密码(主从配置时,必须要设置此密码)
masterauth 123456

从机配置

# 注意:老版本使用slaveof指定主机的IP和端口,5.0以后的新版本使用replicaof指定主机的IP和端口
bind 0.0.0.0
port 6379
protected-mode no
daemonize yes
logfile ./redis.log
requirepass 123456
masterauth 123456
# 指定当本机为 slave 服务时,设置 master 服务的IP地址及端口,在 redis 启动的时候会自动跟 master 进行数据同步,所以两台从机同样配置。(主从配置时,必须要设置此密码)
slaveof 192.168.130.1 6379 

哨兵配置

哨兵模式需要修改sentinel.conf文件,三台服务器均为此配置

# 端口默认为26379。
port 26379
# 关闭保护模式,可以外部访问。
protected-mode no
# 设置为后台启动。
daemonize yes
# 日志文件。
logfile ./sentinel.log
# 指定主机IP地址和端口(三台配置均为指定主机ip),并且指定当有2台哨兵认为主机宕机,则对主机进行容灾切换。mymaster:设置master名字,必须在其它有用到该名字的命令之前设置
sentinel monitor mymaster 192.168.130.1 6379 2
# 当在Redis实例中开启了requirepass,这里就需要提供密码。
sentinel auth-pass mymaster 123456
# 这里设置了主机多少秒无响应,则认为挂了。此处3秒
sentinel down-after-milliseconds mymaster 3000
# 主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的1。
snetinel parallel-syncs mymaster 1
# 故障转移的超时时间,这里设置为三分钟。
sentinel failover-timeout mymaster 180000

2、启动集群

2.1、设置防火墙,开放端口
查看防火墙是否开启:
systemctl status firewalld

开启防火墙:
systemctl start firewalld

开放端口:
firewall-cmd --add-port=6379/tcp --permanent --zone=public
firewall-cmd --add-port=26379/tcp --permanent --zone=public

#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload

# 关闭防火墙
systemctl stop firewalld
2.2、启动 redis
./redis-server ../redis.conf
2.3、启动哨兵
./redis-sentinel ../sentinel.conf

3、验证

1、主从验证

连接redis

# 主虚拟机1
redis-cli -h 192.168.130.1 -p 6379 -a 123456
# 从虚拟机2
redis-cli -h 192.168.130.2 -p 6379 -a 123456
# 从虚拟机3
redis-cli -h 192.168.130.3 -p 6379 -a 123456

检查状态

# 连接完成后输入命令
info replication
# 主库显示如下,即可算完成(包含两个从库ip地址)
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.130.2,port=6379,state=online,offset=188041,lag=1
slave1:ip=192.168.130.3,port=6379,state=online,offset=188041,lag=1
master_repl_offset:188041
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:188040
# 从库显示如下,即可算完成
# Replication
role:slave
master_host:192.168.130.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:174548
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
2、哨兵验证
redis-cli -p 26379
info sentinel

结果

# Sentinel 
sentinel_masters:
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
mastere0: name=mymaster,status=ok, address=127.0.0.1:6379, slaves=2, sentinels=3

出现slaves=2, sentinels=3即成功

簇集群

1. 创建集群

创建集群存放目录

在usr/local目录下新建redis-cluster目录,用于存放集群节点

mkdir /usr/local/redis-cluster/redis-cluster

复制文件

把redis目录下的bin目录下的所有文件复制到/usr/local/redis-cluster/redis01目录下,不用担心这里没有redis01目录,会自动创建的。操作命令如下(注意当前所在路径):

cp -r redis/bin/ redis-cluster/redis01

删除历史文件

删除dump.rdb文件

rm -rf dump.rdb

修改配置文件

并且修改该目录下的redis.cnf文件,具体修改两处地方:一是端口号修改为7001,二是开启集群创建模式,打开注释即可。

修改端口号为7001,默认是6379

将cluster-enabled yes 的注释打开

创建其他节点配置文件

将redis-cluster/redis01文件复制5份到redis-cluster目录下(redis02-redis06),创建6个redis实例,模拟Redis集群的6个节点。然后将其余5个文件下的redis.conf里面的端口号分别修改为7002-7006。分别如下图所示:
创建redis02-06目录

分别修改redis.conf文件端口号为7002-7006

2.启动

启动节点

接着启动所有redis节点,由于一个一个启动太麻烦了,所以在这里创建一个批量启动redis节点的脚本文件,命令为start-all.sh,文件内容如下:

cd redis01
./redis-server redis.conf
cd ..
cd redis02
./redis-server redis.conf
cd ..
cd redis03
./redis-server redis.conf
cd ..
cd redis04
./redis-server redis.conf
cd ..
cd redis05
./redis-server redis.conf
cd ..
cd redis06
./redis-server redis.conf
cd ..

创建好启动脚本文件之后,需要修改该脚本的权限,使之能够执行,指令如下:

chmod +x start-all.sh

执行start-all.sh脚本,启动6个redis节点

ok,至此6个redis节点启动成功,接下来正式开启搭建集群,以上都是准备条件。大家不觉得图片多看起来冗长所以觉得麻烦,其实以上步骤也就一句话的事情:创建6个redis实例(6个节点)并启动。

启动集群

使用Redis5.0.5的时候:

复制redis01文件夹里面的 redis-cli到redis-cluster文件夹里面,进入redis01文件夹

cd /usr/local/redis-cluster/redis01/
cp redis-cli /usr/local/redis-cluster

启动命令

./redis-cli --cluster create 192.168.1.136:7001 192.168.1.136:7002  192.168.1.136:7003 192.168.1.136:7004 192.168.1.136:7005  192.168.1.136:7006 --cluster-replicas 1

至此,Redi集群搭建成功!大家注意最后一段文字,显示了每个节点所分配的slots(哈希槽),这里总共6个节点,其中3个是从节点,所以3个主节点分别映射了0-5460、5461-10922、10933-16383solts。

3.验证集群

最后连接集群节点,连接任意一个即可:

redis01/redis-cli -p 7001 -c

注意:一定要加上-c,不然节点之间是无法自动跳转的!如下图可以看到,存储的数据(key-value)是均匀分配到不同的节点的:

4.集群命令

加上两条redis集群基本命令:
1.查看当前集群信息

cluster info

2.查看集群里有多少个节点

cluster nodes

三、常见设置

1、配置后台启动

修改 redis.conf

配置文件中的参数:daemonize;

#默认情况下,是no
daemonize yes 

重启redis服务

然后需要重启下redis服务,才能生效

#1、kill掉redis进程
#2、启动redis服务
./redis-server

2、端口修改

修改 redis.conf

配置文件中的参数:port;

#默认是6379
port  0.0.0.0  

重启redis服务

然后需要重启下redis服务,才能生效

#1、kill掉redis进程
#2、启动redis服务
./redis-server

四、性能调优

1、限制内存大小

当 Redis 内存超出物理内存限制时,内存的数据会开始和磁盘产生频繁的交换(swap)。交换会让 Redis 的性能急剧下降,对于访问量比较频繁的 Redis 来说,这样龟速的存取效率基本上等于不可用。

修改 redis.conf

配置文件中的参数:maxmemory;

#默认注释 maxmemory <bytes>
maxmemory 1073741824 

重启redis服务

然后需要重启下redis服务,才能生效

#1、kill掉redis进程
#2、启动redis服务
./redis-server

五、安全设置

1、设置密码

修改 redis.conf

配置文件中的参数:requirepass ,就是配置redis访问密码的参数;

#默认情况下,是注释的
requirepass xxxx;

设置requirepass 密码 如下

重启redis服务

然后需要重启下redis服务,才能生效

#1、kill掉redis进程
#2、启动redis服务
./redis-server

验证密码

[root@server1 bin]# ./redis-cli -p 6379
redis 127.0.0.1:6379> keys *
(error) ERR operation not permitted

发现报错, 操作不被允许

报错原因:因为刚才设置了认证密码requirepass

解决方法:进行auth密码认证

执行如下命令:

auth 刚才设置的密码

执行后如下:

表示认证密码已经成功!

2、限制redis连接IP

修改 redis.conf

配置文件中的参数:bind;

#默认是绑定的127.0.0.1,即只允许本地访问
# 改为 bind 0.0.0.0 就是用来允许任意计算机都可以连接redis服务连接。
# 绑定固定ip 格式: bind  x.x.x.x y.y.y.y
bind  0.0.0.0  

重启redis服务

然后需要重启下redis服务,才能生效

#1、kill掉redis进程
#2、启动redis服务
./redis-server

六、常见排查

1、查看Redis是否正在运行

方式一:采取查看进程方式

ps -aux | grep redis

结果如下图:

方式二:采取端口监听查看方式

netstat -lanp | grep 6379

结果如下图:

2、修复簇集群

进入集群查看集群状态 cluster info
发现节点状态为fail

# 登陆集群   如果集群没有配置密码就不用添加 -a password 参数
redis-cli -c -h 172.30.118.68 -p 7003 -a password
# 查看集群节点状态  
cluster info 
# 检查节点,使用check参数
redis-cli --cluster check 127.0.0.1:7003 -a password  	
# 修复节点  使用fix参数
redis-cli --cluster fix 127.0.0.1:7003 -a passwordxxxxxxxxxx15


检查节点redis-cli --cluster check 127.0.0.1:7003 -a password

[ERR] Not all 16384 slots are covered by nodes. ==》[ERR]并非所有16384个槽位都被节点覆盖。 说明有几个槽点丢失。

重新修复集群redis-cli --cluster fix 127.0.0.1:7003 -a password
中间选择yes

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N4I7vw3K-1658971153451)(D:\Users\ZRZ\Desktop\文档\redis\redis.assets\watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RyZWFtc0FyY2hpdGVjdHM=,size_16,color_FFFFFF,t_70.png)]检查节点redis-cli --cluster check 127.0.0.1:7003 -a password
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lO2MGJo9-1658971153451)(D:\Users\ZRZ\Desktop\文档\redis\redis.assets\watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RyZWFtc0FyY2hpdGVjdHM=,size_16,color_FFFFFF,t_70-16528505154952.png)]
[ERR] Not all 16384 slots are covered by nodes. ==》[ERR]并非所有16384个槽位都被节点覆盖。 说明有几个槽点丢失。

重新修复集群redis-cli --cluster fix 127.0.0.1:7003 -a password
中间选择yes



完成后重新检查

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值