Redis有四种部署方式,分别为单机模式、主备模式、哨兵模式、集群模式。
其中单机模式比较简单,容量、处理能力有限,没有高可用;主备模式和哨兵模式本质和单机模式一样,只是主备模式保证数据高可用,哨兵模式保证数据和服务的高可用。
集群模式是将数据分片到不同的服务器,克服了单机的容量、性能有限问题,可以支持海量数据应用。
下面以生产环境一般用的哨兵模式、集群方式部署为例分别做说明,本样例是在3台虚拟机下部署的,每个节点安装Centos7核心版(不带GUI)。
3台机器分别规划如下:
hdp1:10.10.10.110
hdp2:10.10.10.112
hdp3:10.10.10.113
下面从如下几个方面介绍下其部署及应用:
相关配置
安装
固定配置
分发程序
修改配置
启动
查看状态
基本操作
挂载windows目录、 IP配置、hosts名称配置、关闭防火墙、SSH配置, 需要3台电脑网络互通且能相互SSH登录,jdk安装等
具体操作参见:
Linux系列——挂载Windows虚拟文件夹到Linux系统
Linux系列——配置SSH免密登录
Linux系列——常规基础操作
先在其中任意一台上面安装。
1、下载Redis,例如:redis-6.2.0.tar.gz
下载地址: http://download.redis.io/releases/
2、解压到目标目录,例如:/usr/local/redis
$ cp /mnt/hdfs/vf/redis-6.2.0.tar.gz /usr/proc/redis 从挂载目录将安装文件拷贝到目标路径
$ cd /usr/proc/redis 这里切换到zk安装目录(每台机器都要新建该目录,配好一台后后面两台直接用scp命令分发,具体路径可以自定义,推荐放在/usr下)
$ tar -zxvf redis-6.2.0.tar.gz (解压后记着删除压缩文件)
3、编译
$ cd /usr/local/redis/redis-6.2.0
$ make
若编译报错,按提示可能需要安装gcc编译器
$ yum install gcc-c++ -y #安装gcc
$ make dist clean #重新来
$ make
4、编译成功,执行安装
$ mkdir /usr/local/redis/redis62 #新建安装目录
$ make install PREFIX=/usr/local/redis/redis62 #安装到指定目录中
$ cp /usr/local/redis/redis-6.2.0/redis.conf
/usr/local/redis/redis62 #copy配置文件到安装目录
$ mkdir /usr/local/redis/redis62/data #新建数据目录
$ mkdir /usr/local/redis/redis62/pid #新建PID目录
$ mkdir /usr/local/redis/redis62/log #新建LOG目录
修改固定配置文件内容:
# 启动后台运行
daemonize yes
# 存放进程id
pidfile /usr/local/redis/redis62/pid/pidfile.pid
# 日志文件
logfile /usr/local/redis/redis62/log/logfile.pid
# 数据目录
dir /usr/local/redis/redis62/data/
# 是否开启集群
cluster-enabled yes
# 指定是否在每次更新操作后进行日志记录
appendonly yes
$ mkdir /usr/local/redis/redis62 #新建该目录,另外两台都新建
#分发到hdp2
Scp -r /usr/local/redis/redis62
root@hdp2:/usr/local/redis/redis62
#分发到hdp3
Scp -r /usr/local/redis/redis62
root@hdp3:/usr/local/redis/redis62
分别在3台机器上,调整如下配置:
# 指定 只能以10.10.10.110这个IP访问, 依次10.10.10.112, # 10.10.10.113
bind 10.10.10.110
# 指定不同监听端口,采用ip + 2两位流水号
port 11000
哨兵模式主要是采用主从复制 + 哨兵,解决了Redis的高可用HA实现。哨兵选举也是需要奇数个节点,所以至少需要3个节点。
1、用hdp1做主节点,分别修改hdp2、hdp3两台服务器的redis.conf配置,配置从服务
# slaveof 主节点IP 端口 启用后就将当前服务设定为从服务并指定主服务
slaveof 10.10.10.110 11000
# 启用从服务只读
slave-read-only yes
2、拷贝哨兵配置文件到安装目录(3台都做)
$ cp /usr/local/redis/redis-6.2.0/sentinel.conf
/usr/local/redis/redis62 #copy配置文件到安装目录
3、修改哨兵配置文件sentinel.conf(3台都做)
# 指定不同监听端口
port 21000
# 存放进程id
pidfile /usr/local/redis/redis62/pid/pidfile_sentinel.pid
# 日志文件
logfile /usr/local/redis/redis62/log/logfile_sentinel.pid
# 数据目录
dir /usr/local/redis/redis62/data_sentinel/
# 数据库文件名
dbfilename dump110_sentinel.rdb
# 监控主节点,后面的2表示有2个哨兵确认,就认为主节点下线了
sentinel monitor mymaster 10.10.10.110 11000 2
4、启动服务(3台都做)
分别启动不同的redis服务和哨兵服务,先分别启动redis服务,然后再分别启动sentinel服务
$ cd /usr/local/redis/redis62/bin #切换到服务bin目录
$ ./redis-server ./redis.conf #回车,启动redis服务
$ cd /usr/local/redis/redis62/bin #切换到服务bin目录
$ ./redis-sentinel ./sentinel.conf #回车,启动sentinel服务
5、查看启动状态
1)、查看redis服务(3台都做)
$ ps -aux | grep redis #查看redis服务
2)、查看sentinel服务
redis-cli -c -h 10.10.10.110 -p 21000 info sentinel
集群模式引入了分布式概念,为了满足大数据量的要求,需要将数据分散到不同的机器上,Redis保证高可用是基于主从模式,所以为了适应选举Raft算法, 生产上至少需要3个主节点、3个从节点,且都部署在不同的节点上
(本环境由于节点有限,所以只有3个节点,每台部署一主一从服务)。
PS: 同一台服务器上的cluster-config-file、dbfilename名称、IP端口都不能一致。
1、部署服务(3台都做)
$ mkdir /usr/local/redis/redis62bak #新建该目录,另外两台都新建,用于部署新服务
2、拷贝本机已安装的服务到新服务目录(3台都做)
$ cp -r /usr/local/redis/redis62 /usr/local/redis/redis62bak
3、修改新服务配置(3台都做)
# 指定不同监听端口
port 11001
# 存放进程id
pidfile /usr/local/redis/redis62bak/pid/pidfile.pid
# 日志文件
logfile /usr/local/redis/redis62bak/log/logfile.pid
# 数据目录
dir /usr/local/redis/redis62bak/data/
# 数据库文件名
dbfilename dump110.rdb
# 集群节点配置文件,这个文件是不能手动编辑的。确保每一个集群节点的配置文件不通
cluster-config-file nodes110.conf
4、启动服务(3台都做)
分别启动不同的服务,每台需要单独启动 redis62 和 redis62bak 的服务(可以设置自动启动,具体方式自行查找,可以在claster_start.sh或系统启动服务里加入启动指令)
$ cd /usr/local/redis/redis62/bin #切换到服务bin目录
$ ./redis-server ./redis.conf #回车,启动服务
$ cd /usr/local/redis/redis62bak/bin #切换到服务bin目录
$ ./redis-server ./redis.conf #回车,启动服务
5、查看启动状态(3台都做)
$ ps -aux | grep redis
6、创建集群
预期3台机器上的6个Redis服务都启动正常,使用redis-cli创建集群,可以在其中任意一个redis服务器中执行以下指令创建集群。
$ redis-cli --cluster create 10.10.10.110:11000 10.10.10.112:11200 10.10.10.113:11300 10.10.10.110:11001 10.10.10.112:11201 10.10.10.113:11301 --cluster-replicas 1
上面指令中--cluster-replicas 1 参数表示每个主服务器都有一个从服务器,这里则代表3主3从。
通过该方式创建的集群,带有从节点的机器不能够自己手动指定主节点,由集群自己来分配主节点,集群会尽量把主从服务器分配在不同的机器上。
1)创建过程:
# redis-cli --cluster create 10.10.10.110:11000 10.10.10.112:11200 10.10.10.113:11300 10.10.10.110:11001 10.10.10.112:11201 10.10.10.113:11301 --cluster-replicas 1
2)查看集群状态
# redis-cli -c -h 10.10.10.110 -p 11000 cluster info
3)查看集群节点
# redis-cli -c -h 10.10.10.110 -p 11000 cluster nodes
chkconfig --list #查看自启动服务
ps -aux | grep redis #查看启动服务
redis-cli -h 127.0.0.1 -p 6379 #用cli连接Redis
killall -9 redis-server #手动结束Redis
chkconfig --add redis #增加Redis服务
chkconfig redis on #开启开机启动
chkconfig redis off #关闭开机启动
service redis start #打开redis命令
service redis stop #关闭redis命令
service redis restart #重启redis命令