设为首页 收藏本站
查看: 1280|回复: 0

[经验分享] 在 Azure Linux 虚拟机上配置 Redis 集群

[复制链接]

尚未签到

发表于 2017-6-30 13:17:46 | 显示全部楼层 |阅读模式
在 Azure Linux 虚拟机上配置 Redis 集群
介绍
  Redis 是开源的(BSD 许可),内存数据结构化存储(in-memory data structure store),可用作数据库,缓存和消息中间件。它支持多种类型的数据结构,比如字符串,散列,列表,集合,有序集合与范围查询(sorted sets with range queries),bitmaps, hyperloglogs 以及 geospatial indexes with radius queries。
  Redis 内置了复制,LUA 脚本,LRU 驱动时间,事务和不同级别的磁盘持久化,并通过 Sentinel 和自动分区提供高可用性。
  本文档介绍如何在 Azure Linux 虚拟机上安装配置免费的 Redis 集群。
  Azure 有提供收费的 Redis 服务,请参考 Azure Redis tutorial 获取详细信息。
安装 Redis
  如果您还没有 Azure 下的 LINUX 虚拟机,请参考 Azure Linux VM tutorial 创建 LINUX 虚拟机。
  连接到您的 LINUX 虚拟机。如果这是您第一次使用 Azure 的 LINUX 虚拟机,请参考 Azure Linux VM tutorial 连接到虚拟机。
  不同的 LINUX 发行版在安装 Redis 时有少许的不同。请根据您的 LINUX 版本选择对应的步骤。

  •   准备
      Redhat base Linux: ( 以 CentOS 7.0, 64-bit system, Redis 3.0.7 为例) 安装 wget 和 gcc
    $sudo yum install wget -y
    $sudo yum install gcc -y
      Ubuntu Linux: (以 Ubuntu 14.04, 64-bit system, Redis 3.0.7 为例) 安装 gcc 和 make
    $sudo apt-get update
    $sudo apt-get install gcc -y
    $sudo apt-get install make -y
      SUSE Linux: (以 SLES 12, 64-bit system, Redis 3.0.7 为例) 安装 gcc
    $sudo zypper install gcc -y
  •   安装和启动 Redis. (下面2-5 步骤对于 RHEL, Ubuntu 和 SUSE 来讲都是一样的. 以 CentOS 7.0, 64-bit system, Redis 3.0.7 为例)
    $cd /usr/local
    $sudo wget http://download.redis.io/releases/redis-3.0.7.tar.gz
    $sudo tar xzvf redis-3.0.7.tar.gz
    $sudo ln -s redis-3.0.7 redis
    $cd redis
    $sudo make

    $sudo cp redis.conf /etc/
    $sudo sed -i 's/daemonize no/daemonize yes/' /etc/redis.conf
    $cd src
    $sudo ./redis-server /etc/redis.conf                    #start redis daemon
  •   查看 redis daemon (如果能看到类似下列信息,表明 Redis 正常工作)
    $sudo ./redis-cli
    127.0.0.1:6379> set foo bar
    OK
    127.0.0.1:6379> get foo
    "bar"
    127.0.0.1:6379>
  •   打开6379端口。6379端口是 Redis 的默认端口。请参考创建终结点打开端口
  •   停掉 Redis 的命令
    $sudo ./redis-cli shutdown
复制
  Redis 复制很简单易用,它通过配置允许 slave Redis Servers 是 Master Servers 的完完全全的复制品。接下来有几个关于 redis 复制的非常重要的特性:

  • 一个 Master 可以有多个 Slaves 。
  • Slaves 能接受来自其他 slave 的链接: 除了可以接受同一个 master 下面 slaves 的链接以外,还可以接受同一个结构图中的其他 slaves 的链接。
  • redis 复制在 master 段是非阻塞的,这就意味着 master 在同一个或多个 slave 端执行同步的时候还可以接受查询。
  • 复制在 slave 端也是非阻塞的,假设你在 redis.conf 中配置 redis 这个功能,当 slave 在执行新的同步时,它仍可以用旧的数据信息来提供查询,否则,你可以配置当 redis slaves 与 master 失去联系时,slave 会返回一个客户端错误。
  • 为了有多个 slaves 可以做只读查询,复制可以重复2次,甚至多次,具有可扩展性(例如:slaves 对话与重复的排序操作,有多份数据冗余就相对简单了)。
  • 通过复制可以避免 master 全量写硬盘的消耗:只要配置 master 的配置文件 redis.conf 来‘避免保存’(注释掉所有 ‘save’ 命令),然后连接一个用来持久化数据的 slave 即可。但是这样要确保 master 不会自动重启。
配置复制
  配置步骤对于 Redhat, Ubuntu 和 SUSE 来讲都一样. 以下面这几台虚拟机作为示例


NameIPRoleCENTOS192.168.1.1Master of UBUNTUUBUNTU192.168.1.2Slave of CENTOS, master of SLESSLES192.168.1.3Slave of UBUNTU

  • 在每台虚拟机安装 Redis 3.0.7 以及打开6379端口. 建议这几台虚拟机都位于同一个数据中心下,比如区域都是中国东部或者中国北部,以降低网络延迟。
  •   去到 UBUNTU 虚拟机, 执行下面命令
    $ sudo sed -i 's/# slaveof <masterip> <masterport>/slaveof 192.168.1.1 6379/' /etc/redis.conf
    $ sudo /usr/local/redis/src/redis-cli shutdown
    $ sudo /usr/local/redis/src/redis-server /etc/redis.conf
  •   去到 SLES 虚拟机, 执行下面命令
    $ sudo sed -i 's/# slaveof <masterip> <masterport>/slaveof 192.168.1.2 6379/' /etc/redis.conf
    $ sudo /usr/local/redis/src/redis-cli shutdown
    $ sudo /usr/local/redis/src/redis-server /etc/redis.conf
  •   验证。去到 CentOS 虚拟机,执行下面命令
    $sudo /usr/local/redis/src/redis-cli
    127.0.0.1:6379> set hello world
    OK
    127.0.0.1:6379> get hello
    "world"
    127.0.0.1:6379>
  •   去到 Ubuntu 和 SLES虚拟机,进行验证。执行下面命令
    $sudo /usr/local/redis/src/redis-cli
    127.0.0.1:6379> get hello
    "world"
    127.0.0.1:6379>
  如果结果类似上面输出,表明复制配置成功。
Redis 集群
  本节是 Redis 集群的一般介绍,没有涉及复杂难懂的分布式概念的赘述,只是提供了从用户角度来如何搭建测试以及使用的方法,如果您打算使用并深入了解 Redis 集群,推荐阅读完本节后,仔细阅读官网文档
  Redis 集群是一个提供在多个 Redis 节点间共享数据的程序集 Redis 集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下继续处理命令. Redis 集群的优势

  • 自动分割数据到不同的节点上。
  • 整个集群的部分节点失败或者不可达的情况下能够继续处理命令。
配置 Redis 集群

    •   基本信息如下(至少需要六个节点,所以在两台虚拟机上,开启不同的端口实例.)


      NameIPPort Cluster BusPortRoleCentOS104.40.91.31700017000masterCentOS104.40.91.31700117001masterCentOS104.40.91.31700217002slaveUbuntu104.40.94.121700317003masterUbuntu104.40.94.121700417004slaveUbuntu104.40.94.121700517005slave
    •   Redis version 3.0 及以上支持集群。在各个虚拟机上安装 Redis 3.0.7并且打开上表中相应的端口.
    •   安装 ruby, rubygems, redis gem
        Redhat base Linux: ( 以 CentOS 7.0, 64-bit system 为例)
      $sudo yum install ruby -y
      $sudo yum install rubygems
      $sudo gem install redis
        Ubuntu Linux: (以Ubuntu 14.04, 64-bit system 为例)
      $sudo apt-get install ruby -y
      $sudo gem install redis
        SUSE Linux: (以 SLES 12, 64-bit system 为例)
      $sudo gem install redis
    •   在 CentOS 虚拟上执行4-7步骤
      $sudo mkdir /usr/local/redis-cluster
      $sudo mkdir /usr/local/redis-cluster/7000
      $ sudo mkdir /usr/local/redis-cluster/7001
      $ sudo mkdir /usr/local/redis-cluster/7002
      $sudo cp /usr/local/redis/src/redis-server /usr/local/redis-cluster/7000/
      $sudo cp /usr/local/redis/src/redis-server /usr/local/redis-cluster/7001/
      $sudo cp /usr/local/redis/src/redis-server /usr/local/redis-cluster/7002/
      $sudo cp /etc/redis.conf /usr/local/redis-cluster/7000/
    •   编辑 /usr/local/redis-cluster/7000/redis.conf, 使得各参数的值和下面一致
      $sudo vi /usr/local/redis-cluster/7000/redis.conf
      port 7000
      daemonize yes
      cluster-enabled yes
      cluster-config-file nodes.conf
      cluster-node-timeout 5000
      appendonly yes
    •   复制 /usr/local/redis-cluster/7000/redis.conf 到 7001 和7002 目录, 修改端口信息。
      $sudo cp /usr/local/redis-cluster/7000/redis.conf /usr/local/redis-cluster/7001/
      $sudo cp /usr/local/redis-cluster/7000/redis.conf /usr/local/redis-cluster/7002/
      $sudo sed -i 's/port 7000/port 7001/' /usr/local/redis-cluster/7001/redis.conf
      $sudo sed -i 's/port 7000/port 7002/' /usr/local/redis-cluster/7002/redis.conf
    •   启动各节点
      $cd /usr/local/redis-cluster/7000
      $sudo ./redis-server ./redis.conf
      $cd ../7001
      $sudo ./redis-server ./redis.conf
      $cd ../7002
      $sudo ./redis-server ./redis.conf
    •   在 Ubuntu 虚拟机执行8-11步骤
      $sudo mkdir /usr/local/redis-cluster
      $sudo mkdir /usr/local/redis-cluster/7003
      $ sudo mkdir /usr/local/redis-cluster/7004
      $ sudo mkdir /usr/local/redis-cluster/7005
      $sudo cp /usr/local/redis/src/redis-server /usr/local/redis-cluster/7003/
      $sudo cp /usr/local/redis/src/redis-server /usr/local/redis-cluster/7004/
      $sudo cp /usr/local/redis/src/redis-server /usr/local/redis-cluster/7005/
      $sudo cp /etc/redis.conf /usr/local/redis-cluster/7003/
    •   编辑 /usr/local/redis-cluster/7003/redis.conf, 使得各参数的值和下面的一致
      $sudo vi /usr/local/redis-cluster/7003/redis.conf
      port 7003
      daemonize yes
      cluster-enabled yes
      cluster-config-file nodes.conf
      cluster-node-timeout 5000
      appendonly yes
    •   复制 /usr/local/redis-cluster/7003/redis.conf 到7004 和7005 目录, 修改端口信息
      $sudo cp /usr/local/redis-cluster/7003/redis.conf /usr/local/redis-cluster/7004/
      $sudo cp /usr/local/redis-cluster/7003/redis.conf /usr/local/redis-cluster/7005/
      $sudo sed -i 's/port 7003/port 7004/' /usr/local/redis-cluster/7004/redis.conf
      $sudo sed -i 's/port 7003/port 7005/' /usr/local/redis-cluster/7005/redis.conf
    •   启动各节点
      $cd /usr/local/redis-cluster/7003
      $sudo ./redis-server ./redis.conf
      $cd ../7004
      $sudo ./redis-server ./redis.conf
      $cd ../7005
      $sudo ./redis-server ./redis.conf
    •   创建集群。在 CentOS 虚拟机上执行
      $ sudo /usr/local/redis/src/redis-trib.rb create --replicas 1 104.40.91.31:7000 104.40.91.31:7001         104.40.91.31:7002 104.40.94.121:7003 104.40.94.121:7004 104.40.94.121:7005
        如果看到下面的信息,输入‘yes’即可
      DSC0000.jpg

        之后如果看到下面的信息,表明集群设置成功。
      DSC0001.jpg

    •   验证。去到 CentOS 虚拟机, 执行下面命令
      $cd /usr/local/redis/src
      $sudo ./redis-cli -c -p 7000
      127.0.0.1:7000> set foo bar
      -> Redirected to slot [12182] located at 104.40.91.31:7001
      OK
      104.40.91.31:7001> get foo
      "bar"
      104.40.91.31:7001> set hello world
      -> Redirected to slot [866] located at 104.40.91.31:7000
      OK
      104.40.91.31:7000> get hello
      "world"
      104.40.91.31:7000> set name alex
      -> Redirected to slot [5798] located at 104.40.94.121:7003
      OK
      104.40.94.121:7003> get name
      "alex"
      104.40.94.121:7003> set id 9
      OK
      104.40.94.121:7003> get id
      "9"
      104.40.94.121:7003>
        去到 Ubuntu 虚拟机,执行下面命令
      $cd /usr/local/redis/src
      $sudo ./redis-cli -p 7003
      127.0.0.1:7003> get name
      "alex"
      127.0.0.1:7003> get id
      "9"
      127.0.0.1:7003> get foo
      (error) MOVED 12182 104.40.91.31:7001
      127.0.0.1:7003> get hello
      (error) MOVED 866 104.40.91.31:7000
      127.0.0.1:7003>
        我们获取不到键 ‘foo’ 和 ‘hello’的值, 因为它们不在 Ubuntu:7003 节点上。我们要到 CentOS:7001 节点上查看键 ‘foo’ 的值。
      $cd /usr/local/redis/src
      $sudo ./redis-cli -p 7001
      127.0.0.1:7001> get foo
      "bar"
        或者我们可以在 Ubuntu 虚拟机执行下面命令检查各个键的值。
      $cd /usr/local/redis/src
      $sudo ./redis-cli -c -p 7003
      127.0.0.1:7003> get foo
      -> Redirected to slot [12182] located at 104.40.91.31:7001
      "bar"
      104.40.91.31:7001> get hello
      -> Redirected to slot [866] located at 104.40.91.31:7000
      "world"
      104.40.91.31:7000>
    •   查看集群信息. 在 CentOS 虚拟机上执行
      $cd /usr/local/redis/src
      $sudo ./redis-cli -p 7000 cluster nodes
      $sudo ./redis-cli -p 7000 cluster info


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-389667-1-1.html 上篇帖子: 从global到mooncake迁移SQL Azure 下篇帖子: Windows Azure HandBook (9) Azure性能测试(2)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表