Redis集群详细部署文档

    技术2023-11-01  102

    一、环境准备

    1、系统环境:

    主机IP节点-角色-实例(端口)db0110.0.7.68M1-master-6379、S1-slave-6382db0210.0.7.69M2-master-6380、S2-slave-6383db0310.0.7.70M3-master-6381、S3-slave-6384

    2、安装软件

    分别在三台主机上编译安装 redis-4.0.11版本(版本号 > 3.0)。(安装目录 /data/application/redis/redis-4.0.11/)成都

    安装完毕建议将 redis bin 目录加入 PATH 环境变量

    3、配置集群

    参考步骤 3.1 - 3.3,分别在三台主机上进行 Redis 集群配置。

    3.1 创建集群目录

    创建集群各节点配置和数据目录。

    分别复制 redis 安装目录下的 redis.conf 至节点配置和数据目录。

    ##创建节点目录 mkdir -p /data/application/redis/redis-cluster/{6379,6382} ##进入redis安装目录 cd /data/application/redis/redis-4.0.11/ #将redis 安装目录下的redis.conf 复制到各个节点目录 cp -r redis.conf /data/application/redis/redis-cluster/6379/ cp -r redis.conf /data/application/redis/redis-cluster/6382/

    3.2 修改配置文件

    编辑 redis 实例配置文件中的各项配置。redis 默认未开启集群功能,需修改下面几个配置开启:

    注意每个节点的实例配置文件中端口不同

    ##分别修改这两个配置文件 cd /data/application/redis/redis-cluster/6379/ vim redis.conf ##分别修改这两个配置文件 cd /data/application/redis/redis-cluster/6380/ vim redis.conf ##分别修改这两个配置文件,修改如下内容 port 7000 #端口6379,6382 bind 本机ip #默认ip为127.0.0.1 改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口 daemonize yes #后台运行 pidfile /data/application/redis/redis-cluster/6379/redis_6379.pid #PID dir /data/application/redis/redis-cluster/6379/ #数据文件存放位置 cluster-enabled yes #开启集群 cluster-config-file nodes-6379.conf #集群的配置 配置文件首次启动自动生成 cluster-node-timeout 15000 #请求超时 默认15秒,可自行设置 appendonly yes #aof日志开启 有需要就开启,它会每次写操作都记录一条日志 

    3.3 防火墙设置

    根据实际情况修改服务器防火墙配置,允许主机互相连接 6379---6384 端口,允许所有应用服务器连接 Redis 服务器的 6379-6384 端口。

    4、启动集群

    4.1 启动实例

    分别在三台主机上启动全部 6 个 redis 节点实例,启动时指定配置文件为各自节点配置目录中的 redis.conf。

    cd /data/application/redis/redis-4.0.11/ ./src/redis-server ../redis-cluster/6379/redis.conf ./src/redis-server ../redis-cluster/6382/redis.conf # 其他机器重复如上命令,注意端口修改

    4.2 启动集群

    Redis5通过redis-cli就可以创建集群。

    redis-cli --cluster create 10.0.7.68:6379 10.0.7.69:6380 10.0.7.70:6381 10.0.7.68:6382 10.0.7.69:6383 10.0.7.70:6384 --cluster-replicas 1

    Redis3或4需要使用redis集群的命令工具redis-trib。redis-trib是一个用ruby写的脚,用于给各节点发指令创建集群、检查集群状态或给集群重新分片等。redis-trib在Redis源码的src目录本下,需要gem redis来运行redis-trib。

    #如果没有ruby 则安装ruby yum -y install ruby ruby-devel rubygems rpm-build ##查看版本 ruby -v ##如果版本小于2.3.8,则更新ruby版本 # 使用rvm 更新ruby--------------start #删除原来的rubygems仓库 gem sources --remove http://rubygems.org/ #添加aliyun的rubygems仓库 gem sources -a http://mirrors.aliyun.com/rubygems/ #查看rubygems仓库 gem sources -l #使用RVM进行升级ruby gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB curl -sSL https://get.rvm.io | bash -s stable source /etc/profile.d/rvm.sh #查看RVM可安装的ruby的版本 rvm list known rvm install 2.5.8 # rvm 更新ruby--------------end ##离线安装ruby-------------start 去官网下载:http://www.ruby-lang.org/en/downloads/ 最新的版本为2.4.1 tar -zxvf ruby-2.4.1.tar.gz ./configure –-prefix=/usr/local/ruby make && make install ##离线安装ruby-------------end #查看ruby是否升级成功 ruby -v #创建集群 gem install redis ./src/redis-trib.rb create --replicas 1 10.0.7.68:6379 10.0.7.69:6380 10.0.7.70:6381 10.0.7.68:6382 10.0.7.69:6383 10.0.7.70:6384 #根据提示输入yes,出现下列信息则表示集群创建成功。 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.

    5、 测试

    5.1 查看集群信息

    在任意一个 redis 节点的主机上执行以下命令:

    redis-cli -c -h 10.0.7.68 -p 6379 cluster info

    应输出类型以下信息:

    cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:6 cluster_size:3 cluster_current_epoch:6 cluster_my_epoch:1 cluster_stats_messages_ping_sent:101 cluster_stats_messages_pong_sent:98 cluster_stats_messages_sent:199 cluster_stats_messages_ping_received:93 cluster_stats_messages_pong_received:101 cluster_stats_messages_meet_received:5 cluster_stats_messages_received:199

    5.2 列出集群节点

    在任意一个 redis 节点的主机上执行以下命令,列出集群当前已知的所有节点(node),以及这些节点的相关信息。

    redis-cli -c -h 10.0.7.68 -p 6382 cluster nodes

    输出类似以下信息:

    6a59d7d4003528ff3e2a82a38465f63ed78c5191 10.0.7.68:6382@16382 myself,slave 97e8baa876e3e4470c881e50f9f2b9ecab400003 0 1589939956000 4 connected 97e8baa876e3e4470c881e50f9f2b9ecab400003 10.0.7.70:6381@16381 master - 0 1589939960855 3 connected 10923-16383 29f7a240d6dbe4fe319573eefa0c86b3b24a5f8b 10.0.7.69:6380@16380 master - 0 1589939960355 2 connected 5461-10922 e42b3a4f0287bc3282b5bff84bc23d38d2a87430 10.0.7.70:6384@16384 slave 29f7a240d6dbe4fe319573eefa0c86b3b24a5f8b 0 1589939963360 6 connected 5ee9bfefd4cf937954acc8d971cd4cfff27120d5 10.0.7.68:6379@16379 master - 0 1589939962357 1 connected 0-5460 f50f76869214e21e95e2699522223c17abeaf593 10.0.7.69:6383@16383 slave 5ee9bfefd4cf937954acc8d971cd4cfff27120d5 0 1589939961357 5 connected

    5.3 查看集群数据槽分配

    在任意一个 redis 节点的主机上执行以下命令,显示集群当前所有数据槽的分配情况。

    redis-cli -c -h 10.0.7.68 -p 7000 cluster slots

    输出类似以下信息:

    1) 1) (integer) 0 2) (integer) 5460 3) 1) "10.0.7.68" 2) (integer) 6379 3) "5ee9bfefd4cf937954acc8d971cd4cfff27120d5" 4) 1) "10.0.7.69" 2) (integer) 6383 3) "f50f76869214e21e95e2699522223c17abeaf593" 2) 1) (integer) 10923 2) (integer) 16383 3) 1) "10.0.7.70" 2) (integer) 6381 3) "97e8baa876e3e4470c881e50f9f2b9ecab400003" 4) 1) "10.0.7.68" 2) (integer) 6382 3) "6a59d7d4003528ff3e2a82a38465f63ed78c5191" 3) 1) (integer) 5461 2) (integer) 10922 3) 1) "10.0.7.69" 2) (integer) 6380 3) "29f7a240d6dbe4fe319573eefa0c86b3b24a5f8b" 4) 1) "10.0.7.70" 2) (integer) 6384 3) "e42b3a4f0287bc3282b5bff84bc23d38d2a87430"

    5.4 集群验证

    在其中一台机器上链接一个master节点(6379),在另外一台连接另外一个master节点(6380),连接方式为 redis-cli -h 10.0.7.68 -c -p 6379 ,加参数 -C 可连接到集群,因为上面 redis.conf 将 bind 改为了ip地址,所以 -h 参数不可以省略。

    在6379节点执行命令 set hello world ,执行结果如下:

    10.0.7.68:6379> set hello world OK

    然后在另外一台6380端口,查看 key 为 hello 的内容, get hello ,执行结果如下:

    10.0.7.69:6380> get hello -> Redirected to slot [866] located at 10.0.7.68:6379 "world"

    5.5 集群常用命令

    # 查看集群状态 redis-cli -c -h 10.0.7.68 -p 6379 cluster info #查看集群节点 redis-cli -c -h 10.0.7.68 -p 6379 cluster nodes #检查集群 redis-trib.rb check 10.0.7.68:6379 #修复节点 redis-trib.rb fix 10.0.7.68:6379
    Processed: 0.013, SQL: 9