1 yum在线安装(单节点)

Redis二进制安装
(0) cd /usr/src 进入下载目录
(1) yum install -y wget gcc make tcl 安装依赖
(2) wget http://download.redis.io/releases/redis-3.2.2.tar.gz 下载源码包
(3) tar -zxvf redis-3.2.2.tar.gz     解压
(4) cd redis-3.2.2    进入redis目录   
(5) make  编译
(6) make test 测试     
测试结果如下,正常
\o/ All tests passed without errors!
Cleanup: may take some time... OK
make[1]: Leaving directory /app/redis-3.2.11/src
(7) make install     
PREFIX未指定目录,默认安装到/usr/local/bin里面了
该目录下生成几个可执行文件
redis-benchmark   性能测试程序
redis-check-aof
redis-check-rdb
redis-cli     客户端可执行程序
redis-server  服务端可执行程序

(8)redis-server 启动redis服务
不加配置文件为默认,一般需加redis.conf

1.1 下载解压

(1)下载redis安装包
#yum -y install wget
#wget http://download.redis.io/releases/redis-5.0.7.tar.gz
当然也可以提前下载
(2)解压并进入目录
#tar -xzvf /redis-5.0.7.tar.gz -C /usr/local/
#cd /usr/local/redis-5.0.7/
(3)yum安装gcc依赖
编译之前需要安装GCC
#yum install --downloadonly --downloaddir=/root -y gcc
#yum install -y *.rpm

# rpm -ivh mpfr-3.1.1-4.el7.x86_64.rpm 
# rpm -ivh libmpc-1.0.1-3.el7.x86_64.rpm
# rpm -ivh cpp-4.8.5-39.el7.x86_64.rpm 
# rpm -ivh libgcc-4.8.5-39.el7.x86_64.rpm --replacefiles
# rpm -ivh libgomp-4.8.5-39.el7.x86_64.rpm --replacefiles
# rpm -ivh glibc-common-2.17-292.el7.x86_64.rpm glibc-2.17-292.el7.x86_64.rpm --replacefiles

# rpm -ivh kernel-headers-3.10.0-1062.el7.x86_64.rpm
# rpm -ivh glibc-headers-2.17-292.el7.x86_64.rpm 
# rpm -ivh glibc-devel-2.17-292.el7.x86_64.rpm 
# rpm -ivh gcc-4.8.5-39.el7.x86_64.rpm

(4)编译安装
#cd /usr/local/redis-5.0.7/
#make
若报错zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory,则使用带参数的make
#make MALLOC=libc
(5)测试编译结果
#make test
提示You need tcl 8.5 or newer in order to run the Redis test
#yum install -y tcl

#rpm -ivh tcl-8.5.13-8.el7.x86_64.rpm
测试完成后显示\o/ All tests passed without errors!
(6)将/usr/local/redis-5.0.7/src目录下的文件加到/usr/local/bin目录
#cd ./src/
#make install
未运行make install之前是不能自动补全redis相关的命令的。

1.2 修改配置文件

(7)修改默认配置文件
#mkdir /usr/local/redis-5.0.7/data
#touch /usr/local/redis-5.0.7/logdata

#cd /usr/local/redis-5.0.7/
#cp redis.conf redis.conf.backup
#vi redis.conf

#外网可访问
#bind 127.0.0.1
protected-mode no
#以后台进程方式启动
daemonize yes
#修改log存放路径
logfile /usr/local/redis-5.0.7/logdata
stop-writes-on-bgsave-error no
#修改AOF及RBD存放路径
dir /usr/local/redis-5.0.7/data

也可以添加密码
requirepass zb123456
注意修改/usr/local/redis-5.0.7/redis.conf文件中的stop-writes-on-bgsave-error为no。
配置参数

(1)daemonize 可设为on|yes
redis默认不是以守护进程bai的方式运行,可以通过该配置项修改,使用yes时,启用守护进程
(2)pidfile默认为/var/run/redis_6379.pid
redis以守护进程方式运行时,系统默认会把pid写入/var/run/redis.pid,可以通过pidfile指定pid文件
(3)port默认为6379
redis默认监听6379端口,可以通过port指定redis要监听的端口。

centos 8 离线安装 ffmpeg centos离线安装make_redis

1.3 开机自启动

(8)把redis服务添加至systemctl管理
#cd /usr/lib/systemd/system
#vi redis.service

[Unit]
Description=redis.server
After=network.target
[Service]
Type=forking
PIDFILE=/var/run/redis_6379.pid
ExecStart=/usr/local/bin/redis-server /usr/local/redis-5.0.7/redis.conf
ExecRepload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

#chmod a+x redis.service
#systemctl daemon-reload
#systemctl start redis.service
#systemctl enable redis#设置开机自启动

(9)防火墙

#开启6379端口
firewall-cmd --zone=public --add-port=6379/tcp --permanent  
#重启防火墙
firewall-cmd --reload

(10)测试使用
#redis-cli
127.0.0.1:6379> set “name” “lucy”
OK
127.0.0.1:6379> get “name”
“lucy”
127.0.0.1:6379> exit

如果有密码
redis 127.0.0.1:6379> auth 123456

1.4 查看命令

ps -ef |grep redis
登录命令
redis-cli    参数(-h -p -u -a) 对应 (ip地址,端口号,用户名,密码)
关闭命令
127.0.0.1:6380> SHUTDOWN
退出命令
127.0.0.1:6379> quit

2 主从模式

一主二仆模式
(1)复制原理
每次从机联通后,都会给主机发送sync指令。
主机立刻进行存盘操作,发送RDB文件,给从机。
从机收到RDB文件后,进行全盘加载。
之后每次主机的写操作,都会立刻发送给从机,从机执行相同的命令。
(2)薪火相传
上一个slave可以是下一个slave的Master,slave同样可以接收其他slaves的连接和同步请求,那么该slave作为了链条中下一个的master, 可以有效减轻master的写压力,去中心化降低风险。
(3)用 slaveof
中途变更转向:会清除之前的数据,重新建立拷贝最新的。
风险是一旦某个slave宕机,后面的slave都没法备份。
(4)反客为主
当一个master宕机后,后面的slave可以立刻升为master,其后面的slave不用做任何修改。
用 slaveof no one 将从机变为主机。

2.1 master节点

#cp -r redis-5.0.7/ redis-5.0.7-1

mkdir -p /usr/local/redis-5.0.7-1/log
mkdir -p /usr/local/redis-5.0.7-1/pid
mkdir -p /usr/local/redis-5.0.7-1/db
编辑配置文件(所有配置文件均为在原来的基础上修改,不需添加)
vi /usr/local/redis-5.0.7-1/redis.conf
#bind 127.0.0.1
protected-mode no
port 6379
daemonize yes
pidfile /usr/local/redis-5.0.7-1/pid/redis.pid
logfile /usr/local/redis-5.0.7-1/log/redis.log
dir /usr/local/redis-5.0.7-1/db

启动
#redis-server /usr/local/redis-5.0.7-1/redis.conf

2.2 slave节点1

修改redis配置文件,添加一行配置“slaveof 10.23.241.202 6379”映射到主节点。

#cp -r redis-5.0.7/ redis-5.0.7-2

mkdir -p /usr/local/redis-5.0.7-2/log
mkdir -p /usr/local/redis-5.0.7-2/pid
mkdir -p /usr/local/redis-5.0.7-2/db
编辑配置文件(所有配置文件均为在原来的基础上修改,不需添加)
vi /usr/local/redis-5.0.7-2/redis.conf
#bind 127.0.0.1
protected-mode no
port 6380
daemonize yes
pidfile /usr/local/redis-5.0.7-2/pid/redis.pid
logfile /usr/local/redis-5.0.7-2/log/redis.log
dir /usr/local/redis-5.0.7-2/db

slaveof 10.23.241.202 6379

启动
#redis-server /usr/local/redis-5.0.7-2/redis.conf

2.3 slave节点2

修改redis配置文件,添加一行配置“slaveof 10.23.241.202 6379”映射到主节点。

#cp -r redis-5.0.7/ redis-5.0.7-3

mkdir -p /usr/local/redis-5.0.7-3/log
mkdir -p /usr/local/redis-5.0.7-3/pid
mkdir -p /usr/local/redis-5.0.7-3/db
编辑配置文件(所有配置文件均为在原来的基础上修改,不需添加)
vi /usr/local/redis-5.0.7-2/redis.conf
#bind 127.0.0.1
protected-mode no
port 6381
daemonize yes
pidfile /usr/local/redis-5.0.7-3/pid/redis.pid
logfile /usr/local/redis-5.0.7-3/log/redis.log
dir /usr/local/redis-5.0.7-3/db

slaveof 10.23.241.202 6379

启动
#redis-server /usr/local/redis-5.0.7-3/redis.conf

2.4 主从验证

启动
#redis-server /usr/local/redis-5.0.7-1/redis.conf主节点
#redis-server /usr/local/redis-5.0.7-2/redis.conf从节点

#redis-cli -p 6379
127.0.0.1:6379> set age 24
127.0.0.1:6379> quit
#redis-cli -p 6380
127.0.0.1:6380> get age

登录主节点redis,set age 24,到从节点直接get age,看到可以get到我们在主节点设置的值24,说明主从配置成功。

127.0.0.1:6381> info replication
role:slave
127.0.0.1:6381> slaveof no one将从机变为主机
127.0.0.1:6381> info replication
role:master
127.0.0.1:6381> slaveof 10.23.241.202 6379恢复为从机

3 哨兵模式

Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自动切换。

Sentinel由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。

Sentinel 也需要集群化,以确保:
某个/些 Sentinel节点挂了,仍然可以实现Redis主从切换;
Redis客户端可以通过任意一个Sentinel读取/写入信息。

3.1 哨兵节点1

#vi /usr/local/redis-5.0.7-1/sentinel.conf

port 26379
daemonize yes
pidfile /usr/local/redis-5.0.7-1/sentinel/redis-sentinel.pid
logfile /usr/local/redis-5.0.7-1/log/redis-sentinel.log
dir /tmp
sentinel monitor mymaster 10.23.241.202 6379 1
# 格式:sentinel <option_name> <master_name> <option_value>
# 最后的一个1代表在sentinel集群中,多少个节点认为master死了,才能真正认为该master不可用

启动
redis-sentinel /usr/local/redis-5.0.7-1/sentinel.conf

查看哨兵
#redis-cli -p 26379
127.0.0.1:26379> info sentinel

3.2 哨兵节点2

#vi /usr/local/redis-5.0.7-2/sentinel.conf

port 26380
daemonize yes
pidfile /usr/local/redis-5.0.7-2/sentinel/redis-sentinel.pid
logfile /usr/local/redis-5.0.7-2/log/redis-sentinel.log
dir /tmp
sentinel monitor mymaster 10.23.241.202 6379 1
# 格式:sentinel <option_name> <master_name> <option_value>
# 最后的一个1代表在sentinel集群中,多少个节点认为master死了,才能真正认为该master不可用

启动
redis-sentinel /usr/local/redis-5.0.7-2/sentinel.conf

3.3 哨兵验证

将6379 shutdown 然后在将6379启动,发现主机为6380 从机为6379、6381

#redis-cli -p 6379
127.0.0.1:6379> info replication
role:master
connected_slaves:2
127.0.0.1:6379>shutdown
#redis-server /usr/local/redis-5.0.7-1/redis.conf


#redis-cli -p 6380
127.0.0.1:6380> info replication
role:master
connected_slaves:2

#redis-cli -p 6381
127.0.0.1:6381> info replication
role:slave
#redis-cli -p 6379
role:slave

反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。
配置哨兵
调整为一主二仆模式
自定义的/myredis目录下新建sentinel.conf文件
在配置文件中填写内容:
sentinel monitor mymaster 127.0.0.1 6379 1

2 问题解决

(1)解决开启redis失败:/var/run/redis_6379.pid exists, process is already running or crashed问题。
解决方案:根据提示信息删除pid文件。