.下载redis source包

链接:https://pan.baidu.com/s/122ZCjNvjl9Jx6M2YsLrncw 密码:92ze

2.解压

tar -xzf redis-3.2.9.tar.gz

3.安装,如果系统没有安装gcc就先安装下 yun install gcc

$cd redis-3.2.9

// 编译

$make

// 安装到/usr/local/redis

$make PREFIX=/usr/local/redis install

4.创建pid,日志,数据dump目录

$mkdir /var/redis/run

$mkdir /var/redis/log

$mkdir /var/redis/data

5.将redis.conf cp到/usr/local/redis目录下,修改redis配置文件,使用端口号命名文件,为集群准备

$cp redis-3.2.9/redis.conf  /usr/local/redis/redis_6379.conf

$vi /usr/local/redis/redis_6379.conf

修改daemonize,pidfile,logfile,dir为上述创建路径下

设置服务形式启动:

6.拷贝启动脚本到/etc/init.d

$cp redis-3.2.9/utils/redis_init_script  /etc/init.d/redis_6379

7.修改脚本文件,指定程序安装路径以及pid路径和配置文件路径

至此,已经可以通过服务启动redis了。service redis_6379 start/stop

扩展:service 是一个script  他可以分析你后面下达的参数,然后根据你的参数在到/etc/init.d 下去取得正确的服务来 stop  start  restar

8.设置开机自启

$chkconfig redis_6379 on

如果报错:service redisd does not support chkconfig就vi修改脚本文件,设置开机自启的执行顺序

注意,最前面是有井号的。注释的意思是,redis服务必须在运行级2,3,4,5下被启动或关闭,启动的优先级是90,关闭的优先级是10。

---------------------------------------------我是分割线,redis单机安装部署已完成------------------------------------------------------

---------------------------------------------我是分割线,下面讲述集群部署-----------------------------------------------------------

一.安装集群环境ruby

1.下载ruby

链接:https://pan.baidu.com/s/1Qar_7BvoWxmv6PloIc-Y9w 密码:e74y

2.解压

$tar -xzf ruby-2.3.1.tar.gz

3.configure 设置安装路径,此时会自动根据平台生成Makefile

$cd  ruby-2.3.1

$./configure --prefix=/usr/local/ruby

$make

$make install

4.安装完成设置环境变量,设置完后重启

$ vi /etc/profile

$reboot

5.查看版本

$ruby -v

6.安装ruby的redis依赖包安装成功

$gem install redis

7.创建目录

$mkdir /usr/local/redis-cluster

8.拷贝/usr/local/redis/bin 目录到/usr/local/redis-cluster下并重命名为redis01,依次复制共6个节点,端口为7001-7006

cp /usr/local/redis/bin /usr/local/redis-cluster/redis01

修改redis配置文件,将log,data,pid,port中的端口号修改为对应节点端口号,开启集群模式

9.把创建集群的ruby脚本拷贝到/usr/local/redis-cluster目录下

$cp /data/ftp/pub/redis-3.2.9/src/redis-trib.rb  /usr/local/redis-cluster

10.创建启动所有节点脚本

$vi startallnode.sh

$chmod +x startallnode.sh

11.创建关闭所有节点脚本

$vi shutdownallnode.sh

chmod +x shutdownallnode.sh

12.执行启动所有节点脚本

$./startallnode.sh

13.创建集群

说明:

redis集群至少需要3个主节点,每个主节点有一个从节点总共6个节点

replicas指定为1表示每个主节点有一个从节点

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

[root@jiuCentOS redis-cluster]# ./redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes... //成功连接上6个节点
Using 3 masters: // 7001-7003作为主节点
127.0.0.1:7001
127.0.0.1:7002
127.0.0.1:7003
Adding replica 127.0.0.1:7004 to 127.0.0.1:7001 // 7004-7006作为从节点
Adding replica 127.0.0.1:7005 to 127.0.0.1:7002
Adding replica 127.0.0.1:7006 to 127.0.0.1:7003
M: a13041b1ee33cc2ec8cd6abd0c32e1f17fc1854e 127.0.0.1:7001      // 分配0-5460槽给7001
slots:0-5460 (5461 slots) master
M: 9ec7b173beaa62b0bdb9030a5b549c25a0407482 127.0.0.1:7002   // 分配5461-10922槽给7002
slots:5461-10922 (5462 slots) master
M: 6aa8a57322a622cb3f50d7edd4239479fe81348f 127.0.0.1:7003   // 分配10923-16383槽给7003
slots:10923-16383 (5461 slots) master
S: dea50c6dd0df0c97094bd45ba40b64ee8e52928d 127.0.0.1:7004
replicates a13041b1ee33cc2ec8cd6abd0c32e1f17fc1854e
S: 790abedb428c9bd4baa2034c5fc7ead458741fb9 127.0.0.1:7005
replicates 9ec7b173beaa62b0bdb9030a5b549c25a0407482
S: fc871f3dd051aa02aae7078eb6eaaa9c8df8d9b7 127.0.0.1:7006
replicates 6aa8a57322a622cb3f50d7edd4239479fe81348f
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 127.0.0.1:7001)
M: a13041b1ee33cc2ec8cd6abd0c32e1f17fc1854e 127.0.0.1:7001
slots:0-5460 (5461 slots) master
1 additional replica(s)
S: fc871f3dd051aa02aae7078eb6eaaa9c8df8d9b7 127.0.0.1:7006
slots: (0 slots) slave
replicates 6aa8a57322a622cb3f50d7edd4239479fe81348f
M: 6aa8a57322a622cb3f50d7edd4239479fe81348f 127.0.0.1:7003
slots:10923-16383 (5461 slots) master
1 additional replica(s)
S: 790abedb428c9bd4baa2034c5fc7ead458741fb9 127.0.0.1:7005
slots: (0 slots) slave
replicates 9ec7b173beaa62b0bdb9030a5b549c25a0407482
M: 9ec7b173beaa62b0bdb9030a5b549c25a0407482 127.0.0.1:7002
slots:5461-10922 (5462 slots) master
1 additional replica(s)
S: dea50c6dd0df0c97094bd45ba40b64ee8e52928d 127.0.0.1:7004
slots: (0 slots) slave
replicates a13041b1ee33cc2ec8cd6abd0c32e1f17fc1854e
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

如果报:

/usr/bin/env ruby: No such file or directory

说明ruby环境变量没有配置正确

--------------------

扩展:

#!/usr/bin/ruby是告诉操作系统执行这个脚本的时候,调用/usr/bin下的ruby解释器;
#!/usr/bin/env ruby这种用法是为了防止操作系统用户没有将ruby装在默认的/usr/bin路径里。当系统看到这一行的时候,首先会到env设置里查找ruby的安装路径,再调用对应路径下的解释器程序完成操作。

#!/usr/bin/env ruby会去环境设置寻找ruby目录

---------------------

测试集群,-h是指定ip -p指定端口 -c代表要连接集群

集群操作命令参照官方文档:

# ./redis-cli -h 127.0.0.1 -p 7001进入命令行后即可敲入如下链接中的命令

https://redis.io/commands/cluster-info 

哨兵模式(20190222补充:使用redis cluster能够实现监控、自动切换以及水平扩展功能,redis实例管理推荐用搜狐推出的cachecloud,可以私有化部署)

哨兵模式主要是监测master节点,当master节点挂掉时,能够自动在其slave中选举产生一个节点作为master接替上来。

需要注意的是,在master节点挂掉后,clinet需要重新连接集群,所以,client需要处理这部分,具体内容后续补充。

1.拷贝redis解压目录下的sentinel.conf到redis-cluster目录下

$cp /data/ftp/pub/redis-3.2.9/sentinel.conf /usr/local/redis-cluster/sentinel.conf

2.修改配置并启动,

mymaster是名称
port 26379  //哨兵端口号保持不变,可以修改,但是我没有修改
dir /root/application/program/redis/sentinel/ //哨兵程序的日志路径
sentinel monitor mymaster 192.168.127.129 7001 1 // 监控一个master节点
sentinel down-after-milliseconds mymaster 5000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 60000
启动:redis-sentinel
1. redis-server ../sentinel.conf --sentinel & //(&有这可以Ctrl +C退到命令行,没有这个就直接退出哨兵进程)
2. 对于 redis-sentinel 程序, 你可以用以下命令来启动 Sentinel 系统
redis-sentinel ../sentinel.conf & 关闭:redis-sentinel
1. pkill redis-server //这个会关掉Redis服务器和Sentinel(哨兵)进程
2. kill 进程号 //可以关掉指定进程号的进程

Sentinel(哨兵)配置文件简介
         

在Redis的源码中包含了一个名为 sentinel.conf 的文件, 这个文件就是带有注释的Sentinel(哨兵)的配置文件的示例。

如果想要运行一个“哨兵”程序,以下配置项是最少配置:

sentinel monitor mymaster 127.0.0.1 6379 1

sentinel down-after-milliseconds mymaster 60000

sentinel failover-timeout mymaster 180000

sentinel parallel-syncs mymaster 1

第一行配置表示 Sentinel(哨兵)进程去监视一个名为 mymaster 的主服务器,这个主服务器的 IP 地址为 127.0.0.1 , 端口号为 6379,而将这个主服务器判断为失效至少需要 1 个 Sentinel(哨兵)进程的同意。如果在架构系统中已经配置类多个Sentinel(哨兵)进程,在同意“Master主服务器”下线的 Sentinel(哨兵)进程的数量不达标的情况下,Sentinel(哨兵)进程就不会执行自动故障迁移。在设置多Sentinel(哨兵)进程的情况下,无论设置多少个 Sentinel(哨兵)进程同意才能判断一个服务器失效,一个 Sentinel 都需要获得架构系统中多数 Sentinel(哨兵)进程的支持, 才能发起一次自动故障迁移,并预留一个给定的配置纪元 (configuration Epoch ,一个配置纪元就是一个新主服务器配置的版本号)。如果您只配置了一个Sentinel(哨兵)进程来做监控,那一个Sentinel(哨兵)进程也可以决定“Master主服务器”是否下线。

其他选项的基本格式如下:sentinel <选项的名字> <主服务器的名字> <选项的值>

配置选项的解释如下:

1、down-after-milliseconds : Sentinel(哨兵)进程判断服务器已经掉线所需的毫秒数。

如果被监控的服务器在给定的毫秒数之内,并没有返回 Sentinel(哨兵)进程发送的 PING 命令的回复,或者返回一个错误,那么 Sentinel(哨兵)进程将这个服务器标记为主观下线(subjectively down,简称 SDOWN )。如果在架构系统中配置了多个Sentinel(哨兵)进程的情况下,只有一个Sentinel(哨兵)进程将服务器标记为主观下线并不一定会引起服务器的自动故障迁移,只有在足够数量的 Sentinel(哨兵)进程都将一个服务器标记为主观下线之后,服务器才会被标记为客观下线(objectively down, 简称 ODOWN ),这时才回执行自动故障迁移。另外一种情况是,在架构系统中只配置了一个Sentinel(哨兵)进程的话,那这Sentinel(哨兵)进程也可以决定被监控的服务器的是否“下线”。

将服务器标记为客观下线所需的 Sentinel(哨兵)进程数量由对主服务器的配置决定。

2、parallel-syncs :在执行故障转移时,最多可以有多少个从服务器同时对新的主服务器进行同步,这个数字越小,完成故障转移所需的时间就越长,实际上就是说最多允许几个slave同时从新master同步数据,数值越小的话当然就完成迁移总耗时比较长啦。

如果“Slave从服务器”被设置为允许使用过期数据集(参见对 redis.conf 文件中对 slave-serve-stale-data 选项的说明),那么你可能不希望所有“Slave从服务器”都在同一时间向新的“Master主服务器”发送同步请求, 因为尽管复制过程的绝大部分步骤都不会阻塞“Slave从服务器”,但“Slave从服务器”在载入“Master主服务器”发来的 RDB 文件时, 仍然会造成“Slave从服务器”在一段时间内不能处理命令请求,如果全部“Slave从服务器”一起对新的“Master主服务器”进行同步, 那么就可能会造成所有“Slave从服务器”在短时间内全部不可用的情况出现。

你可以通过将这个值设为 1 来保证每次只有一个Slave从服务器处于不能处理命令请求的状态。

3、failover-timeout:实现主从切换,完成故障转移的所需要的最大时间值。若Sentinel(哨兵)进程在该配置值内未能完成故障转移的操作(即故障时master/slave自动切换),则认为本次故障转移操作失败。

4、notification-script: 指定Sentinel(哨兵)进程检测到Master-Name所指定的“Master主服务器”的实例异常的时候,所要调用的报警脚本。该配置项可选,但线上系统建议配置。

FAQ:

一、./redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006执行时如果报如下错误:

Node 127.0.0.1:7001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0

或者

/usr/local/ruby/lib/ruby/gems/2.3.0/gems/redis-4.0.1/lib/redis/client.rb:119:in `call': ERR Slot 4757 is already busy (Redis::CommandError)

用redis-cli登录到每个节点执行flushall和cluster reset,然后再次执行上面建立集群的命令即可

如果还是不行,删除redis.conf配置的cluster-config-file "nodes-7001.conf"对应的所有文件

二、如果节点redis-server启动失败,查看配置的日志路径下的日志即可。

redis CentOS6.5安装及集群部署的更多相关文章

  1. Centos6.9下RabbitMQ集群部署记录

    之前简单介绍了CentOS下单机部署RabbltMQ环境的操作记录,下面详细说下RabbitMQ集群知识,RabbitMQ是用erlang开发的,集群非常方便,因为erlang天生就是一门分布式语言, ...

  2. Spring Boot+redis存储session,满足集群部署、分布式系统的session共享

    本文讲述spring-boot工程中使用spring-session机制进行安全认证,并且通过redis存储session,满足集群部署.分布式系统的session共享. 原文链接:https://w ...

  3. 初识zookeeper以及安装和集群部署

    初识zookeeper以及安装和集群部署     一.Zookeeper单体版安装     在安装zookeeper之前要先安装jdk环境,具体在linux环境安装jdk1.8请参照linux笔记. ...

  4. 2、Redis 底层原理:Cluster 集群部署与详解

    Redis 简介 Redis 提供数据缓存服务,内部数据都存在内存中,所以访问速度非常快. 早期,Redis 单应用服务亦能满足企业的需求.之后,业务量的上升,单机的读写能力满足不了业务的需求,技术上 ...

  5. Redis非关系型缓存数据库集群部署、参数、命令工具

    <关系型数据库与非关系型数据库> 关系数据库:mysql.oracle.DB2.SQL Server非关系数据库:Redis(缓存数据库).MongodDB(处理海量数据).Memcach ...

  6. k8s1.9.0安装--完整集群部署

    三.完整集群部署 - kubernetes-with-ca 1. 理解认证授权 1.1 为什么要认证 想理解认证,我们得从认证解决什么问题.防止什么问题的发生入手.防止什么问题呢?是防止有人入侵你的集 ...

  7. Centos6.6 安装Mysql集群

    一.环境准备 1.1系统IP设置 准备三台服务器安装Centos6.6 64位操作系统,IP地址及角色分配如下: Node                 IP Address            ...

  8. kafka单机版的安装、集群部署 及使用

    1.安装kafka(单机版) 1.1上传 kafka_2.11-2.0.0.tgz 到 /root/Downloads 1.2解压 tar 包 tar -zxvf kafka_2.11-2.0.0.t ...

  9. k8s1.9.0安装--基础集群部署

    二.基础集群部署 - kubernetes-simple 1. 部署ETCD(主节点) 1.1 简介 kubernetes需要存储很多东西,像它本身的节点信息,组件信息,还有通过kubernetes运 ...

随机推荐

  1. MySQL Point in Time Recovery the Right Way

    In this blog, I’ll look at how to do MySQL point in time recovery (PITR) correctly. Sometimes we nee ...

  2. 学习 MeteoInfo二次开发教程(四)

    教程四的问题不大. 1.private void AddMapFrame_ChinaSouthSea().private void AddTitle()两个函数和public Form1()函数并列. ...

  3. C语言 练习题

    subString #include <iostream> int subString(char* sSeek, char* sKey) { char* p = sSeek; while( ...

  4. xsyProblem A: 密集子图(graph)

    f[i][S]三进制压缩表示最长路为i,0代表不在该集合,1代表不是最短路为i集合,2代表是最短路集合, 转移枚举i+1集合是那些, 乘以概率即可 预处理保证复杂度 #include<cstdi ...

  5. feign接口调用异常的解决方向

    1. consul: 检查调用方服务与被调用方服务是否在同一个consul; 2. swagger: 检查swagger注释是否清晰.恰当: 比如: @ApiImplicitParams(value ...

  6. WPF 流加载

    /// <summary> /// datatable分页 /// </summary> /// <param name="dt">源datat ...

  7. BZOJ 1257: [CQOI2007]余数之和

    1257: [CQOI2007]余数之和 Time Limit: 5 Sec  Memory Limit: 128 MB Description 给出正整数n和k,计算j(n, k)=k mod 1 ...

  8. PyQt5系列教程(六)如何让界面和逻辑分离

    软硬件环境 OS X EI Capitan Python 3.5.1 PyQt 5.5.1 PyCharm 5.0.3 前言 前面的内容我们介绍了利用QtDesigner来设计界面,再通过命令行工具p ...

  9. Python第1天

    今天主要学习内容如下: 概论,各种开发语言的对比,高级语言包括:python(开发效率高,执行效率低) Java(开发效率低,执行效率高),PHP,低级语言包括:C语言,汇编语言: Python 语言 ...

  10. ---perl 模块安装方法

    http://blog.csdn.net/lincy100/article/details/7333794 $ perl -MCPAN -e shell install Log::Log4perlin ...