linux下redis_单机版_主从_集群_部署文档

2023-02-20,,

单机版部署

1.1 Redis下载地址

http://download.redis.io/releases/

本次部署版本:3.2.8

当前最新版本:5.0.5

1.2 安装

部署路径说明规划

/usr/local/redis/data部署组件元数据存储目录,按组件名目录存储(如/部署路径/redis)

/usr/local/redis/logs部署组件运行日志信息目录,按组件名目录存储(如/部署路径/redis)

/usr/local/redis/tmp部署组件运行时进程存储目录,按组件名目录存储(如/部署路径/redis)

创建文件夹

mkdir /usr/local/redis

cd /usr/local/redis

mkdir data

mkdir logs

mkdir tmp

上传解压

tar -zxvf /root/redis-3.2.8.tar.gz -C /usr/local/redis/

编译环境检查

rpm -qa | grep gcc

若没有安装则挂载yum源进行安装

[root@BigData yum.repos.d]# yum install gcc gcc-c++ -y

编译

进入到redis解压目录:cd /usr/local/redis/redis-3.2.8

执行编译命令:make

若出现下面提示则表示编译成功

安装

编译成功后,进入src文件夹,执行make install进行Redis安装

cd src

make install

1.3 部署

安装成功后,下面对Redis 进行部署

为方便管理,将Redis文件中的conf配置文件和常用命令移动到统一文件中

    创建文件夹

    cd /usr/local/redis/redis-3.2.8

    mkdir bin

    mkdir etc

    移动相关文件

    mv redis.conf etc/

    mv src/mkreleasehdr.sh bin/

    mv src/redis-benchmark bin/

    mv src/redis-check-aof bin/

    mv src/redis-cli bin/

    mv src/redis-server bin/

修改配置文件

cd etc/

vi redis.conf

为了方便修改,可将文件放到本地修改,修改完成之后再上传到服务器,需要配置如下:

bind 192.168.194.91

daemonize yes

pidfile /usr/local/redis/tmp/redis_6379.pid

logfile /usr/local/redis/logs/redis_6379.log

dbfilename dump.rdb

dir /usr/local/redis/data

appendonly yes

cluster-enabled no

maxmemory 300mb

maxmemory-policy volatile-lru
maxclients 10000

protected-mode no 5.0.2 中需要配置的项目。不配置会报错

配置项介绍

1.绑定IP

bind 192.168.194.91

2.监听端口号,默认为 6379

port 6379
3. Redis采用的是单进程多线程的模式,开启守护进程模式,redis会在后台运
行,并将进程pid号写入至redis.conf选项pidfile设置的文件中,此时redis
将一直运行,除非手动kill该进程
daemonize yes
4. 当redis作为守护进程运行的时候,指定pid文件位置
pidfile /opt/beh/tmp/redis/redis_6379.pid
5. 指定日志文件的位置
logfile /opt/beh/logs/redis/redis.log
6. 指定本地数据库文件名

dbfilename dump.rdb

7. 指定本地数据库存放目录

dir /opt/beh/data/redis

8.是否启动集群模式

cluster-enabled no

9.Redis群集节点每次发生更改时自动保留群集配置(基本上为状态)的文件

cluster-config-file nodes.conf

10. 集群超时时间,节点超过这个时间没反应就断定是宕机

cluster-node-timeout 15000

11. 最大使用内存 可根据业务量及机器内存配置

maxmemory 21474836480

12. 根据LRU算法生成的过期时间来删除key。,优先移除最近未使用的key

maxmemory-policy volatile-lru
13. 设置同一时间最大客户端连接数
maxclients 100000
14. 指定是否在每次更新操作后进行日志记录
appendonly yes
15. 设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis
启动时,它会自动从master进行数据同步
replicaof <masterip> <masterport>[redis3 为slaveof <masterip> <masterport>]
16. 当master服务设置了密码保护时,slav服务连接master的密码
masterauth <master-password>
17. 设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通
过AUTH <password>命令提供密码,默认关闭(被注释),

requirepass <password>

启动测试

启动:

cd /usr/local/redis/redis-3.2.8

bin/redis-server etc/redis.conf

查看进程:

ps -ef | grep redis

连接测试:

关闭防火墙或开放相应端口

bin/redis-cli -h 192.168.194.91 -p 6379

查看所有keys:

192.168.194.91:6379> keys *

(empty list or set)

添加数据:

192.168.194.91:6379> set bonc 123

OK

查看数据:

192.168.194.91:6379> get bonc

"123"

单机版搭建完成

二 redis主从复制部署

单节点的Redis,当出现机器故障或机器重启时,存储在Redis里的数据将丢失,且单节点的Redis并发访问量有限。为了解决Redis单节点问题,实现Redis的高可用,会将数据复制多个副本到其他节点上。采用主从复制,一主多从的模式。由redis sentinel(哨兵)对redis系统进行监控,监控主数据库和从数据库是否运行正常,当主节点出现故障时自动的将从库转化为主库。实现对数据的冗余备份,从而保证数据和服务的高可用。

一主一从:

一主一从适用于没有太大并发量的场景的高可用,当master宕机时,slave提供故障转移支持

一主多从

一主多从适用于读并发量比较大的场景,实现读写分离的架构,同时也实现了高可用

树状主从结构

从节点可以从主节点复制数据,也可以从其他节点复制数据,这种架构主要用于降低主节点负载

2.1 Redis下载地址

http://download.redis.io/releases/

本次部署版本:3.2.8

当前最新版本:5.0.5

2.2 安装

部署机器

部署机器ip

主/从

192.168.194.93

Master

192.168.194.94

Slave

部署路径说明规划

/usr/local/redis/data部署组件元数据存储目录,按组件名目录存储(如/部署路径/redis)

/usr/local/redis/logs部署组件运行日志信息目录,按组件名目录存储(如/部署路径/redis)

/usr/local/redis/tmp部署组件运行时进程存储目录,按组件名目录存储(如/部署路径/redis)

在两台机器上分别创建文件夹

mkdir /usr/local/redis

cd /usr/local/redis

mkdir data

mkdir logs

mkdir tmp

上传解压

tar -zxvf /root/redis-3.2.8.tar.gz -C /usr/local/redis/

编译环境检查

rpm -qa | grep gcc

若没有安装则挂载yum源进行安装

[root@BigData yum.repos.d]# yum install gcc gcc-c++ -y

编译

进入到redis解压目录:cd /usr/local/redis/redis-3.2.8

执行编译命令:make

若出现下面提示则表示编译成功

安装

编译成功后,进入src文件夹,执行make install进行Redis安装

cd src

make install

2.3 部署

安装成功后,下面对Redis 进行部署

为方便管理,将Redis文件中的conf配置文件和常用命令移动到统一文件中

1、创建文件夹

cd /usr/local/redis/redis-3.2.8

mkdir bin

mkdir etc

2、移动相关文件

mv redis.conf etc/

mv src/mkreleasehdr.sh bin/

mv src/redis-benchmark bin/

mv src/redis-check-aof bin/

mv src/redis-cli bin/

mv src/redis-server bin/

修改配置文件

cd etc/(redis安装目录下的etc文件夹,并非根目录下的)

vi redis.conf

1、Master参数配置

bind 192.168.194.93

port 6379

daemonize yes

pidfile /usr/local/redis/tmp/redis_6379.pid

logfile /usr/local/redis/logs/redis_6379.log

dbfilename dump.rdb

dir /usr/local/redis/data

appendonly yes

cluster-enabled no

maxmemory 300mb

maxmemory-policy volatile-lru
maxclients 1000

2、salve参数配置

bind 192.168.194.94

port 6379 #如果在一台机器上部署多个redis实例,则这个端口需要修改

daemonize yes

pidfile /usr/local/redis/tmp/redis_6379.pid

logfile /usr/local/redis/logs/redis_6379.log

dbfilename dump.rdb

dir /usr/local/redis/data

appendonly yes

cluster-enabled no

maxmemory 300mb

maxmemory-policy volatile-lru
maxclients 1000

slaveof 192.168.194.93 6379

需要注意,主从复制的开启,完全是在从节点发起的;不需要我们在主节点做任何事情。

从节点开启主从复制,有3种方式:

(1)配置文件

在从服务器的配置文件中加入:slaveof <masterip> <masterport>

(2)启动命令

redis-server启动命令后加入 --slaveof <masterip> <masterport>

(3)客户端命令

Redis服务器启动后,直接通过客户端执行命令:slaveof <masterip> <masterport>,则该Redis实例成为从节点。

本方法种采用的是第一种,修改配置文件,当需要有多个从节点时,则依次按照上述方法添加从节点即可

启动测试

关闭防火墙或开放相应端口

启动:

cd /usr/local/redis/redis-3.2.8

bin/redis-server etc/redis.conf

查看进程:

ps -ef | grep redis

登陆master查看主从情况

[root@localhost redis-3.2.8]# bin/redis-cli -h 192.168.194.93 -p 6379

192.168.194.93:6379> info replication

登陆slave查看主从情况

[root@localhost redis-3.2.8]# bin/redis-cli -h 192.168.194.94 -p 6380

192.168.194.94:6380> info replication

主从复制测试

在主上写数据

在从上查询数据

2.4 主从切换

在Master不可用的情况下,停止Mater,将Slave的设定无效化后,Slave升级为Master,可以采用手动切换和哨兵模式自动切换。手动切换在master不可用的情况下需要自己停止master,再手动将salve升级为master,不智能,所以本文将直接采用哨兵模式实现自动切换

哨兵配置

cd /usr/local/redis/redis-3.2.8

cp sentinel.conf etc/ #将配置文件复制到etc下方便管理

编辑配置文件 vi etc/sentinel.conf

bind 192.168.194.93 #允许远程连接哨兵,在java的jedis中需要连接哨兵

port 26379

daemonize yes

pidfile "/usr/local/redis/tmp/redis-sentinel_26379.pid"

logfile "/usr/local/redis/logs/redis-sentinel_26379.log"

dir /usr/local/redis/data/redis-sentinel ---需要创建redis-sentinel目录

#配置监视的集群的主节点ip和端口 2表示至少需要几个哨兵统一认定才可以做出判断

sentinel monitor mymaster 192.168.194.93 6379 2

#设置连接master和slave时的密码,注意的是sentinel不能分别为master和slave设置不同的密码,因此master和slave的密码应该设置相同。

sentinel auth-pass mymaster redis123 –-redis如果没有设置密码则无需配置

#表示如果5s内mymaster没响应,就认为DOWN

sentinel down-after-milliseconds mymaster 10000

#表示如果15秒后,mysater仍没活过来,则启动failover,从剩下从节点序曲新的主节点

sentinel failover-timeout mymaster 60000

启动哨兵

复制执行文件到bin目录下

cp src/redis-sentinel bin/

执行启动命令

bin/redis-sentinel etc/sentinel.conf

查看进程

ps -ef | grep sentinel

可以配置多个哨兵同时监测实现哨兵的高可用

主(master)/从(slave)切换测试

杀死主redis线程

查看:ps -ef | grep redis

杀死:kill -9 25552

等待10秒种之后(哨兵监测maste 10秒种无响应才认为主已经down,是在sentinel.conf中配置)

查看哨兵日志

cat -f /usr/local/redis/logs /redis-sentinel_26379.log

再从上查看主从信息,发现从已经升级为主,

读写测试(slave没升级为主之前只能可读不可写,当master down之后slave升级为主之后才有可写)

再次启动原来的主(93),查看主从信息

bin/redis-cli -h 192.168.194.93 -p 6379

发现93已经成功启动,并把94当做为主,自己为从,查看数据,主从复制依然正常

当主挂了之后再次启动则会以从的身份加入到集群,不会一直再自动切换为主,如果想要再切换到主的身份则需要手动切换,当只有一主一从时,可以将原来的从杀死再启动,哨兵就可以再次把主切换到原来的主上

三 redis分布式集群部署

要想搭建一个最简单的Redis集群,那么至少需要6个节点:3个Master和3个Slave。为什么需要3个Master呢?类似于Zookeeper,一般分布式要求基数个节点,这样便于选举(少数服从多数的原则)。

搭建思路很简单,开启6个Redis实例,并且这6个Redis各自有自己IP和端口。如果机器不够也可以在一台机器上开启多个redis实例,本文采用3太虚拟机,每台开启两个实例这样的话,相当于模拟出了6台机器了。然后在以这6个实例组建Redis集群就可以了。

3.1 Redis下载地址

http://download.redis.io/releases/

本次部署版本:3.2.8

当前最新版本:5.0.5

3.2安装

部署机器ip

部署实例

192.168.194.97

192.168.194.97:6379 192.168.194.97:6380

192.168.194.98

192.168.194.98:6379 192.168.194.98:6380

192.168.194.99

192.168.194.99:6379 192.168.194.99:6380

部署路径说明规划

/usr/local/redis/data部署组件元数据存储目录,按组件名目录存储(如/部署路径/redis)

/usr/local/redis/logs部署组件运行日志信息目录,按组件名目录存储(如/部署路径/redis)

/usr/local/redis/tmp部署组件运行时进程存储目录,按组件名目录存储(如/部署路径/redis)

在三台机器上分别创建文件夹

mkdir /usr/local/redis

cd /usr/local/redis

mkdir data

mkdir logs

mkdir tmp

上传解压

tar -zxvf /root/redis-3.2.8.tar.gz -C /usr/local/redis/

编译环境检查

rpm -qa | grep gcc

若没有安装则挂载yum源进行安装

[root@BigData yum.repos.d]# yum install gcc gcc-c++ -y

编译

进入到redis解压目录:cd /usr/local/redis/redis-3.2.8

执行编译命令:make

若出现下面提示则表示编译成功

安装

编译成功后,进入src文件夹,执行make install进行Redis安装

cd src

make install

3.3 部署

安装成功后,下面对Redis 进行部署

为方便管理,将Redis文件中的conf配置文件和常用命令移动到统一文件中

1、创建文件夹

cd /usr/local/redis/redis-3.2.8

mkdir bin

mkdir etc

2、移动相关文件

mv redis.conf etc/

mv src/mkreleasehdr.sh bin/

mv src/redis-benchmark bin/

mv src/redis-check-aof bin/

mv src/redis-cli bin/

mv src/redis-server bin/

修改配置文件

第一个实例配置文件实例

bind 192.168.194.97

port 6379

daemonize yes

pidfile /usr/local/redis/tmp/redis_6379.pid

logfile /usr/local/redis/logs/redis_6379.log

dbfilename dump.rdb

dir /usr/local/redis/data/redis_6379 ##需要在data目录下创建相应的                                        redis_6379目录,最好提前创建,防止遗忘

appendonly yes

cluster-enabled yes //开启集群 把注释#去掉

cluster-config-file /usr/local/redis/tmp/nodes_6379.conf //集群的配                            置配置文件首次启动自动生成

cluster-node-timeout 15000

maxmemory 300mb

maxmemory-policy volatile-lru
maxclients 1000

其他配置文件可以参考上面的配置,具体说明如下

1、绑定的本机IP,

bind 192.168.194.97

2、端口,redis默认端口是6379,若一台机器要启动多个实例时这个不能一样

port 6379

3、设置redis后台运行,Redis采用的是单进程多线程的模式,开启守护进程模式,redis会在后台运行,并将进程pid号写入至redis.conf选项pidfile设置的文件中,此时redis将一直运行,除非手动kill该进程

daemonize yes

4、当redis作为守护进程运行的时候,指定pid文件位置,每个实例都有都要有一个不通的对应文件,可以如redis_6379.pid、redis_6380.pid

pidfile /usr/local/redis/tmp/redis_6379.pid

5、指定日志文件的位置,每个实例都有都要有一个不通的对应文件,可以如redis_6379.log、redis_6380.log

logfile /usr/local/redis/logs/redis_6379.log

6、指定本地数据库文件名

dbfilename dump.rdb

7、指定本地数据库存放目录,最好每个实例有一个独立的目录,该目录要提前创建好,为了防止遗忘建议在修改配置文件时就创建

dir /usr/local/redis/data/redis_6379

8、aof日志开启 有需要就开启,它会每次写操作都记录一条日志

appendonly yes

9、开启集群 把注释#去掉

cluster-enabled yes

10、集群的配置配置文件,首次启动自动生成,每个实例都需要配置一个,可以如:nodes_6379.conf、nodes_6380.conf

cluster-config-file /usr/local/redis/tmp/nodes_6379.conf

11、请求超时 默认15秒,可自行设置

cluster-node-timeout 15000

12、最大使用内存 可根据业务量及机器内存配置,形式可以如21474836480、300mb、64gb

maxmemory 300mb

13、根据LRU算法生成的过期时间来删除key,优先移除最近未使用的key

maxmemory-policy volatile-lru

14、设置同一时间最大客户端连接数
    maxclients 1000

15设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通

过AUTH <password>命令提供密码,默认关闭,如果设置,集群的所有机器要一样

requirepass <password>

3.4 启动

启动各个节点

分别在3台机器上启动两个redis实例

第一台机器:

cd /usr/local/redis/redis-3.2.8

bin/redis-server etc/redis_6379.conf

bin/redis-server etc/redis_6380.conf

一台服务器上只需要部署一次redis即可,在需要启动多个实例时只要指定不通的配置文件就可以,同时配置文件中配置的文件信息需要有差别,如port、pidfile、logfile等配置要不一样,但是bind可以一样。

其他机器:同第一台机器类似,进入到相应文件夹执行启动命令,多个实例使用不同的配置文件

查看redis启动情况

ps -ef | grep redis

netstat -tnlp | grep redis

可以看到每台机器上都有两个redis实例分别对应不同的端口

同时查看tmp、logs等目录下

3.5 创建集群

安装ruyb

要搭建集群的话,需要使用一个工具(脚本文件),这个工具在redis解压文件的源代码里。因为这个工具是一个ruby脚本文件,所以这个工具的运行需要ruby的运行环境。

可以先查看机器中是否安装有ruyb,若显示版本号则已经安装,无需再安装

ruyb –v

安装ruby指令如下:

yum install ruby

然后需要把ruby相关的包安装到服务器

gem install redis

执行gem install redis可能会出现错误

原因是安装的ruby版本低于2.3.0,需要安装2.3.0以上的版本,可以用ruby –v查看版本

centOS7使用yum install ruby默认安装的ruby版本是2.0.0,因此需要重新安装更高版本安装过程如下

1、安装curl,可以先试下curl www.baidu.com能否成功,若成功则无需再安装(需要联网)

yum -y install curl

2、安装RVM

#curl -L get.rvm.io | bash -s stable

3、获得秘钥

gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3

4、继续执行

curl -sSL https://get.rvm.io | bash -s stable

5、RVM安装完成

使用source让当前shell读入路径为/usr/local/rvm/scripts/rvm的shell文件并依次执行文件中的所有语句,并重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录

source /usr/local/rvm/scripts/rvm

6、查看Ruby可用版本

# rvm list known

7、安装

选择一个版本进行安装,这里选择2.5.5版本安装,等待时间比较长

rvm install 2.5.5

可能会出现超时问题,应该是下载时间不能超过30分钟,多试两次,取决于网络,下载网速特别慢,这一步特别浪费时间,如果能离线安装比较好

8、使用安装的2.5.5版本

rvm use 2.5.5

9、设置默认版本

rvm use 2.5.5 –default

10、查看ruby版本

ruby --version

接着返回继续执行gem install redis命令

执行创建集群命令

关闭防火墙或开放相应端口

Redis 官方提供了 redis-trib.rb 这个工具,就在解压目录的 src 目录中,可以将文件拷贝到bin目录中统一管理,方便使用,cp src/redis-trib.rb bin/。使用下面这个命令即可完成安装。

bin/redis-trib.rb  create  --replicas  1  192.168.194.97:6379 192.168.194.97:6380 192.168.194.98:6379 192.168.194.98:6380 192.168.194.99:6379 192.168.194.99:6380

Redi集群搭建成功!在最后一段文字,显示了每个节点所分配的slots(哈希槽),这里总共6个节点,其中3个是从节点,所以3个主节点分别映射了0-5460、5461-10922、10923-16383 solts。

集群连接测试

连接方式为 :

bin/redis-cli -h 192.168.194.97 -c -p 6379

加参数 -C 可连接到集群,因为上面 redis.conf 将 bind 改为了ip地址,所以 -h 参数不可以省略。

添加数据,可以看到数据被平均的分配到了各个主节点中

再登陆其他节点或实例查看内容(使用keys *查看列表时可能显示不全,但是数据在任何一台都可以查询到的)

查看当前集群信息

cluster info

查看集群里有多少个节点

cluster nodes

补充redis原理

redis cluster在设计的时候,就考虑到了去中心化,去中间件,也就是说,集群中的每个节点都是平等的关系,都是对等的,每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃,这样就保证了我们只需要连接集群中的任意一个节点,就可以获取到其他节点的数据。

Redis 集群没有并使用传统的一致性哈希来分配数据,而是采用另外一种叫做哈希槽 (hash slot)的方式来分配的。redis cluster 默认分配了 16384 个slot,当我们set一个key 时,会用CRC16算法来取模得到所属的slot,然后将这个key 分到哈希槽区间的节点上,具体算法就是:CRC16(key) % 16384。所以我们在测试的时候看到set 和 get 的时候,直接跳转到了其他端口端口的节点。

Redis 集群会把数据存在一个 master 节点,然后在这个 master 和其对应的salve 之间进行数据同步。当读取数据时,也根据一致性哈希算法到对应的 master 节点获取数据。只有当一个master 挂掉之后,才会启动一个对应的 salve 节点,充当 master 。

需要注意的是:必须要3个或以上的主节点,否则在创建集群时会失败,并且当存活的主节点数小于总节点数的一半时,整个集群就无法提供服务了。

linux下redis_单机版_主从_集群_部署文档的相关教程结束。

《linux下redis_单机版_主从_集群_部署文档.doc》

下载本文的Word格式文档,以方便收藏与打印。