首页 帮助中心 常见问题 Ubuntu 16.04.1上搭建Redis分布式集群并使用C#操作
Ubuntu 16.04.1上搭建Redis分布式集群并使用C#操作
时间 : 2024-09-02 15:28:23 编辑 : 华纳云 阅读量 : 70

  通常为了提高网站的响应速度,总是把一些经常用到的数据放到内存中,而不是放到数据库中,Redis是一个很好的Cache工具,当然了还有Memcached,这里只讲Redis。在我们的电商系统中,热点数据量往往巨大,比如单点登录、用户浏览商品的信息、用户信息、用户收藏的商品信息、短息提醒数据等等,也都用到了redis,如何使redis可以横向可伸缩扩展,这需要由多台机器协同提供服务,一台挂掉了,另一台马上顶上去,即分布式的redis集群,就对系统的性能非常重要。
  Redis集群的几个重要特征:
  (1).Redis 集群的分片特征在于将键空间分拆了16384个槽位,每一个节点负责其中一些槽位。
  (2).Redis提供一定程度的可用性,可以在某个节点宕机或者不可达的情况下继续处理命令.
  (3).Redis 集群中不存在中心(central)节点或者代理(proxy)节点, 集群的其中一个主要设计目标是达到线性可扩展性(linear scalability)。
  (4).Redis集群要想正常工作,必须要三个主节点,在我搭建的集群环境中,三个主节点都需要有一个从节点,所以一共六个节点,通俗来讲也就是需要开启6个redis服务。
  一、安装Redis
  整体结构:
  二、进群环境的配置
  (1)在这里我就开启三台Ubuntu16.04.1,因为电脑8G的内存不够用,如果你电脑内存大可以开启4台或者更多。在这三台中我都安装好了最新版本的Redis。
  (2)集群配置文件的修改
  需要的文件有:
  然后通过下面的命令把上面的文件复制到usr/redis/目录下面:
  首先在usr目录下面创建一个redis和s2目录:sudo mkdir redis;     sudo mkdir s2
  目录创建好后,到上面图中的目录下面,打开终端,执行:cp redis* /usr/redis/,上面图中的文件就会到usr/redis/目录下面,最后到usr/redis/目录下面,打开终端,执行sudo cp redis* /usr/redis/s2/,这是该目录下面也就会有相同的文件了。
  修改redis.conf文件中Cluster的配置,修改如下:
  首先由于权限的问题,我们先要切换到root身份:sudo passwd root命令,先修改root的密码,修改之后,再执行su root  接着输入你设置的root密码就可以切换到root身份,如下:
  最后在root身份执行下图中的命令就可修改redis.conf文件:
  这里只贴出来修改的代码:(红色标注的部分为修改部分)
  # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # bind 127.0.0.1  //注释掉
  # Protected mode is a layer of security protection, in order to avoid that
  # Redis instances left open on the internet are accessed and exploited.
  #
  # When protected mode is on and if:
  #
  # 1) The server is not binding explicitly to a set of addresses using the
  #    "bind" directive.
  # 2) No password is configured.
  #
  # The server only accepts connections from clients connecting from the
  # IPv4 and IPv6 loopback addresses 127.0.0.1 and ::1, and from Unix domain
  # sockets.
  #
  # By default protected mode is enabled. You should disable it only if
  # you are sure you want clients from other hosts to connect to Redis
  # even if no authentication is configured, nor a specific set of interfaces
  # are explicitly listed using the "bind" directive.
  protected-mode no //yes该为no
  # Accept connections on the specified port, default is 6379 (IANA #815344).
  # If port 0 is specified Redis will not listen on a TCP socket.
  port 6379
  # TCP listen() backlog.
  #
  # In high requests-per-second environments you need an high backlog in order
  # to avoid slow clients connections issues. Note that the Linux kernel
  # will silently truncate it to the value of /proc/sys/net/core/somaxconn so
  # make sure to raise both the value of somaxconn and tcp_max_syn_backlog
  # in order to get the desired effect.
  tcp-backlog 511
  # Unix socket.
  #
  # Specify the path for the Unix socket that will be used to listen for
  # incoming connections. There is no default, so Redis will not listen
  # on a unix socket when not specified.
  #
  # unixsocket /tmp/redis.sock
  # unixsocketperm 700
  # Close the connection after a client is idle for N seconds (0 to disable)
  timeout 0
  # TCP keepalive.
  #
  # If non-zero, use SO_KEEPALIVE to send TCP ACKs to clients in absence
  # of communication. This is useful for two reasons:
  #
  # 1) Detect dead peers.
  # 2) Take the connection alive from the point of view of network
  #    equipment in the middle.
  #
  # On Linux, the specified value (in seconds) is the period used to send ACKs.
  # Note that to close the connection the double of the time is needed.
  # On other kernels the period depends on the kernel configuration.
  #
  # A reasonable value for this option is 300 seconds, which is the new
  # Redis default starting with Redis 3.2.1.
  tcp-keepalive 300
  ################################ REDIS CLUSTER  ###############################
  #
  # ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  # WARNING EXPERIMENTAL: Redis Cluster is considered to be stable code, however
  # in order to mark it as "mature" we need to wait for a non trivial percentage
  # of users to deploy it in production.
  # ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  #
  # Normal Redis instances can't be part of a Redis Cluster; only nodes that are
  # started as cluster nodes can. In order to start a Redis instance as a
  # cluster node enable the cluster support uncommenting the following:
  #
  cluster-enabled yes
  # Every cluster node has a cluster configuration file. This file is not
  # intended to be edited by hand. It is created and updated by Redis nodes.
  # Every Redis Cluster node requires a different cluster configuration file.
  # Make sure that instances running in the same system do not have
  # overlapping cluster configuration file names.
  #
  cluster-config-file nodes-6379.conf
  # Cluster node timeout is the amount of milliseconds a node must be unreachable
  # for it to be considered in failure state.
  # Most other internal time limits are multiple of the node timeout.
  #
  # cluster-node-timeout 15000
  # A slave of a failing master will avoid to start a failover if its data
  # looks too old.
  #
  # There is no simple way for a slave to actually have an exact measure of
  # its "data age", so the following two checks are performed:
  #
  # 1) If there are multiple slaves able to failover, they exchange messages
  #    in order to try to give an advantage to the slave with the best
  #    replication offset (more data from the master processed).
  #    Slaves will try to get their rank by offset, and apply to the start
  #    of the failover a delay proportional to their rank.
  #
  # 2) Every single slave computes the time of the last interaction with
  #    its master. This can be the last ping or command received (if the master
  #    is still in the "connected" state), or the time that elapsed since the
  #    disconnection with the master (if the replication link is currently down).
  #    If the last interaction is too old, the slave will not try to failover
  #    at all.
  #
  # The point "2" can be tuned by user. Specifically a slave will not perform
  # the failover if, since the last interaction with the master, the time
  # elapsed is greater than:
  #
  #   (node-timeout * slave-validity-factor) + repl-ping-slave-period
  #
  # So for example if node-timeout is 30 seconds, and the slave-validity-factor
  # is 10, and assuming a default repl-ping-slave-period of 10 seconds, the
  # slave will not try to failover if it was not able to talk with the master
  # for longer than 310 seconds.
  #
  # A large slave-validity-factor may allow slaves with too old data to failover
  # a master, while a too small value may prevent the cluster from being able to
  # elect a slave at all.
  #
  # For maximum availability, it is possible to set the slave-validity-factor
  # to a value of 0, which means, that slaves will always try to failover the
  # master regardless of the last time they interacted with the master.
  # (However they'll always try to apply a delay proportional to their
  # offset rank).
  #
  # Zero is the only value able to guarantee that when all the partitions heal
  # the cluster will always be able to continue.
  #
  # cluster-slave-validity-factor 10
  # Cluster slaves are able to migrate to orphaned masters, that are masters
  # that are left without working slaves. This improves the cluster ability
  # to resist to failures as otherwise an orphaned master can't be failed over
  # in case of failure if it has no working slaves.
  #
  # Slaves migrate to orphaned masters only if there are still at least a
  # given number of other working slaves for their old master. This number
  # is the "migration barrier". A migration barrier of 1 means that a slave
  # will migrate only if there is at least 1 other working slave for its master
  # and so forth. It usually reflects the number of slaves you want for every
  # master in your cluster.
  #
  # Default is 1 (slaves migrate only if their masters remain with at least
  # one slave). To disable migration just set it to a very large value.
  # A value of 0 can be set but is useful only for debugging and dangerous
  # in production.
  #
  # cluster-migration-barrier 1
  # By default Redis Cluster nodes stop accepting queries if they detect there
  # is at least an hash slot uncovered (no available node is serving it).
  # This way if the cluster is partially down (for example a range of hash slots
  # are no longer covered) all the cluster becomes, eventually, unavailable.
  # It automatically returns available as soon as all the slots are covered again.
  #
  # However sometimes you want the subset of the cluster which is working,
  # to continue to accept queries for the part of the key space that is still
  # covered. In order to do so, just set the cluster-require-full-coverage
  # option to no.
  #
  # cluster-require-full-coverage yes
  # In order to setup your cluster make sure to read the documentation
  # available at http://redis.io web site.
  修改完之后 按下ESC 键,再按下  :wq!保存突出。同理,s2中的redis也是这样修改的但是,需要修改一下端口号,不能喝上面的端口号重复,s2中的端口号为6390。
  使用相同的方式修改第二台上redis的配置:只不过在该台机器上只有一个redis服务(节点)

华纳云 推荐文章
Opera进入Ubuntu其他GNU/Linux发行版snap生态应用 windows防火墙如何设置FTP服务方法 CentOS 7环境下使用Nginx托管.Net Core应用程序 Windows系统PING不通问题解决开启和禁止方法 Windows Server云主机操作系统关闭系统内如何自动更新 Windows系统如何设置缩短时间默认同步频率 Ubuntu 16.04+CUDA7.5+Caffe深度环境搭建 Ubuntu 18.04镜像如何安装Tomcat 8.5.31 CentOS 7.x下配置DNS服务器基本操作 Cobbler自动化安装部署Ubuntu和CentOS详细教程
客服咨询
7*24小时技术支持
技术支持
渠道支持