Redis安装
# Redis安装
# 一、前言
这篇文章主要记录redis安装相关的内容,包括 单点模式安装
、哨兵模式安装
、集群模式安装
,如果想了解Redis集群高可用相关原理,可以去看我另外一篇文章:Redis高可用
# 二、安装前准备
# 通过源码安装
下载redis,可以去官网下载更多版本,http://download.redis.io/releases/ (opens new window)
#创建redis的安装目录并进入文件夹 mkdir /usr/local/software/redis-5.0.12 && cd $_ #下载redis wget http://download.redis.io/releases/redis-5.0.12.tar.gz
1
2
3
4安装gcc ,redis依赖gcc
yum install gcc
1解压编译
tar -xzvf redis-5.0.12.tar.gz cd redis-5.0.12 make
1
2
3由于某种原因,若第一次编译失败,可清理后再编译(make distclean && make)
修改
redis.conf
配置daemonize yes #后台启动 protected‐mode no #关闭保护模式,开启的话,只有本机才可以访问redis # 需要注释掉bind #bind 127.0.0.1(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通 过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可)
1
2
3
4
5
# 三、Standalone模式搭建
创建配置文件目录,拷贝配置文件
mkdir /usr/local/redis-cluster/6379 cp /usr/local/software/redis-5.0.12/redis.conf /usr/local/redis-cluster/6379
1
2修改配置
daemonize yes #后台启动 protected‐mode no #关闭保护模式,开启的话,只有本机才可以访问redis # 需要注释掉bind # bind 127.0.0.1(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通 过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可) port 6379 pidfile /var/run/redis_6379.pid # 把pid进程号写入pidfile配置的文件 logfile "6379.log" dir /usr/local/redis-cluster/6379 # 指定数据存放目录
1
2
3
4
5
6
7
8
9
10启动服务
/usr/local/software/redis-5.0.12/src/redis-server /usr/local/redis-cluster/6379/redis.conf
1其它相关
# 验证启动是否成功 ps ‐ef | grep redis # 进入redis客户端 src/redis‐cli # 远程连接redis服务端(远程连接需要开放对应端口,也可以选择关闭防火墙) redis-cli -h hostname -p port # 退出客户端 quit
1
2
3
4
5
6
7
8
9
10
11
# 四、主从架构搭建
一主(6379)两从(6380、6381)搭建过程如下:
复制一份
redis.conf
文件cp -r /usr/local/redis-cluster/6379 /usr/local/redis-cluster/6380 cp -r /usr/local/redis-cluster/6379 /usr/local/redis-cluster/6381
1
2将
redis.conf
相关配置修改为如下值port 6380 pidfile /var/run/redis_6380.pid # 把pid进程号写入pidfile配置的文件 logfile "6380.log" dir /usr/local/redis-cluster/6380 # 指定数据存放目录 # 也可以通过全局查找替换 vi /usr/local/redis-cluster/6380/redis.conf :%s/6379/6380/g vi /usr/local/redis-cluster/6381/redis.conf :%s/6379/6381/g
1
2
3
4
5
6
7
8
9
10配置主从复制,两个从的配置文件都要配置
replicaof 10.66.50.80 6379 # 从本机6379的redis实例复制数据,Redis 5.0之前使用slaveof replica-read-only yes # 配置从节点只读
1
2启动从节点
/usr/local/software/redis-5.0.12/src/redis-server /usr/local/redis-cluster/6380/redis.conf /usr/local/software/redis-5.0.12/src/redis-server /usr/local/redis-cluster/6381/redis.conf
1
2测试验证
#连接从节点 /usr/local/software/redis-5.0.12/src/redis-cli -p 6379 #测试在6379实例上写数据,6380、6381实例是否能及时同步新修改数据 /usr/local/software/redis-5.0.12/src/redis-cli -p 6380 /usr/local/software/redis-5.0.12/src/redis-cli -p 6381
1
2
3
4
5
6
# 五、Sentinel架构搭建
参考文档:High availability with Redis Sentinel (opens new window)
完成主从架构搭建后,随后可进行Sentinel架构搭建
复制一份sentinel.conf文件
# 创建目录 mkdir /usr/local/redis-cluster/26379 cp /usr/local/software/redis-5.0.12/sentinel.conf /usr/local/redis-cluster/26379/sentinel.conf
1
2
3修改配置
port 26379 daemonize yes pidfile "/var/run/redis-sentinel-26379.pid" logfile "26379.log" dir "/usr/local/redis-cluster/26379" # sentinel monitor <master-redis-name> <master-redis-ip> <master-redis-port> <quorum> # quorum是一个数字,指明当有多少个sentinel认为一个master失效时(值一般为:sentinel总数/2 + 1),master才算真正失效 sentinel monitor mymaster 10.66.50.80 6379 2 # mymaster这个名字随便取,客户端访问时会用到
1
2
3
4
5
6
7
8可以自己再配置两个sentinel,端口26380和26381,注意上述配置文件里的对应数字都要修改
cp -r /usr/local/redis-cluster/26379 /usr/local/redis-cluster/26380 cp -r /usr/local/redis-cluster/26379 /usr/local/redis-cluster/26381 #处理26380 sentinel vi /usr/local/redis-cluster/26380/sentinel.conf :%s/26379/26380/g #处理26381 sentinel vi /usr/local/redis-cluster/26381/sentinel.conf :%s/26379/26381/g
1
2
3
4
5
6
7
8这里要注意,因为上面是复制的文件,有可能sentinel.conf的myid一样,此处要删掉,自动生成,不然会导致感知不到其它哨兵
sentinel myid 30d98508603b8bb90990e9343b7a8aef641cb2dc
1启动sentinel哨兵实例
#启动26379、26380、26381 /usr/local/software/redis-5.0.12/src/redis-sentinel /usr/local/redis-cluster/26379/sentinel.conf /usr/local/software/redis-5.0.12/src/redis-sentinel /usr/local/redis-cluster/26380/sentinel.conf /usr/local/software/redis-5.0.12/src/redis-sentinel /usr/local/redis-cluster/26381/sentinel.conf
1
2
3
4查看sentinel的info信息
/usr/local/software/redis-5.0.12/src/redis-cli -p 26379 # 可以看到Sentinel的info里已经识别出了redis的主从 127.0.0.1:26379>info sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=mymaster,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3
1
2
3
4
5
6
7
8
9
10sentinel集群都启动完毕后,会将哨兵集群的元数据信息写入所有sentinel的配置文件里去(追加在文件的
最下面),我们查看下如下配置文件
sentinel.conf
,如下所示# Generated by CONFIG REWRITE protected-mode no sentinel leader-epoch mymaster 0 sentinel known-replica mymaster 127.0.0.1 6381 sentinel known-replica mymaster 127.0.0.1 6380 sentinel known-sentinel mymaster 127.0.0.1 26380 5d102c1f1608e6aa1a872aef60bda4e5205f41c3 sentinel known-sentinel mymaster 127.0.0.1 26381 30d98508603b8bb90990e9343b7a8aef641cb2dc sentinel current-epoch 0
1
2
3
4
5
6
7
8验证哨兵选举
当redis主节点如果挂了,哨兵集群会重新选举出新的redis主节点,同时会修改所有sentinel节点配置文件
的集群元数据信息
同时还会修改sentinel文件里之前配置的mymaster对应的6379端口,改为6381
sentinel monitor mymaster 127.0.0.1 6381 2
1
# 六、Cluster架构搭建
参考文档:Scaling with Redis Cluster (opens new window)
环境准备,三台服务器,ip分别为:192.168.1.114、192.168.1.115、192.168.1.113,每台服务器一主一从,部署6个实例
#开始搭建之前,首先关闭防火墙 #查看防火墙状态 systemctl status firewalld #关闭防火墙 systemctl stop firewalld #禁用防火墙 systemctl disable firewalld
1
2
3
4
5
6
7复制一份配置文件
redis.conf
cp -r /usr/local/redis-cluster/6379 /usr/local/redis-cluster/7001
1修改配置文件
daemonize yes port 7001 pidfile /var/run/redis_7001.pid # 把pid进程号写入pidfile配置的文件 dir /usr/local/redis-cluster/7001/(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据) cluster-enabled yes(启动集群模式) cluster-config-file nodes-7001.conf(集群节点信息文件,这里700x最好和port对应上) cluster-node-timeout 10000 # bind 127.0.0.1(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可) protected-mode no (关闭保护模式) appendonly yes 如果要设置密码需要增加如下配置: requirepass foobared (设置redis访问密码) masterauth foobared (设置集群节点间访问密码,跟上面一致)
1
2
3
4
5
6
7
8
9
10
11
12
13配置另外一个节点
cp -r /usr/local/redis-cluster/7001 /usr/local/redis-cluster/7002 #批量替换端口 vi /usr/local/redis-cluster/7002/redis.conf :%s/7001/7002/g
1
2
3
4在另外两台服务器执行相同操作
#复制到192.168.1.115服务器 scp -r /usr/local/redis-cluster/7001 root@192.168.1.115:/usr/local/redis-cluster/7001 scp -r /usr/local/redis-cluster/7002 root@192.168.1.115:/usr/local/redis-cluster/7002 #复制到192.168.1.113服务器 scp -r /usr/local/redis-cluster/7001 root@192.168.1.113:/usr/local/redis-cluster/7001 scp -r /usr/local/redis-cluster/7002 root@192.168.1.113:/usr/local/redis-cluster/7002
1
2
3
4
5
6启动服务
#在每台服务器上启动两个实例 /usr/local/software/redis-5.0.12/src/redis-server /usr/local/redis-cluster/7001/redis.conf /usr/local/software/redis-5.0.12/src/redis-server /usr/local/redis-cluster/7002/redis.conf #检查是否启动成功 ps -ef | grep redis
1
2
3
4
5用redis-cli创建整个redis集群
/usr/local/software/redis-5.0.12/src/redis-cli -a foobared --cluster create --cluster-replicas 1 192.168.1.114:7001 192.168.1.114:7002 192.168.1.115:7001 192.168.1.115:7002 192.168.1.113:7001 192.168.1.113:7002
1出现如下的信息代表成功:
>>> Performing hash slots allocation on 6 nodes... Master[0] -> Slots 0 - 5460 Master[1] -> Slots 5461 - 10922 Master[2] -> Slots 10923 - 16383 Adding replica 192.168.1.115:7002 to 192.168.1.114:7001 Adding replica 192.168.1.113:7002 to 192.168.1.115:7001 Adding replica 192.168.1.114:7002 to 192.168.1.113:7001 M: 0561e64ad10c8414019a265f48dc37fc6ecd288f 192.168.1.114:7001 slots:[0-5460] (5461 slots) master S: 581cbc4474bf2c44968ca183139cbcd0d6e84396 192.168.1.114:7002 replicates 1c380d05e51b3f207778d213ee808de0f6718033 M: a5d506d4213f631ee14d485ca4ecf757fbd64892 192.168.1.115:7001 slots:[5461-10922] (5462 slots) master S: 2306c8292f8914d995d1a3b3f7fc1085d40d9ed7 192.168.1.115:7002 replicates 0561e64ad10c8414019a265f48dc37fc6ecd288f M: 1c380d05e51b3f207778d213ee808de0f6718033 192.168.1.113:7001 slots:[10923-16383] (5461 slots) master S: def61922b0f14fa405165c3772fb2ce464873266 192.168.1.113:7002 replicates a5d506d4213f631ee14d485ca4ecf757fbd64892 Can I set the above configuration? (type 'yes' to accept): yes >>> Nodes configuration updated >>> Assign a different config epoch to each node >>> Sending CLUSTER MEET messages to join the cluster Waiting for the cluster to join . >>> Performing Cluster Check (using node 192.168.1.114:7001) M: 0561e64ad10c8414019a265f48dc37fc6ecd288f 192.168.1.114:7001 slots:[0-5460] (5461 slots) master 1 additional replica(s) S: 2306c8292f8914d995d1a3b3f7fc1085d40d9ed7 192.168.1.115:7002 slots: (0 slots) slave replicates 0561e64ad10c8414019a265f48dc37fc6ecd288f M: 1c380d05e51b3f207778d213ee808de0f6718033 192.168.1.113:7001 slots:[10923-16383] (5461 slots) master 1 additional replica(s) M: a5d506d4213f631ee14d485ca4ecf757fbd64892 192.168.1.115:7001 slots:[5461-10922] (5462 slots) master 1 additional replica(s) S: def61922b0f14fa405165c3772fb2ce464873266 192.168.1.113:7002 slots: (0 slots) slave replicates a5d506d4213f631ee14d485ca4ecf757fbd64892 S: 581cbc4474bf2c44968ca183139cbcd0d6e84396 192.168.1.114:7002 slots: (0 slots) slave replicates 1c380d05e51b3f207778d213ee808de0f6718033 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.
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可选择清理数据,重新启动(
nodes-7001.conf
和appendonly.aof
保存了集群信息,需要清理)pkill redis-server && cd /usr/local/redis-cluster && rm -rf ./7001/nodes-7001.conf && rm -rf ./7002/nodes-7002.conf && rm -rf ./7001/appendonly.aof && rm -rf ./7002/appendonly.aof && rm -rf ./7001/dump.rdb && rm -rf ./7002/dump.rdb
1验证集群
# 访问服务端密码,-c表示集群模式,指定ip地址和端口号 /usr/local/software/redis-5.0.12/src/redis-cli -c -a foobared -h 192.168.1.113 -p 7001 # 进行验证: cluster info cluster nodes
1
2
3
4
5