Reids集群部署

Redis的安装

下载redis

官网地址:http://redis.io/
下载地址:http://download.redis.io/releases/redis-4.0.11.tar.gz

准备C++环境

安装redis需要c语言的编译环境,如果没有gcc需要在线安装

[root@localhost ~]# yum -y install gcc-c++

如果有GCC环境,只需输入命令:

[root@localhost ~]# gcc

出现 :gcc: no input files 表示安装成功。

安装步骤redis:

一、将redis的源码包上传到linux系统。
二、解压缩redis到/usr/tool/redis/redis-4.0.11/
三、进行编译。 cd到解压后的目录 输入命令:make
四、进行安装。 输入命令:make install PREFIX=/usr/tool/redis/redis-4.0.11/
PREFIX 必须是大写的。
五:检查目录是否存在。
在/usr/tool/redis/redis-4.0.11/ 下 有bin 说明安装成功。

测试连接redis

进入到安装redis的bin目录下

[root@localhost /]# cd /usr/tool/redis/redis-4.0.11/bin

执行如下命令在前端启动redis

[root@localhost bin]# ./redis-server

看到如下图即表示启动成功,按Ctrl+c就可退出

image.png

后台启动(主要启动方式)

一、把redis-4.0.11目录下的redis.conf 复制到//usr/tool/redis/redis-4.0.11/bin目录下

[root@localhost redis-4.0.11]# cp redis.conf /usr/tool/redis/redis-4.0.11/bin

二、使用vim命令修改redis.conf配置文件 将daemonize no修改为daemonize yes

image.png

三、修改绑定端口,不然只有本机能访问,注释这一行

image.png

四:输入启动命令

[root@localhost bin]# ./redis-server redis.conf

五、客户端Redis-cli连接redis
使用Redis-cli建立连接

[root@localhost redis-4.0.11]# cd /usr/tool/redis/redis-4.0.11/bin/
[root@localhost bin]# ./redis-cli


image.png

默认连接localhost运行在6379端口的redis服务。
完整写法如下

[root@localhost bin]# ./redis-cli -h 127.0.0.1 -p 6379
-h:连接的服务器的地址
-p:服务的端口号

退出连接界面

第一种:

[root@localhost bin]# ./redis-cli
127.0.0.1:6379> quit

第二种:

[root@localhost bin]# ./redis-cli
127.0.0.1:6379> exit

第三种:CTR+C

[root@localhost bin]#

关闭Redis服务

一、通过连接上客户端进行关闭,使用shutdown 命令。

image.png

或者:cd 到redis的bin 目录 再执行以下:

[root@localhost bin]# ./redis-cli shutdown

第二种:使用 kill 命令。
找到对应的redis的进程id 然后使用命令:(pid为进程id)
kill -9 pid

Redis集群的搭建

Redis 3.0 之后便支持集群。Redis 集群中内置了 16384 个哈希槽。Redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。
所有节点之间彼此互联(PING-PONG机制),当超过半数的主机认为某台主机挂了,则该主机就是真的挂掉了,整个集群就不可用了。
若给集群中的每台主机分配多台从机。主机挂了,从机上位,依然能正常工作。但是若集群中超过半数的主机挂了,无论是否有从机,该集群也是不可用的。

集群搭建环境

搭建ruby环境

[root@localhost~]# yum install ruby
[root@localhost~]# yum install rubygems
[root@localhost~]# gem install redis
[root@localhost~]# cd /usr/tool/redis/redis-4.0.11/src
[root@localhost src]# cp redis-trib.rb /usr/tool/redis-cluster/

第一步:安装 ruby 环境
第二步:安装 gem 软件包(gem是用来扩展或修改Ruby应用程序的)。参考地址:https://rubygems.org/gems/redis/versions/
第三步:在redis解压目录中找到 redis-trib.rb 文件,将其拷贝到redis-cluster目录下,方便管理。

可能存在的问题
1 redis requires Ruby version >= 2.2.2,Ruby版本过低解决方法如下
2 没有/usr/local/rvm/scripts/rvm 这个目录.可能是上一步执行失败

[root@localhost~]# ruby --version
ruby 1.8.7 (2013-06-27 patchlevel 374) [x86_64-linux]
[root@localhost~]# yum install curl
[root@localhost~]# curl -L get.rvm.io | bash -s stable
[root@localhost~]# source /usr/local/rvm/scripts/rvm
[root@localhost~]# rvm list known
[root@localhost~]# rvm install 2.4.4
[root@localhost~]# rvm use 2.4.4
[root@localhost ~]# gem install redis

搭建步骤

需要6台redis服务器。搭建伪分布式。
需要6个redis实例。
需要运行在不同的端口6001-6006

使用之前搭建好的redis实例 。
注意:搭建前 如果节点里有数据,需要删除(rdb文件,aof文件)。

1、创建6个redis实例,每个实例运行在不同的端口。需要修改redis.conf配置文件。配置文件中还需要把cluster-enabled yes前的注释去掉。

创建目录:

[root@localhost tool]# mkdir redis-cluster
[root@localhost bin]# cd /usr/tool/redis

copy 之前搭建好的redis 并改名为redis01

[root@localhost redis]# cp redis-4.0.11/ /usr/tool/redis-cluster/redis07 -r

进入redis-cluster目录中cd到redis01的bin目录,删除数据文件

[root@localhost local]# cd redis-cluster/redis01/bin
[root@localhost bin]# rm -rf *.rdb *.aof

修改redis.conf,取消注释,如图

[root@localhost bin]# vim redis.conf


image.png

进入redis-cluster目录
copy六份并分别命名为redis02,redis03,redis04,redis05,redis06

[root@localhost redis-cluster]# cp redis01 redis02 -r
[root@localhost redis-cluster]# cp redis01 redis03 -r
[root@localhost redis-cluster]# cp redis01 redis04 -r
[root@localhost redis-cluster]# cp redis01 redis05 -r
[root@localhost redis-cluster]# cp redis01 redis06 -r

cd到每一个实例的bin目录,修改每一个redis实例的端口分别改为6001-6006

[root@localhost bin]# vim redis.conf


tool

第二步:启动每个redis实例。

vim redis-cluster-start-all.sh
添加如下文字到文件中:

cd /usr/tool/redis-cluster/redis01/bin
./redis-server redis.conf
cd /usr/tool/redis-cluster/redis02/bin
./redis-server redis.conf
cd /usr/tool/redis-cluster/redis03/bin
./redis-server redis.conf
cd /usr/tool/redis-cluster/redis04/bin
./redis-server redis.conf
cd /usr/tool/redis-cluster/redis05/bin
./redis-server redis.conf
cd /usr/tool/redis-cluster/redis06/bin
./redis-server redis.conf

修改文件:redis-cluster-start-all.sh 的权限,让其可执行。

chmod u+x redis-cluster-start-all.sh

执行启动

[root@localhost redis-cluster]# ./redis-cluster-start-all.sh
[root@localhost /]# cd /usr/tool/redis-cluster/
[root@localhost redis-cluster]# ./redis-trib.rb create --replicas 1 192.168.65.129:6001 192.168.65.129:6002 192.168.65.129:6003 192.168.65.129:6004 192.168.65.129:6005 192.168.65.129:6006

>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.65.129:6001
192.168.65.129:6002
192.168.65.129:6003
Adding replica 192.168.65.129:6005 to 192.168.65.129:6001
Adding replica 192.168.65.129:6006 to 192.168.65.129:6002
Adding replica 192.168.65.129:6004 to 192.168.65.129:6003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 59537b200756a98c46391a1f02060373aef58892 192.168.65.129:6001
   slots:0-5460 (5461 slots) master
M: 9350b506f4317564cba1213143ce7d58608dee5c 192.168.65.129:6002
   slots:5461-10922 (5462 slots) master
M: 6aa8a4110c29ff5aab8d002a2c186e44ebacb062 192.168.65.129:6003
   slots:10923-16383 (5461 slots) master
S: 994d234d6e1fb0a3a105f4cb2aa077e01b002d3a 192.168.65.129:6004
   replicates 59537b200756a98c46391a1f02060373aef58892
S: c7210a9323cd3e00d66fec21e46b9cb0c4a67906 192.168.65.129:6005
   replicates 9350b506f4317564cba1213143ce7d58608dee5c
S: be597675bc4272c49260936b692b4a95dd0f7d1d 192.168.65.129:6006
   replicates 6aa8a4110c29ff5aab8d002a2c186e44ebacb062
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.65.129:6001)
M: 59537b200756a98c46391a1f02060373aef58892 192.168.65.129:6001
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
M: 6aa8a4110c29ff5aab8d002a2c186e44ebacb062 192.168.65.129:6003
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
S: c7210a9323cd3e00d66fec21e46b9cb0c4a67906 192.168.65.129:6005
   slots: (0 slots) slave
   replicates 9350b506f4317564cba1213143ce7d58608dee5c
S: be597675bc4272c49260936b692b4a95dd0f7d1d 192.168.65.129:6006
   slots: (0 slots) slave
   replicates 6aa8a4110c29ff5aab8d002a2c186e44ebacb062
S: 994d234d6e1fb0a3a105f4cb2aa077e01b002d3a 192.168.65.129:6004
   slots: (0 slots) slave
   replicates 59537b200756a98c46391a1f02060373aef58892
M: 9350b506f4317564cba1213143ce7d58608dee5c 192.168.65.129:6002
   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.
[root@localhost redis-cluster]# 

看到如上信息,集群配置成功

创建关闭集群的脚本:(不是必须的)
首先使用:vim 命令创建一个文件 redis-cluster-stop-all.sh
编辑文件,添加如下:

cd /usr/tool/redis-cluster/redis01/bin
./redis-cli -p 6001 shutdown
cd /usr/tool/redis-cluster/redis02/bin
./redis-cli -p 6002 shutdown
cd /usr/tool/redis-cluster/redis03/bin
./redis-cli -p 6003 shutdown
cd /usr/tool/redis-cluster/redis04/bin
./redis-cli -p 6004 shutdown
cd /usr/tool/redis-cluster/redis05/bin
./redis-cli -p 6005 shutdown
cd /usr/tool/redis-cluster/redis06/bin
./redis-cli -p 6006 shutdown

修改文件:redis-cluster-stop-all.sh 的权限,让其可执行。

chmod u+x redis-cluster-stop-all.sh

代码使用集群

把jedis依赖的jar包添加到工程中。Maven工程中需要把jedis的坐标添加到依赖。

<dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
 </dependency>

redis 4.0版本以后,jedis版本不能低于2.9,不然会报一下错误

java.lang.NumberFormatException: For input string: "6003@16003"

创建测试类

如果本机能访问redis,代码不能访问,可能是防火墙问题
centOS7关闭防火墙命令

systemctl stop firewalld

public class TestRedis {
    public static void  main(String[] args){
        try{
            //testJedis();
            //testJedisPool();
            testJedisCluster();
        }catch (Exception e){
            e.printStackTrace();
        }

    }

    public static void testJedis() throws Exception {
        // 第一步:创建一个Jedis对象。需要指定服务端的ip及端口。
        Jedis jedis = new Jedis("192.168.65.129", 6379);
        // 第二步:使用Jedis对象操作数据库,每个redis命令对应一个方法。
        jedis.set("hello", "world");
        String result = jedis.get("hello");
        // 第三步:打印结果。
        System.out.println(result);
        // 第四步:关闭Jedis
        jedis.close();
    }

    public static void testJedisPool() throws Exception {
        // 第一步:创建一个JedisPool对象。需要指定服务端的ip及端口。
        JedisPool jedisPool = new JedisPool("192.168.65.129", 6379);
        // 第二步:从JedisPool中获得Jedis对象。
        Jedis jedis = jedisPool.getResource();
        // 第三步:使用Jedis操作redis服务器。
        jedis.set("jedis", "test");
        String result = jedis.get("jedis");
        System.out.println(result);
        // 第四步:操作完毕后关闭jedis对象,连接池回收资源。
        jedis.close();
        // 第五步:关闭JedisPool对象。
        jedisPool.close();
    }

    public static void testJedisCluster() throws Exception {
        // 第一步:使用JedisCluster对象。需要一个Set<HostAndPort>参数。Redis节点的列表。
        Set<HostAndPort> nodes = new HashSet<HostAndPort>();
        nodes.add(new HostAndPort("192.168.65.129", 6001));
        nodes.add(new HostAndPort("192.168.65.129", 6002));
        nodes.add(new HostAndPort("192.168.65.129", 6003));
        nodes.add(new HostAndPort("192.168.65.129", 6004));
        nodes.add(new HostAndPort("192.168.65.129", 6005));
        nodes.add(new HostAndPort("192.168.65.129", 6006));
        JedisCluster jedisCluster = new JedisCluster(nodes);
        // 第二步:直接使用JedisCluster对象操作redis。在系统中单例存在。
        jedisCluster.set("hello", "100");
        String result = jedisCluster.get("hello");
        // 第三步:打印结果
        System.out.println(result);
        // 第四步:系统关闭前,关闭JedisCluster对象。
        jedisCluster.close();
    }
}

注意:添加缓存不能影响正常业务逻辑。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容