redis|Linux企业化运维--6.Redis的部署+redis主从复制+redis自动切换+集群+redis+mysql 的缓存服务器+ gearman
目录
1.Redis的安装
2.Redis的主从复制
3.Redis主从的自动切换
1.配置server3的redis
2.在server1中,配置sentinel
4.集群cluster
1.构建集群
2.节点的主从自动切换
3.添加节点和分配哈希槽
5.redis+mysql的缓存服务器
6.redis和mysql的数据一致
1.Gearman
2.在server3安装数据库的开发包
3.注册UDF函数
4.server3下载安装gearman
5.编辑mysql触发器,重新导入数据库
6.在server1中启动服务及worker任务
7.server3更新mysql数据
Redis是现在最受欢迎的数据库之一,Redis是一个使用ANSIC编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库,其具备如下特性:
- 基于内存运行,性能高效
- 支持分布式,理论上可以无限扩展
- key-value存储系统
- 开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API
Redis具备的特点是:
- C/S通讯模型
- 单进程单线程模型
- 丰富的数据类型
- 操作具有原子性
- 持久化
- 高并发读写
- 支持lua脚本
config get *#查看配置
select 1#选择数据库
flushdb#清空当前数据库
flushall#清空所有数据库
move key 1#移动key
del key#删除
rename oldkey newkey#改名
expire key 10#设置过期时间
persist key#设置持久化
keys user*#查询
exists key#判断是否存在
1.Redis的安装 server1的安装和配置
文章图片
文章图片
cd utils/
vim install_server.sh文件中有操作系统的判断会导致安装失败,所以提前修改文件
文章图片
文章图片
文章图片
注释掉本地连接,避免使用网络连接时报错++
文章图片
protected-mode no
设定关闭保护模式
重启服务使配置生效
文章图片
redis可以创建多个实例
文章图片
server2的redis安装
文章图片
安装依赖
文章图片
文章图片
【redis|Linux企业化运维--6.Redis的部署+redis主从复制+redis自动切换+集群+redis+mysql 的缓存服务器+ gearman】
文章图片
文章图片
cd utils/
./install_server.sh
文章图片
systemctl daemon-reload
systemctl start redis.service
2.Redis的主从复制 修改server2的redis.conf
文章图片
文章图片
vim redis.service
文章图片
文章图片
文章图片
protected-mode no
文章图片
文章图片
文章图片
daemonize yes
文章图片
文章图片
3.Redis主从的自动切换
基于sentinel哨兵模式,哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。
一主两从的情况下,当master与两个slave或因网络关系断掉的情况下,客户端并不知道master失联,会持续写入数据,但此时slave端已经不能复制数据。1.配置server3的redis
如果需要解决此问题,则需要两个slave同时认定不能连接master,或者,超过设定时间不能连接,则此时master端会拒绝客户端继续写入,那么重新接入变成slave时就不会造成数据丢失
tarzxf redis-6.2.4.tar.gz
cd redis-6.2.4/
yum install -y gcc
yum install -y systemd-devel
make
make install
cd utils/
viminstall_server.sh
///
#if [ "${_pid_1_exe##*/}" = systemd ]
#then
#echo "This systems seems to use systemd."
#echo "Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry!"
#exit 1
#fi
///
./install_server.sh
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
2.在server1中,配置sentinel
文章图片
文章图片
文章图片
sentinel monitor mymaster 172.25.134.1 6379 2 #master为server1,2表示需要两票通过
sentinel down-after-milliseconds mymaster 10000 #连接超时为10s
文章图片
server1中查看master状态
redis-cli
> info
文章图片
server1为master,server2,3为slave
文章图片
关闭server1的redis
文章图片
server2提为master
文章图片
启动server1,server1切换为slave
文章图片
投票切换,2票切换master,server2为master-
文章图片
文章图片
4.集群cluster Redis 的哨兵模式基本已经可以实现高可用,读写分离 ,但是在这种模式下每台 Redis 服务器都存储相同的数据,很浪费内存,所以在redis3.0上加入了 Cluster 集群模式,实现了 Redis 的分布式存储,也就是说每台 Redis 节点上存储不同的内容
文章图片
1.构建集群
vim /var/lib/redis/6379.conf
开启AOF模式
文章图片
文章图片
/etc/init.d/redis_6379 restart
确定状态为master
文章图片
查看数据是否正常写入
文章图片
创建六个节点的目录
文章图片
修改配置文件
cluster-enabled yes#开启集群
cluster-config-file nodes.conf#集群配置文件
cluster-node-timeout 5000#节点超时
appendonly yes#开启AOF模式
daemonize yes#用守护线程的方式启动
文章图片
启动服务
文章图片
ps ax查看状态
文章图片
复制7001的配置文件到700{2..6},启动服务
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
创建集群主从节点,–cluster-replicas 参数为数字,1表示每个主节点需要1个从节点。然后检查集群,查看集群信息。
文章图片
一主一从,分别为3对,6个节点
文章图片
查看集群信息
文章图片
用redis-cli来进行集群的交互,客户端连接任意一个节点,使用-c表示以集群的方式登录,-p指定端口。当连接master端时,读写正常,在连接slave时,执行写操作时,自动会切换到master端进行写入操作
文章图片
检查集群
文章图片
文章图片
除了手动建立集群,也可以通过自带的脚本构建集群
redis中自带脚本进行集群的创建,启动脚本就会根据脚步文件中设定创建和启动实例
cd utils/create-cluster/
./create-cluster start#创建和启动实例
./create-cluster stop#停止实例
2.节点的主从自动切换
当关闭master端7002时,查看状态会发现原本7002对应的slave端7006变成了master端,而7002因为关闭所以无法查询到状态
文章图片
文章图片
当重新启动原先的master端7002时,7002会变成master端7006的slave端
文章图片
文章图片
3.添加节点和分配哈希槽
添加节点7007和7008并启动服务
文章图片
文章图片
文章图片
将7007添加到集群中,未指定master端ID,没有多余的master端不能被自动分配,7007添加为master端,由于哈希槽的数量是固定的,而如果master端没有分配到哈希槽,那么master是无法正常工作的,所以要把哈希槽从一组节点移动到另一组节点
文章图片
文章图片
分片操作
文章图片
文章图片
文章图片
How many slots do you want to move (from 1 to 16384)?#你想要移动的插槽数量
What is the receiving node ID?#接收节点的master端的ID
Source node #1: all#从哪些节点获取这些资源,all指的是从每个组中都获取一些,也可以从一组中获得
Do you want to proceed with the proposed reshard plan (yes/no)? yes#确定是否要继续重新分片
分片操作完成,7007获得了从7001,7006,7003分出的1000个哈希槽
文章图片
添加节点7008到指定的master端7007
文章图片
检查集群,7007和7008可以正常使用
文章图片
5.redis+mysql的缓存服务器 需要提前安装好php和nginx
安装进程管理工具psmisc,便于关闭redis进程
文章图片
关闭redis
文章图片
文章图片
文章图片
文章图片
修改环境变量
文章图片
文章图片
安装mariadb数据库
文章图片
文章图片
·
文章图片
文章图片
文章图片
删除server2中redis的多余配置,把server2变成master
文章图片
下载测试网页并修改主从IP
文章图片
文章图片
授权
文章图片
写入测试数据
文章图片
文章图片
文章图片
文章图片
安装软件包php、gearmand、libevent-devel、libgearman相关软件包
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
在浏览器访问172.25.134.3/test.php6.redis和mysql的数据一致 1.Gearman
此数据只能同步复制,不能异步复制,只能在redis上改写和读取数据,mysql端更改不生效,即数据不一致,因为客户端读的时候去找redis缓存;客户端写的时候去找mysql
Gearman提供了一个通用的应用程序框架,用于将工作转移到更适合于工作的其他机器或流程。它允许你并行工作,负载平衡处理,并在语言间调用函数。它可用于从高可用性网站到传输数据库复制事件的各种应用程序
一个Gearman驱动的应用程序由三部分组成:一个客户端,一个工作者和一个作业服务器。客户端负责创建要运行的作业并将其发送到作业服务器。作业服务器将找到可以运行作业并转发作业的合适工作人员。工作人员执行客户端请求的工作,并通过作业服务器向客户端发送响应。Gearman提供您的应用程序调用的客户端和工作者API来与Gearman作业服务器,因此开发人员不需要处理网络或作业的映射。在内部,gearman客户端和工作者API使用TCP套接字与作业服务器进行通信
文章图片
2.在server3安装数据库的开发包
启动server1的gearmand
文章图片
文章图片
文章图片
文章图片
文章图片
通过 lib_mysqludf_json UDF 库函数将关系数据映射为 JSON 格式,拷贝lib_mysqludf_json.so 模块。进入数据库,查看mysql 的模块目录,注册 UDF 函数,查看函数
文章图片
文章图片
文章图片
3.注册UDF函数
文章图片
文章图片
4.server3下载安装gearman
文章图片
文章图片
文章图片
文章图片
文章图片
make install
注册UDF函数
文章图片
指定gearman的服务信息
文章图片
5.编辑mysql触发器,重新导入数据库
文章图片
文章图片
文章图片
文章图片
6.在server1中启动服务及worker任务
server1在配置server3时已经启动
运行worker.php并打入后台
文章图片
文章图片
ps ax#查看是否开启 worker.php
文章图片
7.server3更新mysql数据
文章图片
文章图片
文章图片
文章图片
在浏览器可以查看,此时server1端已经同步了server3中mysql经由server2中redis上传的数据
推荐阅读
- Linux下面如何查看tomcat已经使用多少线程
- Beego打包部署到Linux
- Linux|109 个实用 shell 脚本
- springboot使用redis缓存
- linux定时任务contab
- 芯灵思SinlinxA33开发板Linux内核定时器编程
- (1)redis集群原理及搭建与使用(1)
- day16-Linux|day16-Linux 软件管理
- 如何在阿里云linux上部署java项目
- springboot结合redis实现搜索栏热搜功能及文字过滤