redis部署及常见问题

  • A+
所属分类:日志

统的阅读一本书,完整的学习一套技能,学了很多短时间内使用不到的知识内容,在实战过程中还是经常捉襟见肘。

通过阅读这篇文章,可以很简单的学会部署redis以及解决在部署、使用过程中的常见问题。该文章出自实战,内容及知识点尽量使用通俗的语言来表达出来。redis部署及常见问题

环境准备

redis官网网址:redis.io

配置最大文件打开数

vi /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535

部署redis


一、单节点redis配置

1、关闭防火墙:

systemctl stop firewalld.service                       #停止
firewallsystemctl disable firewalld.service       #禁止firewall开机启动
firewall-cmd --state                                         #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)

 

2、部署过程

安装redis这篇文章会写两种方式,一种是使用下载的redis-5.0.5.tar.gz安装,另一种是使用yum方式安装。

方法一、使用源码包安装

1.1、下载redis,本文以redis5.0.4为例。

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

1.2、安装gcc

yum install -y gcc

1.3、解压redis安装包。

tar xzvf redis-5.0.4.tar.gz

1.4、cd redis目录

cd redis-5.0.4

1.5、make编译

make && make install

方法二、使用yum安装。

yum install -y redis

 

3、配置redis

在单节点上部署redis,在这里写了2种配置的方法,一种使用./install_server.sh脚本。另一种直接编辑redis.conf文件。

方法一:使用./install_server.sh脚本来配置

cd utils
./install_server.sh

备注:

该方法默认配置文件保存在 /etc/redis/6379.conf

方法二:直接编辑redis.conf文件,修改如下几项。

#bind 127.0.0.1                          #绑定redis服务器网卡IP,默认为127.0.0.1,即本地回环地址。这样的话,访问redis服务只能通过本机的客户端连接,而无法通过远程连接。如果bind选项为空的话,那会接受所有来自于可用网络接口的连接,也可以设置为本机Ip地址。
protected-mode no                  #保护模式,默认是开启状态,只允许本地客户端连接daemonize yes #默认情况下 redis 不是作为守护进程运行的,如果你想让它在后台运行,你就把它改成 yes。当redis作为守护进程运行的时候,它会写一个 pid 到 /var/run/redis.pid 文件里面
appendonly yes                        # 默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了。但是redis如果中途宕机,会导致可能有几分钟的数据丢失,根据save来策略进行持久化,Append Only File是另一种持久化方式,可以提供更好的持久化特性。Redis会把每次写入的数据在接收后都写入appendonly.aof文件,每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。
requirepass Aa123456              #设置redis-cli访问密码。

4、启动及关闭redis

使用redis-server直接指定配置文件启动。

/usr/local/bin/redis-server /etc/redis/6379.conf

使用kill命令来关闭redis

ps aux|grep reids
kill -9 (redis pid)

5、使用redis-cli 连接redis

redis-cli -h 10.5.11.91 -a Aa123456

 

二、基于sentinel的高可用redis配置


常见的部署场景需要分布在3台或者更多的服务器上,在这个分享案例中,我们使用3台主机来实现高可用。

1、在每台服务器上均关闭防火墙:

systemctl stop firewalld.service                        #停止
firewallsystemctl disable firewalld.service        #禁止firewall开机启动
firewall-cmd --state                                          #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)

2、在每台服务器上均需要的部署过程

安装redis这篇文章会写两种方式,一种是使用下载的redis-5.0.5.tar.gz安装,另一种是使用yum方式安装。

方法一、使用源码包安装

2.1、下载redis,本文以redis5.0.4为例。

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

2.2、安装gcc

yum install -y gcc

2.3、解压redis安装包。

tar xzvf redis-5.0.4.tar.gz

2.4、cd redis目录

cd redis-5.0.4

2.5、make编译

make && make install

方法二、使用yum安装。

yum install -y redis

3、配置redis

3.1、配置redis主从

使用基于sentinel的高可用需要配置redis主从模式。

主master服务器服务器配置,直接编辑redis.conf文件,修改如下几项。

#bind 127.0.0.1                                       #绑定redis服务器网卡IP,默认为127.0.0.1,即本地回环地址。这样的话,访问redis服务只能通过本机的客户端连接,而无法通过远程连接。如果bind选项为空的话,那会接受所有来自于可用网络接口的连接,也可以设置为本机Ip地址。
protected-mode no                                #保护模式,默认是开启状态,只允许本地客户端连接daemonize yes #默认情况下 redis 不是作为守护进程运行的,如果你想让它在后台运行,你就把它改成 yes。当redis作为守护进程运行的时候,它会写一个 pid 到 /var/run/redis.pid 文件里面
appendonly yes                                      # 默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了。但是redis如果中途宕机,会导致可能有几分钟的数据丢失,根据save来策略进行持久化,Append Only File是另一种持久化方式,可以提供更好的持久化特性。Redis会把每次写入的数据在接收后都写入ppendonly.aof文件,每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。
requirepass Aa123456                           #设置redis-cli访问密码。

从slave服务器服务器配置,直接编辑redis.conf文件,修改如下几项。

#bind 127.0.0.1                                     #绑定redis服务器网卡IP,默认为127.0.0.1,即本地回环地址。这样的话,访问redis服务只能通过本机的客户端连接,而无法通过远程连接。如果bind选项为空的话,那会接受所有来自于可用网络接口的连接,也可以设置为本机Ip地址。
protected-mode no                             #保护模式,默认是开启状态,只允许本地客户端连接daemonize yes #默认情况下 redis 不是作为守护进程运行的,如果你想让它在后台运行,你就把它改成 yes。当redis作为守护进程运行的时候,它会写一个 pid 到 /var/run/redis.pid 文件里面
appendonly yes                                   # 默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了。但是redis如果中途宕机,会导致可能有几分钟的数据丢失,根据save来策略进行持久化,Append Only File是另一种持久化方式,可以提供更好的持久化特性。Redis会把每次写入的数据在接收后都写入appendonly.aof文件,每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。
requirepass Aa123456                         #设置redis-cli访问密码。
slaveof 10.5.35.91 6379                       #Redis主节点IP 端口 
注意:如果主节点有密码需要在从服务器配置中加入masterauth Aa123456 ,(Aa123456为密码自行替换)

3.2、在每台服务器上均需配置sentinel实现高可用

默认情况下sentinel配置文件跟redis.conf在相同的目录,直接使用vi编辑redis-sentinel.conf配置文件,修改如下几项。

bind 10.5.35.91
protected-mode no
sentinel monitor mymaster 10.5.35.91 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 18000
sentinel auth-pass mymaster Aa123456

4、启动及关闭redis

在每台服务器上均需要使用redis-server直接指定配置文件启动。

/usr/local/bin/redis-server /etc/redis/redis.conf

启动sentinel服务

/usr/local/bin/redis-sentinel /etc/redis/redis-sentinel.conf --sentinel

使用kill命令来关闭redis

ps aux|grep reids
kill -9 (redis pid)

5、设置开机启动

echo "/bin/su - app01 -c "/usr/local/bin/redis-server /etc/redis/redis.conf" > /etc/rc.d/rc.local
echo "/bin/su - app01 -c "/usr/local/bin/redis-sentinel /etc/redis/redis-sentinel.conf &" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local

备注:开机启动使用普通用户运行redis以提高安全性,使用普通用户启动redis,请关注/etc/redis目录的权限,需要设置为chmod 775 -R /etc/redis -d 。

6、常用命令

使用redis-cli 连接redis

redis-cli -h 10.5.11.91 -p 6379 -a Aa123456

查看redis主从状态

redis-cli >info replication

基于sentinel的高可用redis配置(二)

在一台服务器上基于sentinel的高可用redis配置。

1、建立多个目录用于存放不同的redis配置文件

mkdir /etc/redis/redis{1..3}

2、redis配置

主master服务器服务器配置,直接编辑redis.conf文件,修改如下几项。

#bind 127.0.0.1                              #绑定redis服务器网卡IP,默认为127.0.0.1,即本地回环地址。这样的话,访问redis服务只能通过本机的客户端连接,而无法通过远程连接。如果bind选项为空的话,那会接受所有来自于可用网络接口的连接,也可以设置为本机Ip地址。
protected-mode no                       #保护模式,默认是开启状态,只允许本地客户端连接daemonize yes #默认情况下 redis 不是作为守护进程运行的,如果你想让它在后台运行,你就把它改成 yes。当redis作为守护进程运行的时候,它会写一个 pid 到 /var/run/redis.pid 文件里面
appendonly yes                              # 默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了。但是redis如果中途宕机,会导致可能有几分钟的数据丢失,根据save来策略进行持久化,Append Only File是另一种持久化方式,可以提供更好的持久化特性。Redis会把每次写入的数据在接收后都写入appendonly.aof文件,每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。
requirepass Aa123456                     #设置redis-cli访问密码。
port 6379
pidfile "/var/run/redis_6379.pid"
logfile "/etc/redis/logs/redis-6379.log"
dir "/etc/redis/redis/db"
dbfilename "6379dump.rdb"

从slave服务器服务器配置,直接编辑redis.conf文件,修改如下几项。

#bind 127.0.0.1                              #绑定redis服务器网卡IP,默认为127.0.0.1,即本地回环地址。这样的话,访问redis服务只能通过本机的客户端连接,而无法通过远程连接。如果bind选项为空的话,那会接受所有来自于可用网络接口的连接,也可以设置为本机Ip地址。
protected-mode no                      #保护模式,默认是开启状态,只允许本地客户端连接daemonize yes #默认情况下 redis 不是作为守护进程运行的,如果你想让它在后台运行,你就把它改成 yes。当redis作为守护进程运行的时候,它会写一个 pid 到 /var/run/redis.pid 文件里面
appendonly yes                           # 默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了。但是redis如果中途宕机,会导致可能有几分钟的数据丢失,根据save来策略进行持久化,Append Only File是另一种持久化方式,可以提供更好的持久化特性。Redis会把每次写入的数据在接收后都写入appendonly.aof文件,每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。
requirepass Aa123456                #设置redis-cli访问密码。
port 6380
pidfile "/var/run/redis_6380.pid"
logfile "/etc/redis/logs/redis-6380.log"
dir "/etc/redis/redis/db"
dbfilename "6380dump.rdb"
slaveof 10.5.35.91 6379              #Redis主节点IP 端口
注意:
1,如果主节点有密码需要在从服务器配置中加入masterauth Aa123456 ,(Aa123456为密码自行替换)
2,pidfile、port、logfile、dbfilename等,在每个配置文件中需要设置不同的目录

直接使用vi编辑redis-sentinel.conf配置文件,修改如下几项。

bind 10.5.35.91
protected-mode no
sentinel monitor mymaster 10.5.35.91 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 18000
sentinel auth-pass mymaster Aa123456
port 26380
logfile "/etc/redis/logs/26380-sentinel.log"

设置开机启动

/bin/su - app01 -c "redis-server /etc/redis/redis.conf "
/bin/su - app01 -c "redis-server /etc/redis/redis2.conf"
/bin/su - app01 -c "redis-server /etc/redis/redis3.conf"
/bin/su - app01 -c "redis-sentinel /etc/redis/redis-sentinel.conf --sentinel &"
/bin/su - app01 -c "redis-sentinel /etc/redis/redis2-sentinel.conf --sentinel &"
/bin/su - app01 -c "redis-sentinel /etc/redis/redis3-sentinel.conf --sentinel &"
chmod +x /etc/rc.d/rc.local

备注:开机启动使用普通用户运行redis以提高安全性,使用普通用户启动redis,请关注/etc/redis目录的权限,需要设置为chmod 775 -R /etc/redis -d 。

三、基于cluster的集群模式redis配置

这篇文章使用的为一台服务器上搭建6个节点的集群。6台机器的部署方式大同小异。

1、关闭防火墙:

systemctl stop firewalld.service                            #停止firewall
systemctl disable firewalld.service                       #禁止firewall开机启动
firewall-cmd --state                                             #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)

2、部署过程

安装redis这篇文章会写两种方式,一种是使用下载的redis-5.0.5.tar.gz安装,另一种是使用yum方式安装。

方法一、使用源码包安装

1.1、下载redis,本文以redis5.0.4为例。

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

1.2、安装gcc

yum install -y gcc

1.3、解压redis安装包。

tar xzvf redis-5.0.4.tar.gz

1.4、cd redis目录

cd redis-5.0.4

1.5、make编译

make && make install

方法二、使用yum安装。

yum install -y redis

 

3、配置redis

3.1、创建配置文件目录,6个redis配置文件不能再相同的目录

mkdir -p /etc/redis/redis{1...6}

3.1、配置文件内容

port 7001                                                             #端口 
cluster-enabled yes                                             #启用集群模式
cluster-config-file /etc/redis/redis2/nodes.conf
cluster-node-timeout 5000                                 #超时时间 
appendonly yesdaemonize yes                           #后台运行 
protected-mode no                                             #非保护模式 
pidfile /etc/redis/redis1/redis_7001.pid              #此处注意路径的权限,可以普通用户启动关闭集群。
logfile /etc/redis/redis2/redis2.log
dir /etc/redis/redis2/
其中 port 和 pidfile 需要随着 文件夹的不同调增

3.2、启动节点

redis-server /etc/redis/redis1/redis1.conf
redis-server /etc/redis/redis2/redis2.conf
redis-server /etc/redis/redis3/redis3.conf
redis-server /etc/redis/redis4/redis4.conf
redis-server /etc/redis/redis5/redis5.conf
redis-server /etc/redis/redis6/redis6.conf

3.3、创建cluster集群

redis-cli --cluster create 10.5.11.21:7001 10.5.11.21:7002 10.5.11.21:7003 10.5.11.21:7004 10.5.11.21:7005 10.5.11.21:7006 --cluster-replicas 1

 

4、启动及关闭redis集群

编辑在安装目录下,/root/redis-5.0.4/utils/create-cluster/create-cluster文件

vi create-cluster

PORT=7000
NODES=6

关闭集群命令

./create-cluster stop
Stopping 7001
...
Stopping 7006

启动集群命令

./create-cluster start
Starting 7001
...
Starting 7006

5、设置开机启动

echo "/bin/su - app01 -c "/usr/local/bin/redis-server /etc/redis/redis1/redis1.conf" >> /etc/rc.d/rc.local
echo "/bin/su - app01 -c "/usr/local/bin/redis-server /etc/redis/redis2/redis2.conf" >> /etc/rc.d/rc.local
echo "/bin/su - app01 -c "/usr/local/bin/redis-server /etc/redis/redis3/redis3.conf" >> /etc/rc.d/rc.local
echo "/bin/su - app01 -c "/usr/local/bin/redis-server /etc/redis/redis4/redis4.conf" >> /etc/rc.d/rc.local
echo "/bin/su - app01 -c "/usr/local/bin/redis-server /etc/redis/redis5/redis5.conf" >> /etc/rc.d/rc.local
echo "/bin/su - app01 -c "/usr/local/bin/redis-server /etc/redis/redis6/redis6.conf" >> /etc/rc.d/rc.local

扩展阅读:


一. 如何初始化redis的密码?

总共2个步骤:

a.在配置文件中有个参数: requirepass  这个就是配置redis访问密码的参数。

requirepass test123

b.配置文件中参数生效需要重启重启redis 。

二.不重启redis如何配置密码?

a. 在配置文件中配置requirepass的密码(当redis重启时密码依然有效)。

# requirepass foobared

b. 进入redis重定义参数

查看当前的密码:

# ./src/redis-cli -p 6379
redis 127.0.0.1:6379> config get requirepass
1) "requirepass"
2) (nil)

显示密码是空的,

然后设置密码:

redis 127.0.0.1:6379> config set requirepass test123
OK

再次查询密码:

redis 127.0.0.1:6379> config get requirepass
(error) ERR operation not permitted

此时报错了!

现在只需要密码认证就可以了。

redis 127.0.0.1:6379> auth test123
OK

再次查询密码:

redis 127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "test123"

密码已经得到修改。当到了可以重启redis的时候 由于配置参数已经修改 所以密码会自动生效。要是配置参数没添加密码 那么redis重启 密码将相当于没有设置。

 三. master 有密码,slave 如何配置?

当master 有密码的时候 配置slave 的时候 相应的密码参数也得相应的配置好。不然slave 是无法进行正常复制的。使用:masterauth  mstpassword

weinxin
生保博客
一个运维工程师的自媒体个人博客网站。也是关注IT技术学习和经验分享的原创独立自媒体个人博客。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: