redis集群

搭建redis集群
用两台虚拟机模拟6个节点,一台机器3个节点,创建出3 master、3 salve 环境。redis 采用 redis-3.2.4 版本。
两台虚拟机:IP:192.168.33.202、IP:192.168.33.203

redis-3.2.4.tar.gz 官网下载地址:http://download.redis.io/releases/redis-3.2.4.tar.gz
csdn下载地址:http://download.csdn.net/download/qq_28827039/10185977

安装步骤:

1.准备环境
上传redis-3.2.4.tar.gz到/usr/local
解压redis-3.2.4.tar.gz

tar -zxvf redis-3.2.4.tar.gz

进入redis-3.2.4

cd redis-3.2.4

2.编译安装

make && make install

安装过程可能出现问题

  • 出现问题:
MAKE hiredis
cd hiredis && make static
make[3]: Entering directory `/usr/local/redis-3.2.4/deps/hiredis'
gcc -std=c99 -pedantic -c -O3 -fPIC  -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb  net.c
make[3]: gcc: Command not found
make[3]: *** [net.o] Error 127
make[3]: Leaving directory `/usr/local/redis-3.2.4/deps/hiredis'
make[2]: *** [hiredis] Error 2
make[2]: Leaving directory `/usr/local/redis-3.2.4/deps'
make[1]: [persist-settings] Error 2 (ignored)
    CC adlist.o
/bin/sh: cc: command not found
make[1]: *** [adlist.o] Error 127
make[1]: Leaving directory `/usr/local/redis-3.2.4/src'
make: *** [all] Error 2

原因:没有安装gcc
有网络解决方案:

yum  install  gcc

无网络解决方案:http://blog.csdn.net/qq_28827039/article/details/78961430

  • 出现问题:
cd src && make all
make[1]: Entering directory `/usr/local/redis-3.2.4/src'
    CC adlist.o
In file included from adlist.c:34:
zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory
zmalloc.h:55:2: error: #error "Newer version of jemalloc required"
make[1]: *** [adlist.o] Error 1
make[1]: Leaving directory `/usr/local/redis-3.2.4/src'
make: *** [all] Error 2

原因:没有安装jemalloc内存分配器
解决方法:

make MALLOC=libc  && make install
  • 出现问题:
/usr/local/redis-3.2.4/src/debug.c:995: undefined reference to `dladdr'
debug.o: In function `sigsegvHandler':
/usr/local/redis-3.2.4/src/debug.c:1064: undefined reference to `dladdr'
collect2: ld returned 1 exit status
make[1]: *** [redis-server] Error 1
make[1]: Leaving directory `/usr/local/redis-3.2.4/src'
make: *** [all] Error 2

原因:由于之前编译安装出错,生成编译文件,在重新编译出错。(自己猜测)
解决方案:删除解压的redis-3.2.4,重新解压

3.创建redis节点(两台虚拟机同样的操作)

cd /usr/local/
mkdir redis_cluster  //创建集群目录
cd redis_cluster
mkdir 7001 7002 7003  //分别代表三个节点,其对应端口 7001 7002 7003
//复制redis.conf到7001目录
cp /usr/local/redis-3.2.4/redis.conf  /usr/local/redis_cluster/7001/   
//复制redis.conf到7002目录
cp /usr/local/redis-3.2.4/redis.conf  /usr/local/redis_cluster/7002/   
//复制redis.conf到7003目录
cp /usr/local/redis-3.2.4/redis.conf  /usr/local/redis_cluster/7003/

修改7001、7002、7003中redis.conf文件

bind 127.0.0.1  //默认ip为127.0.0.1 特别注意(可能会产生集群失败):需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群

daemonize    yes                          //redis后台运行
pidfile  /var/run/redis_7001.pid          //pidfile文件对应7001,7002,7003
port  7001                                //端口7001,7002,7003
cluster-enabled  yes                      //开启集群
cluster-config-file  nodes_7001.conf      //集群的配置
cluster-node-timeout  15000                //请求超时
appendonly  yes                           //aof日志开启,每次写操作都记录一条日志

启动redis各节点

cd /usr/local
redis-server  redis_cluster/7001/redis.conf
redis-server  redis_cluster/7002/redis.conf
redis-server  redis_cluster/7003/redis.conf

检查 redis 启动情况

ps -ef | grep redis   #查看是否启动成功
netstat -tnlp | grep redis #可以看到redis监听端口

4.创建集群
官方提供了一个工具:redis-trib.rb(/usr/local/redis-3.2.4/src/redis-trib.rb) 看后缀就知道这鬼东西不能直接执行,它是用ruby写的一个程序,所以我们还得安装ruby.

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

gem install redis 这里可能无法安装,无法连接gem服务器:

ERROR:  http://rubygems.org/ does not appear to be a repository
ERROR:  Could not find a valid gem 'redis' (>= 0) in any repository

需要手工下载并安装:
虚拟机有网络下载:

wget https://rubygems.global.ssl.fastly.net/gems/redis-3.2.1.gem

虚拟机无网络:(用自己机器浏览器下载)

https://rubygems.global.ssl.fastly.net/gems/redis-3.2.1.gem

上传redis-3.2.1.gem到/usr/local

cd /usr/local
gem install redis-3.2.1.gem

确认所有的节点都启动,接下来使用参数create 创建 (在192.168.33.202中来创建)
运行先检查端口状态:保证端口可以访问(这里我直接关闭了防火墙)
查看防火墙状态:service iptables status
关闭防火墙:service iptables stop

/usr/local/redis-3.2.4/src/redis-trib.rb  create  --replicas  1 192.168.33.202:7001 192.168.33.202:7002 192.168.33.202:7003 192.168.33.203:7001 192.168.33.203:7002 192.168.33.203:7003

5.集群验证

在第一台机器上连接集群的7001端口的节点,在另外一台连接7001节点,连接方式为 redis-cli -h 192.168.33.202 -c -p 7001 ,加参数 -c 可连接到集群,因为上面 redis.conf 将 bind 改为了ip地址,所以 -h 参数不可以省略。
在一台(IP:192.168.33.202)7001节点执行命令

set hello world 

这里写图片描述
在另外一台(IP:192.168.33.203)7001端口,查看 key 为 hello 的内容

get hello

这里写图片描述
看到这个界面说明集群成功了。

你可能感兴趣的:(redis)