首页 / REDIS / Redis主从及集群搭建
Redis主从及集群搭建
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Redis主从及集群搭建,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5199字,纯文字阅读大概需要8分钟。
内容图文
![Redis主从及集群搭建](/upload/InfoBanner/zyjiaocheng/878/7446761551604b009952bcebb5485345.jpg)
1. 主从配置
Redis主从主要用来实现数据的复制,避免数据丢失以及实现读写分离
Redis主从概念:主服务(master)、从服务(slave)
- ?个master可以配置多个slave,?个slave可以拥有多个slave
- 通过主从配置可以实现读写分离
- master和slave都是一个redis实例(redis服务)
1. 主服务器配置
- 修改Redis配置文件绑定IP为本地IP:192.168.31.199 端口:6379
- 重启Redis服务:brew services start restart / sudo service redis restart
2. 从服务器配置
- 复制主服务器配置文件为redis_slave.conf(从服务器配置文件)
- 修改配置文件内容:
绑定IP:本地IP 192.168.31.199(本地主从) 端口:6378
连接的主服务器信息:replicaof 192.168.31.199 6379(连接的主服务器IP和端口)
低版本:slaveof 192.168.31.199 6379(连接的主服务器IP和端口)
- 启动从服务器: sudo /usr/local/opt/redis/bin/redis-server /usr/local/etc/redis_slave.conf
3. 查看主从关系:redis-cli -h 192.168.31.199 -p 6378 info Replication
主从搭建好之后,主服务器添加的键值对会自动同步到从服务器,从服务器只读不可写
2. 集群搭建
集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组并以单一系统的模式加以管理
一个客户与集群相互作用时,集群像是一个独立的服务器,集群主要是用于提高可用性和可缩放性
Redis集群:
- 软件层面:一台电脑开启多个Redis服务(缺点:一个节点挂掉,整个集群不能使用)
- 硬件层面:存在多台实体的电脑,每台电脑上都启动了一个redis或者多个redis服务
集群搭建相关资料:
- https://www.cnblogs.com/wuxl360/p/5920330.html
- https://www.cnblogs.com/silent2012/p/10697896.html
- https://www.cnblogs.com/paul8339/p/11987345.html
此例子在两个电脑上搭建集群:172.16.179.130、172.16.179.131
1. 机器1配置:172.16.179.130
- 创建conf目录,创建7000.conf、7001.conf、7002.conf文件,内容如下:
- 7001.conf:
port 7000
bind 172.16.179.130
daemonize yes
pidfile 7000.pid
cluster-enabled yes
cluster-config-file 7000_node.conf
cluster-node-timeout 15000
appendonly yes
- 7001.conf:
port 7001
bind 172.16.179.130
daemonize yes
pidfile 7001.pid
cluster-enabled yes
cluster-config-file 7001_node.conf
cluster-node-timeout 15000
appendonly yes
- 7002.conf:
port 7002
bind 172.16.179.130
daemonize yes
pidfile 7002.pid
cluster-enabled yes
cluster-config-file 7002_node.conf
cluster-node-timeout 15000
appendonly yes
- 使用配置文件启动Redis服务:
sudo redis-server /conf/7000.conf
sudo redis-server /conf/7001.conf
sudo redis-server /conf/7002.conf
2. 机器2配置:172.16.179.131
- 创建conf目录,创建7003.conf、7004.conf、7005.conf文件,内容和机器1相似:更改ip、port、pidfile、cluster-config-file即可
- 使用配置文件启动Redis服务:
sudo redis-server /conf/7003.conf
sudo redis-server /conf/7004.conf
sudo redis-server /conf/7005.conf
3. 创建集群
- 高版本Redis创建集群:
redis-cli --cluster create 172.17.0.9:7000 172.17.0.9:7001 172.17.0.9:7002 172.17.0.9:7003 172.17.0.9:7004 172.17.0.9:7005 --cluster-replicas 1(高版本使用)
- 低版本Redis创建集群:
- 使用redis-trib.rb命令?于创建集群:sudo cp /usr/local/redis/src/redis-trib.rb /usr/local/bin/
- 安装ruby环境:sudo apt-get install ruby
创建出错设置gem源,安装最新版本的ruby:
gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
sudo gem install redis
- 创建集群:
redis-trib.rb create --replicas 1 172.16.179.130:7000 172.16.179.130:7001 172.16.179.130:7002 172.16.179.131:7003 172.16.179.131:7004 172.16.179.131:7005(低版本使用)
4. 数据验证:
- 连接集群:redis-cli -h 172.17.0.9 -c -p 7003(-c表示连接到集群)
- redis命令行相关操作:
- 查看集群信息:cluster info
- 查看集群节点信息:cluster nodes
注意:必须要3个或以上的主节点,否则在创建集群时会失败,并且当存活的主节点数?于总节点数的?半时,整个集群就?法提供服务。
拓扑图如下:
集群相关操作:
- 关闭集群的某个节点:redis-cli -a cyclone -c -h IP -p PORT shutdown
- 重新启动该Redis示例,会自动加入集群当中
- 集群关闭:使用kill -9 pid杀死Redis进程即可(如果需要关闭多个进程,进程号之间空格隔开即可)
- 集群重启:
- 保留数据:关闭Redis实例,重新启动即可
- 丢弃数据:关闭实例,清空实例中数据存放目录的所有内容,然后逐个启动实例
集群运作原理:
Redis集群设计之初就考虑到了去中?化、去中间件即集群中的每个节点都是平等的关系,每个节点都保存各?的数据和整个集群的状态
每个节点都和其他所有节点连接?且保持活跃,保证我们只需要连接集群中的任意?个节点就可以获取到其他节点的数据(连接一个节点就连接了整个集群)
Redis集群没有使?传统的?致性哈希来分配数据,?采??种叫做哈希槽(hash slot)的?式来分配的(redis cluster默认分配了16384个slot)
存储键值对的算法是CRC16算法(CRC16(key) % 16384):即当我们 设置?个key时,会?CRC16算法来取模得到所属的slot,然后将这个key分到哈希槽区间的节点上
Redis集群会把数据存在?个master节点,然后在master和其对应的salve之间进?数据同步。当读取数据时也根据?致性哈希算法到对应的master节点获取数据,只有当?个master挂掉之后,才会启动?个对应的salve 节点充当master
3. python与Redis集群交互
安装模块:pip install redis-py-cluster
from rediscluster import *
if __name__ == '__main__':
try:
# 构建所有的主节点,Redis会使?CRC16算法,将键和值写到某个节点上
startup_nodes = [
{'host': '172.17.0.9', 'port': 7000},
{'host': '172.17.0.9', 'port': 7001},
{'host': '172.17.0.9', 'port': 7002},
]
# 构建StrictRedisCluster对象
src = RedisCluster(startup_nodes=startup_nodes, decode_responses=True)
# 设置键值对
result = src.set('name', '中国')
print(result)
# 获取
name = src.get('name')
print(name)
except Exception as e:
print(e)
枫頔 发布了47 篇原创文章 · 获赞 7 · 访问量 2579 私信 关注redis-py-cluster文档:https://redis-py-cluster.readthedocs.io/en/master/
内容总结
以上是互联网集市为您收集整理的Redis主从及集群搭建全部内容,希望文章能够帮你解决Redis主从及集群搭建所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。