0%

Redis安装

Docker安装单机

1
2
3
4
5
6
7
8
docker run \
-p 6379:6379 \
--name myredis \
-v $PWD/redis.conf:/etc/redis/redis.conf \
-v $PWD/data:/data \
-d redis:3.2 redis-server /etc/redis/redis.conf \
--restart=always \
--appendonly yes

命令说明:

  • --name myredis : 指定容器名称,这个最好加上,不然在看docker进程的时候会很尴尬。
  • -p 6699:6379 : 端口映射,默认redis启动的是6379,外部端口(6699)。
  • -v $PWD/redis.conf:/etc/redis/redis.conf : 将主机中当前目录下的redis.conf配置文件映射。
  • -v $PWD/data:/data -d redis:latest: 将主机中当前目录下的data挂载到容器的/data
  • --redis-server --appendonly yes :在容器执行redis-server启动命令,并打开redis持久化配置
  • --restart=always:自动启动
  • 注意事项:
    • 如果不需要指定配置,-v $PWD/redis.conf:/etc/redis/redis.conf 可以不用
    • redis-server 后面的那段 /etc/redis/redis.conf 也可以不用。
    • $PWD 在window系统下貌似不能用,可以用相对路径/

客户端连接

1
2
3
4
# 先查询到myredis容器的ip地址。
docker inspect myredis | grep IP
# 连接到redis容器。然后就进入redis命令行了。
docker run -it redis:latest redis-cli -h 192.168.42.32

源码安装单机

centos下安装

1
2
3
4
5
6
7
8
9
10
# 安装需要的软件
yum -y install gcc gcc-c++ kernel-devel make

# 下载redis
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
tar -zxvf redis-5.0.5.tar.gz
cd redis-5.0.5

# 安装redis
make && make instal

注意make的时候可能会报错,

1
2
yum install gcc
make MALLOC=libc

开机启动

启动脚本 redis_init_script 位于位于Redis/utils/ 目录下。

大致浏览下该启动脚本,发现redis习惯性用监听的端口名作为配置文件等命名,我们后面也遵循这个约定。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# redis服务器监听的端口
REDISPORT=6379

# 服务端所处位置,在make install后默认存放与`/usr/local/bin/redis-server`,如果未make install则需要修改该路径,下同。
EXEC=/usr/local/bin/redis-server

# 客户端位置
CLIEXEC=/usr/local/bin/redis-cli

# Redis的PID文件位置
PIDFILE=/var/run/redis_${REDISPORT}.pid

#配置文件位置,需要修改
CONF="/etc/redis/${REDISPORT}.conf"

根据启动脚本要求,将修改好的配置文件以端口为名复制一份到指定目录。需使用root用户。

1
2
mkdir /etc/redis
cp redis.conf /etc/redis/6379.conf

将启动脚本复制到/etc/init.d目录下,本例将启动脚本命名为redisd(通常都以d结尾表示是后台自启动服务)

1
cp redis_init_script /etc/init.d/redisd

设置为开机自启动
此处直接配置开启自启动 chkconfig redisd on 将报错误: service redisd does not support chkconfig

1
2
3
4
#!/bin/sh
# chkconfig: 2345 90 10
# description: Redis is a persistent key-value database
#

再设置即可成功。

1
2
3
4
5
6
#设置为开机自启动服务器
chkconfig redisd on
#打开服务
service redisd start
#关闭服务
service redisd stop

添加到PATH

由于redis-cli命令没有设置到PATH中,每次想使用时,都需要执行find命令去找这个命令在哪里

1
# find / -name redis-cli

找到之后, 再执行命令, 这样实在太麻烦

解决方案:

redis-cli命令配置到PATH中,这样每次使用时,就像ls这种命令一样不加路径执行

1
# vi ~/.bash_profile

redis-cli命令路径配置到PATH

1
PATH=$PATH:$HOME/bin:/usr/local/redis-3.2.8/src/

保存之后, 使用source命令使之生效

1
# source ~/.bash_profile

源码安装集群Redis-cluster

1.配置

用一台虚拟机模拟6个节点,创建出3 master、3 salve 环境。

2.下载,解压,编译安装

3.创建节点,在worker1

创建文件

1
2
3
4
5
6
7
8
9
10
11
12
cd /usr/local
mkdir redis_cluster
cd redis_cluster
mkdir 7000
mkdir 7001
mkdir 7002
cp /usr/local/redis-5.0.5/redis.conf /usr/local/redis_cluster/7000/
cp /usr/local/redis-5.0.5/redis.conf /usr/local/redis_cluster/7001/
cp /usr/local/redis-5.0.5/redis.conf /usr/local/redis_cluster/7002/
cp /usr/local/redis-5.0.5/redis.conf /usr/local/redis_cluster/7003/
cp /usr/local/redis-5.0.5/redis.conf /usr/local/redis_cluster/7004/
cp /usr/local/redis-5.0.5/redis.conf /usr/local/redis_cluster/7005/

分别修改三个文件夹里的配置文件,修改如下内容

1
2
3
4
5
6
7
8
port  7000      //端口7000,7002,7003,7004,7005,7001
bind 0.0.0.0 //自己建议修改为0.0.0.0
daemonize yes //redis后台运行
pidfile /var/run/redis_7000.pid //pidfile文件对应7000,7001,7002
cluster-enabled yes //开启集群 把注释#去掉
cluster-config-file nodes_7000.conf //集群的配置,配置文件首次启动自动生成7000,7001,7002
cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置
appendonly yes //aof日志开启

启动节点的redis
/usr/local/bin/redis-server 这是在make & make install生成的

1
2
3
4
5
6
/usr/local/bin/redis-server redis_cluster/7000/redis.conf
/usr/local/bin/redis-server redis_cluster/7001/redis.conf
/usr/local/bin/redis-server redis_cluster/7002/redis.conf
/usr/local/bin/redis-server redis_cluster/7003/redis.conf
/usr/local/bin/redis-server redis_cluster/7002/redis.conf
/usr/local/bin/redis-server redis_cluster/7002/redis.conf

检查 redis 启动情况

1
2
3
4
5
6
7
ps -ef | grep redi
root 61020 1 0 02:14 ? 00:00:01 redis-server 0.0.0.0:7000 [cluster]
root 61024 1 0 02:14 ? 00:00:01 redis-server 0.0.0.0:7001 [cluster]
root 61029 1 0 02:14 ? 00:00:01 redis-server 0.0.0.0:7002 [cluster]
root 61029 1 0 02:14 ? 00:00:01 redis-server 0.0.0.0:7002 [cluster]
root 61029 1 0 02:14 ? 00:00:01 redis-server 0.0.0.0:7002 [cluster]
root 61029 1 0 02:14 ? 00:00:01 redis-server 0.0.0.0:7002 [cluster]

4.再在worker2 上做相同的操作

5.启动集群

装的redis是5.x的版本,这里没有应用到redis-trib.rb,所以就不需要装ruby

1
2
cd /usr/local/bin
redis-cli --cluster create 192.168.0.100:7003 192.168.0.100:7004 192.168.0.100:7005 192.168.0.179:7000 192.168.0.179:7001 192.168.0.179:7002 --cluster-replicas 1

遇到

1
Can I set the above configuration? (type 'yes' to accept): yes

如数yes

6.校验,等运行完成

redis-cli --cluster check 192.168.0.179:7000

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
[root@worker1 src]# redis-cli --cluster check 192.168.0.179:7000
192.168.0.179:7000 (27bce53b...) -> 0 keys | 5462 slots | 1 slaves.
192.168.0.100:7004 (6b0173d9...) -> 0 keys | 5461 slots | 1 slaves.
192.168.0.100:7003 (9f15a932...) -> 0 keys | 5461 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.0.179:7000)
M: 27bce53bda92341ca4a5c82c2361ab99f24c0b27 192.168.0.179:7000
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: c7ebcd900fb7d9afb1980797acba45518cb7d877 192.168.0.100:7005
slots: (0 slots) slave
replicates 27bce53bda92341ca4a5c82c2361ab99f24c0b27
S: ed5256f8db1bf556a8dadbe8f2b07699507e17d9 192.168.0.179:7001
slots: (0 slots) slave
replicates 6b0173d925f70807a9081b7bc09bcd37be857342
S: 758609eaea88bac25b864f2badbab2171a68089b 192.168.0.179:7002
slots: (0 slots) slave
replicates 9f15a9329a9d0ec5c7fcb5abbba817730f0942f9
M: 6b0173d925f70807a9081b7bc09bcd37be857342 192.168.0.100:7004
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
M: 9f15a9329a9d0ec5c7fcb5abbba817730f0942f9 192.168.0.100:7003
slots:[0-5460] (5461 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

7.主机上下线

8.Cluster配置

1
2
3
4
5
6
7
8
9
10
11
12

# 设置加入cluster,成为其中的节点
cluster-enabled yes|no

# cluster配置文件名,该文件属于自动生成,仅用于快速查找文件并查询文件内容
cluster-config-file < filename>

# 节点服务响应超时时间,用于判定该节点是否下线或切换为从节点
cluster-node-timeout < milliseconds>

# master连接的slave最小数量
cluster-migration-barrier < count>

9.Cluster节点操作命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 查看集群节点信息
cluster nodes

# 进入一个从节点redis,切换其主节点
cluster replication < master-id>

# 发现一个新节点,新增主节点
cluster meet ip:port

# 忽略一个没有solt的节点
cluster forget

# 手动故障转移
cluster failover

源码安装主从

看着已经要过时了,不搞了