zoukankan      html  css  js  c++  java
  • Redis实战与分析

    楼主在实现一分布式存储系统时,拟采用Redis来做一个pull的过程来进行多机之间的数据拉取,于在此将redis安装部署过程分享一下,并学习波Redis的内部存储结构,Redis中间的hash环问题,以及Redis集群的主从模式。

    redis单机安装

    #直接复制下载链接,通过wget下载
    $ wget http://download.redis.io/releases/redis-4.0.1.tar.gz
    #解压
    $ tar zxvf redis-4.0.1.tar.gz
    # 进入目录
    $ cd redis-4.0.1/
    # 编译
    $ make         //找不到CC命令的话,自行安装GCC

    如果make报错,信息如下:error:jemalloc/jemalloc.h: No such file or directory

    执行 make MALLOC=libc

    $ cd src
    # 安装
    $ make install     //此时usr/local/bin下 会产生redis-benchmark  redis-check-aof  redis-check-rdb  redis-cli  redis-sentinel  redis-server
    可使用redis-server  -v查看版本
    然后,在终端输入redis-server看到如下界面,说明安装成功

    使用redis-server  redis/redis-4.0.1/redis.conf 可以开启redis客户端,默认前台运行。

    使用redis-cli  -h  IP地址  -P  端口号开启redis客户端

    eg  :redis -h 127.0.0.0 -p 6397  

    查看redis              :ps  aux|grep redis

    干掉redis-server  :pkill redis-server

    redis多机部署

    三台机器:192.168.0.100   192.168.0.101    192.168.0.102 

    每台机器两个redis端口:6001 6004   , 6002 6005   ,  6003 6006.

    每台机器建立文件夹  /var/redis-cluster/6001    /var/redis-cluster/6004  

    根据每台机器不同端口号修改文件夹名称,共3个redis-cluster,每个cluster 两个600x文件夹,一共 6个600x文件夹。

    在每个600x文件夹下创建三个文件夹 conf   data   log  ,其中data 用于存储信息,logs 用于存储日志,conf 放配置信息

    将在开始解压出的文件夹下的redis.conf分别copy到6个600x/conf文件夹下。(可自行写脚本做)

    对每个复制过来的redis.conf进行修改

    port  修改为对相应的端口号  

    bind修改为自己的ip地址

    daemonize yes #是否以后台daemon方式运行,默认不是后台运行

    余下配置:

    pidfile /var/run/redis/redis.pid #redis的PID文件路径

    logfile /var/redis-cluster/6001/log/redis-6001.log #定义log文件位置

    dir /var/redis-cluster/6001/data #本地数据库存放路径

    appendonly yes #打开aof持久化,不适用save

    cluster-enabled yes //开启集群 把注释#去掉

    cluster-config-file nodes_6001.conf //集群的配置

    cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置

    每台机器每个端口号上根据各自端口号都设置好(集群规模大可以写脚本来搞定)

    6个端口都运行以启动redis-server

    redis-server  /var/redis-cluster/6001/conf/redis.conf

    集群建立

    redis /src中已经提供了建立redis集群的工具redis-trib.rb,

    可以直接./redis-trib.rb create --replicas 1 xxx.xxx.xxx.xxx:6001 xxx.xxx.xxx.xxx:6002 xxx.xxx.xxx.xxx:6003 xxx.xxx.xxx.xxx:6004 xxx.xxx.xxx.xxx:6005 xxx.xxx.xxx.xxx:6006  建立集群

    只不过这玩意是用Ruby来做的,必须要现有Ruby环境

    yum -y install ruby ruby-devel rubygems rpm-build   //一般这样安装下来ruby版本太低,需要更新ruby版本

    gem install redis

    更新Ruby版本

    ①添加yum源安装:CentOS SCLo Software collections Repository    

    yum install centos-release-scl-rh    //会在/etc/yum.repos.d/目录下多出一个CentOS-SCLo-scl-rh.repo源
    ~]# yum install rh-ruby23  -y    //直接yum安装即可  
    ~]# scl  enable  rh-ruby23 bash    //必要一步
    ~]# ruby -v   

    ②下载tar压缩包安装

    ~]# wget http://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.5.tar.gz
    ~]# tar zxvf  ruby-2.3.5.tar.gz
    ~]# cd ruby-2.3.5
    ruby-2.3.5]# ./configure  --prefix=/opt/ruby
    ruby-2.3.5]# make && make install
    ruby-2.3.5]# ln -s /opt/ruby/bin/ruby /usr/bin/ruby
    ruby-2.3.5]# ln -s /opt/ruby/bin/gem /usr/bin/gem
    ~]#ruby -v    //查看一下

    ③RVM(Ruby Version Manager)安装(相对官方)  

    ~]#gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
    ~]# curl -sSL https://get.rvm.io | bash -s stable
    上边这两行绿的不是注释,是网址
    ~]# source /etc/profile.d/rvm.sh    //按照提示,执行该命令 ~]# rvm list known    // list一下可以安装的版本 ~]# rvm install 2.4.1    // 安装ruby 2.4.1 ,直接跟版本号即可 ~]# ruby -v     //查看验证下已经安装的版本 ~]# gem -v

     然后执行上边./redis-trib.rb create --replicas 1 xxx.xxx.xxx.xxx:6001 xxx.xxx.xxx.xxx:6002 xxx.xxx.xxx.xxx:6003 xxx.xxx.xxx.xxx:6004 xxx.xxx.xxx.xxx:6005 xxx.xxx.xxx.xxx:6006  建立集群

    --replicas参数指定集群中每个主节点配备几个从节点,这里设置为1,如果部署节点使用不同的IP地址,redis-trib-rb会尽可能保证主从节点不分配在同一台机器下,因此会重新排序节点表顺序,节点列表顺序用于确定主从角色,先主节点之后是从节点。

    如果执行中出现无法连接的问题主要关注:  防火墙    使用的是新的.conf配置   每台机器的redis-server都开启  

    若有以前执行过的redis-server问题, 用redis-cli 登录到每个节点执行 flushall 和 cluster reset 就可以了。每个都执行一遍,免得又出问题。

    至此结束:

    可以使用redis-cli在节点一上写东西,然后再节点3上获取到。

    下节我们研究redis的底层存储结构,主从模式,以及hash过程。

  • 相关阅读:
    android studio创建模拟器
    mqtt服务搭建(emqx,原emq)
    Kubernetes-Istio之Gateway和VirtualService
    使用jib上传docker镜像
    Kubernetes-Istio之Sidecar自动注入
    Kubernetes-使用Helm安装istio
    kubernetes-安装Helm
    kubernetes-使用Nginx配置ingress-controllers
    kubernetes-使用kubeadm添加node节点
    kubernetes-使用Calico配置NetworkPolicy
  • 原文地址:https://www.cnblogs.com/freedom314/p/10831753.html
Copyright © 2011-2022 走看看