一、安装redis
0(重要)、centos6自带ruby为2.2.2以下,需要卸载掉
安装开发工具
1、命令:yum groupinstall "Development tools"
清理已安装过的
2、命令:yum erase ruby ruby-libs ruby-mode ruby-rdoc ruby-irb ruby-ri ruby-docs
1、安装gcc环境
yum install gcc-c++
2、下载源码包并解压
wget http://download.redis.io/releases/redis-3.2.4.tar.gz
tar -zxvf redis-3.2.4.tar.gz
cd redis-3.2.4
3、安装ruby2.4.1并编译(一定要安装大于2.2.2的ruby,要不然redis在make的时候会报错)
wget http://ftp.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.gz
tar -zxvf ruby-2.4.1.tar.gz
cd ruby-2.4.1
mkdir -p /usr/local/ruby
./configure --prefix=/usr/local/ruby
make && make install
ln -s /usr/local/ruby/bin/ruby /usr/bin/ruby
4、安装
make
make install PREFIX=/usr/local/redis
cp redis.conf /usr/local/redis/bin/redis.conf
chmod /usr/local/redis/bin/redis.conf
5、启动redis(此为单机测试,只为搭建集群可跳过)
./redis-server redis.conf
6、验证(此为单机测试,只为搭建集群可跳过)
[root@host-172-16-80-177 bin]# ./redis-cli -p 6379
127.0.0.1:6379> get
(error) ERR wrong number of arguments for 'get' command
127.0.0.1:6379> set aa hzb
OK
127.0.0.1:6379> get aa
"hzb"
二、搭建redis集群(集群模式)
1、在/usr/local/下面创建redis-cluster目录
mkdir -p /usr/local/redis-cluster
2、复制/usr/local/redis/bin目录到redis-cluster里面并重命名为redis1
cd /usr/local
cp -r redis/bin redis-cluster/redis1
3、将redis1在同目录复制3份分别起名redis2,redis3,redis4,redis5,redis6(必须6个节点以上才能创建集群)
[root@host-172-16-80-177 redis-cluster]# pwd
/usr/local/redis-cluster
[root@host-172-16-80-177 redis-cluster]# cp -r redis1 redis2
[root@host-172-16-80-177 redis-cluster]# cp -r redis1 redis3
[root@host-172-16-80-177 redis-cluster]# cp -r redis1 redis4
[root@host-172-16-80-177 redis-cluster]# cp -r redis1 redis5
[root@host-172-16-80-177 redis-cluster]# cp -r redis1 redis6
分别修改为redis-7001.conf,redis-7002.conf 后面依次到redis-7006.conf(最好下载到本地后修改后再上传)
以redis-7001为例:
daemonize yes
bind 192.168.65.130 #(外部可访问IP)
Port 7001
logfile "./redis-7001.log"
databases 1
protected-mode no
pidfile /var/run/redis_7001.pid
cluster-enabled yes
4、将redis-trib.rb复到制redis-cluster目录里面
[root@host-172-16-80-177 redis-cluster]# cp /root/redis-3.2.4/src/redis-trib.rb .
[root@host-172-16-80-177 redis-cluster]# ll
total 76
drwxr-xr-x 2 root root 4096 Oct 19 22:37 redis1
drwxr-xr-x 2 root root 4096 Oct 19 22:48 redis2
drwxr-xr-x 2 root root 4096 Oct 19 22:49 redis3
drwxr-xr-x 2 root root 4096 Oct 19 22:49 redis4
drwxr-xr-x 2 root root 4096 Oct 19 22:49 redis5
drwxr-xr-x 2 root root 4096 Oct 19 22:49 redis6
-rwxr-xr-x 1 root root 60852 Oct 19 22:52 redis-trib.rb
5、安装gem
yum install rubygems -y
6、安装ruby的redis包
gem install redis
上面这一步可能会出现:
ERROR: Loading command: install (LoadError)
cannot load such file -- zlib
ERROR: While executing gem ... (NoMethodError)
undefined method `invoke_with_build_args' for nil:NilClass
解决办法是:
- 进入ruby源码文件夹
- 安装ruby自身提供的zlib包
#cd ext/zlib
#ruby ./extconf.rb
#make
#make install
- 进入ruby源码文件夹
- 安装ruby自身提供的openssl包
#cd ext/openssl
#ruby ./extconf.rb
#make
#make install
如果执行make的时候报错:make: *** No rule to make target ,
错误原因:makefile里面的文件依赖关系有问题,导致头文件找不到。
解决办法:打开编译相关模块的makefile文件,找到.o文件的依赖关系,找到.h文件的路径,查看是否出错并改正。
原因分析:这种情况有时候是因为工程所在的目录改变,例如原来在C盘,现在移到了D盘,而makefile里面的.h文件路径没有改变
以上问题解决后再执行:
[root@host-172-16-80-177 include]# gem install redis
Fetching: redis-4.0.1.gem (100%)
Successfully installed redis-4.0.1
Parsing documentation for redis-4.0.1
Installing ri documentation for redis-4.0.1
Done installing documentation for redis after 1 seconds
1 gem installed
表示ruby的redis依赖包安装成功。
7、分别进入redis1,redis2,redis3,redis4,redis5,redis6里面执行(一定要遵循:分别进入)
./redis-server redis-7001.conf
......
将6个节点启动
[root@host-172-16-80-177 redis4]# ps -ef|grep redis
root 3167 1 0 02:49 ? 00:00:00 ./redis-server 127.0.0.1:7001 [cluster]
root 3176 1 0 02:50 ? 00:00:00 ./redis-server 127.0.0.1:7002 [cluster]
root 3187 1 0 02:51 ? 00:00:00 ./redis-server 127.0.0.1:7003 [cluster]
root 3191 1 0 02:52 ? 00:00:00 ./redis-server 127.0.0.1:7004 [cluster]
root 3191 1 0 02:52 ? 00:00:00 ./redis-server 127.0.0.1:7005 [cluster]
root 3191 1 0 02:52 ? 00:00:00 ./redis-server 127.0.0.1:7006 [cluster]
root 3195 1852 0 02:52 pts/0 00:00:00 grep redis
8、用redis-trib.rb构建集群
cd /usr/local/redis-cluster/
[root@host-172-16-80-177 redis-cluster]# ./redis-trib.rb create --replicas 1 192.168.65.130:7001 192.168.65.130:7002 192.168.65.130:7003 192.168.65.130:7004 192.168.65.130:7005 192.168.65.130:7006
9、验证集群是否成功
[root@host-172-16-80-177 redis2]# ./redis-cli -h 192.168.65.130 -c -p 7002
192.168.65.130:7002> set hello helloword
-> Redirected to slot [866] located at 172.16.80.177:7001
OK
172.16.80.177:7006> get hello
-> Redirected to slot [866] located at 172.16.80.177:7001
"helloword"
备注:
密码设置:修改所有Redis集群中的redis-700X.conf文件加入:
在:【port 700X】下一行加入下面两行
masterauth passwd123
requirepass passwd123
设置密码之后如果需要使用redis-trib.rb的各种命令
如:./redis-trib.rb check 127.0.0.1:7000,则会报错ERR] Sorry, can’t connect to node 127.0.0.1:7000
解决办法:vim /usr/local/rvm/gems/ruby-2.3.3/gems/redis-4.0.0/lib/redis/client.rb,然后修改passord
class Client
DEFAULTS = {
:url => lambda { ENV["REDIS_URL"] },
:scheme => "redis",
:host => "127.0.0.1",
:port => 6379,
:path => nil,
:timeout => 5.0,
:password => "passwd123",
:db => 0,
:driver => nil,
:id => nil,
:tcp_keepalive => 0,
:reconnect_attempts => 1,
:inherit_socket => false
}