Redis配置

安装Redis

准备

1
yum install -y gcc make wget tcl  net-tools

创建目录

1
mkdir -p /bigdata/redis

解压安装

1
2
3
4
5
6
cd  /bigdata
tar -zxvf redis-5.0.4.tar.gz

[root@hadoop2 bigdata]# ls
redis-5.0.4 redis-5.0.4.tar.gz
cd redis-5.0.4

PREFIX 指定安装路径

1
make PREFIX=/bigdata/redis install

Redis单机

创建数据文件

1
2
3
4
mkdir -p /bigdata/redis/data 
mkdir -p /bigdata/redis/pid
mkdir -p /bigdata/redis/logs
mkdir -p /bigdata/redis/conf

复制配置文件

1
2
3
[root@redis redis]# pwd
/root/redis
[root@redis redis]# cp redis.conf /bigdata/redis/conf/

修改配置文件

1
vi redis.conf

主要修改以下配置项

1
2
3
4
5
protected-mode no
daemonize yes # 以守护进程方式运行
pidfile /bigdata/redis/pid/redis.pid # PID文件位置
logfile /bigdata/redis/logs/redis.log # 日志文件位置
dir /bigdata/redis/data/ # 数据目录

如果需要远程访问,注释掉下面这行

1
bind 127.0.0.1

启动: 单机模式

1
2
3
4
[root@hadoop1 redis]# bin/redis-server conf/redis.conf
[root@hadoop2 redis]# ps -ef | grep redis
root 71892 1 0 11:04 ? 00:00:00 bin/redis-server *:6379
root 72109 21049 0 11:04 pts/2 00:00:00 grep --color=auto redis

测试是否成功

1
bin/redis-cli ping

如果返回 PONG 表示安装成功。

关闭服务

1
bin/redis-cli shutdown

配置 Redis 服务

注意

如果要做哨兵集群或者完全集群,没必要配置 Redis 服务,可以在文件夹路径下写 shell 脚本来管理。

创建服务文件

1
2
touch /etc/systemd/system/redis.service
vi /etc/systemd/system/redis.service

粘贴以下内容

根据实际路径调整:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Unit]
Description=Redis In-Memory Data Store
After=network.target

[Service]
Type=forking
ExecStart=/bigdata/redis/bin/redis-server /bigdata/redis/conf/redis.conf
ExecStop=/bigdata/redis/bin/redis-cli shutdown
PIDFile=/bigdata/redis/pid/redis.pid
Restart=on-failure
User=root
Group=root

[Install]
WantedBy=multi-user.target

重新加载 Systemd 并启动

重新加载配置

1
systemctl daemon-reload

启动 Redis

1
systemctl start redis

设置开机自启

1
systemctl enable redis

检查状态

1
systemctl status redis

正常状态应显示 active (running)。

验证

检查 Redis 进程

1
ps -ef | grep redis

测试连接

1
/bigdata/redis/bin/redis-cli ping

集群—主从

一主多从

最低: 1 写 3 读

主从,(高可用) 确保 宕机的时候 ,其中一个 上线状态转移成 写

为什么要3个, 因为只有2个没有办法做选举 ,造成 脑裂

清理之前的内容

1
2
3
4
5
6
7
8
9
10
11
12
[root@redis redis]# pwd
/bigdata/redis
[root@redis redis]# rm -fr data/* logs/* pid/*
[root@redis redis]# ll data/ logs/ pid/
data/:
总用量 0

logs/:
总用量 0

pid/:
总用量 0

复制

1
2
3
4
5
6
[root@redis redis]# cd ..
[root@redis bigdata]# mkdir sentinel
[root@redis bigdata]# cp -r redis master
[root@redis bigdata]# cp -r master slave2
[root@redis bigdata]# cp -r master slave3
[root@redis bigdata]# cp -r master slave4

修改参数

通用

1
2
3
4
port  7001 ~ 7004 
pidfile
logfile
dir

非通用参数

1
2
# replicaof <masterip> <masterport>
replicaof 127.0.0.1 7002 ~ 7004

路径(非通用参数)

master : 7001 :

1
/bigdata/sentinel/master

replication: 7002 ~ 7004

1
/bigdata/sentinel/slave2 /bigdata/sentinel/slave3 /bigdata/sentinel/slave4

添加脚本

1
2
3
4
[root@redisMaster sentinel]# pwd
/bigdata/sentinel
[root@redisMaster sentinel]# touch start.sh
[root@redisMaster sentinel]# touch stop.sh

start.sh

1
2
3
4
5
6
7
8
9
#!/bin/bash

# 启动 Redis 实例
master/bin/redis-server master/conf/redis.conf &
slave2/bin/redis-server slave2/conf/redis.conf &
slave3/bin/redis-server slave3/conf/redis.conf &
slave4/bin/redis-server slave4/conf/redis.conf &

echo "Redis 实例已启动"

stop.sh

1
2
3
4
master/bin/redis-cli -p 7001 shutdown
master/bin/redis-cli -p 7002 shutdown
master/bin/redis-cli -p 7003 shutdown
master/bin/redis-cli -p 7004 shutdown

注意

常见错误

脚本文件包含 Windows 换行符(\r\n,而 Linux 系统只接受 Unix 换行符(\n

解决方案
1
[root@redisMaster sentinel]# vim/vi start.sh

在 vim/vi 中执行

1
2
:set ff=unix 
:wq
执行
1
2
3
4
5
[root@redis sentinel]# chmod 755 start.sh
[root@redis sentinel]# chmod 755 stop.sh

[root@redis sentinel]# ./start.sh
[root@redis sentinel]# ./stop.sh

手动选举

如果 master 宕机 , 可以从 salve 2 3 4 中选举一台,手动设置成 master, 假设是salve 3(7003)

1
2
[root@redis sentinel]# cd master
[root@redis master]# bin/redis-cli -h localhost -p 7003

进入后在 7003 节点的redis中执行 replicaof no one 即可

1
2
7003   :  replicaof no one 
7002 7004 : replicaof 127.0.0.1 7003

哨兵集群

概念

通过哨兵(工具 )实现主从,而无需自己手动选举

  1. 监控 master 什么时候宕机
  2. 故障转移 当 master 宕机的时候,设置新的 master

配置

从解压的redis 包中找到 sentinel.conf

1
2
3
4
5
6
daemonize yes
pidfile "/bigdata/sentinel/redis-sentinel.pid"
logfile "/bigdata/sentinel/redis-sentinel.log"
sentinel monitor mymaster 127.0.0.1 7001 1
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000

启动

1
master/bin/redis-sentinel sentinel.conf

实验

关闭 7001 发现 7004 转成 master 了

注意:此时

1
2
3
sentinel monitor mymaster 127.0.0.1 7001 1
转为了
sentinel monitor mymaster 127.0.0.1 7004 1

缺点:只有一个写, 写瓶颈

完全集群

概念

cluster

3主 3 从 (最低三从),必须是奇数个服务器 ,防止脑裂

解析

配置

配置文件要修改的

1
2
3
4
port  8001-8006
pidfile
logfile
dir

集群

1
2
cluster-enabled  yes
cluster-config-file nodes(port).conf

每个文件都要修改6项内容

启动

建立集群同时指定 集群的 master 和 slave

1
2
3
4
5
6
7
8
redis1/bin/redis-cli --cluster create \
127.0.0.1:8001 \
127.0.0.1:8002 \
127.0.0.1:8003 \
127.0.0.1:8004 \
127.0.0.1:8005 \
127.0.0.1:8006 \
--cluster-replicas 1

启动的时候 yes

默认前三个是主,后三个是从

启动脚本

1
2
3
4
5
6
redis1/bin/redis-server redis1/conf/redis.conf
redis2/bin/redis-server redis2/conf/redis.conf
redis3/bin/redis-server redis3/conf/redis.conf
redis4/bin/redis-server redis4/conf/redis.conf
redis5/bin/redis-server redis5/conf/redis.conf
redis6/bin/redis-server redis6/conf/redis.conf

停止脚本

1
2
3
4
5
6
redis1/bin/redis-cli -p 8001  shutdown
redis1/bin/redis-cli -p 8002 shutdown
redis1/bin/redis-cli -p 8003 shutdown
redis1/bin/redis-cli -p 8004 shutdown
redis1/bin/redis-cli -p 8005 shutdown
redis1/bin/redis-cli -p 8006 shutdown

连接

访问集群:记住加 -c,以集群的方式连接

1
redis1/bin/redis-cli -c -p 8001
1
2
3
4
5
6
7
127.0.0.1:8001> set name admin
-> Redirected to slot [5798] located at 127.0.0.1:8002
OK
127.0.0.1:8002> set age 20
-> Redirected to slot [741] located at 127.0.0.1:8001
OK
127.0.0.1:8001>

单机和集群的区别

单机模式下有16个索引,集群模式下没有索引,只有一个默认的。