您的位置:首页 > 数据库 > Redis

redis3.2.1集群安装部署

2017-09-11 18:43 501 查看
二、redis cluster安装

    1、下载和解包

 2、 编译安装

cd redis-3.2.1
make && make install    


     进入解压后的目录,并执行编译操作:  make test 

          

      编译测试结束后,出现以下信息,证明没有问题:编译的命令放在src目录下

   

  

  编译成功之后,执行install操作即可:sudo make install
 

 3、创建redis节点

     测试我们选择2台服务器,分别为:192.168.1.237,192.168.1.238.每分服务器有3个节点。

  我先在192.168.1.237创建3个节点:

cd /usr/local/
mkdir redis_cluster  //创建集群目录
mkdir 7000 7001 7002  //分别代表三个节点    其对应端口 7000 7001 7002
//创建7000节点为例,拷贝到7000目录
cp /usr/local/redis-3.2.1/redis.conf  ./redis_cluster/7000/
//拷贝到7001目录
cp /usr/local/redis-3.2.1/redis.conf  ./redis_cluster/7001/
//拷贝到7002目录
cp /usr/local/redis-3.2.1/redis.conf  ./redis_cluster/7002/


   分别对7001,7002、7003文件夹中的3个文件修改对应的配置

daemonize    yes                          //redis后台运行
pidfile  /var/run/redis_7000.pid          //pidfile文件对应7000,7002,7003
port  7000                                //端口7000,7002,7003
cluster-enabled  yes                      //开启集群  把注释#去掉
cluster-config-file  nodes_7000.conf      //集群的配置  配置文件首次启动自动生成 7000,7001,7002
cluster-node-timeout  5000                //请求超时  设置5秒够了
appendonly  yes                           //aof日志开启  有需要就开启,它会每次写操作都记录一条日志


   在192.168.1.238创建3个节点:对应的端口改为7003,7004,7005.配置对应的改一下就可以了。

   4、两台机启动各节点(两台服务器方式一样)

cd /usr/local
redis-server  redis_cluster/7000/redis.conf
redis-server  redis_cluster/7001/redis.conf
redis-server  redis_cluster/7002/redis.conf
redis-server  redis_cluster/7003/redis.conf
redis-server  redis_cluster/7004/redis.conf
redis-server  redis_cluster/7005/redis.conf


   5、查看服务

      ps -ef | grep redis   #查看是否启动成功

     netstat -tnlp | grep redis #可以看到redis监听端口

     记得对每台服务上redis监听的10000+端口号进行开启,如17000/17001/17002,不一定是这个号

       sudo iptables -A INPUT -p tcp --dport 17000 -j DROP

       sudo iptables -A INPUT -p tcp --dport 17001 -j DROP

      
sudo iptables -A INPUT -p tcp --dport 17002 -j DROP

      

     
  每台服务上关闭防火墙

     
  service iptables stop

三、创建集群

  前面已经准备好了搭建集群的redis节点,接下来我们要把这些节点都串连起来搭建集群。官方提供了一个工具:redis-trib.rb(/usr/local/redis-3.2.1/src/redis-trib.rb) 看后缀就知道这鸟东西不能直接执行,它是用ruby写的一个程序,所以我们还得安装ruby.

yum -y install ruby ruby-devel rubygems rpm-build


  再用 gem 这个命令来安装 redis接口    gem是ruby的一个工具包.

gem install redis    //等一会儿就好了
当然,方便操作,两台Server都要安装。


  上面的步骤完事了,接下来运行一下redis-trib.rb

/usr/local/redis-3.2.1/src/redis-trib.rb


   Usage: redis-trib <command> <options> <arguments ...>

   reshard        host:port

                  --to <arg>

                  --yes

                  --slots <arg>

                  --from <arg>

  check          host:port

  call            host:port command arg arg .. arg

  set-timeout    host:port milliseconds

  add-node        new_host:new_port existing_host:existing_port

                  --master-id <arg>

                  --slave

  del-node        host:port node_id

  fix            host:port

  import          host:port

                  --from <arg>

  help            (show this help)

  create          host1:port1 ... hostN:portN

                  --replicas <arg>

For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.

     看到这,应该明白了吧, 就是靠上面这些操作 完成redis集群搭建的.

 确认所有的节点都启动,接下来使用参数create 创建 (在192.168.1.237中来创建)

/usr/local/redis-3.2.1/src/redis-trib.rb  create  --replicas  1  192.168.1.237:7000 192.168.1.237:7001  192.168.1.237:7003 192.168.1.238:7003  192.168.1.238:7004  192.168.1.238:7005


    解释下, --replicas  1  表示 自动为每一个master节点分配一个slave节点    上面有6个节点,程序会按照一定规则生成 3个master(主)3个slave(从)

    前面已经提醒过的 防火墙一定要开放监听的端口,否则会创建失败。

 运行中,提示Can I set the above configuration? (type 'yes' to accept): yes    //输入yes

 接下来 提示  Waiting for the cluster to join..........  安装的时候在这里就一直等等等,没反应,傻傻等半天,看这句提示上面一句,Sending Cluster Meet Message to join the Cluster.

    这下明白了,我刚开始在一台Server上去配,也是不需要等的,这里还需要跑到Server2上做一些这样的操作。

    在192.168.1.238, redis-cli -c -p 700*  分别进入redis各节点的客户端命令窗口, 依次输入 cluster meet 192.168.1.238 7000……

    回到Server1,已经创建完毕了。

    查看一下 /usr/local/redis/src/redis-trib.rb check 192.168.1.237:7000

    到这里集群已经初步搭建好了。

  访问某一个节点

 redis-cli -h 192.168.46.145
-p 7000
 redis-cli -h 192.168.46.146 -p 7003

四、测试

1)get 和 set数据

    redis-cli -c -p 7000

    进入命令窗口,直接 set  hello  howareyou

    直接根据hash匹配切换到相应的slot的节点上。

    还是要说明一下,redis集群有16383个slot组成,通过分片分布到多个节点上,读写都发生在master节点。

  2)假设测试

    果断先把192.168.1.238服务Down掉,(192.168.1.238有1个Master, 2个Slave) ,  跑回192.168.1.238, 查看一下 发生了什么事,192.168.1.237的3个节点全部都是Master,其他几个Server2的不见了

    测试一下,依然没有问题,集群依然能继续工作。

    原因:  redis集群  通过选举方式进行容错,保证一台Server挂了还能跑,这个选举是全部集群超过半数以上的Master发现其他Master挂了后,会将其他对应的Slave节点升级成Master.

    疑问: 要是挂的是192.168.1.237怎么办?    哥试了,cluster is down!!    没办法,超过半数挂了那救不了了,整个集群就无法工作了。 要是有三台Server,每台两Master,切记对应的主从节点

            不要放在一台Server,别问我为什么自己用脑子想想看,互相交叉配置主从,挂哪台也没事,你要说同时两台crash了,呵呵哒......

  3)关于一致性

    我还没有这么大胆拿redis来做数据库持久化哥网站数据,只是拿来做cache,官网说的很清楚,Redis Cluster is not able to guarantee strong consistency. 

五、安装遇到的问题

     1、

  CC adlist.o

  /bin/sh: cc: command not found

  make[1]: *** [adlist.o] Error 127

  make[1]: Leaving directory `/usr/local/redis-3.2.1/src

  make: *** [all] Error 2

     解决办法:GCC没有安装或版本不对,安装一下

yum  install  gcc


   2、

  zmalloc.h:50:31: 

  error: jemalloc/jemalloc.h: No such file or directory

  zmalloc.h:55:2: error: 

  #error "Newer version of jemalloc required"

  make[1]: *** [adlist.o] Error 

  1

  make[1]: Leaving directory `/data0/src/redis-2.6.2/src

  make: *** [all] 

  Error 2

    解决办法:原因是没有安装jemalloc内存分配器,可以安装jemalloc 或 直接

     输入make MALLOC=libc  && make install

  3、Redis need tcl 8.5 or newer

hadoop@stormspark:~/workspace/redis2.6.13/src$ make test
You need tcl 8.5 or newer in order to run the Redis test
make: *** [test] Error 1

[html] view
plain copy

wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz  

sudo tar xzvf tcl8.6.1-src.tar.gz  -C /usr/local/  

cd  /usr/local/tcl8.6.1/unix/  

sudo ./configure  

sudo make  

sudo make install   

4、redis
requires Ruby version >= 2.2.2问题

最近在研究redis的集群,redis官方提供了redis-trib.rb工具,但是在使用之前
需要安装ruby,以及redis和ruby连接:

yum -y install ruby ruby-devel rubygems rpm-build

gem install redis

其中 gem install redis命令执行时出现了:

 redis requires Ruby version >= 2.2.2的报错,查了资料发现是Centos默认支持ruby到2.0.0,可gem 安装redis需要最低是2.2.2

解决办法是 先安装rvm,再把ruby版本提升至2.3.3

1.安装curl

sudo yum install curl

2. 安装RVM

curl -L get.rvm.io | bash -s stable 

3. 

source /usr/local/rvm/scripts/rvm

4. 查看rvm库中已知的ruby版本

rvmlist
known

5. 安装一个ruby版本

rvminstall 2.3.3

6. 使用一个ruby版本

rvmuse 2.3.3

7. 设置默认版本

rvmremove 2.0.0

8. 卸载一个已知版本

ruby --version

9. 再安装redis就可以了
geminstall
redis

6.Node
192.168.7.232:7000 is not empty.

 Sending CLUSTER MEET messages to join the cluster

Waiting for the cluster to join.......................................

在这里的时候卡了很久没过去,我就结束了想重新再试下

Connecting to node 192.168.7.232:7000: OK

[ERR] Node 192.168.7.232:7000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.

提示有数据了,我想是开始初始化的时候有写数据进去了

把7000目录下生成的appendonly.aof    nodes.conf 删除掉重启启动服务,

想起来我是把7.232上面的服务启动后把7000 7001 直接传到237 和246上面去的,为了节省建目录和copy配置文件的操作,这样导致机器加入集群的时候一直在等待,

把3台机器的6个服务的appendonly.aof    nodes.conf都删了,同时记得删除每台服务器下的/var/run/redis_*.pid,重新启动服务再执行,

单机时redis的常见安装编译及测试验证:

一  下载 Redis 安装包

  去redis 官网下载reids 安装包, redis 官网默认只提供Linux 的安装包,所以不用担心下载到windows 的安装包.笔者下载的是 redis-3.2.1.tar.gz. 下载的为redis 源码,应该使用源码安装方式安装redis.

二 安装redis 

      1. 解压: tar -zxvf redis-3.2.1.tar.gz

           


      2. 进入解压后的目录,并执行编译操作:  make test 

          


     3. 编译测试结束后,出现以下信息,证明没有问题:编译的命令放在src目录下

   

  

 4. 编译成功之后,执行install操作即可:sudo make install

        


    5. 目前redis 已经安装成功了redis 的相关命令都存放在../redis-3.2.1/src 目录下,同时在/usr/local/bin/ 目录下生成了如下文件:

        


 

二 redis 的卸载

 1. 查看reids 是否在运行,如果在运行的话,先关闭

         


  从图上可以看出,redis-server 目前正在6379 端口运行

 2. 如果redis-server 服务正在后台运行,那么需停止redis-server 服务:

  正常停止redis-server 服务,使用reids 客户端命令: redis-cli shutdown

  


  如果停止不了,则采取杀死进程的方式:kill -9 PID

  


    3. 删除/usr/local/lib 目录下与redis 相关的命令:

        


     4. 删除redis 解压后的目录 redis-3.2.1 即可

三 redis 的启动

  redis 安装成功之后,会生成相应的reids 命令文件, 所有的命令都在src 目录下,同时会再/usr/local/bin 目录下生成reids-* 的几个命令,这样我们在调用redis 的相关命令的时候可以不使用绝对路径.启动reids 有很多中方式,后台启动,脚本启动等.

  1. redis 后台启动: redis-server &

            此种方式没有指定配置文件,会使用默认的配置,并打印一个Warning: no config file ....

           


   按ctrl + C 可退出redis 启动窗口,此时redis 并不会关闭,而是会再后台运行,可通过命令查看: ps aux | grep redis

            


      

       2. 指定配置文件启动: redis-server  ***/redis.conf

           解压redis 的原文后, 目录中有一个redis 配置模板 redis.conf , 我们可以复制一份,然后修改成自己的redis配置文件. 此处笔者只修改一个端口号, 将端口号修改为8080, 然后使用 此配置文件启动redis 服务

         


   关闭使用命令: redis-cli -p 8080 shutdown 

     3. 设置开机启动:

四 redis 客户客户段连接:

  redis 安装成功之后,会生成redis-cli 客户端, 可以通过redis-cli 命令连接本地或者远程的redis服务器.redis-cli 命令有很多参数,常用的选项有-h -p -u -a , 对应于ip地址,端口号,用户名,密码,可通过 redis-cli --help 来查看redis-cli 的常用选项

  1. 连接本地redis 示例:

   


        2. 连接远程redis: 

           


五 关闭redis

       1. 正常关闭本地redis :  redis-cli shutdown, 默认关闭本地6379的redis

   

        

            如果正常关闭不了,可以通过杀死线程关闭:

   


 2. 远程关闭redis 服务器: redis-cli -h xxx.xxx.xxx.xxx  -p xxxx -u xxxx -a xxxx  shutdown

         


本文参考:http://blog.csdn.net/zgf19930504/article/details/51850594
http://www.cnblogs.com/yuanermen/p/5717885.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  redis 集群