加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 财气网 (https://www.caiqiwang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux上安装Redis并搭建集群

发布时间:2022-10-17 13:00:57 所属栏目:Linux 来源:
导读:  在搭建redis集群时遇到了几个莫名其妙的错误,记录一下

  1.安装Redis

  (1).安装redist需要安装支持包,yum install gcc-c++

  (2).redis安装包采取的是在线wget下载.若wget命令不存在,执行
  在搭建redis集群时遇到了几个莫名其妙的错误,记录一下
 
  1.安装Redis
 
  (1).安装redist需要安装支持包,yum install gcc-c++
 
  (2).redis安装包采取的是在线wget下载.若wget命令不存在,执行 yum -y install wget安装
 
  wget
 
  (3).解压在当前目录(我的是家目录)
 
  [root@admin ~]# tar -zxvf redis-4.0.9.tar.gz
 
  (4).编译并安装 (redis安装程序是c语言编写,需要编译转换后才能安装)
 
  [root@admin redis-4.0.9]# make && make PREFIX=/usr/local/redis install
 
  --->1).&&连接两个命令,前面命令的返回值决定是否执行后面的命令
 
  --->2).PREFIX(注意:大写)指定安装目录,若目录不存在,则自动创建
 
  (5).复制配置文件并修改
 
  复制安装包下 redis.conf 到 目录/usr/local/redis下,并改名 6379.conf (改不改没影响)
 
  vim 6379.conf
 
  修改: bind 127.0.0.1 ---->bind 自己ip
 
  daemonize no no---->yes
 
  protected-mode yes yes---->no
 
  (6).修改下启动脚本
 
  #chkconfig 2345 10 90 添加对chkconfig的支持,2345表示服务允许启动的级别是2,3,4,5;10和90用于设置服务的启动顺序和关闭顺序。数值小的先执行,数值大的后执行。取值范围在0~99.
 
  EXEC和CLIEXEC分别表示redis服务器后端启动和前端启动的应用程序路径。CONF指的是程序配置文件的路径
 
  (7).配置环境变量并开启redis防火墙端口
 
  (8).启动
 
  2.搭建Redis集群
 
  1.创建集群节点文件目录
 
  在/usr/local/redis-cluster目录下创建 7001 7002 7003 7004 7005 7006目录文件
 
  mkdir 7001 7002 7003 7004 7005 7006
 
  2.复制配置文件
 
  从已经安装的redis中,复制redis.conf文件到上面的6个文件目录
 
  cp redis.conf /usr/local/redis-cluster/7001/7001.conf
 
  修改redis配置文件
 
  同理,同上修改其他文件夹的节点配置文件 (也可以复制解压缩文件中的src下面的7个启动文件到/usr/local/redis-cluster/bin目录中, 以后可以在bin目录中启动)
 
  3.各个节点配置完成,开始启动服务
 
  启动服务用的是redis解压包下的src目录中的redis-server启动
 
  4.执行redis的创建集群命令创建集群(注意ip地址和端口号)
 
  启动集群用的是 redis解压包下的src目录中的 redis-trib.rb启动
 
  运行创建命令,你会发现报错,提示需要安装ruby相关的内容
 
  5.安装ruby相关环境和包
 
  (1).安装ruby环境
 
  yum install ruby
 
  yum install rubygems
 
  (2).安装ruby包 (在这步,遇到了各种的坑)
 
  安装命令:gem install redis
 
  报错: redis requires Ruby version >= 2.2.2的报错,查了资料发现是Centos默认支持 ruby到2.0.0,可gem 安装redis需要最低是2.2.2
 
  查找相关的解决方案,大部分是这样解决的—>解决方案,好吧,运行这种解决方案,在执行安装命令rvm install 2.3.3时,报错:No fallback URL could be found, try increasing timeout with:找了 网上的各种相关的解决方案,依旧报这个错误,于是放弃这种解决方案。
 
  找到一篇博文,是直接下载安装包进行安装 —>(可行)
 
  执行的命令:
 
  ① 卸载当前ruby(当前使用centos系统)
 
  yum remove ruby
 
  ②下载ruby稳定版
 
  cd /usr/local/rvm/rubies
 
  wget
 
  ③安装ruby
 
  tar zxvf ruby-2.5.1.tar.gz
 
  cd ruby-2.5.1
 
  ./configure --prefix=/usr/local/rvm
 
  make && make install
 
  ④查看安装后的版本
 
  /usr/local/rvm/bin/ruby -v
 
  ⑤镜像加速
 
  此时使用gem install redis不会报错了,但是你会发现很慢,为了更快速的安装,这里使用国内的镜像() 执行若报错,https改为http
 
  gem sources --add --remove
 
  gem sources -l
 
  出现异常:/usr/bin/gem: No such file or directory
 
  解决方案:ln -s /usr/local/rvm/bin/gem /usr/bin/gem
 
  ⑥ 安装
 
  gem install redis
 
  6. 再次执行创建集群的命令
 
  ./redis-trib.rb create --replicas 1 10.0.192.64:7001 10.0.192.64:7002 10.0.192.64:7003 10.0.192.64:7004 10.0.192.64:7005 10.0.192.64:7006
 
  [root@hart]/usr/local/redis-cluster/bin# ./redis-trib.rb create --replicas 1 10.0.192.64:7001 10.0.192.64:7002 10.0.192.64:7003 10.0.192.64:7004 10.0.192.64:7005 10.0.192.64:7006
 
  .1.11:7004 192.168.1.11:7005 192.168.1.11:7006
 
  /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError)
 
  from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
 
  from ./redis-trib.rb:25
 
  解决办法:1.下载 并上传redis-3.0.0.gem
 
  2.执行 geminstall redis-3.0.0.gem
 
  创建集群命令中 --replicas 1,1其实代表的是一个比例,就是主节点数/从节点数的比例。slot对于Redis集群而言,一个存放数据的地方,对应一个槽。对于每一个Master而言,会存在一个slot的范围,而Slave则没有。在Redis集群中,依然是Master可以读、写,而Slave只读。数据的写入,实际上是分布的存储在slot中。
 
  7.数据测试
 
  登录集群客户端,-c标识以集群方式登录
 
  redis-cli -h 10.0.192.64 -p 7001 -c
 
  redis cluster在设计的时候,就考虑到了去中心化,去中间件,也就是说,集群中的每个节点都是平等的关系,都是对等的,每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃,这样就保证了我们只需要连接集群中的任意一个节点,就可以获取到其他节点的数据。
 
  Redis集群并没有使用传统的一致性哈希来分配数据,而是采用另外一种叫做哈希槽(hash slot)的方式来分配的,一致性哈希对向集群中新增和删除实例的支持很好,但是哈希槽对向集群新增实例或者删除实例的话,需要额外的操作,需要手动的将slot重新平均的分配到新集群的实例中。
 
  Redis 集群会把数据存在一个master节点,然后在这个master和其对应的salve之间进行数据同步。当读取数据时,也根据一致性哈希算法到对应的master节点获取数据。只有当一个master 挂掉之后,才会启动一个对应的salve节点,充当master。
 
  需要注意的是:必须要3个或以上的主节点,否则在创建集群时会失败,并且当存活的主节点数小于总节点数的一半时,整个集群就无法提供服务了。
 
  Redis Cluster中有一个16384长度的槽的概念,他们的编号为0、1、2、3……16382、16383。这个槽是一个虚拟的槽,并不是真正存在的。正常工作的时候,Redis Cluster中的每个Master节点都会负责一部分的槽集群linux,当有某个key被映射到某个Master负责的槽,那么这个Master负责为这个key提供服务,至于哪个Master节点负责哪个槽,这是可以由用户指定的,也可以在初始化的时候自动生成(redis-trib.rb脚本)。这里值得一提的是,在Redis Cluster中,只有Master才拥有槽的所有权,如果是某个Master的slave,这个slave只负责槽的使用,但是没有所有权。
 
  8.集群添加节点
 
  将7001文件复制一份改为7007,然后修改7007.conf文件端口号也改为7007。redis实例添加到集群之前,一定要确保这个redis实例没有存储过数据,也不能持久化的数据文件,否则在添加的时候会报错的!
 
  # ./redis-trib.rb add-node  new_ip:new_port exist_ip:exist_port
 
  进入任意节点执行 cluster nodes 命令,可以看到7007已经作为主节点添加到集群中了,但是没有分配哈希槽,没有分配哈希槽表示没有存储数据的能力。
 
  重新分配哈希槽
 
  # ./redis-trib.rb reshard new_ip:new_port
  ./redis-trib.rb reshard 10.0.192.64:7007
  9.集群删除节点(添加节点反着执行)
 
  将节点中的哈希槽重新分配(主节点有这步)
 
  删除节点
 
  ./redis-trib.rb del-node ip:port 'node-id'
 

(编辑:财气旺网 - 财气网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!