参考文档

Redis 官方集群指南:http://redis.io/topics/cluster-tutorial Redis 官方集群规范:http://redis.io/topics/cluster-spec

Redis 集群指南(中文翻译,紧供参考):http://redisdoc.com/topic/cluster-tutorial.html

Redis 集群规范(中文翻译,紧供参考): http://redisdoc.com/topic/cluster-spec.html

要让 Redis3.0 集群正常工作至少需要 3 个 Master 节点,要想实现高可用,每个 Master 节点要配备

至少 1 个 Slave 节点。根据以上特点和要求,进行如下的集群实施规划:

使用 6台服务器(物理机或虚拟机)部署 3 个 Master + 3 个 Slave;

按规划:防火墙中打开相应的端口

192.168.1.81

-A INPUT -m state --state NEW -m tcp -p tcp --dport 7111 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 17111 -j ACCEPT

192.168.1.82

-A INPUT -m state --state NEW -m tcp -p tcp --dport 7112 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 17112 -j ACCEPT

192.168.1.83

-A INPUT -m state --state NEW -m tcp -p tcp --dport 7113 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 17113 -j ACCEPT

192.168.1.84

-A INPUT -m state --state NEW -m tcp -p tcp --dport 7114 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 17114 -j ACCEPT

192.168.1.85

-A INPUT -m state --state NEW -m tcp -p tcp --dport 7115 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 17115 -j ACCEPT

192.168.1.86

-A INPUT -m state --state NEW -m tcp -p tcp --dport 7116 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 17116 -j ACCEPT

安装目录:/usr/local/redis3

用户:root

编译和安装所需的包:

# yum install gcc tcl

下载(或上传)Redis3 最新稳定版(当前最新版 redis-3.0.3.tar.gz)

# cd /usr/local/src

# wget http://download.redis.io/releases/redis-3.0.3.tar.gz

创建安装目录:

# mkdir /usr/local/redis3

解压:

# tar -zxvf redis-3.0.3.tar.gz

# cd redis-3.0.3

安装(使用 PREFIX 指定安装目录):

# make PREFIX=/usr/local/redis3 install

安装完成后,可以看到/usr/local/redis3 目录下有一个 bin 目录,bin 目录里就是 redis 的命令脚本:

redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server

创建集群配置目录,并拷贝 redid.conf 配置文件到各节点配置目录:

192.168.1.81

# mkdir -p /usr/local/redis3/cluster/7111

# cp /usr/local/src/redis-3.0.3/redis.conf /usr/local/redis3/cluster/7111/redis-7111.conf

192.168.1.82

# mkdir -p /usr/local/redis3/cluster/7112

# cp /usr/local/src/redis-3.0.3/redis.conf /usr/local/redis3/cluster/7112/redis-7112.conf

192.168.1.83

# mkdir -p /usr/local/redis3/cluster/7113

# cp /usr/local/src/redis-3.0.3/redis.conf /usr/local/redis3/cluster/7113/redis-7113.conf

192.168.1.84

# mkdir -p /usr/local/redis3/cluster/7114

# cp /usr/local/src/redis-3.0.3/redis.conf /usr/local/redis3/cluster/7114/redis-7114.conf

192.168.1.85

# mkdir -p /usr/local/redis3/cluster/7115

# cp /usr/local/src/redis-3.0.3/redis.conf /usr/local/redis3/cluster/7115/redis-7115.conf

192.168.1.86

# mkdir -p /usr/local/redis3/cluster/7116

# cp /usr/local/src/redis-3.0.3/redis.conf /usr/local/redis3/cluster/7116/redis-7116.conf

修改配置文件中的下面选项:

6 个节点的 redis.conf 配置文件内容,注意修改下红色字体部分的内容即可,其他都相同:

配置选项

选项值

说明

daemonize

yes

是否作为守护进程运行

pidfile

/var/run/redis-7111.pid

如以后台进程运行,则需指定一个 pid,

默认为/var/run/redis.pid

port

7111

监听端口,默认为 6379

注意:集群通讯端口值默认为此端口值+10000,如17111

databases

1

可用数据库数,默认值为 16,默认数据库存储在 DB  0

号 ID 库中,无特殊需求,建议仅设置一个数据库

databases 1

cluster-enabled

yes

打开 redis 集群

cluster-config-file

/usr/local/redis3/cluste

集群配置文件(启动自动生成),不用人为干涉

r/7111/nodes.conf

cluster-node-timeout

15000

节点互连超时时间。毫秒

cluster-migration-

1

数据迁移的副本临界数,这个参数表示的是,一个主节

barrier

点在拥有多少个好的从节点的时候就要割让一个从节

点出来给另一个没有任何从节点的主节点。

cluster-require-full-

yes

如果某一些 key space 没有被集群中任何节点覆盖,集

coverage

群将停止接受写入。

appendonly

yes

启用 aof 持久化方式

因为 redis 本身同步数据文件是按上面 save 条件来同

步的,所以有的数据会在一段时间内只存在于内存中。

默认值为 no

dir

/usr/local/redis3/cluste

节点数据持久化存放目录(建议配置)

r/7111

192.168.1.81

vi /usr/local/redis3/cluster/7111/redis-7111.conf

pidfile /var/run/redis-7111.pid
port 7111
cluster-config-file /usr/local/redis3/cluster/7111/nodes.conf
dir /usr/local/redis3/cluster/7111(通过查找# REPLICATION)

192.168.1.82

vi /usr/local/redis3/cluster/7112/redis-7112.conf

pidfile /var/run/redis-7112.pid
port 7112
cluster-config-file /usr/local/redis3/cluster/7112/nodes.conf
dir /usr/local/redis3/cluster/7113(通过查找# REPLICATION)

192.168.1.83

vi /usr/local/redis3/cluster/7113/redis-7113.conf

pidfile /var/run/redis-7113.pid
port 7113
cluster-config-file /usr/local/redis3/cluster/7113/nodes.conf
dir /usr/local/redis3/cluster/7113(通过查找# REPLICATION)

192.168.1.84

vi /usr/local/redis3/cluster/7114/redis-7114.conf

pidfile /var/run/redis-7114.pid
port 7114
cluster-config-file /usr/local/redis3/cluster/7114/nodes.conf
dir /usr/local/redis3/cluster/7114(通过查找# REPLICATION)

192.168.1.85

vi /usr/local/redis3/cluster/7115/redis-7115.conf

pidfile /var/run/redis-7115.pid
port 7115
cluster-config-file /usr/local/redis3/cluster/7115/nodes.conf
dir /usr/local/redis3/cluster/7115(通过查找# REPLICATION)

192.168.1.86

vi /usr/local/redis3/cluster/7116/redis-7116.conf

pidfile /var/run/redis-7116.pid
port 7116
cluster-config-file /usr/local/redis3/cluster/7116/nodes.conf
dir /usr/local/redis3/cluster/7116(通过查找# REPLICATION)

包含了最少选项的集群配置文件示例如下:

port 7000 cluster-enabled yes

cluster-config-file nodes.conf cluster-node-timeout 5000

appendonly yes

使用如下命令启动这 6 个 Redis 节点实例:

192.168.181

# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/7111/redis-7111.conf

192.168.1.82

# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/7112/redis-7112.conf

192.168.1.83

# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/7113/redis-7113.conf

192.168.1.84

# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/7114/redis-7114.conf

192.168.1.85

# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/7115/redis-7115.conf

192.168.1.86

# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/7116/redis-7116.conf

启动之后用 PS 命令查看实例启动情况:

[root@edu-zk-01 cluster]# ps -ef | grep redis

root 5443 1 0 22:49 ? 00:00:00 /usr/local/redis3/bin/redis-server *:7111 [cluster]

[root@edu-zk-02 cluster]# ps -ef | grep redis

root 5421 1 0 22:49 ? 00:00:00 /usr/local/redis3/bin/redis-server *:7112 [cluster]

[root@edu-zk-03 cluster]# ps -ef | grep redis

root 5457 1 0 22:49 ? 00:00:00 /usr/local/redis3/bin/redis-server *:7113 [cluster]

[root@edu-zk-04 cluster]# ps -ef | grep redis

root 5379 1 0 22:50 ? 00:00:00 /usr/local/redis3/bin/redis-server *:7114 [cluster]

[root@edu-zk-05 cluster]# ps -ef | grep redis

root 5331 1 0 22:50 ? 00:00:00 /usr/local/redis3/bin/redis-server *:7115 [cluster]

[root@edu-zk-06 cluster]# ps -ef | grep redis

root 5687 1 0 22:50 ? 00:00:00 /usr/local/redis3/bin/redis-server *:7116 [cluster]

注意:启动完毕后,6 个Redis 实例尚未构成集群。

接下来准备创建集群

安装 ruby 和 rubygems(注意:需要 ruby 的版本在 1.8.7 以上)

# yum install ruby rubygems

检查 ruby 版本:

# ruby -v

ruby 1.8.7 (2013-06-27 patchlevel 374) [x86_64-linux]

gem 安装 redis ruby 接口:

# gem install redis

Successfully installed redis-3.2.1

1 gem installed

Installing ri documentation for redis-3.2.1...

Installing RDoc documentation for redis-3.2.1...

执行 Redis 集群创建命令(只需要在其中一个节点上执行一次则可)

# cd /usr/local/src/redis-3.0.3/src/

# cp redis-trib.rb /usr/local/bin/redis-trib

# redis-trib create --replicas 1 192.168.1.84:7114 192.168.1.85:7115 192.168.1.86:7116 192.168.1.81:7111 192.168.1.82:7112 192.168.1.83:7113

(输入 yes 并按下回车确认之后,集群就会将配置应用到各个节点,并连接起(join)各个节点,也就是让各个节点开始互相通讯)

集群简单测试 :

将Redis配置成服务

(非伪集群适用,也就是每个节点物理机部署的情况下 )

按上面的操作步奏。Redis的启动脚本为: /usr/local/src/redis-3.0.3/utils/redis_init_script

将启动脚本复制到/etc/rc.d/init.d/目录 下,并命名为redis

#cp /usr/local/src/redis-3.0.3/utils/redis_init_script /etc/rc.d/init.d/redis

编辑/etc/rc.d/init.d/redis,修改相应配置,使用之能注册成为服务

# vi /etc/rc.d/init.d/redis

#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
REDISPORT=6379
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli
PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/${REDISPORT}.conf"
case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $CLIEXEC -p $REDISPORT shutdown
                while [ -x /proc/${PID} ]
                do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
    *)
        echo "Please use start or stop as first argument"
        ;;
esac

查看以上redis服务脚本,关注为橙色的几个属性,做如下几个修改的准备

(1)、在脚本的第一行后面添加一行内容如下:

#chkconfig: 2345 80 90

(如果不添加 上面的内容,在注册服务时会提示:service redis does not support chkconfig)

(2)、REDISPORT端口修改各节点对应的端口:(注意,端口名将与下面的配置文件名有关)

(3)EXEC=/usr/local/bin/redis-server改为EXEC=/usr/local/redis3/redis-server

(4)CLIEXEC=/usr/local/bin/redis-cli改为CLIEXEC=/usr/local/redis3/bin/redis-cli

(5)配置文件设置,对conf属性作如下调整

CONF="/etc/redis/${REDISPORT}.conf"

改为CONF="/usr/local/redis/cluster/${REDISPORT}/redis-${REDISPORT}.conf"

(6)更改redis开启的命令,以后台运行的方式执行:

$EXEC $CONF & #"&"作用是将服务转到后面运行

修改后的/etc/rc.d/init.d/redis服务脚本内容为(注意各节点的端口不同):

修改成:

#!/bin/sh

#chkconfig: 2345 80 90
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
REDISPORT=7111
EXEC=/usr/local/redis3/bin/redis-server
CLIEXEC=/usr/local/redis3/bin/redis-cli
PIDFILE=/var/run/redis-${REDISPORT}.pid
CONF="/usr/local/redis3/cluster/${REDISPORT}/redis-${REDISPORT}.conf"

case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF &
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $CLIEXEC -p $REDISPORT shutdown
                while [ -x /proc/${PID} ]
                do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
    *)
        echo "Please use start or stop as first argument"
        ;;
esac

# chkconfig --add /etc/rc.d/init.d/redis

# service redis start
Starting Redis server...
# service redis stop
Stopping ...
Redis stopped

Java代码集群测试

存数据

取数据

 
 

分布式架构高可用架构篇_03-redis3集群的安装高可用测试的更多相关文章

  1. Dubbo入门到精通学习笔记(十五):Redis集群的安装(Redis3+CentOS)、Redis集群的高可用测试(含Jedis客户端的使用)、Redis集群的扩展测试

    文章目录 Redis集群的安装(Redis3+CentOS) 参考文档 Redis 集群介绍.特性.规范等(可看提供的参考文档+视频解说) Redis 集群的安装(Redis3.0.3 + CentO ...

  2. Dubbo入门到精通学习笔记(十四):ActiveMQ集群的安装、配置、高可用测试,ActiveMQ高可用+负载均衡集群的安装、配置、高可用测试

    文章目录 ActiveMQ 高可用集群安装.配置.高可用测试( ZooKeeper + LevelDB) ActiveMQ高可用+负载均衡集群的安装.配置.高可用测试 准备 正式开始 ActiveMQ ...

  3. 六十一.常用组件 、 Kafka集群 、 Hadoop高可用

    1.Zookeeper安装搭建Zookeeper集群并查看各服务器的角色停止Leader并查看各服务器的角色 1.1 安装Zookeeper1)编辑/etc/hosts ,所有集群主机可以相互 pin ...

  4. Dubbo入门到精通学习笔记(十三):ZooKeeper集群的安装、配置、高可用测试、升级、迁移

    文章目录 ZooKeeper集群的安装.配置.高可用测试 ZooKeeper 与 Dubbo 服务集群架构图 1. 修改操作系统的/etc/hosts 文件,添加 IP 与主机名映射: 2. 下载或上 ...

  5. 使用kubeadm搭建高可用k8s v1.16.3集群

    目录 1.部署环境说明 2.集群架构及部署准备工作 2.1.集群架构说明 2.2.修改hosts及hostname 2.3.其他准备 3.部署keepalived 3.1.安装 3.2.配置 3.3. ...

  6. EMQ集群搭建实现高可用和负载均衡(百万级设备连接)

    一.EMQ集群搭建实现高可用和负载均衡 架构服务器规划 服务器IP 部署业务 作用 192.168.81.13 EMQTTD EMQ集群 192.168.81.22 EMQTTD EMQ集群 192. ...

  7. ActiveMQ(七)_伪集群和主从高可用使用

      一.本文目的         介绍如何在同一台虚拟机上搭建高可用的Activemq服务,集群数量包含3个Activemq,当Activemq可用数>=2时,整个集群可用.         本 ...

  8. 高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群

    高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群 libnet软件包<-依赖-heartbeat(包含ldirectord插件(需要perl-MailTools的rpm包)) l ...

  9. ActiveMQ(七)_伪集群和主从高可用使用(转)

    本文转自: https://www.cnblogs.com/gossip/p/5977489.html 一.本文目的         介绍如何在同一台虚拟机上搭建高可用的Activemq服务,集群数量 ...

随机推荐

  1. codeforces A. Dima and Continuous Line 解题报告

    题目链接:http://codeforces.com/problemset/problem/358/A 题目意思:在横坐标上给出n个不同的点,需要把前一个点跟后一个点(这两个点的顺序是紧挨着的)用一个 ...

  2. JavaScript、Jquery选择题

    尚学堂Java EE软件工程师认证考试 试题库-选择题     一.    选择题(包括单选和双选) 1.B 在JavaScript中,以下变量命名非法的是(   )(选择一项) A. numb_1 ...

  3. PrincipalView的使用参数

    4 G:\PrincipalView\model\m426.off 注意,路径是绝对路径,所以如果程序移位的话,要注意修改: 路径中不能包含空格

  4. intellij 提交代码到git

    .配置git .create git repository .git-->add commit Directory .提交代码 git remote add origin https://git ...

  5. python基础——列表生成式

    python基础——列表生成式 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 举个例子,要生成list [1, 2, 3, 4 ...

  6. 谈JavaScript代码封装

    前言 也算老生常谈的问题了,再深入搞一搞怎么玩儿封装,如果看到这篇文章的你,正好你也是追求完美的代码洁癖狂者,那么这篇文章相信非常适合你. 举一个例子,编写一个Person类,具有name和birth ...

  7. Android 图标添加消息提醒

    实现方法: 1. 在对应的布局放置TextView或者ImageView. 2. 用Canvas在原来Icon的bitmap基础上进行绘制 3. 利用开源项目ViewBadger进行添加,很方便,而且 ...

  8. AsyncHttpClient

    package com.jingle.httpstudy;   import org.apache.http.Header;   import android.app.Activity; import ...

  9. php 面向对象要点汇总

    //类和对象//对象:一切东西都可以看做对象,对象是类的实例化.//类:类是对象的抽象,用来描述众多对象共有的特征. //定义类 class//成员变量 和 成员方法//访问修饰符 public共有的 ...

  10. 十六进制数'\0x'和'\x'有什么区别?(转)

    区别不大,都是把数按16进制输出. \0x:当输出的数转换为16进制只有1位时,在前面补0,如 0a,其它情况按照实际情况输出. \x:按照输出数转换为16进制的实际位数输出. 此外,小写x和大写X也 ...