• Redis集群搭建


    1. Redis简介

    Redis是基于内存,也可以基于磁盘持久化nosql数据库,使用c语言开发。

    数据存储结构key-value

    2. 安装环境准备

    Redis使用c语言开发,需要使用gcc编译程序进行编译。

    1) 安装gcc

    安装命令:yum -y install gcc

    2) 安装上传文件插件

    1. 安装命令:yum –y install lrzsz
    2. 上传命令:rz

    3. 安装redis(Windows)

    3.1 上传安装

    使用rz命令上传redis安装包/usr/local/soft目录

    [root@localhost soft]# ll

    -rw-r--r--. 1 root root   1358081 May 14  2015 redis-3.0.0.tar.gz

    3.2 解压

    解压命令:tar -zxvf redis-3.0.0.tar.gz

    3.3 安装redis

    1) 编译

    a) 进入redis解压目录:执行编译命令: make

    b) 执行编译程序:生成编译文src目录下

    2) 安装

    a) 命令make install PREFIX=/usr/local/soft/redis

    b) 进入redis解压目录:执行安装命令

    [root@localhost redis-3.0.0]# make install PREFIX=/usr/local/soft/redis

    cd src && make install

    make[1]: Entering directory `/usr/local/soft/redis-3.0.0/src'

    Hint: It's a good idea to run 'make test' ;)

        INSTALL install

        INSTALL install

        INSTALL install

        INSTALL install

        INSTALL install

    make[1]: Leaving directory `/usr/local/soft/redis-3.0.0/src'

    3.4 启动redis服务

    3.4.1 前台启动

    启动命令:./redis-server

    特点:默认启动服务,进程一种阻塞,不能直接退出,使用客户端进行登录

     

    3.4.2 后台启动

    修改redis配置文件,redis.conf配置文件,此时bin安装目录没有配置文件,需要解压目录中拷贝一配置文件即可。

    1) 拷贝redis.conf配置文件

    a) redis.conf在redis解压目录中

    b) 拷贝cp redis.conf ../redis/bin/

    [root@localhost bin]# ll

    total 15520

    -rw-r--r--. 1 root root      18 Jul 26 17:14 dump.rdb

    -rwxr-xr-x. 1 root root 4587078 Jul 26 17:09 redis-benchmark

    -rwxr-xr-x. 1 root root   22185 Jul 26 17:09 redis-check-aof

    -rwxr-xr-x. 1 root root   45403 Jul 26 17:09 redis-check-dump

    -rwxr-xr-x. 1 root root 4689993 Jul 26 17:09 redis-cli

    -rw-r--r--. 1 root root   41403 Jul 26 17:16 redis.conf

    lrwxrwxrwx. 1 root root      12 Jul 26 17:09 redis-sentinel -> redis-server

    -rwxr-xr-x. 1 root root 6448257 Jul 26 17:09 redis-server

    2) 修改redis配置文件

    a) daemonize no==daemonize yes

     

    3) 启动redis,加载配置文件

    a) 命令./redis-server redis.conf

    4) 登录redis

    a) 登录命令:./redis-cli –h ip –p port

    b) 登录./redis-cli (默认登录6379端口redis服务)

    4. Redis集群(Linux)

    4.1 Redis集群搭建环境准备

    redis集群管理工具redis-trib.rb依赖ruby环境,首先需要安装ruby环境:

    安装ruby

    执行:

    yum install ruby

    再执行:

    yum install rubygems

    安装ruby和redis的接口程序

    拷贝redis-3.0.0.gem(ruby和redis接口)至/usr/local下

    执行:

    gem install /usr/local/redis-3.0.0.gem

    4.2 集群分析

    搭建redis集群,必须的有多台redis服务器:保证一主一备4主机,4从机),搭建6redis服务器集群。

    保证8redis服务模拟8redis服务(端口不冲突,开启集群配置)

    搭建集群步骤:

    1) 创建6目录:700170027003。。。。。。7006

    目录名称和redis服务端口一致

    2) 开启redis集群配置

    3) 修改redis服务器端口

    4) 删除持久化配置文件 (初始化集群必须保持纯洁性)

    5) 启动6服务器

    6) 创建集群

    4.3 创建集群目录

    创建目录redis-cluster

    安装集群安装到redis-cluster目录下面。

    1) 创建8个目录

    [root@localhost redis-cluster]# mkdir 700{1..6}

    [root@localhost redis-cluster]# ll

    total 32

    drwxr-xr-x. 2 root root 4096 Jul 27 00:10 7001

    drwxr-xr-x. 2 root root 4096 Jul 27 00:10 7002

    drwxr-xr-x. 2 root root 4096 Jul 27 00:10 7003

    drwxr-xr-x. 2 root root 4096 Jul 27 00:10 7004

    drwxr-xr-x. 2 root root 4096 Jul 27 00:10 7005

    drwxr-xr-x. 2 root root 4096 Jul 27 00:10 7006

    2) 拷贝redis安装目录bin7001

    [root@localhost redis]# cp -r bin/ ../redis-cluster/7001/

    3) 修改配置文件,开启集群

    cluster-enabled yes   把注释#去掉即可

    4) 修改端口(redis配置文件端口和目录名称相同)

    port 7001

    注意:

     

    5) 拷贝7001目录下修改后的bin目录7002…..70067目录

    drwxr-xr-x. 2 root root 4096 Jul 27 00:15 bin

    [root@localhost 7001]# cp -r bin/ ../7002/

    [root@localhost 7001]# cp -r bin/ ../7003/

    [root@localhost 7001]# cp -r bin/ ../7004/

    [root@localhost 7001]# cp -r bin/ ../7005/

    [root@localhost 7001]# cp -r bin/ ../7006

    6) 修改7002,7003………..7006redis服务端口

    a) 要求redis服务端口和目录文件一致。

    4.4 拷贝集群插件

    使用redis-trib.rb插件创建集群:

    redis-trib.rb插件位置在redis解压目录下的编译目录src

    去src拷贝插件到redis-Cluster集群目录中

    [root@localhost src]# cp redis-trib.rb /usr/local/soft/redis-cluster/

    4.5 创建集群

    1) 启动redis服务(启动6redis服务)

    [root@localhost redis-cluster]# cd 7001/bin/

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

    [root@localhost bin]# cd ..

    [root@localhost 7001]# cd ..

    [root@localhost redis-cluster]# cd 7002/bin/

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

    [root@localhost bin]# cd ../../7003/bin/

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

    [root@localhost bin]# cd ../../7004/bin/

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

    [root@localhost bin]# cd ../../7005/bin/

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

    [root@localhost bin]# cd ../../7006/bin/

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

    [root@localhost bin]# ps -ef | grep redis

    root      6926     1  0 Jul26 ?        00:00:21 ./redis-server *:6379    

    root      7637     1  0 00:25 ?        00:00:00 ./redis-server *:7001 [cluster]

    root      7642     1  0 00:25 ?        00:00:00 ./redis-server *:7002 [cluster]

    root      7646     1  0 00:25 ?        00:00:00 ./redis-server *:7003 [cluster]

    root      7650     1  0 00:25 ?        00:00:00 ./redis-server *:7004 [cluster]

    root      7655     1  0 00:26 ?        00:00:00 ./redis-server *:7005 [cluster]

    root      7659     1  0 00:26 ?        00:00:00 ./redis-server *:7006 [cluster]

    root      7663  6287  0 00:26 pts/0    00:00:00 grep redis

    2) 创建集群

    使用插件redis-trib.rb创建集群:

    创建命令

    ./redis-trib.rb create --replicas 1 192.168.253.131:7001 192.168.253.131:7002 192.168.253.131:7003 192.168.253.131:7004 192.168.253.131:7005  192.168.253.131:7006

    Create:创建集群

    --replicas 1:每一台主机至少有一从机。

    集群成功创建信息:

    >>> Creating cluster

    Connecting to node 192.168.253.131:7001: OK

    Connecting to node 192.168.253.131:7002: OK

    Connecting to node 192.168.253.131:7003: OK

    Connecting to node 192.168.253.131:7004: OK

    Connecting to node 192.168.253.131:7005: OK

    Connecting to node 192.168.253.131:7006: OK

    >>> Performing hash slots allocation on 6 nodes...

    Using 3 masters:

    192.168.253.131:7001

    192.168.253.131:7002

    192.168.253.131:7003

    Adding replica 192.168.253.131:7004 to 192.168.253.131:7001

    Adding replica 192.168.253.131:7005 to 192.168.253.131:7002

    Adding replica 192.168.253.131:7006 to 192.168.253.131:7003

    M: 1b807d0b0bb849632e93853728f8ed3e51d0dd48 192.168.253.131:7001

       slots:0-5460 (5461 slots) master

    M: bd79a369ef0af24aa5e54455cae1f93e0cca636d 192.168.253.131:7002

       slots:5461-10922 (5462 slots) master

    M: 2dc7730fab2a36ad00937bde4ec70421e7656f40 192.168.253.131:7003

       slots:10923-16383 (5461 slots) master

    S: 532103b67844ae7120f96ff8f7bb77914ae14d02 192.168.253.131:7004

       replicates 1b807d0b0bb849632e93853728f8ed3e51d0dd48

    S: 7606279a8b2c9768d1bfc168da2e99ccb09d9b96 192.168.253.131:7005

       replicates bd79a369ef0af24aa5e54455cae1f93e0cca636d

    S: bd1e2d83fa458c79ac60519896861bdc9e2248d4 192.168.253.131:7006

       replicates 2dc7730fab2a36ad00937bde4ec70421e7656f40

    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.253.131:7001)

    M: 1b807d0b0bb849632e93853728f8ed3e51d0dd48 192.168.253.131:7001

       slots:0-5460 (5461 slots) master

    M: bd79a369ef0af24aa5e54455cae1f93e0cca636d 192.168.253.131:7002

       slots:5461-10922 (5462 slots) master

    M: 2dc7730fab2a36ad00937bde4ec70421e7656f40 192.168.253.131:7003

       slots:10923-16383 (5461 slots) master

    M: 532103b67844ae7120f96ff8f7bb77914ae14d02 192.168.253.131:7004

       slots: (0 slots) master

       replicates 1b807d0b0bb849632e93853728f8ed3e51d0dd48

    M: 7606279a8b2c9768d1bfc168da2e99ccb09d9b96 192.168.253.131:7005

       slots: (0 slots) master

       replicates bd79a369ef0af24aa5e54455cae1f93e0cca636d

    M: bd1e2d83fa458c79ac60519896861bdc9e2248d4 192.168.253.131:7006

       slots: (0 slots) master

       replicates 2dc7730fab2a36ad00937bde4ec70421e7656f40

    [OK] All nodes agree about slots configuration.

    >>> Check for open slots...

    >>> Check slots coverage...

    [OK] All 16384 slots covered.

    4.6 启动集群(批处理文件)

    在redis-Cluster目录下创建启动集群批处理文件:start-all.sh

    文件内容如下

    cd 7001/bin
    ./redis-server redis.conf
    cd ../../7002/bin
    ./redis-server redis.conf
    cd ../../7003/bin
    ./redis-server redis.conf
    cd ../../7004/bin
    ./redis-server redis.conf
    cd ../../7005/bin
    ./redis-server redis.conf
    cd ../../7006/bin
    ./redis-server redis.conf

    1) 运行启动sh文件

    ./start-all.sh

    4.7 登录集群

    登录命令:./redis-cli –c –h ip –p port

    cd 7001/bin

    查询集群状态

    [root@localhost bin]# ./redis-cli -c -h 192.168.253.131 -p 7001

    192.168.253.131:7001> cluster info

    cluster_state:ok

    cluster_slots_assigned:16384

    cluster_slots_ok:16384

    cluster_slots_pfail:0

    cluster_slots_fail:0

    cluster_known_nodes:6

    cluster_size:3

    cluster_current_epoch:6

    cluster_my_epoch:1

    cluster_stats_messages_sent:433

    cluster_stats_messages_received:433

    查询集群节点信息

    192.168.253.131:7001> cluster nodes

    bd79a369ef0af24aa5e54455cae1f93e0cca636d 192.168.253.131:7002 master - 0 1469550879424 2 connected 5461-10922

    2dc7730fab2a36ad00937bde4ec70421e7656f40 192.168.253.131:7003 master - 0 1469550877393 3 connected 10923-16383

    7606279a8b2c9768d1bfc168da2e99ccb09d9b96 192.168.253.131:7005 slave bd79a369ef0af24aa5e54455cae1f93e0cca636d 0 1469550880434 5 connected

    bd1e2d83fa458c79ac60519896861bdc9e2248d4 192.168.253.131:7006 slave 2dc7730fab2a36ad00937bde4ec70421e7656f40 0 1469550881443 6 connected

    532103b67844ae7120f96ff8f7bb77914ae14d02 192.168.253.131:7004 slave 1b807d0b0bb849632e93853728f8ed3e51d0dd48 0 1469550878404 4 connected

    1b807d0b0bb849632e93853728f8ed3e51d0dd48 192.168.253.131:7001 myself,master - 0 0 1 connected 0-5460

    5. Jedis连接集群

    5.1 整合spring

    配置文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="http://www.springframework.org/schema/beans  
                            http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
                            http://www.springframework.org/schema/context  
                            http://www.springframework.org/schema/context/spring-context-3.1.xsd  
                            http://www.springframework.org/schema/mvc  
                            http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">
        <!-- Jedis配置 -->
        <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
            <property name="maxIdle" value="20"></property>
            <property name="maxTotal" value="1000"></property>
        </bean>
        <!-- 集群版Jedis -->
        <bean class="redis.clients.jedis.JedisCluster">
            <constructor-arg name="nodes">
                <set>
                    <bean class="redis.clients.jedis.HostAndPort">
                        <constructor-arg name="host" value="192.168.253.131"></constructor-arg>
                        <constructor-arg name="port" value="7001"></constructor-arg>
                    </bean>
                    <bean class="redis.clients.jedis.HostAndPort">
                        <constructor-arg name="host" value="192.168.253.131"></constructor-arg>
                        <constructor-arg name="port" value="7002"></constructor-arg>
                    </bean>
                    <bean class="redis.clients.jedis.HostAndPort">
                        <constructor-arg name="host" value="192.168.253.131"></constructor-arg>
                        <constructor-arg name="port" value="7003"></constructor-arg>
                    </bean>
                    <bean class="redis.clients.jedis.HostAndPort">
                        <constructor-arg name="host" value="192.168.253.131"></constructor-arg>
                        <constructor-arg name="port" value="7004"></constructor-arg>
                    </bean>
                    <bean class="redis.clients.jedis.HostAndPort">
                        <constructor-arg name="host" value="192.168.253.131"></constructor-arg>
                        <constructor-arg name="port" value="7005"></constructor-arg>
                    </bean>
                    <bean class="redis.clients.jedis.HostAndPort">
                        <constructor-arg name="host" value="192.168.253.131"></constructor-arg>
                        <constructor-arg name="port" value="7006"></constructor-arg>
                    </bean>
                </set>
            </constructor-arg>
            <constructor-arg name="poolConfig" ref="poolConfig"></constructor-arg>
        </bean>
    </beans>

    5.2 java测试代码

    package cn.itcast.spring.jedis;
    
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.JedisCluster;
    import redis.clients.jedis.JedisPool;
    
    public class SpringClusterJedis {
        /**
         * jedis连接集群版redis
         */
        @Test
        public void jedisSpringRedis() {
    
            // 加载spring配置文件
            ApplicationContext app = new ClassPathXmlApplicationContext(
                    "applicationContext-jedisCluster.xml");
            //获取jedisCluster对象
            JedisCluster JedisCluster = app.getBean(JedisCluster.class);
            JedisCluster.set("username", "张三");
            String username = JedisCluster.get("username");
            System.out.println(username);
        }
    }
  • 相关阅读:
    Spark Sort-Based Shuffle具体实现内幕和源码详解
    Spark-2.0原理分析-shuffle过程
    Spark Shuffle 中 JVM 内存使用及配置内幕详情
    Spark中的Spark Shuffle详解
    Spark Shuffle Write阶段磁盘文件分析
    Spark Sort Based Shuffle内存分析
    Spark Storage(二) 集群下的broadcast
    Spark SQL metaData配置到Mysql
    TweenJS----前端常用的js动画库,缓动画和复制动画的制作,效果非常好。
    Storm入门
  • 原文地址:https://www.cnblogs.com/java-spring/p/7793091.html
Copyright © 2020-2023  润新知