zoukankan      html  css  js  c++  java
  • Redis的集群配置

    如果我们redis的压力很大,如果我们的并发高到我们读数据和写数据都有了很大压力。 那么我们可能就需要把redis分开部署,并且配置为一个『主从』的状态。 

    在服务器上构筑Redis的集群配置:

    1.切换root用户

      su - centos
      输入密码 ******
      sudo su
      输入密码 ******

    2.安装前提包

      yum install gcc-c++
      yum install -y ruby
      yum install -y rubygems

    3.下载redis4.0.7

      wget http://download.redis.io/releases/redis-4.0.7.tar.gz

    4.移动redis至/usr/local/

      mv redis-4.0.7.tar.gz /usr/local/

      cd /usr/local/

    5.解压redis安装包

      tar zxf redis-4.0.7.tar.gz

    6.映射redis快捷文件夹

      ln -s /usr/local/redis-4.0.7 /usr/local/redis

      cd /usr/local/redis

    7.编译

      make

    8.映射redis bin快捷文件夹

      ln -s /usr/local/redis/src /usr/local/redis/bin

    9.备份配置文件

      mkdir /usr/local/redis/conf_bak

      cp -rp /usr/local/redis/*.conf /usr/local/redis/conf_bak/

    10.修改配置文件redis.conf

      vi /usr/local/redis/redis.conf

    修改配置如下:
      protected-mode yes
    ##绑定的主机地址
    ##bind <本机ip>
      bind 10.76.64.16
    ##Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程
      daemonize yes
    ##设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步
    #slaveof <masterip> <masterport>
      slaveof 10.76.64.16 6379 (为主服务器的 ip端口号)
    ##当master服务设置了密码保护时,slav服务连接master的密码
    #masterauth <master-password>
      masterauth redis2ac
    ##设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过AUTH <password>命令提供密码,默认关闭
    #requirepass <master-password>
      requirepass redis2ac

    11.修改哨兵配置

      vi /usr/local/redis/sentinel.conf

    修改配置如下:

    ##bind <本机ip>
      bind 10.76.64.16
    ##Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程
      daemonize yes
    ##sentinel monitor mymaster <主机master ip> <主机master port> 1
      sentinel monitor mymaster 10.76.64.16 6379 1(为主服务器的 ip端口号)
    ##sentinel auth-pass mymaster <主机master redis密码>
      sentinel auth-pass mymaster redis2ac

    12.redis服务启动

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

    13.reids哨兵进程启动

      /usr/local/redis/bin/redis-sentinel /usr/local/redis/sentinel.conf

    注意:配完之后,项目在Linux环境,启动出现问题。 

    错误信息: 
    Error redis clients jedis HostAndPort cant resolve localhost address

    07-Aug-2017 15:44:52.529 SEVERE [localhost-startStop-1] redis.clients.jedis.HostAndPort.getLocalHostQuietly cant resolve localhost address
     java.net.UnknownHostException: template: template: Name or service not known
        at java.net.InetAddress.getLocalHost(InetAddress.java:1473)
        at redis.clients.jedis.HostAndPort.getLocalHostQuietly(HostAndPort.java:105)
        at redis.clients.jedis.HostAndPort.<clinit>(HostAndPort.java:12)
        at redis.clients.jedis.JedisFactory.<init>(JedisFactory.java:37)
        at redis.clients.jedis.JedisPool.<init>(JedisPool.java:185)
        at redis.clients.jedis.JedisPool.<init>(JedisPool.java:162)
        at redis.clients.jedis.JedisPool.<init>(JedisPool.java:92)
        at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.createRedisPool(JedisConnectionFactory.java:227)

    解决办法:

    • 1.查看Linux系统的主机名
    • [root@template conf]# hostname
      DSWX
      [root@template conf]# 
    • 2.查看/etc/hosts文件中是否有127.0.0.1对应主机名,如果没有则添加 DSWX
    • 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 DSWX
      ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

      再次启动即可。

    redis主从复制过程:

    当配置好slave后,slave与master建立连接,然后发送sync命令。无论是第一次连接还是重新连接,master都会启动一个后台进程,将 数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存。后台进程完成写文件后,master就发送文件给slave,slave将 文件保存到硬盘上,再加载到内存中,接着master就会把缓存的命令转发给slave,后续master将收到的写命令发送给slave。

    如果master同时收到多个slave发来的同步连接命令,master只会启动一个进程来写数据库镜像,然后发送给所有的slave。master同步数据时是非阻塞式的,可以接收用户的读写请求。然而在slave端是阻塞模式的,slave在同步master数据时,并不能够响应客户端的查询。

    可以在master禁用数据持久化,只需要注释掉master 配置文件中的所有save配置,然后只在slave上配置数据持久化

    拥有主从服务器的好处(从服务器是只读的,可以一主多从)

    1.    主服务器进行读写时,会转移到从读,减轻服务器压力

    2.    热备份 主从都可以设置密码,也可以密码不一致

      

  • 相关阅读:
    自己写的jQuery放大镜插件效果(一)(采用一张大图和一张小图片的思路)
    javascript 节点操作拷贝节点cloneNode()
    javascript节点操作移出节点removeChild()
    写的一个封拆包代码
    C#_socket拆包_封包_模拟乱序包
    VS2010使用DX报错 VS报错之混合模式程序集是针对“v1.1.4322”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。
    C#_C++_SDK_WM_KEYDOWN人物卡顿延迟解决方法
    MYSQL游标的使用
    MYSQL异常和错误机制
    CRM中的一个函数,保存一下,别系统被ぅ崩坏就麻烦了.
  • 原文地址:https://www.cnblogs.com/yuuhoo/p/8981701.html
Copyright © 2011-2022 走看看