zoukankan      html  css  js  c++  java
  • nosql----redis集群部署

    redis

    安装依赖包

    yum -y install gcc gcc-c++

    解压安装包并进入

    make  MALLOC=libc

    make  install  PREFIX=/usr/local/redis

    在安装目录下创建配置文件目录

    mkdir /usr/local/redis/etc

    cp /tools/redis-5.0.0/redis.conf  /usr/local/redis/etc

    为了后续redis的配置,可将/tools/redis-5.0.0/src/下的可执行脚本复制到/usr/local/redis/bin下面

    配置  redis.conf

    开机自启动

    daemonize yes

    允许远程连接

    这里bind的意思是,允许从本地的那个接口来接入redis,假如是127.0.0.1,那当然就只有本地能接入了。但是假设服务器有三个ip,这里写入ip1的话,就表示可以通过这个ip来连接redis

    因此,这里的意思并不是说开放哪个网段可以连接进来,而是允许外部通过本地的那个接口进来。假如在这里配置一个非本服务器的ip,那么很遗憾,redis连启动都启动不了,他会报错。

    注释掉bind

    #bind   127.0.0.1

    关闭保护模式  

    protected-mode  no

    开发防火墙

    firewall-cmd  --add-port=6379/tcp  --permanent

    firewall-cmd  --reload

    配置环境变量

    vim  /etc/profile

    PATH=$PATH:/usr/local/redis/bin
    export PATH

    启动redis

    redis-server  /usr/local/redis/etc/redis.conf

    测试连接

    redis-cli -h 127.0.0.1 -p 6379 ping

    进入redis

    redis-cli -h 127.0.0.1 -p 6379

    停止redis

    redis-cli -h 127.0.0.1 -p 6379 shutdown    又或者你可暴力杀掉 

    redis集群部署 

    环境:

    master1:172.16.1.31:8000

    master2:172.16.1.32:8000

    master3:172.16.1.33:8000

    slave1:172.16.1.34:8000

    slave2:172.16.1.35:8000

    slave3:172.16.1.36:8000

    官方推荐redis集群至少拥有6个节点  3主3从

    集群建立后,往集群插入数据的时候,会经过插槽运算去给数据分配一个插槽(slots),其插槽可以是集群上插槽的任意一个,也就是说,可能是在三台主redis的任意一台上的一个插槽。

    备份redis会备份好主redis上的数据,当主redis故障或者down机的时候,备redis就是将自身状态切换到主redis。

    配置redis(所有节点)

    vim  /usr/local/redis/etc/redis.conf

    port  8000                                               #启动端口

    pidfile  /var/run/redis_8000.pid               #pid文件

    dir     /usr/local/redis/etc/                        #生产文件默认路径

    cluster-enabled  yes                               #开启集群

    cluster-config-file  nodes_8000.conf      #集群节点配置文件

    appendonly  yes                                     #开启AOF持久化

    requirepass tqw961110                           #设置密码

    masterauth tqw961110                             #这个配置需要在从服务器上加上,不然当主redis坏掉的时候,slave不能自动切换成master

    旧版本会使用redis-trib.rb这个脚本,但是新版本将该脚本的命令全部移动到redis-cli下面了

    格式为redis-cli  --cluster  加上下图的参数

    redis-cli --cluster help  可以看到--cluster参数的所有用法

    --cluster-replicas 1   的意思是集群中一个主对于一个从

    ./redis-cli --cluster create 172.16.1.31:8000 172.16.1.32:8000 172.16.1.33:8000  172.16.1.34:8000 172.16.1.35:8000 172.16.1.36:8000  --cluster-replicas 1  -a  tqw961110

    执行命令后如果出现 Waiting for the cluster to join 并一直处于等待状态没有反应。

    redis集群不仅需要开通redis客户端连接的端口,而且需要开通集群总线端口
    集群总线端口为redis客户端连接的端口 + 10000
    如redis端口为8000
    则集群总线端口为18000


    故,所有服务器的点需要开通redis的客户端连接端口和集群总线端口

    firewall-cmd  --add-port=8000/tcp  --permanent

    firewall-cmd  --add-port=18000/tcp  --permanent

    firewall-cmd  --reload

    查看集群状态

    redis-cli -c -p 8000  -a  tqw961110 cluster nodes 

    测试

    建立集群后,必须通过集群模式连接redis,也就是加入-c参数,不然后报错。

    在31上插入数据

    redis-cli  -c -h 172.16.1.31 -p 8000   -a  tqw961110

    >set   name1 aaaa

     可以看到数据插入到12933这个slots里面,对应的主redis是33节点的redis

    在32上插入数据

    redis-cli  -c -h 172.16.1.32 -p 8000   -a  tqw961110

    >set   name2 bbbb

     

     可以看到数据插入到742这个slots里面,对应的主redis是31节点的redis

    由此可见,证明了上文所述的,插入数据时候,会根据插槽算法去分配数据究竟分配在哪个slots里面。

    在31节点上查看数据

    redis-cli  -c -h 172.16.1.31 -p 8000

    >get  name1

    >get  name2

     

    可以看到,31节点上的redis可以查询到刚才在32上插入的数据,证明集群的建立是成功的。

    而查询数据是根据对应的slots去匹配的。

    增加集群节点

    增加主节点

    redis-cli --cluster add-node 172.16.1.37:8000 172.16.1.31:8000 -a tqw961110   (增加节点ip:端口    已有节点ip:端口)

    系统提示节点已经添加成功。

    查看一下集群的状态。

    可以发现37节点目前还没有分配slots,因此他现在还不能插入数据。

    因此需要从别的节点上迁移数据过来。

    我们从33节点上将数据迁移过来

    redis-cli --cluster reshard  127.0.0.1:8000  --cluster-from  3839342e9a6e6a2a024f2dde98de3f0058279f26  -a tqw961110

    他会问需要迁移多少个,我们选择2000个

    他会询问这些数据需要那个节点来接收,这里我们输入37节点的id

    然后会询问是否按照原本的计划迁移数据,这里我们选择yes即可。

    短暂的等待后,数据迁移完毕,这时查看集群的状态。

    可以看到37节点上已经有2000个slots,这个时候就可以插入数据。

    增加从节点

    在增加完主节点后,我们还需要为其增加一个从节点,以实现高可用。

    redis-cli --cluster add-node 172.16.1.38:8000 172.16.1.37:8000 --cluster-slave --cluster-master-id f837c6db1a6d96d7db719010b78078360ee1ee29 -a tqw961110   (知道添加的节点为从节点,并且知道其master的id。)

    再查看一下集群的状态

    可以看到,37、38两个节点已经添加进集群中,并处于主从同步状态。

    删除集群节点

     redis-cli   --cluster del-node    ip:端口    node_id    -a  密码

    对于从节点,可以直接用上述命令删除,但是对于主节点,必须要先把主节点上的数据迁移到别的节点上,不然会报下列错误

    因此,我们可以按下列步骤把数据迁移到其他节点

    查看主节点当前状态,查看其对应的id和分配到的slots的数量

    redis-cli --cluster check 172.16.1.33:8000 -a tqw961110

    迁移数据

     redis-cli --cluster  reshard 127.0.0.1:8000 --cluster-from  删除数据的节点的id -a tqw961110

    这里问我们要迁移多少个slot,我们上面看到当前节点一共有5461个slots,因此这里我们输入5461。

    然后系统会问我们获取接受这些slots的节点id,这里我们选择本地节点的id。

    这里选择yes

    当slots数量比较多的时候,这里可能需要等一两分钟。

    redis-cli --cluster  check 172.16.1.33:8000 -a tqw961110

    可以看到,33节点上的slots数量已经变成0

    这时候就可以删除节点了

    redis-cli --cluster del-node 172.16.1.33:8000 60bb940881a1297e0be5391ba1220bc0c3ba7f1f -a tqw961110

    查看集群中是否还有该节点

    已经只剩下本地的节点了

    这个时候还没完,因为集群建立的时候会在本地新建.aof,.rdb,还有集群对应的.conf文件。

    先把redis停掉,再把这三个文件删除,然后重启,这样才算完全清除了集群配置。

    故障测试

    测试一下一台master故障的down掉的时候,他对应的从服务器是否会自动切换到master的角色。

    上图32节点为主redis,35为其对应的slave,先把32的redis停掉。

    一定的时间后,可以看到32节点已经退出集群,并且经过·选举,35成为了新的master。

    这个时候我们可以对32服务器的redis进行抢救

    抢救完成后,先把它的集群配置文件备份然后删掉。

    这是由于业务的数据已经增加了,所以32的redis需要作为slave从新加进集群里面,这样就可以同步到主redis上的业务数据。

    重启redis,然后执行如下命令(新的节点ip:端口   已有的节点ip:端口   --cluster-slave   --cluster-master-id   主redis的id )

     redis-cli --cluster add-node 172.16.1.32:8000 172.16.1.35:8000   --cluster-slave --cluster-master-id 3699fc16cb9a78fdbcf82333216c7e7657048176 -a tqw961110

    看到上述提示,则证明节点添加成功。

    再查看一下集群状态

    此时,35和32已经完成了主从切换的操作。

  • 相关阅读:
    js实现图片上传前预览
    WPF实现鼠标拖动控件并带有中间动效
    Redis 挂了自动重启的shell 脚本。
    PIE-Basic教程目录索引
    从零实现Linux一键自动化部署.netCore+Vue+Nginx项目到Docker中
    在BlazorWebAssembly中使用Autofac
    angular报错:Cannot assign to a reference or variable
    ASP.NET Core Logging Solution
    Typora + PicGo-Core + Custom Command 实现上传图片到图床
    mysql like多个
  • 原文地址:https://www.cnblogs.com/QicongLiang/p/9854679.html
Copyright © 2011-2022 走看看