参考文档

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. Mac OS Ruby安装 使用RVM

    访问http://www.ruby-lang.org/en/downloads/ 使用第三方工具安装ruby,经过了解,在mac下可以使用macports和rvm安装ruby. 经过实际操作觉得rvm ...

  2. Telnet命令检测远程主机上的端口是否开启

    ping命令不能检测端口,只能检测你和相应IP是否能连通. 本地虚拟机里安装了一个Ubuntu,使用Putty连接22端口操作时提示失败,于是查看对应端口是否开启. Windows下要检测远程主机上的 ...

  3. C# WebProxy POST 或者 GET

    代理服务器无账号和密码的代理服务器: //创建请求 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); //实例化一个We ...

  4. h5 canvas 画图

    h5 canvas 画图 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  5. hdu 2444 二分图判断与最大匹配

    题意:有n个学生,有m对人是认识的,每一对认识的人能分到一间房,问能否把n个学生分成两部分,每部分内的学生互不认识,而两部分之间的学生认识.如果可以分成两部分,就算出房间最多需要多少间,否则就输出No ...

  6. 布局文件中fill_parent、match_parent和wrap_content有什么区别?

    fill_parent 宽度或者高度 布满整个屏幕从Android 2.2开始fill_parent改名为match_parent.wrap_content布局元素将根据内容更改大小.

  7. Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2) B. Bear and Three Musketeers 枚举

                                          B. Bear and Three Musketeers                                   ...

  8. 中文在unicode中的编码范围

    以前写过一篇贴子是写中文在unicode中的编码范围 unicode中文范围,但写的不是很详细,今天再次研究了下unicode,并给出详细的unicode取值范围. 本次研究的unicode对象是un ...

  9. C#图片处理示例(裁剪,缩放,清晰度,水印)

    C#图片处理示例(裁剪,缩放,清晰度,水印) 吴剑 2011-02-20 原创文章,转载必需注明出处:http://www.cnblogs.com/wu-jian/ 前言 需求源自项目中的一些应用,比 ...

  10. Lock的基础概念

    锁的相关概念 1.可重入锁 如果锁具备可重入性,则称作为可重入锁.像synchronized和ReentrantLock都是可重入锁,可重入性在我看来实际上表明了锁的分配机制:基于线程的分配,而不是基 ...