一、部署Redis

整体流程:下载源码,解压,编译,安装,运行

编写脚本安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/bin/bash
set -e

REDIS_SRC=/opt/redis-6.2.14.tar.gz
REDIS_DIR=/opt/redis-6.2.14
REDIS_INSTALL=/usr/local/redis
#install gcc
echo "安装gcc"
yum install -y gcc
#unarchive redis.tar.gz
if [ ! -d "$REDIS_DIR" ];then
tar -zxvf "$REDIS_SRC" -C /opt
fi
#make make install
cd "$REDIS_DIR"
echo '开始编译。。。'
make

if [ $? -ne 0 ];then
exit 1
fi

make install PREFIX="$REDIS_INSTALL"
if [ $? -ne 0 ];then
exit 1
fi

$REDIS_INSTALL/bin/redis-server

ansible自动化部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
---
- name: 部署单节点redis
hosts: serverA
vars:
VERSION: 6.2.14
REDIS_DIR: /var/lib/redis
REDIS_PW: redis123
REDIS_PORT: 6379

tasks:
- name: 下载源码包
command: wget -c -O /opt/{{ VERSION }}.tar.gz https://githubfast.com/redis/redis/archive/refs/tags/{{ VERSION }}.tar.gz
args:
creates: /tmp/download_redis.flag

- name: 标记已下载
file:
path: /tmp/download_redis.flag
state: touch

- name: 解压软件到opt目录下
unarchive:
src: /opt/{{ VERSION }}.tar.gz
dest: /opt/
remote_src: yes

- name: 安装编译依赖包
yum:
name: gcc
state: latest

- name: 编译安装
shell: make -j $(nproc) && make install
args:
chdir: /opt/redis-{{ VERSION }}
creates: /tmp/just_make.flag

- name: 标记已经编译过了
file:
path: /tmp/just_make.flag
state: touch

- name: 模版创建redis配置文件
template:
src: redis.conf.j2
dest: /etc/redis.conf
owner: root
group: root
mode: '0644'

- name: 创建redis组
group:
name: redis
state: present

- name: 创建redis用户
user:
name: "redis"
shell: "/sbin/nologin"
groups: "redis"
state: present
create_home: no

- name: 创建持久化存储目录
file:
path: "{{ REDIS_DIR }}"
state: directory
owner: redis
group: redis
mode: '0755'

- name: 启动redis服务
command: redis-server /etc/redis.conf --user redis
args:
creates: /tmp/start_redis.flag

- name: 服务已经启动过
file:
path: /tmp/start_redis.flag
state: touch

二、基本操作

  • set k1 v1
  • mset k1 v1 k2 v2 … 一次性创建多个键值对
  • setnx k1 v1 增加但不覆盖
  • msetnx k1 v1 k2 v2 …增加多个但不覆盖
  • setex k1 10 v1 设置k1的值10秒清空

  • flushdb 清空当前库的所有数据
  • flushall 清空所有库的数据
  • del k1 … 可删除多个

  • set k1 new_v1 覆盖原来的值
  • setrange k1 4 le 将k1的值从0开始的第二位进行替换成le
  • append k1 haha 追加
  • incr k1 自增1
  • decr k1 自减1

  • select 0~15 redis共有16个库,这是选择库
  • get k1 获取k1的值
  • mget k1 k2 k3 一次性获取多个值
  • getrange k1 4 -1 将k1的值截取从0开始第4位到最后一位打印
  • keys * 获取所有的键
  • ttl k1 查看k1还剩多久过期

三、RDB和AOF

如果两者都开启,系统会使用AOF,并且每次redis启动都会读取知道目录下的aof或者rdb文件

RDB

会fork一个进程进行数据拷贝,首先先把redis中内存的数据同步到临时存放数据区,之后再同步到dump.rdb这个磁盘文件上

优势

  • 文件有压缩,占用磁盘空间小,redis启动快
  • 比较稳定

劣势

  • 他是根据规定时间内的变动进行备份,有数据丢失风险
  • fork的进程会额外占用一份相同的内存空间

AOF

他会实时以日志的方式记录redis的改动,只能追加不能修改文件,appendonly no

优势

  • 数据的持久化和一致性高

劣势

  • 文件无压缩,磁盘空间占用大,redis启动慢
  • 存在个别bug

四、主从模式

1.一主一从

这个模式很简单,只需要在从节点加两行配置就可以

1
2
masterauth redis123 #主的密码
replicaof masterIP port

然后重启服务,进入redis查看info replication 就可以看到信息了

2.一主多从

这个模式是在一主一从的基础上多加几个slave而已,将slave的配置文件加上上面那两行就行

五、哨兵模式sentinel

哨兵模式是在主从的基础上新增的一个服务,他可以单独部署在一台机器上,也可以部署在redis节点上,主从都可以

选主规则

  1. 优先级小的上
  2. 偏移量大的上(数据最多)
  3. runid小的上(redis启动后自动生成,不会相同)

配置过程

  1. 创建配置文件/etc/sentinel.conf,目录可自选

  2. 添加配置内容

    1
    2
    sentinel monitor mymaster IP 6379 1 #mymaster是自定义名字,ip为哨兵部署的主机ip,1为需要多少个哨兵同意,这里只有一台,只能1
    sentinel auth-pass mymaster redis123 #mymaster和上面的对应
  3. 启动哨兵
    redis-sentinel /etc/sentinel.conf

  4. 测试,将主节点关闭服务,就可以看到哨兵模式选新主

六、集群模式

集群至少需要6台(6个redis服务),因资源有限,实验使用三台开6个服务,端口为6379,6380
192.168.146.136 192.168.146.137 192.168.146.138

以下操作若为特别说明,均为三台主机都要操作

  1. 备份redis.conf配置文件,让每个端口单独使用一份配置文件
    1
    2
    cp /etc/redis.conf /etc/redis6379.conf
    cp /etc/redis.conf /etc/redis6380.conf
  2. 将配置文件内的端口修改,并修改dir路径为 /var/lib/redis/{6379,6380}两个,对应的端口改成对应的目录,记得创建这个目录
  3. 创建一个集群目录和配置文件,我这里在加目录下创建
    1
    2
    3
    4
    5
    6
    7
    mkdir ~/redis-cluster
    vim 6379.conf #6380也要创建
    #6379.conf 6380conf都要添加
    include /etc/redis6379.conf
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 15000
  4. 启动服务
    1
    2
    3
    4
    redis-server /root/redis-cluster/6379.conf
    redis-server /root/redis-cluster/6380.conf

    ss -tulpn #查看两个端口是否起来
  5. 启动集群
    redis-cli --cluster create --cluster-replica s 1 192.168.146.136:6379 192.168.146.136:6380 ... #后面几台类推
  6. 验证集群,终端输入redis-cli -c -a redis123, 然后进行创建key就可以看到他会根据key的槽位来对对应的主机进行创建