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

一 单机版部署

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配置文件和常用命令移动到统一文件中
  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/

    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,一般分布式要求基数个节点,这样便于选举(少数服从多数的原则)。

搭建思路很简单,开启6Redis实例,并且这6Redis各自有自己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个或以上的主节点,否则在创建集群时会失败,并且当存活的主节点数小于总节点数的一半时,整个集群就无法提供服务了。

posted @   莲藕淹  阅读(176)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示