阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Redis 5.0 Cluster集群带认证及客户端连接

455次阅读
没有评论

共计 8210 个字符,预计需要花费 21 分钟才能阅读完成。

Redis 在 3.0 版正式引入 redis-cluster 集群这个特性。Redis 集群是一个提供在多个 Redis 间节点间共享数据的程序集。Redis 集群是一个分布式(distributed)、容错(fault-tolerant)的 Redis 内存 K / V 服务,集群可以使用的功能是普通单机 Redis 所能使用的功能的一个子集(subset),比如 Redis 集群并不支持处理多个 keys 的命令,因为这需要在不同的节点间移动数据,从而达不到像 Redis 那样的性能,在高负载的情况下可能会导致不可预料的错误。还有比如 set 里的并集(unions)和交集(intersections)操作,就没有实现。通常来说,那些处理命令的节点获取不到键值的所有操作都不会被实现。在将来,用户或许可以通过使用 MIGRATE COPY 命令,在集群上用计算节点(Computation Nodes)来执行多键值的只读操作,但 Redis 集群本身不会执行复杂的多键值操作来把键值在节点间移来移去。Redis 集群不像单机版本的 Redis 那样支持多个数据库,集群只有数据库 0,而且也不支持 SELECT 命令。Redis 集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下继续处理命令。

Redis 集群的优点:

无中心架构,分布式提供服务。数据按照 slot 存储分布在多个 redis 实例上。增加 slave 做 standby 数据副本,用于 failover,使集群快速恢复。实现故障 auto failover,节点之间通过 gossip 协议交换状态信息;投票机制完成 slave 到 master 角色的提升。支持在线增加或减少节点。降低硬件成本和运维成本,提高系统的扩展性和可用性。

Redis 集群的缺点:

client 实现复杂,驱动要求实现 smart client,缓存 slots mapping 信息并及时更新。目前仅 JedisCluster 相对成熟,异常处理部分还不完善,比如常见的“max redirect exception”。客户端的不成熟,影响应用的稳定性,提高开发难度。节点会因为某些原因发生阻塞 (阻塞时间大于 clutser-node-timeout),被判断下线。这种 failover 是没有必要,sentinel 也存在这种切换场景。

#hosts 文件配置

cat >> /etc/hosts << EOF
192.168.5.65 redis65
192.168.5.66 redis65
EOF

一、搭建 redis5.0 集群

从 redis 3.0 之后版本支持 redis-cluster 集群,redis-4.0.0 开始支持 module,redis-5.0.0 开始支持类似于 kafka 那样的消息队列,Redis-Cluster 采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。这样就可以很好的保证 redis 的高可用性,下面就来部署个 Redis Cluster,在两台服务器上部署 6 个 redis 节点

IP 和端口配置文件名

192.168.5.65:600165_6001/redis.conf

192.168.5.65:600265_6002/redis.conf

192.168.5.65:600365_6003/redis.conf

192.168.5.66:600166_6001/redis.conf

192.168.5.66:600266_6002/redis.conf

192.168.5.66:600366_6003/redis.conf

1、修改系统参数

# 修改最大可打开文件数

cat >> /etc/security/limits.conf << EOF
* soft nofile 102400
* hard nofile 102400
EOF
 

#TCP 监听队列大小

echo "net.core.somaxconn = 32767" >> /etc/sysctl.conf
sysctl -p
 

#OOM 相关:vm.overcommit_memory

echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
sysctl -p
 

# 开启内核的“Transparent Huge Pages (THP)”特性

echo never > /sys/kernel/mm/transparent_hugepage/enabled
 

# 请将“echo never > /sys/kernel/mm/transparent_hugepage/enabled”加入到文件 /etc/rc.local 中

2、安装 redis 并配置 redis-cluster

[root@redis65 /]# cd /opt
[root@redis65 /]# wget http://download.redis.io/releases/redis-5.0.0.tar.gz
[root@redis65 /]# tar -zxvf redis-5.0.0.tar.gz
[root@redis65 /]# cd redis-5.0.0/
[root@redis65 /]# make
[root@redis65 /]# make install PREFIX=/usr/local/redis-cluster

# 创建实例目录

[root@redis65 redis-5.0.0]# mkdir -p /usr/local/redis-cluster/{65_6001,65_6002,65_6003}
[root@redis66 redis-5.0.0]# mkdir -p /usr/local/redis-cluster/{66_6001,66_6002,66_6003}

# 配置官方配置文件,去掉 #开头的和空格行

cat redis.conf |grep -v ^# |grep -v ^$

#redis65 6001 配置文件

[root@redis65 /]#cd /usr/local/redis-cluster
[root@redis65 redis-cluster]# cat >> 65_6001/redis.conf << EOF
bind 0.0.0.0
protected-mode no
port 6001
daemonize no
dir /usr/local/redis-cluster/65_6001
cluster-enabled yes
cluster-config-file /usr/local/redis-cluster/65_6001/nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
pidfile /usr/local/redis-cluster/65_6001/redis.pid
logfile /usr/local/redis-cluster/65_6001/redis.log
EOF

#redis65 6002 配置文件

[root@redis65 redis-cluster]# sed 's/6001/6002/g' 65_6001/redis.conf > 65_6002/redis.conf

#redis65 6003 配置文件

[root@redis65 redis-cluster]# sed 's/6001/6003/g' 65_6001/redis.conf > 65_6003/redis.conf

# 写一个启动脚本 start-redis-cluster.sh

[root@redis65 /]#cat /usr/local/redis-cluster/start-redis-cluster.sh
#!/bin/sh
REDIS_HOME=/usr/local/redis-cluster
$REDIS_HOME/bin/redis-server $REDIS_HOME/65_6001/redis.conf
$REDIS_HOME/bin/redis-server $REDIS_HOME/65_6002/redis.conf
$REDIS_HOME/bin/redis-server $REDIS_HOME/65_6003/redis.conf
 
chmod +x /usr/local/redis-cluster/start-redis-cluster.sh
/usr/local/redis-cluster/start-redis-cluster.sh
 

#redis66 6001 配置文件

[root@redis66 /]# cd /usr/local/redis-cluster
[root@redis66 redis-cluster]# cat >> 66_6001/redis.conf << EOF
bind 0.0.0.0
protected-mode no
port 6001
daemonize no
dir /usr/local/redis-cluster/66_6001
cluster-enabled yes
cluster-config-file /usr/local/redis-cluster/66_6001/nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
pidfile /usr/local/redis-cluster/66_6001/redis.pid
logfile /usr/local/redis-cluster/66_6001/redis.log
EOF
 

#redis66 6002 配置文件

[root@redis66 redis-cluster]# sed 's/6001/6002/g' 66_6001/redis.conf > 66_6002/redis.conf
 

#redis66 6003 配置文件

[root@redis66 redis-cluster]# sed 's/6001/6003/g' 66_6001/redis.conf > 66_6003/redis.conf
 
[root@redis66 /]#cat /usr/local/redis-cluster/start-redis-cluster.sh
 
#!/bin/sh
REDIS_HOME=/usr/local/redis-cluster
$REDIS_HOME/bin/redis-server $REDIS_HOME/66_6001/redis.conf
$REDIS_HOME/bin/redis-server $REDIS_HOME/66_6002/redis.conf
$REDIS_HOME/bin/redis-server $REDIS_HOME/66_6003/redis.conf
 
chmod +x /usr/local/redis-cluster/start-redis-cluster.sh
 

# 启动 redis

/usr/local/redis-cluster/start-redis-cluster.sh
 

Redis 5.0 Cluster 集群带认证及客户端连接

Redis 5.0 Cluster 集群带认证及客户端连接

# 查看 redis 进程启动状态

ps -ef | grep redis

Redis 5.0 Cluster 集群带认证及客户端连接

Redis 5.0 Cluster 集群带认证及客户端连接

# 创建 redis cluster,如果只是想快速创建和启动 redis 集群,可使用 redis 官方提供的脚本 create-cluster,注意 redis-5.0.0 版本开始才支持“–cluster”

cd /usr/local/redis-cluster/bin
./redis-cli --cluster create 192.168.5.65:6001 192.168.5.65:6002 192.168.5.65:6003 192.168.5.66:6001 192.168.5.66:6002 192.168.5.66:6003 --cluster-replicas 1
 

Redis 5.0 Cluster 集群带认证及客户端连接

如果配置项 cluster-enabled 的值不为 yes,则执行时会报错“[ERR] Node 192.168.5.65:6001 is not configured as a cluster node.”。这个时候需要先将 cluster-enabled 的值改为 yes,然后重启 redis-server 进程,之后才可以重新执行 redis-cli 创建集群。

redis-cli 的参数说明:

1) create

表示创建一个 redis 集群。

2) –cluster-replicas 1

表示为集群中的每一个主节点指定一个从节点,即一比一的复制

# 查看 redis 进程是否已切换为集群状态(cluster)

ps -ef|grep redis
 

# 停止 redis 实例,直接使用 kill 命令即可

kill -9 15025
 

# 命令行工具 redis-cli

[root@redis65 /]# ln -s /usr/local/redis-cluster/bin/redis-cli /bin/redis-cli
[root@redis65 bin]# redis-cli -c -p 6001
 

# 查看集群中的节点:

127.0.0.1:6001> cluster nodes
 

Redis 5.0 Cluster 集群带认证及客户端连接

127.0.0.1:6002> set name 65-7001
-> Redirected to slot [5798] located at 192.168.5.66:6001
OK
192.168.5.66:6001> quit
[root@redis65 bin]# redis-cli -c -p 6003
127.0.0.1:6003> get name
-> Redirected to slot [5798] located at 192.168.5.66:6001
"65-7001"
 
[root@redis65 bin]# redis-cli -h 192.168.5.66 -p 6002
 

# 检查节点状态

[root@redis65 bin]# redis-cli --cluster check 192.168.5.66:6001
 

Redis 5.0 Cluster 集群带认证及客户端连接

# 查看集群信息

[root@redis65 bin]# redis-cli -c -p 6003
127.0.0.1:6003> cluster info
 

# 给 redis cluster 集群加上认证,登录到 redis 节点执行下面的操作

[root@redis65 /]# redis-cli -h 192.168.5.65 -p 6001 -c
> config set masterauth zxc789
> config set requirepass zxc789
> auth zxc789
> config rewrite
 

Redis 5.0 Cluster 集群带认证及客户端连接

# 各个节点都完成上面的 3 条 config 操作,重启 redis 各节点,看下各节点的 redis.conf,可以发现最后多了 3 行内容

[root@redis65 /]# killall redis-server
[root@redis65 /]# /usr/local/redis-cluster/start-redis-cluster.sh
[root@redis66 ~]# cat /usr/local/redis-cluster/66_6001/redis.conf
 

Redis 5.0 Cluster 集群带认证及客户端连接

# 加了认证的 redis 登录

redis-cli -h 192.168.5.65 -p 6001 -c -a 'zxc789'
 

二、安装 php 的 redis 扩展

1、在现有的 web 服务器上安装 php 的 redis 扩展

[root@web33 ~]# cd /opt
[root@web33 opt]# wget -c -t 0 https://github.com/owlient/phpredis/archive/master.zip
[root@web33 opt]# unzip master.zip
[root@web33 opt]# cd phpredis-master/
[root@web33 phpredis-master]# /usr/local/php/bin/phpize
[root@web33 phpredis-master]# ./configure --with-php-config=/usr/local/php/bin/php-config
[root@web33 phpredis-master]# make && make install
 

# 这里进行 make 的时候报错

Redis 5.0 Cluster 集群带认证及客户端连接

 

2、那是因为最新的 phpredis 分了几大分支, 针对最新的 PHP 稳定发行版 php7 有专门为 php7 的分支,所以我们从 github 拉下 phpredis 源码 需要切换到 PHP7 的分支 首先 git clone phpredis 下来

[root@web33 ~]# cd /opt
[root@web33 ~]# git clone https://github.com/nicolasff/phpredis
[root@web33 ~]# git checkout php7
[root@web33 opt]# cd phpredis
[root@web33 phpredis]# /usr/local/php/bin/phpize
[root@web33 phpredis]# ./configure --with-php-config=/usr/local/php/bin/php-config
[root@web33 phpredis]# make && make install
 

3、修改 php.ini 加上“extension=redis.so”

vi /usr/local/php/etc/php.ini
extension = "redis.so"
 

4、重启 php-fpm

/etc/init.d/php-fpm restart
 

# 用 phpinfo 验证下 redis 扩展是否安装成功

Redis 5.0 Cluster 集群带认证及客户端连接

5、单实例 redis 通过 php 连接测试 
 
<?php
    // 连接 192.168.5.65 的 Redis 服务
   $redis = new Redis();
   $redis->connect('192.168.5.65', 6001);
   $redis->auth('zxc789'); //redis 认证
   echo "Connection to server sucessfully";
         // 查看服务是否运行
   echo "Server is running:" . $redis->ping();
?>
 

# 执行脚本,输出结果为:

Connection to server sucessfully

Server is running: PONG

 

6、Java 操作 Redis cluster 集群可使用 jredis,PHP 要操作 redis cluster 集群有两种方式

  1)使用 phpredis 扩展,这是个 c 扩展,性能更高,但是这个方案参考资料很少

  2)使用 predis,纯 php 开发,使用了命名空间,需要 php5.3+,灵活性高, 我这里用的是 predis,下载地址 https://github.com/nrk/predis

[root@web33 tmp]# git clone https://github.com/nrk/predis.git
#将 predis 放到网站根目录下
[root@web33 tmp]# mv predis /data/www/predis
[root@web33 tmp]# cd /data/www/
 

[root@web33 www]# cat predis.php

<?php
require 'predis/autoload.php';// 引入 predis 相关包  
//redis 实例  
$servers = array(  
    'tcp://192.168.5.65:6001',  
    'tcp://192.168.5.65:6002',  
    'tcp://192.168.5.65:6003',  
    'tcp://192.168.5.66:6001',  
    'tcp://192.168.5.66:6002',  
    'tcp://192.168.5.66:6003',  
); 
$options = ['cluster' =>'redis','parameters' => ['password' => 'zxc789']];
$client = new Predis\Client($servers,$options);
$client->set('name1', '1111111');
$client->set('name2', '2222222');
$client->set('name3', '3333333');
$name1 = $client->get('name1');
$name2 = $client->get('name2');
$name3 = $client->get('name3');
var_dump($name1, $name2, $name3);die;
?>
 

Redis 5.0 Cluster 集群带认证及客户端连接

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计8210字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7974966
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

  4 盘位、4K 输出、J3455、遥控,NAS 硬件入门性价比之王 开篇 在 NAS 市场中,威...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的 NAS 中! 大家对「数据安全感」的需求越来越高 ...
仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...