1. 下载Redis安装包
1
| https://redis.io/download/
|
2. 安装依赖
1
| yum install -y gcc gcc-c++
|
3. 解压并安装redis
1
2
3
4
5
| tar -zxvf redis-7.0.11.tar.gz
cd redis-7.0.11
make
cd src
make install PREFIX=/usr/local/redis
|
4. 整理文件夹
1
2
3
4
5
| cd /usr/local/redis
mkdir bin
mkdir data
mkdir log
mkdir etc
|
5. 迁移常用命令
将原编译目录src路径下的常用命令移动到bin目录下
1
2
| mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-cli \
redis-server redis-sentinel /usr/local/redis/bin/
|
将原编译目录redis.conf、sentinel.conf文件移动到etc路径下
1
2
| mv redis.conf /usr/local/redis/etc
mv sentinel.conf /usr/local/redis/etc
|
6. 修改Redis配置文件
主从复制可以是服务高可用,同时如果数据访问量过大,也可以缓解读取数据压力,能达到高可用,读写分离,服务宕机数据不丢失等目的。实现Redis的主从复制有多种方式,本文采用的是Redis自带的sentinel哨兵机制达到服务高可用及主从复制的目的。根据上面Linux安装单机Redis的步骤,安装三台Redis,如果条件有限也可在一台服务器启动三个不同端口的Redis服务。配置Redis主从很简单,只需要将主机的IP和端口配置到从机的redis.conf文件最后,重启各个从节点的服务,主从复制配置就完成了。
1
2
3
| # 表示允许远程连接
# bind不是针对远程客户端的IP,而是服务器的网卡IP,远程客户端通过服务器的网卡地址来连接Redis
bind 0.0.0.0
|
主节点
1
2
3
4
5
6
7
8
9
10
| vi redis.conf
bind * -::*
daemonize yes # 表明需要在后台运行
logfile "/usr/local/redis/log/redis.log"
masterauth "123456" # 其它Redis视我为master时的验证密码
requirepass "123456" # 本机Redis的登录密码
maxmemory 100mb
dir /usr/local/redis/data
port 6379
|
主哨兵
1
2
3
4
5
6
7
8
9
| vi sentinel.conf
bind 192.168.182.136
daemonize yes
logfile "/usr/local/redis/log/sentinel.log"
sentinel monitor mymaster 192.168.182.136 6379 2
sentinel auth-pass mymaster 123456
port 6479
dir /usr/local/redis/data-sentinel
|
从节点
1
2
3
4
5
6
7
8
9
10
11
12
| vi redis.conf
bind * -::*
daemonize yes
logfile "/usr/local/redis-slave/log/redis.log"
masterauth "123456" # 其它Redis视我为master时的验证密码
requirepass "123456" # 本机Redis的登录密码
maxmemory 100mb
dir /usr/local/redis-slave/data
replicaof 192.168.182.136 6379 # master的IP和Redis端口
port 26379
|
从哨兵
1
2
3
4
5
6
7
8
9
| vi sentinel.conf
bind 192.168.182.136
daemonize yes
logfile "/usr/local/redis-slave/log/sentinel.log"
sentinel monitor mymaster 192.168.182.136 6379 2 # master的IP和Redis端口
sentinel auth-pass mymaster 123456
port 26479
dir /usr/local/redis-slave/data-sentinel
|
7. 启动
1
2
3
4
5
6
7
8
| # 启动主节点
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
# 启动从节点
/usr/local/redis-slave/bin/redis-server /usr/local/redis-slave/etc/redis.conf
# 启动主节点哨兵
/usr/local/redis/bin/redis-sentinel /usr/local/redis/etc/sentinel.conf
# 启动从节点哨兵
/usr/local/redis-slave/bin/redis-sentinel /usr/local/redis-slave/etc/sentinel.conf
|
8. 登录
1
2
3
4
| # 登录主节点
/usr/local/redis/bin/redis-cli -h 192.168.182.136 -p 6379 -a 123456
# 登录从节点
/usr/local/redis/bin/redis-cli -h 192.168.182.136 -p 26379 -a 123456
|
需要认证的输入密码认证,没设置密码可略过
1
2
3
| 192.168.182.136:6379> auth 密码
OK
192.168.182.136:6379>
|
9. 常用命令
1
2
| info replication # 节点信息
CONFIG GET dir # 数据存放位置
|
10. 验证
1
2
3
4
5
6
7
8
9
| # 验证主从复制
# 在主节点添加key,然后登录从节点查看是否复制到了从节点。
# 验证哨兵
# 把master的redis服务停掉
192.168.182.136:6379> shutdown
# 等待5秒后,查看从上的Redis服务是否升级为了master
192.168.182.136:6379> info replication
# 如果结果中的role为master说明主从切换成功
|
11. 其他安全配置
1
2
3
4
5
6
7
8
9
10
11
| # 重命名或者禁用危险的命令
vi redis.conf
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command PEXPIRE ""
rename-command SPOP ""
rename-command SREM ""
rename-command RENAME ""
#rename-command CONFIG ""
#rename-command DEL ""
|
FLUSHDB,FLUSHALL,PEXPIRE,DEL,SPOP,SREM,RENAME命令可能无法使用,则不能清空当前数据库,也不能清空所有数据库,也不能设置键的有效时间,也不能删除键,也不能从集合中随机删除元素,也不能删除集合中的元素,也不能重命名键。
1
2
3
4
| # 开启protected-mode模式
vi redis.conf
protected-mode yes
|
我们想要其他机器连接我们的Redis服务,有三种方式:
- 想办法让Redis运行在protected-mode为no的模式。
- 如果protected-mode为yes,那么我们可以在Redis服务上设置bind,也就是我们的一台机器有几个IP,指定我们的服务绑定监听本机的哪个IP。
- 如果protected-mode为yes,除了设置bind外,亦可通过设置密码的形式,也即是设置参数requirepass,从而达到可以从其他机器访问的目标。