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安装

 安装依赖

 

 

 

 

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端已经不能复制数据。
如果需要解决此问题,则需要两个slave同时认定不能连接master,或者,超过设定时间不能连接,则此时master端会拒绝客户端继续写入,那么重新接入变成slave时就不会造成数据丢失
 

1.配置server3的redis

tar  zxf 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/
vim  install_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.php
此数据只能同步复制,不能异步复制,只能在redis上改写和读取数据,mysql端更改不生效,即数据不一致,因为客户端读的时候去找redis缓存;客户端写的时候去找mysql

6.redis和mysql的数据一致

1.Gearman

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上传的数据

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值