分布式架构学习之:Redis3集群的Linux安装、配置、高可用测试

来源:互联网 发布:java单元测试怎么写 编辑:程序博客网 时间:2024/05/24 03:42

参考文档 

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代码集群测试

存数据


取数据


阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 肉罐头拉环断了怎么办 5大战区拥兵自重怎么办 买的期房停工了怎么办 怀孕后长了副乳怎么办 耳朵冻的红肿了怎么办 吃螃蟹吃柿子了怎么办 吃了螃蟹和柿子怎么办 螃蟹与柿子同吃怎么办 手被鞭炮炸伤了怎么办 索尼l36h变砖了怎么办 oppor9s手机忘记解锁图案怎么办 索尼z5刷死机了怎么办 魅蓝note3被锁定怎么办 oppo图案锁忘了怎么办 手机图案锁忘w怎么办输 手机图案解锁密码忘了怎么办 忘记htc手机锁屏怎么办 我手机密码忘了怎么办 小米5x忘记密码怎么办 oppo忘记手机解锁图案怎么办 手机解锁图案忘了怎么办 苹果id给锁了怎么办 苹果手机忘了ld怎么办 4s忘记开机密码怎么办 取卵22个肚子胀怎么办 夜神模拟器很卡怎么办 夜神模拟器卡顿怎么办 入职体检有痔疮怎么办 泰迪鼻子干怎么办恢复 泰迪幼犬鼻子干怎么办 狗狗呕吐没精神怎么办 狗狗鼻子干拉稀怎么办 狗狗鼻子干呕吐怎么办 肛门直肠环断了怎么办 原房主欠取暖费怎么办 澳门赢了几千万怎么办 被海鲜骗局骗了怎么办 将军令没电了怎么办 将军令没有电了怎么办 在香港超过7天怎么办 肩膀上的灯灭了怎么办