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要监听的端口。
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文件。