redis双机房集群方案 2台redis集群_redis

cluster



在node1和node2上搭建redis集群

(1)将redis-4.0.1.tar.gz包上传到一台机器上去,/usr/local目录下,解压缩:tar -zxvf redis-4.0.1.tar.gz ,重命名为redis : mv redis-4.0.1 redis

(2)安装redis需要的一些依赖:yum install -y tcl gcc zlib-devel openssl-devel

(3)进入redis录内:cd redis,执行make test

(4)进入redis录内,执行make MALLOC=libc,进行编译

(5)创建redis集群的目录

cd /opt
 mkdir redis-cluster
 mkdir redis-cluster/nodes-{7001,7002,7003}

(6)编辑redis.conf配置文件(以7001来举个例子,将7002和7003都编辑一下配置文件)

cd redis-cluster/nodes-7001
vi redis.conf
bind 127.0.0.1 192.168.192.151 => (127.0.0.1去掉,不能要,不然会导致redis集群创建失败)
port 7001
pidfile redis_7001.pid
loglevel notice
logfile "/opt/redis-cluster/nodes-7001/redis_7001.log"
dir /opt/redis-cluster/nodes-7001/
cluster-config-file nodes-7001.conf
daemonize yes
supervised no
appendonly yes
cluster-enabled yes
cluster-node-timeout 15000
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
appendfilename "appendonly.aof"
appendfsync everysec

(7)在另外一台机器上,重复上面的步骤,端口号也是7001、7002、7003

cp nodes-7001/redis.conf nodes-7002,复制然后修改




redis双机房集群方案 2台redis集群_redis两台机器集群_02

无聊的童真



(8)安装ruby

我们的这个centos 7操作系统默认没带ruby

ruby -v(默认是老版本ruby,卸载掉)

rpm -qa | grep ruby
yum erase ruby

将ruby-2.3.4.tar.gz上传到/usr/local下,解压缩,重命名为ruby

cd ruby
./configure
make && make install
ruby -v

按照上面的步骤,两台机器都装一下ruby

(9)安装ruby-redis.gem

(如果之前没装过,那么:yum install -y zlib-devel openssl-devel)

在/usr/local/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
cd /usr/local/ruby/ext/zlib
ruby extconf.rb
make && make install

再次gem install redis,如果再次报错:

ERROR: While executing gem ... (Gem::Exception)
Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources
cd /usr/local/ruby/ext/openssl
ruby extconf.rb

将上个步骤生成的MakeFile文件中的${top_srcdir}都替换为../..

make && make install

基本就是上面两个问题,都解决了之后,就可以正常的:gem install redis




redis双机房集群方案 2台redis集群_配置文件_03


(10)依次启动各个redis实例(以7001作为参考)

在两台机器上都依次执行下面的命令就可以了:

cd /usr/local/redis/src
./redis-server /opt/redis-cluster/nodes-7001/redis.conf
./redis-server /opt/redis-cluster/nodes-7002/redis.conf
./redis-server /opt/redis-cluster/nodes-7003/redis.conf

查看redis cluster状态

ps -ef | grep redis

因为我们现在的重点不是讲redis这个技术,其实我们是在讲基于redis的分布式锁,大家现在对redis不用太过于的纠结,我们就不去管这些东西了,

后面都会详细讲解redis技术的,我们再看

这个时候看nodes-7001里面,会自动生成一些文件,包括nodes-7001.conf(自动生成的集群配置文件),appendonly.aof,redis_7001.log,redis_7001.pid

(11)创建redis cluster集群

cd /usr/local/redis/src
./redis-trib.rb create --replicas 1 192.168.192.150:7001 192.168.192.150:7002 192.168.192.150:7003 192.168.192.151:7001 192.168.192.151:7002 192.168.192.151:7003

跟上所有的redis实例,一共是6个

redis cluster自动会将6个redis实例做成3主3从的

查看日志

cd /opt/redis-cluster/nodes-7001
cat nodes-7001/redis_7001.log

此时显示一直在等待,其实是因为redis.conf中的bind出了问题,不能bind 127.0.0.1

在两台机器上,都执行:ps -aux | grep redis,看到3个redis进程

kill -9 杀死所有的redis进程

对/opt/redis-cluster目录下的nodes-***几个文件夹内的文件,都删除,保留一个redis.conf

rm -rf redis_**
rm -rf app*
rm -rf node*

然后修改6个redis实例的redis.conf,bind里面都去掉127.0.0.1

重新启动6个redis实例

再次执行

cd /usr/local/redis/src
./redis-trib.rb create --replicas 1命令

(12)测试redis cluster

在/usr/local/redis/src目录下:

./redis-cli -c -h 192.168.192.150 -p 7001
127.0.0.1:7001> CLUSTER info
127.0.0.1:7001> CLUSTER nodes
127.0.0.1:7001> set foo bar
127.0.0.1:7003> get foo

(13)检查集群状态

./redis-trib.rb check 192.168.192.150:7001 => redis 4.0
./redis-cli --cluster check 192.168.192.150:7001 => redis 5.0