当前位置: 首页 > Linux

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

时间:2023-04-06 11:49:54 Linux

搭建三主三从redis集群:基于redis分布式锁。1、redis包上传将redis-4.0.1.tar.gz包上传到一台机器上,解压到/usr/local目录下,重命名为redisscp./redis-4.0.1.tar.gz./ruby-2.3.4.tar.gzroot@192.168.1.8:/usr/local/tar-zxvfredis-4.0.1.tar.gz//解压redismvredis-4.0.1redis//解压redis文件名为redis2.redis的安装依赖yuminstall-ytclgcczlib-developenssl-devel。上面安装了tcl、gcc、zlib-devel和openssl-devel。编译redis进入redis目录,执行makeMALLOC=libc命令makeMALLOC=libc4。复制一些redis命令脚本到PATH变量所在目录cp-asrc/redis-serversrc/redis-clisrc/redis-sentinelsrc/redis-trib.rbsrc/redis-check-aofsrc/redis-check-rdbsrc/redis-benchmark/usr/local/bin/那个/usr/local/bin是PATH变量的目录,这样可以直接执行redis的一些命令5.创建redis的目录cd/clusteroptmkdirredis-clustermkdirredis-cluster/nodes-{7001,7002,7003}//在redis-cluster下创建三个目录:nodes-7001、nodes-7002、nodes-70036.修改配置文件,编辑redis.conf配置文件(以7001为例,7002和7003都编辑配置文件)cdredis-cluster/nodes-7001viredis.conf修改配置文件内容如下:bind127.0.0.1192.168.9.216//(注意:bind的意思不是绑定外部服务器的IP,而是绑定本机可以访问的IP)port7001pidfileredis_7001.pidloglevelnoticelogfile"/opt/redis-cluster/nodes-7001/redis_7001.log"//日志文件存放目录dir/opt/redis-cluster/nodes-7001///节点主目录存放位置cluster-config-filenodes-7001.conf//集群配置文件daemonizeyes//后台进程supervisedno//appendonlyyescluster-enabledyes//集群模式启用cluster-node-timeout15000//集群节点之间的超时时间为15秒save9001//save30010save6010000dbfilenamedump.rdbappendfilename"appendonly.aof"appendfsynceverysec以上7001配置完成后,将7001以上配置复制到7002和7003目录下;然后将对应配置的个性化配置路径修改为port、pidfile、logfile、dir、cluster-config-file。7、另一台机器在另一台机器上设置,重复上面的步骤,但是改为7001、7002、70038,依次启动各个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|grepredis9.安装红宝石。我们的centos7操作系统默认是没有ruby的。上传ruby-2.3.4.tar.gz到/usr/local下,解压重命名为rubycdruby??./configuremake&&makeinstallruby-v按照以上步骤在两台机器上安装ruby10。安装ruby-redis.gem(如果你之前没有安装过以下依赖,那么:首先安装:yuminstall-yzlib-developenssl-devel)我们安装ruby-redis.gem来对应redis。在/usr/local/redis下,如果geminstallredis报错:ERROR:Loadingcommand:install(LoadError)cannotloadsuchfile--zlibERROR:Whileexecutinggem...(NoMethodError)undefinedmethod`invoke_with_build_args'fornil:NilClass其次安装:ruby相关的东西cd/usr/local/ruby/ext/zlibrubyextconf.rbmake&&makeinstallgeminstallredis再次,如果再次报错:ERROR:Whileexecutinggem...(Gem::Exception)Unabletorequireopenssl,installOpenSSLandrebuildruby??(preferred)orusenon-HTTPSsourcescd/usr/local/ruby/ext/opensslrubyextconf.rb替换生成的MakeFile文件中的${top_srcdir}../..make&&makeinstall的前一步基本上是上述两个问题。解决后就可以正常了:geminstallredis11。创建redis集群,进入redis/src:执行如下命令。./redis-trib.rbcreate--replicas1192.168.1.8:7001192.168.1.8:7002192.168.1.8:7003192.168.1.9:7001192.168.1.9:7002192.168.1.9:7003跟上所有实例它是6个redis集群,会自动将6个redis实例变成3主3从。这时,显示已经等待。其实是因为redis.conf中的bind有问题,无法在两台机器上绑定127.0.0.1。执行两者:ps-aux|grepredis,看到3个redis进程kill-9kill所有redis进程,删除/opt/redis-cluster目录下nodes-几个文件夹下的所有文件,保留一个redis.conf*然后修改redis.conf6个redis实例,从bind中去掉127.0.0.1,重启启动6个redis实例,再次执行redis-trib.rbcreate--replicas1命令12.rediscluster设置密码在/opt/redis-cluster/nodes-7001/redis.conf在各个目录设置密码:masterauthfounder123requirepassfounder123通过命令client.rbfind/-name"client.rb"找到安装的redis在ruby环境下的配置打开client.rb和如下图第二步修改密码设置的命令运行集群13、在/usr/local/redis/src目录下测试redis集群:redis-cli-c-h192.168.1.8-p7001127.0。0.1:7001>CLUSTERinfo127.0.0.1:7001>CLUSTERnodes127.0.0.1:7001>setfoobar127.0.0.1:7003>getfoo创建集群节点??时会报错;解决办法如下:错误信息说:插槽插槽已被占用。这是因为在建集群之前没有清理redis的旧数据和配置信息。解决方法:使用redis-cli登录各个节点,执行flushall和clusterreset。最后重新创建集群redis的上网配置因为我要在本地测试,所以需要从外网访问redis集群。注意事项1.在redis配置文件中取消bind,然后关闭保护模式#bindIntranetip127.0.0.1protected-modenocluster-node-timeout5000cluster-announce-ip112.65.xx.xxx//外网ipcluster-announce-port${PORT}//外网接入端口cluster-announce-bus-port1${PORT}//外网数据传输端口2创建集群时,使用外网ipredis-cli--clustercreate外网Ip:7001外网Ip:7002外网Ip:7003外网Ip:7004外网Ip:70053,特别注意:Linuxredis集群机器上除了要开放7001-7006端口外,17001-17006端口也需要被打开。之前搭建失败的原因是在内网配置集群时没有打开17001-17006端口。注意单机版问题我可以设置上面的配置吗?(输入“是”接受):yes/usr/lib64/ruby/gems/1.8/gems/redis-3.0.7/lib/redis/client.rb:97:in`call':ERRSlot16011isalreadybusy(Redis::CommandError)来自/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:来自/usr/lib/ruby/1.8/monitor.rb:242:来自/usr/lib64/ruby/gems/的`mon_synchronize'1.8/gems/redis-3.0.7/lib/redis.rb:37:在来自/usr/lib64/ruby/gems/1.8/gems/redis-3.0.7/lib/redis.rb:2431的“同步”中:在./redis-trib.rb:203的“method_missing”中:在./redis-trib.rb:629中的“flush_node_config”中:在./redis-trib.rb:628中的“flush_nodes_config”中:在“each”中./redis-trib.rb:628:in`flush_nodes_config'来自./redis-trib.rb:964:in`create_cluster_cmd'来自./redis-trib.rb:1340:in`send'from./redis-trib.rb:1340问题是在单机版的redis搭建中,node的conf文件的名字是一样的,只要把node文件改成不同的名字,需要重启各个redis,然后就会成功的。如果还是不行,参考:https://www.cnblogs.com/zt007...参考https://www.jianshu.com/p/813...http://www.redis。cn/commands/...https://blog.csdn.net/hanguof...