程序员学习xxRedis概述其实程序员也要和操作系统打交道,比如最常见的,在自己的电脑上部署开发环境。当然,有时候也有一些好人认为运维或者基础部门的同事实力不够,自己部署服务器或者线上环境。这种情况也是存在的。综上所述,程序员和运维的接触是一样的,只是在集群或者动作原理上有一点点区别。我的目的是花一些时间整理一下这些运维小知识,保证被问到的是完全真实的。大家应该用单集群部署redis,下载源码包,编译。或者使用docker命令拉取。下面是一个集群CLUSTER。CLUSTER一般用于部署6个单元:3master和3slave。如果可以单机部署,其实很简单,修改redis.conf,开启监听端口,节点等选项。主要涉及以下几项:binddaemonizerequirepassmasterauthlogfilecluster-enabledcluster-config-filecluster-node-timeoutdbfilenameappendfilename修改完成后,启动6个redis,登录redis/root/docker_redis_cluster/redis-3.2.11/src/redis-cli-h127.0.0.1-p6379auth123456inforeplication然后使用meet命令添加其他集群CLUSTERMEET172.17.0.36379CLUSTERMEET172.17.0.46379...CLUSTERNODES需要分配槽redis-cli-p6379clusteraddslots{0..5461}redis-cli-p6380clusteraddslots{5462..10922}redis-cli-p6381clusteraddslots{10923..16383}CLUSTERNODESassigned3是master,登录其他3台服务器,分别添加masterto自己完成集群CLUSTERNODESCLUSTERREPLICATE760e4d0039c5ac13d04aa4791c9e6dc28544d7c7#分别登录从机,加入主服务器的id茶歇。昨天,redis集群修好了。一开始没问题,但是看完伪善的描述,我想会有人跳出来:“低货,人家redis集群是用集群脚本安装的。”作为9012的猿猴,虽然Yann认为可以给出100个理由来证明集群脚本的不便,但脚本本身还是可以理解的。这里提到的脚本是名为redis-trib的rb脚本。虽然100个理由比较难,但是还是可以举几个理由:需要ruby环境支持容器,不支持密码。apt-getinstallruby??geminstallredis这里还会有一个坑:使用gem时系统会报ruby版本太低。如何使用rvm修改版本是另一篇文章。对于cleanfreaks(比如yann)来说,没有理由在系统中安装ruby是不能接受的。此外还有派生问题,后面会讲到。命令参数cd/usr/local/src/redis-3.2.11/src./redis-trib.rbhelpcreatecheckinfofixreshard创建集群./redistrib.rbcreate--replicas1127.0.0.1:6479127.0.0.1:6480127.0.0.1:6481127.0.0.1:6482127.0.0.1:6483127.0.0.1:6484ps。可以先添加3组,然后通过添加新节点指定对应的主库不支持密码。第二个原因爆发。Redis-trib.rb会报无法连接集群。您需要修改client.rb文件。修改完源代码文件后,脚本连接到集群上,继续进行其他操作,对集群进行测试。/redis-trib.rbcheck127.0.0.1:6479查看信息。/redis-trib.rbinfo127.0.0.1:6479平衡节点按权重分布,比较实用的功能之一。/redis-trib.rbrebalance127.0.0.1:6479删除节点只能删除没有分配槽的节点。/redis-trib.rbdel-node127.0.0.1:6480添加节点,添加主库。请注意,添加的服务器是第一个。添加从库需要主库id./redis-trib.rbadd-node127.0.0.1:6488127.0.0.1:6479./redis-trib.rbadd-node--slave--master-id77c2a2d5e96d14a4c5b5614cb68ad27d40530f4b127.0.0.1:6480127.0.0.1:6479其实上面的操作都没有完成。原因很简单。Yann使用容器搭建的redis会有2个ip,容器外的ip和容器内的ip。使用容器内的ip将无法运行脚本,使用容器外的ip将无法运行脚本。请自己想想原因。至此,就无法出坑了,虽然可以在容器内部安装ruby解决,但是容器是精简系统,redis文件不完整...redis-trib.rb不能很好地支持容器。茶歇时间采访别人还是很有技巧的。比如你用容器搭建redis,你就知道redis-trib。.rb文件?如何使用redis-trib.rb和刚才搭建的redis做集群?答案是做不到。原因请参考昨天的巨坑。用集群完成生产操作后,可以做一些具体的工作,例如:槽迁移和再平衡单机迁移到集群槽迁移为什么要进行槽迁移?当然是为了集群的扩容/缩容。redis的slot其实是一个很重要的概念。如果slot不分配,集群不能使用,有slot的节点不能删除,slot只分配在master节点上……曹伟:你说我?不行,赶紧滚。。。在线迁移是用来完成集群的在线横向扩缩容。/redis-trib.rbreshard127.0.0.1:6479#勾选后会有交互信息,问多少slotmigrate,生产中常用参数迁移到哪个节点。/redis-trib.rbreshard--from7fa64d250b595d8ac21a42477af5ac8c07c35d83--to5476787f31fa375fda6bb32676a969c8b8adfbc2--slots10127.0.0.1c35d83--to5476787f31fa375fda6bb32676a969c8b8adfbc2--slots10127.0.0.1rebalancedtheslotnewaddedthenodes,rebalancedtheslot:6479,这可以通过重新平衡来解决。还有就是密码问题,修改rb文件或者取消配置文件上的密码,看看大家喜欢什么../redis-trib.rbrebalance127.0.0.1:6479单机迁移到集群常用于处理历史问题。当时需求紧急,上线了12345redis-trib.rbimport--fromip:port:id#源单机--copyip:port#集群密码问题,还需要修改源文件代码:viredis-trib.rb这三天一直在讲集群的使用。今天,我们来解释一下集群的工作原理。虽然都是官方提供的:RedisCluster使用无中心节点可以这样实现,不用proxy,客户端直连redis集群的所有节点,根据hash计算key对应的slot算法,命令在slot对应的Redis上执行。从CAP角度看,RedisCluster属于APAvailability&Partition-Tolerancy,可用和分区容错安全加固Redis是系统的一大漏洞,yann不能关机,需要root权限,是从它的私有环境运行,请勿模仿总之,常用加固如下:开启redis密码认证,禁止使用root用户启动,修改默认端口6379限制访问redis配置文件禁用或重命名危险命令禁止监控开启保护模式on公网开启redis密码认证viredis.confrequirepass#配置强密码禁止使用root用户启动useradd-s/sbin/nolog-Mredissudo-uredis/
