参考文档

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. 【mysql】执行mysql脚本

    来源:http://zhidao.baidu.com/link?url=p78PlTJZlheB4uSKCkmZApg-3qrTIBCS3yI5LbGJLEAnUuO3-4GE6dLqq1LWC_kn ...

  2. HDU1009老鼠的旅行 (贪心算法)

    FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  3. hadoop命令备忘

    hadoop dfsadmin -safemode get 查看namenode是否处于安全模式 hadoop dfsadmin -report 显示文件系统的统计信息,以及所连接的各个datanod ...

  4. (二)STM32中中断优先级理解

    很多人在配置STM32中断时对固件库中的这个函数NVIC_PriorityGroupConfig()——配置优先级分组方式,会很不理解,尤其是看中文翻译版的,因为中文翻译版里把这里翻译成“先占优先级和 ...

  5. 运行基准测试hadoop集群中的问题:org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /benchmarks/TestDFSIO/io_data/test_

    在master(即:host2)中执行 hadoop jar hadoop-test-1.1.2.jar DFSCIOTest -write -nrFiles 12 -fileSize 10240 - ...

  6. snmp v3

    http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=7654720&id=3355515 http://tydldd.ite ...

  7. Ubuntu could not write bytes broken pipe

    一.环境变量问题 1 到登录界面的时候,进入命令行模式: alt+ctrl+F1 2 登录 3 修改环境变量(当我输入ls的时候  竟然没有找到命令,然后果断的知道是环境变量的事情,于是改之!) 4 ...

  8. Laravel 4 系列入门教程(一)

    默认条件 本文默认你已经有配置完善的PHP+MySQL运行环境,懂得PHP网站运行的基础知识.跟随本教程走完一遍,你将会得到一个基础的包含登录的简单blog系统,并将学会如何使用一些强大的Larave ...

  9. Linux串口设置及编程(转)

    用户常见的数据通信的基本方式可分为并行通信和串行通信. 并行通信是指利用多条数据传输线将一个资料的各位同时传送.特点是传输速度快,适用于短距离通信,但要求传输速度较高的应用场合. 串行通信是指利用一条 ...

  10. CC2540开发板学习笔记(三)——外部中断

    一.实验内容 通过外部中断方式依次按下按键S1控制LED1的亮灭 二.实验过程 1.电路原理图同上 2.中断的概念 比如说我们在执行main函数时,突然来了个指令.优先级比现在执行的main还高,那我 ...