centos 关于redis 集群配置安装

一、概述
1Redis3.0版本之后支持Cluster.
1.1、redis cluster的现状
  目前redis支持的cluster特性:
  1):节点自动发现
  2):slave->master 选举,集群容错
  3):Hot resharding:在线分片
  4):进群管理:cluster xxx
  5):基于配置(nodes-port.conf)的集群管理
  6):ASK 转向/MOVED 转向机制.
1.2、redis cluster 架构
  1)redis-cluster架构图

架构细节:
  (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
  (2)节点的fail是通过集群中超过半数的节点检测失效时才生效.
  (3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
  (4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value
2) redis-cluster选举:容错

(1)领着选举过程是集群中所有master参与,如果半数以上master节点与master节点通信超过(cluster-node-timeout),认为当前master节点挂掉.
(2):什么时候整个集群不可用(cluster_state:fail),当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误
  a:如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成进群的slot映射[0-16383]不完成时进入fail状态.
  b:如果进群超过半数以上master挂掉,无论是否有slave集群进入fail状态.
二、redis cluster安装

用三台虚拟机模拟6个节点,一台机器2个节点,创建出3 master、3 salve 环境。

redis 采用 redis-3.2.4 版本。
三台虚拟机都是 CentOS , CentOS6.5 (IP:10.0.80.199、10.0.80.200、10.0.80.201)
安装过程
yum install patch gcc-c++ make bzip2 autoconf automake libtool bison iconv-devel readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl* openssl-devel curl-devel expat-devel gettext-devel
1. 下载并解压
cd /usr/software
wget http://download.redis.io/releases/redis-3.2.4.tar.gz
tar -zxvf redis-3.2.4.tar.gz 
2. 编译安装
cd redis-3.2.4
make && make install
3. 创建 Redis 节点
首先在 192.168.31.245 机器上 /usr/software 目录下创建 redis-cluster 目录;
mkdir redis-cluster  
在 redis-cluster 目录下,创建名为6379、6380目录,并将 redis.conf 拷贝到这三个目录中
mkdir 6379 6380
cp redis.conf redis-cluster/6379
cp redis.conf redis-cluster/6380
分别修改配置文件,修改如下内容


port  6379                                        //端口6379,6380
bind 10.0.80.199                                       //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群
daemonize    yes                               //redis后台运行
pidfile  /usr/software/redis-cluster/6379/redis-6379.pid          //pidfile文件对应6379,6380
cluster-enabled  yes                           //开启集群  把注释#去掉
cluster-config-file  /usr/software/redis-cluster/6379/nodes-6379.conf   //集群的配置  配置文件首次启动自动生成 6379,6380
cluster-node-timeout  15000                //请求超时  默认15秒,可自行设置
appendonly  yes                           //aof日志开启  有需要就开启,它会每次写操作都记录一条日志
logfile /usr/software/redis-cluster/6379/redis.log   //日志记录文件



接着在另外2台机器上重复以上三步
4. 启动各个节点
/usr/local/bin/redis-server redis-cluster/6379/redis.conf
... ...
ps -ef | grep redis


5.创建集群


Redis 官方提供了 redis-trib.rb 这个工具,就在解压目录的 src 目录中。使用下面这个命令即可完成安装
./redis-trib.rb  create  --replicas  1 10.0.80.199:6379 10.0.80.200:6379 10.0.80.201:6379 10.0.80.201:6380 10.0.80.199:6380 10.0.80.200:6380
如果出错了,这个工具是用 ruby 实现的,所以需要安装 ruby。
--replicas 1 表示 自动为每一个master节点分配一个slave节点 上面有6个节点,程序会按照一定规则生成 3个master(主)3个slave(从)

6.ruby安装
系统默认安装的是1.8版本,需要安装2.0以上版本,下载
wget https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.gz
tar -zxvf  ruby-2.4.1.tar.gz
./configure --enable-shared --enable-pthread --prefix=/usr/local/ruby
make && make install
将ruby命令集加入系统环境变量
#export RUBY_HOME=/usr/local/ruby
#export PATH=$PATH:$RUBY_HOME/bin
echo "PATH=$PATH:/usr/local/ruby/bin;export PATH" >> /etc/profile
source /etc/profile

7.检查ruby、gem版本
ruby -v
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
gem -v


8.安装redis的第三方接口
gem install redis--version 3.3.3
如果安装没问题
find / -name "redis"
/usr/local/ruby/lib/ruby/gems/2.4.0/gems/redis-3.3.3/lib/redis
如果没有出现,说明安装有问题,redis-trib.rb还是会无法执行
如果安装不正确,只有先卸载系统自带的ruby
yum remove ruby
进入先前ruby安装目录
make uninstall ruby
make clean
在重新步骤6

说明:在这里安装redis接口折腾好久(千万不能在ruby未安装配置好的情况下直接直接利用系统自带gem执行安装,那样的话也是安装在系统ruby 1.8版本下,等你配好ruby,去执行gem install redis,也是不成功),如果安装成功,执行步骤5 集群部署就成功了

 ./redis-trib.rb  create  --replicas  1 10.0.80.199:6379 10.0.80.200:6379 10.0.80.201:6379 10.0.80.201:6380 10.0.80.199:6380 10.0.80.200:6380
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
10.0.80.199:6379
10.0.80.200:6379
10.0.80.201:6379
Adding replica 10.0.80.200:6380 to 10.0.80.199:6379
Adding replica 10.0.80.199:6380 to 10.0.80.200:6379
Adding replica 10.0.80.201:6380 to 10.0.80.201:6379
M: 7c516370de41dfa88a67c65bda150027eacf58a5 10.0.80.199:6379
   slots:0-5460 (5461 slots) master
M: ce517da519e9d48b4b2ccd5d9c59ce9272be889d 10.0.80.200:6379
   slots:5461-10922 (5462 slots) master
M: 69fa96dcc1035d0339cb38042a473819514257e6 10.0.80.201:6379
   slots:10923-16383 (5461 slots) master
S: 9713ecac4a54542e1f7889bb7cca9697b48197ff 10.0.80.201:6380
   replicates 69fa96dcc1035d0339cb38042a473819514257e6
S: 84502278160d571489a838a0318483a898fcbdf6 10.0.80.199:6380
   replicates ce517da519e9d48b4b2ccd5d9c59ce9272be889d
S: 926abd06fd5207a4b6970d5bdd5ab417b4fcbb12 10.0.80.200:6380
   replicates 7c516370de41dfa88a67c65bda150027eacf58a5
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join.....
>>> Performing Cluster Check (using node 10.0.80.199:6379)
M: 7c516370de41dfa88a67c65bda150027eacf58a5 10.0.80.199:6379
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: 926abd06fd5207a4b6970d5bdd5ab417b4fcbb12 10.0.80.200:6380
   slots: (0 slots) slave
   replicates 7c516370de41dfa88a67c65bda150027eacf58a5
S: 84502278160d571489a838a0318483a898fcbdf6 10.0.80.199:6380
   slots: (0 slots) slave
   replicates ce517da519e9d48b4b2ccd5d9c59ce9272be889d
S: 9713ecac4a54542e1f7889bb7cca9697b48197ff 10.0.80.201:6380
   slots: (0 slots) slave
   replicates 69fa96dcc1035d0339cb38042a473819514257e6
M: ce517da519e9d48b4b2ccd5d9c59ce9272be889d 10.0.80.200:6379
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
M: 69fa96dcc1035d0339cb38042a473819514257e6 10.0.80.201:6379
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.


9.认识redis-trib.rb
三、集群节点操作
1. 添加新master节点
1)启动实例
2)增加实例为master
redis-trib.rb add-node 10.0.80.202:6379 10.0.80.200:6379
说明:
第一个 ip:port 为新节点
第二个 ip:port 是任意一个已经存在的节点
新节点没有包含任何数据,也没有包含任何slot。
当集群需要将某个从节点升级为新的主节点时, 这个新节点不会被选中,同时新的主节点因为没有包含任何slot,不参加选举和failover。
3)为新增加的master 再分区(resharding),即从其他master移动一些slot
redis-trib.rb reshard 10.0.80.202:6379
#根据提示选择要迁移的slot数量(ps:这里选择4000)
How many slots do you want to move (from 1 to 16384)? 4000
#选择要接受这些slot的node-id
What is the receiving node ID? 035e1b5cc4ddd115546f024305c282b79020f1e3
#选择slot来源:
#all表示从所有的master重新分配,
#或者数据要提取slot的master节点id,最后用done结束
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node #1:all
#打印被移动的slot后,输入yes开始移动slot以及对应的数据.
#Do you want to proceed with the proposed reshard plan (yes/no)? yes
#结束
//我们从201 移动500个slots 给202
redis-trib.rb reshard --from 0a8166334d595340ee86909a570944f7c14e5f73 --to 035e1b5cc4ddd115546f024305c282b79020f1e3 --slots 500 --yes --timeout 5000 10.0.80.201:6379
redis-trib.rb check 10.0.80.201:6380
>>> Performing Cluster Check (using node 10.0.80.201:6380)
S: 5654178703c5ffe4ec91c63d2837908a12f13a9c 10.0.80.201:6380
slots: (0 slots) slave
replicates 0a8166334d595340ee86909a570944f7c14e5f73
S: 79f20aeb23d61d0b580df3aca104260c5457aa6c 10.0.80.200:6380
slots: (0 slots) slave
replicates 7f5dda96b4c63f170c59b6cb767792ae0a4ffebb
M: 035e1b5cc4ddd115546f024305c282b79020f1e3 10.0.80.202:6379
slots:0-1332,5461-6794,10923-12255 (4000 slots) master
0 additional replica(s)
M: 0a8166334d595340ee86909a570944f7c14e5f73 10.0.80.201:6379
slots:12256-16383 (4128 slots) master
1 additional replica(s)
S: ec818b8579d630abbaf02f4c9157728f3b0237b6 10.0.80.199:6380
slots: (0 slots) slave
replicates 6efd3629d4b94ed6d91986cd3709cf0aa5a49892
M: 6efd3629d4b94ed6d91986cd3709cf0aa5a49892 10.0.80.200:6379
slots:6795-10922 (4128 slots) master
1 additional replica(s)
M: 7f5dda96b4c63f170c59b6cb767792ae0a4ffebb 10.0.80.199:6379
slots:1333-5460 (4128 slots) master
1 additional replica(s)

[OK] All nodes agree about slots configuration.


2. 添加新slave节点
1)启动实例
2)增加实例为slave
方法一:redis-trib.rb add-node --slave 10.0.80.200:6380 10.0.80.200:6379
说明:
第一个 ip:port 为新节点
第二个 ip:port 是任意一个已经存在的节点
新的节点会作为集群中其中一个主节点的从节点,一般来说是从节点最少的主节点
方法二:redis-trib.rb add-node --slave --master-id 035e1b5cc4ddd115546f024305c282b79020f1e3 10.0.80.200:6380 10.0.80.200:6379
说明:
-master-id xxxx 主节点的 ID
第一个 ip:port 为新节点
第二个 ip:port 是任意一个已经存在的节点

注意:在线添加slave 时,需要bgsave整个master数据,并传递到slave,再由 slave加载rdb文件到内存,rdb生成和传输的过程中消耗Master大量内存和网络IO,以此不建议单实例内存过大,线上小心操作。


3.删除一个 slave 节点
redis-trib.rb del-node ip:port '<node-id>'
说明:
ip:port 集群中已有的任意一节点(不是被删除的节点)

被删除节点的 ID


4.删除一个 master 节点
删除master节点之前首先要使用reshard移除master的全部slot,然后再删除当前节点。 (目前redis-trib.rb只能把被删除master的slot对应的数据迁移到一个节点上)。
1)迁移 slot
#把10.0.80.202:6379当前master迁移到10.0.80.199:6379上
redis-trib.rb reshard 10.0.80.199:6379
#根据提示选择要迁移的slot数量(ps:这里选择4000)
How many slots do you want to move (from 1 to 16384)? 4000(被删除master的所有slot数量)
#选择要接受这些slot的node-id(10.0.80.199:6379)
What is the receiving node ID? 7f5dda96b4c63f170c59b6cb767792ae0a4ffebb (ps:10.0.80.199:6379的node-id)
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node #1:035e1b5cc4ddd115546f024305c282b79020f1e3(被删除master的node-id)
Source node #2:done
#打印被移动的slot后,输入yes开始移动slot以及对应的数据.
#Do you want to proceed with the proposed reshard plan (yes/no)? yes
2)删除空的 master 节点
redis-trib.rb del-node 10.0.80.201:6379 '035e1b5cc4ddd115546f024305c282b79020f1e3'
说明:
ip:port 集群中已有的任意一节点(不是被删除的节点)

被删除节点的 ID


5.在线 reshard 数据
对于负载/数据不均匀的情况,可以在线reshard slot来解决,方法与添加新master的reshard一样,只是需要reshard的master节点是已存在的老节点。

redis-trib.rb reshard 10.0.80.199:6379


6. 改变从节点的隶属关系
redis-cli -p 6380
10.0.80.201:6380> cluster replicate 7f5dda96b4c63f170c59b6cb767792ae0a4ffebb

说明:7f5dda96b4c63f170c59b6cb767792ae0a4ffebb 为新的主节点的 ID


7.通过master failover删除一个master实例
1)人工备份一个master
redis-cli -c -p 6380
10.0.80.200:6380> cluster failover
这个命令必须在slave node上面执行,使slave去failover它的master
2)del-node

redis-trib.rb del-node 10.0.80.201:6379 '0a8166334d595340ee86909a570944f7c14e5f73'

8.查看节点状态

redis-trib.rb check 10.0.80.201:6380

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


linux下开机自启: 在/etc/init.d目录下新建文件elasticsearch 并敲入shell脚本: 注意, 前两行必须填写,且要注释掉。 第一行为shell前行代码,目的告诉系统使用shell。 第二行分别代表运行级别、启动优先权、关闭优先权,且后面添加开机服务会用到。 shell脚本
1、因为在centos7中/etc/rc.d/rc.local的权限被降低了,所以需要赋予其可执行权 chmod +x /etc/rc.d/rc.local 2、赋予脚本可执行权限假设/usr/local/script/autostart.sh是你的脚本路径,给予执行权限 chmod +x /usr
最简单的查看方法可以使用ls -ll、ls-lh命令进行查看,当使用ls -ll,会显示成字节大小,而ls- lh会以KB、MB等为单位进行显示,这样比较直观一些。 通过命令du -h –max-depth=1 *,可以查看当前目录下各文件、文件夹的大小,这个比较实用。 查询当前目录总大小可以使用d
ASP.NET Core应用程序发布linux在shell中运行是正常的。可一但shell关闭网站也就关闭了,所以要配置守护进程, 用的是Supervisor,本文主要记录配置的过程和过程遇到的问题 安装Supervisor&#160;1 yum install python-setuptools
设置时区(CentOS 7) 先执行命令timedatectl status|grep &#39;Time zone&#39;查看当前时区,如果不是时区(Asia/Shanghai),则需要先设置为中国时区,否则时区不同会存在时差。 #已经是Asia/Shanghai,则无需设置 [root@xia
vim&#160;/etc/sysconfig/network-scripts/ifcfg-eth0 BOOTPROTO=&quot;static&quot; ONBOOT=yes IPADDR=192.168.8.106 NETMASK=255.255.252.0 GATEWAY=192.168.
一、安装gcc依赖 由于 redis 是用 C 语言开发,安装之前必先确认是否安装 gcc 环境(gcc -v),如果没有安装,执行以下命令进行安装 [root@localhost local]# yum install -y gcc 二、下载并解压安装包 [root@localhost local
第一步 On CentOS/RHEL 6.*: $ sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el6/x86_64/nux-dextop-release-0-2.el6.nux.noarch.rpm On CentOS/RHEL 7: $
/// &lt;summary&gt; /// 取小写文件名后缀 /// &lt;/summary&gt; /// &lt;param name=&quot;name&quot;&gt;文件名&lt;/param&gt; /// &lt;returns&gt;返回小写后缀,不带“.”&lt;/ret
which nohup .bash_profile中并source加载 如果没有就安装吧 yum provides */nohup nohup npm run start &amp; nohup ./kibana &amp;
1.1 MySQL安装 1.1.1 下载wget命令 yum -y install wget 1.1.2 在线下载mysql安装包 wget https://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm 1.1.3 安装My
重启 reboot shutdown -r now init 6 关闭 init 0 shutdown -h now shutdown -h 20:25 #8点25关机查看内存 free CPU利用率 top 日期 date 设置时间 date 033017002015 #月日时间年 日历 cal
1、firewalld的基本使用 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status firewalld 开机禁用 : systemctl disable firewalld 开机启用 :
1 下载并安装MySQL官方的&#160;Yum Repository wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm 使用上面的命令就直接下载了安装用的Yum Repository,大概
CentOS6.x CentOS6中转用Upstrat代替以前的init.d/rcX.d的线性启动方式。 一、相关命令 通过initctl help可以查看相关命令 [root@localhost ~]# initctl help Job commands: start Start job. sto
1、使用命令:df -lk 找到已满磁盘 2、使用命令:du --max-depth=1 -h 查找大文件,删除
ifconfig:查看网卡信息 网卡配置文件位置: /etc/sysconfig/network-scripts/文件夹 nmtui:配置网卡 netstat -tlunp:查看端口信息 端口信息存储位置: /etc/services文件 route:查看路由信息 wget:下载网路文件,例如 wg
ps -ef:查看所有进程,&#160;ps -ef |grap firewalld 查看与firewalld相关的进程 which :查看进程:which firewalld kill 进程id:杀掉进程 kill 640,强制杀:kill -9 640 man:查看帮助,例如 man ps 查看
useradd:添加用户 useradd abc,默认添加一个abc组 vipw:查看系统中用户 groupadd:添加组groupadd ccna vigr:查看系统中的组 gpasswd:将用户abc添加到ccna组 gpasswd -a abc ccna groups abc:查看用户abc属