虚拟机-搭建3主3从redis集群

搭建3主3从的redis cluster:基于redis分布式锁。

1.redis包上传

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

scp ./redis-4.0.1.tar.gz ./ruby-2.3.4.tar.gz [email protected]:/usr/local/

虚拟机-搭建3主3从redis集群_第1张图片

tar -zxvf redis-4.0.1.tar.gz //解压redis  
mv redis-4.0.1 redis //将解压后的redis文件命名为redis

虚拟机-搭建3主3从redis集群_第2张图片

2.安装redis依赖

yum install -y tcl gcc zlib-devel openssl-devel

以上安装了tcl、gcc、zlib-devel 、openssl-devel

3.编译redis

进入redis录内,执行make MALLOC=libc命令

make MALLOC=libc

虚拟机-搭建3主3从redis集群_第3张图片

4.把redis的一些命令脚本拷贝到PATH变量所在的目录

cp -a src/redis-server src/redis-cli src/redis-sentinel src/redis-trib.rb src/redis-check-aof src/redis-check-rdb src/redis-benchmark /usr/local/bin/

那个/usr/local/bin,就是PATH变量的目录,这样就可以直接执行redis的一些命令了

image.png

5、创建redis集群的目录

cd /opt
mkdir redis-cluster
mkdir redis-cluster/nodes-{7001,7002,7003} //在redis-cluster下面创建:nodes-7001、nodes-7002、nodes-7003的3个目录

虚拟机-搭建3主3从redis集群_第4张图片

6、修改配置文件

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

cd redis-cluster/nodes-7001
vi redis.conf

修改配置文件内容如下:

bind 127.0.0.1 192.168.9.216 //(注意:bind的意思不是绑定外部服务器的IP,而是绑定本机可以接受访问的IP)
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    //集群节点之间超时时间是15秒
save 900 1  //
save 300 10
save 60 10000
dbfilename dump.rdb
appendfilename "appendonly.aof"
appendfsync everysec

虚拟机-搭建3主3从redis集群_第5张图片

上面7001配置做完之后,将7001的上面配置拷贝到7002、7003目录下;然后修改对应配置的个性化配置路径即可。port、pidfile、logfile、dir、cluster-config-file。

7.另一台机器设置

在另外一台机器上,重复上面的步骤,但是弄成7001、7002、7003

8、依次启动各个redis实例

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

cd /usr/local/redis/src
./redis-server /opt/redis-cluster/nodes-7001/redis.conf //以配置文件形式启动redis服务.
./redis-server /opt/redis-cluster/nodes-7002/redis.conf
./redis-server /opt/redis-cluster/nodes-7003/redis.conf

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

ps -ef | grep redis

image.png

9.安装ruby

我们的这个centos 7操作系统默认没带ruby
将ruby-2.3.4.tar.gz上传到/usr/local下,解压缩,重命名为ruby

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

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

10.安装ruby-redis.gem

(如果之前没装过下面的依赖,那么:首先安装:yum install -y zlib-devel openssl-devel)

我们安装ruby-redis.gem是去对应redis下去安装。

在/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

其次安装:ruby的相关东西
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

虚拟机-搭建3主3从redis集群_第6张图片

11.创建redis cluster集群

进入redis/src下面:执行如下命令。

./redis-trib.rb create --replicas 1 192.168.1.8:7001 192.168.1.8:7002 192.168.1.8:7003 192.168.1.9:7001 192.168.1.9:7002 192.168.1.9:7003

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

redis cluster自动会将6个redis实例做成3主3从的
虚拟机-搭建3主3从redis集群_第7张图片

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

在两台机器上,都执行:ps -aux | grep redis,看到3个redis进程
kill -9 杀死所有的redis进程

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

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

虚拟机-搭建3主3从redis集群_第8张图片

再次执行redis-trib.rb create --replicas 1命令

虚拟机-搭建3主3从redis集群_第9张图片

12.redis cluster设置密码

在/opt/redis-cluster/nodes-7001/redis.conf各个目录下设置密码:

masterauth founder123
requirepass founder123

通过指令找到安装的redis在ruby环境中的配置client.rb

find / -name "client.rb"

虚拟机-搭建3主3从redis集群_第10张图片

打开client.rb并按照图示修改第二步所设置的密码
image.png

运行集群的指令
虚拟机-搭建3主3从redis集群_第11张图片

13.测试redis cluster

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

redis-cli -c -h 192.168.1.8 -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

虚拟机-搭建3主3从redis集群_第12张图片

image.png

虚拟机-搭建3主3从redis集群_第13张图片

问题

在执行创建集群节点时候,会出现报错情况;解决方案如下:
虚拟机-搭建3主3从redis集群_第14张图片

错误提示是说:slot插槽被占用了、这是因为 搭建集群前时,以前redis的旧数据和配置信息没有清理干净。
解决方案:用redis-cli 登录到每个节点执行 flushall 和 cluster reset 就可以了。
虚拟机-搭建3主3从redis集群_第15张图片

最后重新创建集群
虚拟机-搭建3主3从redis集群_第16张图片

redis互联网访问配置

因为我想在本地测试,所以需要外网访问redis集群

此处为止注意点
1 redis 配置文件中 把bind取消,然后把保护模式关闭

#bind 内网ip 127.0.0.1
protected-mode no
cluster-node-timeout 5000 
cluster-announce-ip 112.65.xx.xxx //外网ip 
cluster-announce-port ${PORT} //外网访问端口
cluster-announce-bus-port 1${PORT}  //外网数据传输端口

2 创建集群的时候用外网ip
redis-cli --cluster create 外网Ip:7001 外网Ip:7002 外网Ip:7003 外网Ip:7004 外网Ip:7005

3、特别注意:
上面除了需要在linux的redis集群机器上开通7001-7006端口外,还需要开通17001-17006端口。之前一直搭建失败是因为:内网配置集群时候17001-17006端口没有开放。

注意单机版问题

Can I set the above configuration? (type 'yes' to accept): yes

/usr/lib64/ruby/gems/1.8/gems/redis-3.0.7/lib/redis/client.rb:97:in `call': ERR Slot 16011 is already busy (Redis::CommandError)

        from /usr/lib64/ruby/gems/1.8/gems/redis-3.0.7/lib/redis.rb:2432:in `method_missing'

        from /usr/lib64/ruby/gems/1.8/gems/redis-3.0.7/lib/redis.rb:37:in `synchronize'

        from /usr/lib/ruby/1.8/monitor.rb:242:in `mon_synchronize'

        from /usr/lib64/ruby/gems/1.8/gems/redis-3.0.7/lib/redis.rb:37:in `synchronize'

        from /usr/lib64/ruby/gems/1.8/gems/redis-3.0.7/lib/redis.rb:2431:in `method_missing'

        from ./redis-trib.rb:203:in `flush_node_config'

        from ./redis-trib.rb:629:in `flush_nodes_config'

        from ./redis-trib.rb:628:in `each'

        from ./redis-trib.rb:628:in `flush_nodes_config'

        from ./redis-trib.rb:964:in `create_cluster_cmd'

        from ./redis-trib.rb:1340:in `send'

        from ./redis-trib.rb:1340

问题在于在进行单机版的redis搭建中,节点conf文件名字一样造成的,只要把节点文件改成不同名字,并且要重新启动各个redis,之后就能成功
如果还是不行 参考:
https://www.cnblogs.com/zt007...

参考

https://www.jianshu.com/p/813...
http://www.redis.cn/commands/...
https://blog.csdn.net/hanguof...

你可能感兴趣的:(redis,linux,虚拟机)