集群方式(cluster)
redis的哨兵模式基本已经可以实现高可用,读写分离 ,但是在这种模式下每台redis服务器都存储相同的数据,很浪费内存,所以在redis3.0上加入了cluster模式,实现的redis的分布式存储,也就是说每台redis节点上存储不同的内容。
Redis-Cluster采用无中心结构,它的特点如下:
- 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
- 节点的fail是通过集群中超过半数的节点检测失效时才生效。
- 客户端与redis节点直连,不需要中间代理层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
工作方式:
在redis的每一个节点上,都有这么两个东西,一个是插槽(slot),它的的取值范围是:0-16383。还有一个就是cluster,可以理解为是一个集群管理的插件。当我们的存取的key到达的时候,redis会根据crc16的算法得出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。
为了保证高可用,redis-cluster集群引入了主从模式,一个主节点对应一个或者多个从节点,当主节点宕机的时候,就会启用从节点。当其它主节点ping一个主节点A时,如果半数以上的主节点与A通信超时,那么认为主节点A宕机了。如果主节点A和它的从节点A1都宕机了,那么该集群就无法再提供服务了。
1 搭建方式(一)
1.1 redis下载
官方下载地址:https://redis.io/download
全量下载地址:http://download.redis.io/releases/
1.2 服务器调优配置
系统增加参数
# echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
# echo "net.core.somaxconn = 1024" >> /etc/sysctl.conf
# echo never > /sys/kernel/mm/transparent_hugepage/enabled
# cat >> /etc/rc.local << EOF
echo never > /sys/kernel/mm/transparent_hugepage/enabled
EOF
# cat >> /etc/security/limits.conf << EOF
redis soft nofile 131070
redis hard nofile 131070
EOF
1.3 新增redis用户
# useradd -d /home/redis redis
# -d 为指定家目录位置 默认/data/redis 根据实际情况修改
1.4 上传部署包解压并编译安装
# su - redis
# rz -be
# tar -zxf redis-6.2.10.tar.gz
# cd redis-6.2.10
# make
# make install PREFIX=/home/redis/
1.5 创建相关目录
# cd
# vim .bash_profile
# mkdir -pv redis01/conf redis01/data redis01/log
# cp redis-6.2.10/redis.conf redis01/conf/
# cp redis-6.2.10/sentinel.conf redis01/conf/
1.6 修改配置文件
修改redis.conf配置文件
# cd redis01/conf
# vim redis.conf
#------修改如下配置-------
bind 192.168.0.101 #监听IP
port 7001 #监听端口
timeout 30 #在客户端空闲N秒后关闭连接(0为禁用)
daemonize yes
supervised no
pidfile /home/redis/redis01/data/redis_7001.pid #目录根据实际情况修改
logfile "/home/redis/redis01/log/redis_7001.log" #目录根据实际情况修改
dir /home/redis/redis01/data/
always-show-logo no
save 900 1
save 300 10
save 60 10000
masterauth Ye6k5sld4KaO #redis密码
maxclients 10000
maxmemory 4g
appendfsync always
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 15000
activedefrag yes
注销以下配置
# set-proc-title yes
# proc-title-template "{title} {listen-addr} {server-mode}"
# lazyfree-lazy-user-flush no
# disable-thp yes
1.7 拷贝其他节点目录
# cp -pr redis01 redis02
# cp -pr redis01 redis03
# cp -pr redis01 redis04
# cp -pr redis01 redis05
# cp -pr redis01 redis06
1.8 拷贝redis目录到其他服务器上,并修改配置
# cd ~/
# scp -pr bin/ redis03/ redis04/ redis@192.168.0.102:/home/redis
# scp -pr bin/ redis05/ redis06/ redis@192.168.0.103:/home/redis
配置文件修改项参考如下
bind 192.168.0.101 #监听IP以实际情况修改
port 7001 #监听端口以实际情况修改
pidfile /home/redis/redis01/data/redis_7001.pid #目录根据实际情况修改
logfile "/home/redis/redis01/log/redis_7001.log" #目录根据实际情况修改
dir /home/redis/redis01/data/ #目录根据实际情况修改
1.9 启动服务
分别登陆相关服务器的redis用户,启动所有节点服务
# redis-server redis01/conf/redis.conf
# redis-server redis02/conf/redis.conf
# redis-server redis03/conf/redis.conf
# redis-server redis04/conf/redis.conf
# redis-server redis05/conf/redis.conf
# redis-server redis06/conf/redis.conf
1.10 创建集群
登陆10.130.77.39服务器的redis用户,执行以下命令
# redis-cli -a Ye6k5sld4KaO -h 192.168.0.101 -p 7001 \
> --cluster create \
> 192.168.0.101:7001 \
> 192.168.0.102:7003 \
> 192.168.0.103:7005 \
> 192.168.0.101:7002 \
> 192.168.0.102:7004 \
> 192.168.0.103:7006 --cluster-replicas 1
出现提示时,输入yes
Can I set the above configuration? (type 'yes' to accept): 输入yes
1.11 验证集群
登陆192.168.0.101服务器的redis用户,执行下面命令
# redis-cli -a Ye6k5sld4KaO -h 192.168.0.101 -p 7001 -c
> cluster nodes
输入 cluster nodes ,出现如下为正常
2 搭建方式(二)
2.1 部署包下载
下载地址:redis-6.2.6.tar.gz
2.2 服务器调优配置
系统增加参数
# echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
# echo "net.core.somaxconn = 1024" >> /etc/sysctl.conf
# echo never > /sys/kernel/mm/transparent_hugepage/enabled
# cat >> /etc/rc.local << EOF
echo never > /sys/kernel/mm/transparent_hugepage/enabled
EOF
# cat >> /etc/security/limits.conf << EOF
redis soft nofile 131070
redis hard nofile 131070
EOF
2.3 新增redis用户
# useradd -d /home/redis redis
# -d 为指定家目录位置 默认/data/redis 根据实际情况修改
2.4 上传部署包并解压
# su - redis
# rz -E
# tar -zxf redis-6.2.6.tar.gz
2.5 修改配置文件
登陆到192.168.0.101
# su - redis
# vim redis00/conf/redis.conf
只需修改如下配置:
bind 192.168.0.101 监听ip
pidfile /home/redis/redis00/data/redis_26001.pid (/home/redis目录根据实际情况修改)
logfile "/home/redis/redis00/log/redis_26001log" (/home/redis目录根据实际情况修改)
dir /home/redis/redis00/data/ (/home/redis目录根据实际情况修改)
top:其他5个节点配置修改参考如上
2.6 启动服务
登录到192.168.0.101
# su - redis
# redis-server redis00/conf/redis.conf
# redis-server redis01/conf/redis.conf
登录到192.168.0.102
# su - redis
# redis-server redis02/conf/redis.conf
# redis-server redis03/conf/redis.conf
登录到192.168.0.159
# su - redis
# redis-server redis04/conf/redis.conf
# redis-server redis05/conf/redis.conf
2.7 创建集群
登陆192.168.0.101,初始化集群
# redis-cli -a 1beBQ38tYUaT -h 192.168.0.101 -p 26001 \
--cluster create \
192.168.0.101:26001 \
192.168.0.102:26003 \
192.168.0.103:26005 \
192.168.0.101:26002 \
192.168.0.102:26004 \
192.168.0.103:26006 --cluster-replicas 1
出现提示时,输入 yes
2.8 验证集群
# redis-cli -a Ye6k5sld4KaO -h 192.168.0.101 -p 7001 -c
> cluster nodes
输入cluster nodes 出现如下正常。
评论区