redis安装

参照 

linux下redis安装、启动与停止,redis做成服务

创建redis节点


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

先在192.168.215.129创建3个节点:

cd /usr/software
mkdir redis_cluster //创建集群目录
cd redis_cluster
mkdir 7000 7001 7002  //分别代表三个节点    其对应端口 7000 7001 7002
cd ..
 //创建7000节点为例,拷贝到7000目录
 cp /usr/software/redis-3.2.6/redis.conf  ./redis_cluster/7000/
 //拷贝到7001目录
 cp /usr/software/redis-3.2.6/redis.conf  ./redis_cluster/7001/
 //拷贝到7002目录
 cp /usr/software/redis-3.2.6/redis.conf  ./redis_cluster/7002/
分别对7000,7001、7002文件夹中的3个文件修改对应的配置

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


开放端口:执行 vi /etc/sysconfig/iptables

添加 -A INPUT -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT  即添加了6379端口 其他端口一样操作

然后保存,重启 service iptables restart


关于bind 

有的文章说是访问redis服务的ip,其实不然,亲测,把bind为127.0.0.1  redis启动状态为


  这时通过另外的机器telnet不到。

把bind注释后启动redis   redis启动状态为


 这时通过另外的机器可以telnet到。即任何机器都可以发起连接。bind 0.0.0.0 和注释bind效果一样。

我一开始以为这里绑定的ip才能访问本机的6379端口,结果一修改就启动不了redis服务,后来仔细看了一下配置文件上的说明才明白,原来这个bind的不是来访问的ip,而是本机网卡的物理地址。ifconfig查看IP地址

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


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

cd /usr/software
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


查看服务

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

创建集群


执行redis的创建集群命令创建集群

./redis-trib.rb  create  --replicas  1  192.168.215.129:7000 192.168.215.129:7001  192.168.215.129:7002 192.168.215.130:7003  192.168.215.130:7004  192.168.215.130:7005


执行上面的命令的时候会报错,因为是执行的ruby的脚本,需要ruby的环境
错误内容:/usr/bin/env: ruby: No such file or directory6.1执行上面的命令的时候会报错,因为是执行的ruby的脚本,需要ruby的环境

所以需要安装ruby的环境,这里推荐使用yum install ruby安装

yum install ruby


然后再执行创建集群命令,还会报错,提示缺少rubygems组件,使用yum安装

错误内容:

./redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError)

from ./redis-trib.rb:24

yum install rubygems

再次执行创建集群命令,还会报错,提示不能加载redis,是因为缺少redisruby的接口,使用gem 安装

错误内容:

/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError)

from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'

from ./redis-trib.rb:25

 

gem install  redis --version 3.0.0

注意:gem install redis --version 3.0.0 失败的话,需要修改一下gem的源
gem sources --remove https://rubygems.org/
gem sources -a https://ruby.taobao.org/


如果淘宝的gem源不能用了,要使用ruby-china。 
https://gems.ruby-china.org/

添加ruby-china源:

   
   
  1. [root@zk1 software]# gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
  2. [root@zk1 software]# gem sources -l
  3. *** CURRENT SOURCES ***
  4. https://gems.ruby-china.org/
再次执行创建集群的命令


结果操作一直阻塞在 Waiting for the cluster to join.........................


原因:
redis集群不仅需要开通redis客户端连接的端口,而且需要开通集群总线端口
集群总线端口为redis客户端连接的端口 + 10000
如redis端口为6379
则集群总线端口为16379
故,所有服务器的点需要开通redis的客户端连接端口和集群总线端口

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



开放端口:执行 vi /etc/sysconfig/iptables

添加 -A INPUT -p tcp -m state --state NEW -m tcp --dport 16379 -j ACCEPT  即添加了16379端口 其他端口一样()操作

然后保存,重启 service iptables restart

再次执行创建集群的命令


再次执行创建集群的命令,正常执行

[root@zk1 src]# ./redis-trib.rb  create  --replicas  1  192.168.215.129:7000 192.168.215.129:7001  192.168.215.129:7002 192.168.215.130:7003  192.168.215.130:7004  192.168.215.130:7005
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.215.129:7000
192.168.215.130:7003
192.168.215.129:7001
Adding replica 192.168.215.130:7004 to 192.168.215.129:7000
Adding replica 192.168.215.129:7002 to 192.168.215.130:7003
Adding replica 192.168.215.130:7005 to 192.168.215.129:7001
M: 16518afbfcbd961aeb76ef1592007a3e7fe24b1b 192.168.215.129:7000
   slots:0-5460 (5461 slots) master
M: 524219969118a57ceaac753ecef7585f634cdf26 192.168.215.129:7001
   slots:10923-16383 (5461 slots) master
S: ea4519ff0083a13cef8262490ee9e61e5a4b14b1 192.168.215.129:7002
   replicates 82c0e591b9bc7a289026dff2873a254d1c49d285
M: 82c0e591b9bc7a289026dff2873a254d1c49d285 192.168.215.130:7003
   slots:5461-10922 (5462 slots) master
S: baf74dd89c0605d2a71a8d1d3706005ff668563b 192.168.215.130:7004
   replicates 16518afbfcbd961aeb76ef1592007a3e7fe24b1b
S: f8192314d2232e12ba9f558e9ecbfcc890f4fb73 192.168.215.130:7005
   replicates 524219969118a57ceaac753ecef7585f634cdf26
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join.....
>>> Performing Cluster Check (using node 192.168.215.129:7000)
M: 16518afbfcbd961aeb76ef1592007a3e7fe24b1b 192.168.215.129:7000
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: ea4519ff0083a13cef8262490ee9e61e5a4b14b1 192.168.215.129:7002
   slots: (0 slots) slave
   replicates 82c0e591b9bc7a289026dff2873a254d1c49d285
S: f8192314d2232e12ba9f558e9ecbfcc890f4fb73 192.168.215.130:7005
   slots: (0 slots) slave
   replicates 524219969118a57ceaac753ecef7585f634cdf26
S: baf74dd89c0605d2a71a8d1d3706005ff668563b 192.168.215.130:7004
   slots: (0 slots) slave
   replicates 16518afbfcbd961aeb76ef1592007a3e7fe24b1b
M: 524219969118a57ceaac753ecef7585f634cdf26 192.168.215.129:7001
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
M: 82c0e591b9bc7a289026dff2873a254d1c49d285 192.168.215.130:7003
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

解释下, –replicas 1 表示 自动为每一个master节点分配一个slave节点 上面有6个节点,程序会按照一定规则生成 3个master(主)3个slave(从) 
前面已经提醒过的 防火墙一定要开放监听的端口,否则会创建失败。



测试集群

    • 链接服务器
        
        
    1. [root@zk1 src]# ./redis-cli -c -p 7000 -h 192.168.215.129
    2. 192.168.215.129:7000>
    3. 192.168.215.129:7000> cluster info
    4. cluster_state:ok
    5. cluster_slots_assigned:16384
    6. cluster_slots_ok:16384
    7. cluster_slots_pfail:0
    8. cluster_slots_fail:0
    9. cluster_known_nodes:6
    10. cluster_size:3
    11. cluster_current_epoch:6
    12. cluster_my_epoch:1
    13. cluster_stats_messages_sent:1502
    14. cluster_stats_messages_received:1502

  • set值
 
 
  1. 192.168.215.129:7000> set name lbl
  2. -> Redirected to slot [5798] located at 192.168.215.130:7003
  3. OK
  4. 192.168.215.130:7003> get name
  5. "lbl"

可见,重定向到了130节点7003端口。 
原因是redis采用hash槽的方式分发key到不同节点,算法是crc(16)%16384。详细描述后续会单独写文章描述。 
而且你会发现,当一次重定向以后,这个客户端就连接到了130:7003这个节点。




Logo

更多推荐