redis-3.2.11 版本集群搭建

Redis集群搭建与简单使用

介绍安装环境与版本

 

本次实验是模拟正式库redis集群安装,正式库是Centos7版本,本次使用了3台CentOS6版本服务器机模拟6个节点,一台机器2个节点,创建出3 master、3 salve 环境。(中间安装rpm时候可能依赖问题)

redis 采用 redis-3.2.11 版本。

三台虚拟机都是 CentOS ,三台 CentOS6.5 (IP:172.30.208.80,172.30.208.81,72,130.208.82)。

安装过程

1. 下载并解压

tar -zxvf redis-4.0.6.tar.gz

2. 将 redis-trib.rb 复制到 /usr/local/bin 目录下

cd src cp redis-trib.rb /usr/local/bin/  

3.安装redis

rpm -ivh redis-3.2.11-1.el6.x86_64.rpm 每台机器都要安装

4. 创建 Redis 节点

首先在 172.30.208.80机器上 /usr/local/japp/目录下创建 redis_cluster 目录;

mkdir redis_cluster  

在 redis_cluster 目录下,创建名为7001、7002的目录,并将 redis.conf 拷贝到这三个目录中

mkdir redis7001 redis7002

cp /etc/redis.conf /usr/local/japp/redis_cluster/redis7001

 

 

#分别修改这三个配置文件,修改如下内容

#port 7000 //端口7000,7002,7003 #bind 本机ip //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群 #daemonize yes //redis后台运行 #pidfile /var/run/redis_7000.pid //pidfile文件对应7000,7001,7002 #cluster-enabled yes //开启集群 把注释#去掉 #cluster-config-file nodes_7000.conf //集群的配置 配置文件首次启动自动生成 7000,7001,7002 #cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置 #appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志 

pidfile /var/run/redis.pid->pidfile /var/run/redis7001.pid

Port 6379 -> port 7001

logfile "/var/log/redis/redis.log"->logfile "/var/log/redis/redis7001.log"

stop-writes-on-bgsave-error yes->stop-writes-on-bgsave-error no

dir ./ -> dir /root/rediscluster/redis7001

Appendonly no 不变

cluster-enabled no -> cluster-enabled yes

cluster-config-file nodes-6379.conf ->  cluster-config-file nodes-7001.conf

cluster-migration-barrier 1

cluster-require-full-coverage yes -> cluster-require-full-coverage no

cluster-node-timeout 15000 -> cluster-node-timeout 5000

cluster-slave-validity-factor 10 -> cluster-slave-validity-factor 0

maxmemory-policy noeviction->maxmemory-policy volatile-lru

protected-mode yes -> protected-mode no

bind 127.0.0.1 -> bind 172.30.208.80

daemonize no->daemonize yes

masterauth "自己设定密码"

requirepass "自己设定密码"

 

  • 接着在另外两台台机器上(172.30.208.81,172.30.208.82),的操作重复以上三步,只是把目录改为redis7003,redis7004,redis7005,redis7006,对应的配置文件也按照这个规则修改即可
  • 注意每台服务器配置文件里的bind 要修改成本机局域网IP
  • 修改其他信息,在进入每个配置文件的目录下

sed -i "s/7001/7005/g" `grep 7001 -rl redis7005/redis.conf` #注意数字要对应目录

5. 启动各个节点

 

第一台机器上执行 redis-server /usr/local/japp/redis_cluster/redis7001/redis.conf redis-server /usr/local/japp/redis_cluster/redis7001/redis.conf 第二台机器上执行 redis-server /usr/local/japp/redis_cluster/redis7003/redis.conf redis-server /usr/local/japp/redis_cluster/redis7004/redis.conf

第三台机器上执行 redis-server /usr/local/japp/redis_cluster/redis7005/redis.conf redis-server /usr/local/japp/redis_cluster/redis7006/redis.conf

6. 检查 redis 启动情况

 

##一台机器<br>ps -ef | grep redis root 6416 6320 0 14:13 pts/2 00:00:00 vim redis.conf

root 6543 1 0 14:29 ? 00:00:06 redis-server 172.30.208.80:7001 [cluster]

root 6547 1 0 14:29 ? 00:00:06 redis-server 172.30.208.80:7002 [cluster]

 

netstat -tnlp | grep redis tcp 0 0 172.30.208.80:17001 0.0.0.0:* LISTEN 6543/redis-server 1

tcp 0 0 172.30.208.80:17002 0.0.0.0:* LISTEN 6547/redis-server 1

tcp 0 0 172.30.208.80:7001 0.0.0.0:* LISTEN 6543/redis-server 1

tcp 0 0 172.30.208.80:7002 0.0.0.0:* LISTEN 6547/redis-server 1 ##另外两台机器类似只是IP跟端口不同

 

7.创建集群

Redis 官方提供了 redis-trib.rb 这个工具,就在解压目录的 src 目录中,第三步中已将它复制到 /usr/local/bin 目录中,可以直接在命令行中使用了。使用下面这个命令即可完成安装。

只需要在第一台机器上创建集群就好了

redis-trib.rb create --replicas 1 172.30.208.80:7001 172.30.208.80:7002 172.30.208.81:7003 172.30.208.81:7004 172.30.208.82:7005 172.30.208.82:7006

其中,前两个 ip:port 为第一台机器的节点,以此为第二三台台机器机器的节点。

等等,出错了。这个工具是用 ruby 实现的,所以需要安装 ruby。安装命令如下:

yum -y install ruby ruby-devel rubygems rpm-build

gem install redis(有我们的环境不能连接外网,且没有局域网yum源,只能从网下载rpm包了)

相关rpm包如下(安装过程中出现其他问题见机行事)

 

 

下载gem文件

wget http://rubygems.global.ssl.fastly.net/gems/redis-3.2.2.gem

安装gem文件

gem install -l ./redis-3.2.2.gem

 

修改redis集群的密码

find / -name "redis" | grep gems(假设返回的地址为${redisgems})

Vi ${redisgems}/client.rb

:password =>

修改为

:password => "自己设定密码"

 

 

之后再运行 redis-trib.rb 命令,会出现如下提示:

redis-trib.rb create --replicas 1 172.30.208.80:7001 172.30.208.80:7002 172.30.208.81:7003 172.30.208.81:7004 172.30.208.82:7005 172.30.208.82:7006

 

输入 yes 即可,然后出现如下内容,说明安装成功。

 

redis相关运维

3. redis cluster 运维

参见相关文档,这里简单说明一下:

3.1 redis cluster 在迁移,和主备切换的时候,均不影响正常的redis使用

3.2 运维需要监控redis cluster和redis 单机使用情况:

  3.2.1监控cluster:redis-trib.rb info 127.0.0.1:6380 返回值类似如下:

127.0.0.1:6380 (c3e313ec...) -> 1 keys | 5462 slots | 1 slaves.

127.0.0.1:6381 (88dd4d50...) -> 0 keys | 5461 slots | 1 slaves.

127.0.0.1:6382 (111bcf64...) -> 0 keys | 5461 slots | 1 slaves.

如果发现keys的数目相差超过1w,需要报警。主备数目不对的情况下,也需要报警

  3.2.2监控redis内存使用:

redis-cli -p 6380 info| grep used_memory_peak_human

返回如下内容:used_memory_peak_human:2.35M

如果这个值已经接近redis配置的内存最大值,需要报警

3.2.3 监控redis cluster是否在正常状态

[root@dev01 rediscluster]# redis-trib.rb info 127.0.0.1:6380

127.0.0.1:6380 (a776c747...) -> 0 keys | 5461 slots | 1 slaves.

172.23.27.97:6381 (b5713042...) -> 0 keys | 5462 slots | 1 slaves.

172.23.27.97:6382 (2449c3b4...) -> 0 keys | 5461 slots | 1 slaves.

[OK] 0 keys in 3 masters.

0.00 keys per slot on average.

[root@dev01 rediscluster]# redis-trib.rb CHECK 127.0.0.1:6380

>>> Performing Cluster Check (using node 127.0.0.1:6380)

M: a776c7470d8fce22a15f4648b6779a3cb05feae3 127.0.0.1:6380

   slots:0-5460 (5461 slots) master

   1 additional replica(s)

S: ede467d6b98912543de6387189860b586a61458a 172.23.27.97:7381

   slots: (0 slots) slave

   replicates b5713042514a2c42563dfb5e429b347c8e517401

S: 6ae8ea96c83f955e6bce861d6282ec889809816d 172.23.27.97:7382

   slots: (0 slots) slave

   replicates 2449c3b46342e15b1882aad64b950de050c7bac1

M: b5713042514a2c42563dfb5e429b347c8e517401 172.23.27.97:6381

   slots:5461-10922 (5462 slots) master

   1 additional replica(s)

S: 90772a73d7f23063dee0276d99e2f25c7477bb75 172.23.27.97:8380

   slots: (0 slots) slave

   replicates a776c7470d8fce22a15f4648b6779a3cb05feae3

M: 2449c3b46342e15b1882aad64b950de050c7bac1 172.23.27.97:6382

   slots:10923-16383 (5461 slots) master

   1 additional replica(s)

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

当繁华的标红的两行的内容不包含如上红色内容时,表明redis cluster有问题,需要报警

 

Redis的新增,移出,迁移,增加备份节点等功能:                

Redis 集群教程

如果不使用官方工具如何手动搭建集群和备份操作:

Redis集群主备模式部署

运维中其他注意:

Redis Cluster 原理与管理

提到的迁移机器方案试了下确实可以:

前提:6380是master 7380 是6380的slave机器

1. 关闭slave 机器

2. 拷贝slave的 dump.rdb nodes-6380.conf redis6380.conf 到新文件夹redis8380,修改conf配置

将nodes-6380.conf中 7380修改为8380

3. redis-server redis8380.conf

4. 确实,集群中将6380的slave备份机器,变成了8380,而不是down掉的7380机器

也就是说,可以不用使用redis-trib.rb 的 加入集群,设置slave作为备份的功能,而直接就可以做到slave机器的替换更新

 

Redis-trib 内部实现原理:

redis cluster管理工具redis-trib.rb详解

Redis-Cluster实战--8.Redis-Cluster水平扩容(redis-cli实现版)

 

参考文献:https://www.cnblogs.com/wuxl360/p/5920330.html

 

posted @ 2018-01-17 16:17  小榴莲  阅读(65)  评论(0)    收藏  举报