redis3.2.8 集群安装

[root@yunboce ]# tar -zxvf redis-3.2.8.tar.gz
[root@yunboce cluster]# cd redis-3.2.8
[root@yunboce cluster]#make
[root@yunboce cluster]#cd src
[root@yunboce cluster]# make install
[root@yunboce src]# mkdir /opt/cluster/redis_bin
[root@yunboce src]# cp redis* /opt/cluster/redis_bin/
[root@yunboce src]# ls /opt/cluster/redis_bin/
  redis-check-aof    redis-check-aof.o  redis-check-rdb.c  redis-cli       redis-server
redis-benchmark      redis-check-rdb     redis-sentinel  redis-trib.rb
[root@yunboce cluster]# cd redis_bin/
[root@yunboce redis_bin]# ls
redis-benchmark  redis-check-aof  redis-check-rdb  redis-cli  redis-sentinel  redis-server  redis-trib.rb
[root@yunboce redis_bin]# chmod +x redis*
[root@yunboce redis_bin]# ll
总用量 34032
-rwxr-xr-x 1 root root 5574263 9月  12 16:18 redis-benchmark
-rwxr-xr-x 1 root root   22225 9月  12 16:18 redis-check-aof
-rwxr-xr-x 1 root root 7823906 9月  12 16:18 redis-check-rdb
-rwxr-xr-x 1 root root 5703131 9月  12 16:18 redis-cli
-rwxr-xr-x 1 root root 7823906 9月  12 16:18 redis-sentinel
-rwxr-xr-x 1 root root 7823906 9月  12 16:18 redis-server
-rwxr-xr-x 1 root root   60852 9月  12 16:18 redis-trib.rb
[root@yunboce redis_bin]# cd ..
[root@yunboce cluster]# ls
7000  7001  7002  7003  7004  7005  redis-3.2.8  redis-3.2.8.tar.gz  redis_bin
[root@yunboce cluster]# mv  7005 redis_bin/
[root@yunboce cluster]# ll
总用量 1520
drwxrwxr-x 6 root root    4096 2月  12 2017 redis-3.2.8
-rw-r--r-- 1 root root 1547237 9月  12 15:41 redis-3.2.8.tar.gz
drwxr-xr-x 8 root root    4096 9月  12 16:24 redis_bin
[root@yunboce cluster]#
[root@yunboce cluster]#
[root@yunboce cluster]# cd redis_bin
[root@yunboce cluster]#make 7000
[root@yunboce cluster]#cp /opt/cluster/redis-3.2.8/redis.conf /opt/cluster/redis_bin/7000/redis.conf
修改redis.conf 中的内容如下:
daemonize    yes                          //redis后台运行
pidfile  /var/run/redis_7000.pid          //pidfile文件对应7000,7001,7002,7003
port  7000                                //端口7000,7002,7003
cluster-enabled  yes                      //开启集群  把注释#去掉
cluster-config-file  nodes_7000.conf      //集群的配置  配置文件首次启动自动生成 7000,7001,7002
cluster-node-timeout  5000                //请求超时  设置5秒够了
bind 192.168.6.24 127.0.0.1               //绑定id (注意本机id一定是第一个)
appendonly  yes                           //aof日志开启  有需要就开启,它会每次写操作都记录一条日志
logfile "/var/log/redis/7000.log"

7001  7002  7003  7004  7005  操作与7000相同
[root@yunboce redis_bin]# ls
7000  7001  7002  7003  7004  7005  redis-benchmark  redis-check-aof  redis-check-rdb  redis-cli  redis-sentinel  redis-server  redis-trib.rb
[root@yunboce redis_bin]#
redis-sentinel  redis-server   
[root@yunboce redis_bin]# ./redis-server 7000/redis.conf
[root@yunboce redis_bin]# ./redis-server 7001/redis.conf
[root@yunboce redis_bin]# ./redis-server 7002/redis.conf
[root@yunboce redis_bin]# ./redis-server 7003/redis.conf
[root@yunboce redis_bin]# ./redis-server 7004/redis.conf
[root@yunboce redis_bin]# ./redis-server 7005/redis.conf
[root@yunboce redis_bin]#
[root@yunboce redis_bin]# ps -ef|grep redis
root     23389     1  0 16:24 ?        00:00:00 ./redis-server 192.168.6.24:7000 [cluster]
root     23393     1  0 16:24 ?        00:00:00 ./redis-server 192.168.6.24:7001 [cluster]
root     23424     1  0 16:25 ?        00:00:00 ./redis-server 192.168.6.24:7002 [cluster]
root     23428     1  0 16:25 ?        00:00:00 ./redis-server 192.168.6.24:7003 [cluster]
root     23432     1  0 16:25 ?        00:00:00 ./redis-server 192.168.6.24:7004 [cluster]
root     23436     1  0 16:25 ?        00:00:00 ./redis-server 192.168.6.24:7005 [cluster]
root     23440 16719  0 16:25 pts/10   00:00:00 grep redis
[root@yunboce redis_bin]#  netstat -tnlp | grep redis

[root@yunboce redis_bin]# yum -y install ruby ruby-devel rubygems rpm-build 
[root@yunboce redis_bin]# gem install redis
ERROR:  Error installing redis:
        redis requires Ruby version >= 2.2.2.
[root@yunboce redis_bin]# rvm list known
[root@yunboce redis_bin]#
[root@yunboce redis_bin]#
[root@yunboce redis_bin]# sudo yum install curl

[root@yunboce redis_bin]# curl -L get.rvm.io | bash -s stable
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 24090  100 24090    0     0  10411      0  0:00:02  0:00:02 --:--:--  185k
Downloading https://github.com/rvm/rvm/archive/1.29.3.tar.gz
Downloading https://github.com/rvm/rvm/releases/download/1.29.3/1.29.3.tar.gz.asc
gpg: 于 2017年09月11日 星期一 04时59分21秒 CST 创建的签名,使用 RSA,钥匙号 BF04FF17
gpg: 无法检查签名:No public key
Warning, RVM 1.26.0 introduces signed releases and automated check of signatures when GPG software found. Assuming you trust Michal Papis import the mpapis public key (downloading the signatures).

GPG signature verification failed for '/usr/local/rvm/archives/rvm-1.29.3.tgz' - 'https://github.com/rvm/rvm/releases/download/1.29.3/1.29.3.tar.gz.asc'! Try to install GPG v2 and then fetch the public key:

    gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3

or if it fails:

    command curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -

the key can be compared with:

    https://rvm.io/mpapis.asc
    https://keybase.io/mpapis

NOTE: GPG version 2.1.17 have a bug which cause failures during fetching keys from remote server. Please downgrade or upgrade to newer version (if available) or use the second method described above.

[root@yunboce redis_bin]# command curl -sSL https://rvm.io/mpapis.asc | gpg2 --import
gpg: 密钥 D39DC0E3:公钥“Michal Papis (RVM signing) <[email protected]>”已导入
gpg: 合计被处理的数量:1
gpg:           已导入:1  (RSA: 1)
gpg: 没有找到任何绝对信任的密钥
[root@yunboce redis_bin]# curl -L get.rvm.io | bash -s stable
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 24090  100 24090    0     0  11593      0  0:00:02  0:00:02 --:--:-- 11593
Downloading https://github.com/rvm/rvm/archive/1.29.3.tar.gz
Downloading https://github.com/rvm/rvm/releases/download/1.29.3/1.29.3.tar.gz.asc
gpg: 于 2017年09月11日 星期一 04时59分21秒 CST 创建的签名,使用 RSA,钥匙号 BF04FF17
gpg: 完好的签名,来自于“Michal Papis (RVM signing) <[email protected]>”
gpg:               亦即“Michal Papis <[email protected]>”
gpg:               亦即“[jpeg image of size 5015]”
gpg: 警告:这把密钥未经受信任的签名认证!
gpg:       没有证据表明这个签名属于它所声称的持有者。
主钥指纹: 409B 6B17 96C2 7546 2A17  0311 3804 BB82 D39D C0E3
子钥指纹: 62C9 E5F4 DA30 0D94 AC36  166B E206 C29F BF04 FF17
GPG verified '/usr/local/rvm/archives/rvm-1.29.3.tgz'
Creating group 'rvm'

Installing RVM to /usr/local/rvm/
            source /etc/profile
Installation of RVM in /usr/local/rvm/ is almost complete:

  * First you need to add all users that will be using rvm to 'rvm' group,
    and logout - login again, anyone using rvm will be operating with `umask u=rwx,g=rwx,o=rx`.

  * To start using RVM you need to run `source /etc/profile.d/rvm.sh`
    in all your open shell windows, in rare cases you need to reopen all shell windows.
[root@yunboce redis_bin]#





[root@yunboce redis_bin]# source /usr/local/rvm/scripts/rvm
查看ruby  版本
[root@yunboce redis_bin]# rvm list known
# MRI Rubies

查看当前版本
[root@yunboce redis_bin]#ruby -v
插入 ruby2.3.3
[root@yunboce redis_bin]# rvm install 2.3.3
Searching for binary rubies, this might take some time.
No binary rubies available for: centos/6/x86_64/ruby-2.3.3.
Continuing with compilation. Please read 'rvm help mount' to get more information on binary rubies.
Checking requirements for centos.
Installing requirements for centos.
Installing required packages: libffi-devel, libyaml-devel.......
Requirements installation successful.
Installing Ruby from source to: /usr/local/rvm/rubies/ruby-2.3.3, this may take a while depending on your cpu(s)...
ruby-2.3.3 - #downloading ruby-2.3.3, this may take a while depending on your connection...

curl: (35) SSL connect error
There was an error(35).
Checking fallback: https://ftp.ruby-lang.org/pub/ruby/2.3/ruby-2.3.3.tar.bz2
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
This may have known and unaccounted for security vulnerabilities.
Please consider upgrading to ruby-2.4.1 which will have all of the latest security patches.
Ruby was built without documentation, to build it run: rvm docs generate-ri

使用ruby 2.3.3
[root@yunboce redis_bin]# rvm use 2.3.3   或者  rvm use 2.3.3 --default
Using /usr/local/rvm/gems/ruby-2.3.3

[root@yunboce redis_bin]# rvm remove 1.8.7
查看当前版本
[root@yunboce redis_bin]# ruby --version
ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-linux]
[root@yunboce redis_bin]#
执行集群命令
[root@yunboce redis_bin]# gem install redis
Fetching: redis-4.0.0.gem (100%)
Successfully installed redis-4.0.0
Parsing documentation for redis-4.0.0
Installing ri documentation for redis-4.0.0
Done installing documentation for redis after 2 seconds
1 gem installed
[root@yunboce redis_bin]# cd ../redis-3.2.8/src
[root@yunboce src]#
建立集群
 解释下, --replicas  1  表示 自动为每一个master节点分配一个slave节点    上面有6个节点,程序会按照一定规则生成 3个master(主)3个slave(从)

[root@yunboce src]# ./redis-trib.rb  create  --replicas  1  192.168.6.24:7000 192.168.6.24:7001  192.168.6.24:7002 192.168.6.24:7003  192.168.6.24:7004  192.168.6.24:7005
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.6.24:7000
192.168.6.24:7001
192.168.6.24:7002
Adding replica 192.168.6.24:7003 to 192.168.6.24:7000
Adding replica 192.168.6.24:7004 to 192.168.6.24:7001
Adding replica 192.168.6.24:7005 to 192.168.6.24:7002
M: 82eeb3e0350bbdc3639f12df48a6fe2ed70dd9fb 192.168.6.24:7000
   slots:0-5460 (5461 slots) master
M: 4f8a24da4b6cf5bf5aeff6fea3cee97f1d243cc3 192.168.6.24:7001
   slots:5461-10922 (5462 slots) master
M: 1f9bea3df531b159b294e32ca9d75e9f8ee34d0a 192.168.6.24:7002
   slots:10923-16383 (5461 slots) master
S: 96f4f6da5b172544fd90e18990f64868bd18a14c 192.168.6.24:7003
   replicates 82eeb3e0350bbdc3639f12df48a6fe2ed70dd9fb
S: dfd4d0e5dc242533af6cb7699e7052e11b10d619 192.168.6.24:7004
   replicates 4f8a24da4b6cf5bf5aeff6fea3cee97f1d243cc3
S: e83888d36f4b8c56e150015be38d7dd7a0ddcc39 192.168.6.24:7005
   replicates 1f9bea3df531b159b294e32ca9d75e9f8ee34d0a
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.6.24:7000)
M: 82eeb3e0350bbdc3639f12df48a6fe2ed70dd9fb 192.168.6.24:7000
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
M: 4f8a24da4b6cf5bf5aeff6fea3cee97f1d243cc3 127.0.0.1:7001
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: e83888d36f4b8c56e150015be38d7dd7a0ddcc39 127.0.0.1:7005
   slots: (0 slots) slave
   replicates 1f9bea3df531b159b294e32ca9d75e9f8ee34d0a
S: 96f4f6da5b172544fd90e18990f64868bd18a14c 127.0.0.1:7003
   slots: (0 slots) slave
   replicates 82eeb3e0350bbdc3639f12df48a6fe2ed70dd9fb
M: 1f9bea3df531b159b294e32ca9d75e9f8ee34d0a 127.0.0.1:7002
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
S: dfd4d0e5dc242533af6cb7699e7052e11b10d619 127.0.0.1:7004
   slots: (0 slots) slave
   replicates 4f8a24da4b6cf5bf5aeff6fea3cee97f1d243cc3
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

安装完毕.

测试redis集群

[root@yunboce redis]# ls
7000  7003  appendonly.aof   nodes-7001.conf  nodes-7004.conf  redis-check-aof  redis-sentinel
7001  7004  dump.rdb         nodes-7002.conf  nodes-7005.conf  redis-check-rdb  redis-server
7002  7005  nodes-7000.conf  nodes-7003.conf  redis-benchmark  redis-cli        redis-trib.rb
[root@yunboce redis]#
[root@yunboce redis]#
[root@yunboce redis]#
[root@yunboce redis]#
[root@yunboce redis]# ./redis-cli -c -p 7000
127.0.0.1:7000> set test1 bocehellowolrd
OK
127.0.0.1:7000> get test1
"bocehellowolrd"
127.0.0.1:7000> cluster nodes
e83888d36f4b8c56e150015be38d7dd7a0ddcc39 192.168.6.24:7005 slave 1f9bea3df531b159b294e32ca9d75e9f8ee34d0a 0 1505283170587 6 connected
82eeb3e0350bbdc3639f12df48a6fe2ed70dd9fb 192.168.6.24:7000 myself,master - 0 0 1 connected 0-5460
dfd4d0e5dc242533af6cb7699e7052e11b10d619 192.168.6.24:7004 slave 4f8a24da4b6cf5bf5aeff6fea3cee97f1d243cc3 0 1505283171088 5 connected
1f9bea3df531b159b294e32ca9d75e9f8ee34d0a 192.168.6.24:7002 master - 0 1505283171589 3 connected 10923-16383
96f4f6da5b172544fd90e18990f64868bd18a14c 192.168.6.24:7003 slave 82eeb3e0350bbdc3639f12df48a6fe2ed70dd9fb 0 1505283172592 4 connected
4f8a24da4b6cf5bf5aeff6fea3cee97f1d243cc3 192.168.6.24:7001 master - 0 1505283169584 2 connected 5461-10922
127.0.0.1:7000>
127.0.0.1:7000> quit
[root@yunboce redis]# ./redis-cli -c -p 7001
127.0.0.1:7001> get test1
-> Redirected to slot [4768] located at 192.168.6.24:7000
"bocehellowolrd"
192.168.6.24:7000>




Java测试代码:


package com.alibaba.dubbo.demo.consumer;

import java.util.HashSet;
import java.util.Set;

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;

public class JedisClusterTest {


JedisCluster jedisCluster = null;

private String nameKey="test1";

    /**
     * 因为是测试,这里没有写单例
     */
   
    public void before(){
        Set<HostAndPort> nodes = new HashSet<HostAndPort>();   
        nodes.add(new HostAndPort("192.168.6.24",7000));
        nodes.add(new HostAndPort("192.168.6.24",7001)); 
        nodes.add(new HostAndPort("192.168.6.24",7002));
        nodes.add(new HostAndPort("192.168.6.24",7003));
       nodes.add(new HostAndPort("192.168.6.24",7004));
       nodes.add(new HostAndPort("192.168.6.24",7005));
        //注意:这里超时时间不要太短,他会有超时重试机制。而且其他像httpclient、dubbo等RPC框架也要注意这点
        GenericObjectPoolConfig config = new GenericObjectPoolConfig();
        config.setMaxIdle(200);
        config.setMaxTotal(300);
        config.setTestOnReturn(true);
       
       
        jedisCluster = new JedisCluster(nodes, 10000, 1000, 1,
        config);

        System.out.println(jedisCluster+"===");
        System.out.println(jedisCluster.set("test1", "张三"));
        System.out.println(jedisCluster.get("test1"));
    }

    /**
     * 简单字符串读写
     */

    public void setStringData(){
   
      //  System.out.println(jedisCluster.set("test1", "张三"));
        System.out.println(jedisCluster.get("test1"));
    }

    /**
     * setnx : 如果key存在,返回0,如果不存在,则设置成功。
     * setnx的意思是set if not exist.
     */
  
    public void setnxTest(){
       // System.out.println(jedisCluster.setnx(nameKey, "张三"));//key不存在,返回值为1
        System.out.println(jedisCluster.get(nameKey));

      //  System.out.println(jedisCluster.setnx(nameKey, "张三"));//已经存在,返回值为0
        System.out.println(jedisCluster.get(nameKey));
    }

 

   
   
    public static void main(String[] args) {

    JedisClusterTest test = new JedisClusterTest();
    test.before();
    test.setStringData();
   
    test.setnxTest();
}


}



redis cluster配置好,并运行一段时间后,我们想添加节点,或者删除节点
可以参照:
http://blog.51yip.com/nosql/1726.html

猜你喜欢

转载自gjp014.iteye.com/blog/2393094