Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步

发布时间:2023-04-25 15:30

一、redis是什么?

1.Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)

2.常用指令

config get *				##查看配置
select 1					##选择数据库
flushdb           	##清空当前数据库
flushall            	##清空所有数据库
move key 1        		##移动key
del key						##删除
rename oldkey newkey   	##改名
expire key 10       	##设置过期时间
persist key          	##设置持久化
keys user*          	##查询
exists key         	##判断是否存在

二、redis的编译、安装

https://redis.io/download
tar zxf redis-5.0.8.tar.gz
make && make install
utils/install_server.sh

1、server1的redis配置

server1主机,安装并编译redis。

tar  zxf redis-6.2.4.tar.gz
cd redis-6.2.4/
make
make install

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第1张图片Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第2张图片
运行自带的安装程序,安装失败,文件中有操作系统的判断会导致失败,修改文件,重新安装

cd utils/
ls
./install_server.sh			##运行自带的安装程序,失败
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			##成功

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第3张图片Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第4张图片Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第5张图片重新安装,出现提示回车即可
Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第6张图片此时切换到配置目录下,可以看到自动生成了配置文件,查看端口,端口开启。修改该配置文件,重启服务。

cd /etc/redis
ls							##6379.conf
netstat -antlp				##6379
vim 6379.conf
///
  75 #bind 127.0.0.1 -::1	##链接redis 时只能通过本地localhost (127.0.0.1)来链接,而不能用网络ip(192.168..)链接,因为处于保护模式,只能本地链接,所以将该设定注释
  94 protected-mode no		##设定关闭保护模式
///
/etc/init.d/redis_6379 stop
/etc/init.d/redis_6379 start
netstat -antlp | grep :6379

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第7张图片

2、server2的redis安装

在server2主机,使用另一种方式来配置redis。
首先,同样先解压,然后使用systemd支持进行构建,但此时缺少依赖gcc,安装依赖,重新make,仍然失败,提醒缺少依赖jemalloc。此时要删除redis目录,删除c环境下生成的缓存,重新解压,make,提醒缺少systemd,安装后继续make,成功,make install

###server2
ls./install_server.sh
tar  zxf redis-6.2.4.tar.gz
cd redis-6.2.4/
make 		##进行构建,失败,需要c编译器
yum install -y gcc
make 		##还是需要下载依赖jemalloc
cd
rm -rf redis-6.2.4				##删除c环境下生成的缓存
tar  zxf redis-6.2.4.tar.gz		##重新解压
cd redis-6.2.4/
make 		##重新make
yum install -y systemd-devel	##安装systemd
make 		##重新make
make install

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第8张图片此时,切换到utils目录下,运行自带的安装程序,将服务文件复制到目录自动存放启动文件的配置位置,重载配置文件,重启服务。

cd utils/
./install_server.sh
cp systemd-redis_server.service  /usr/lib/systemd/system/redis.service		##目录自动存放启动文件的配置位置
systemctl daemon-reload 	##重载配置文件
systemctl start redis.service 

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第9张图片

三、redis主从复制

1、在server2修改redis.service文件,建立配置文件和数据文件存放的目录,编辑配置文件,同时设定server2主机为server1主机的slave端,即主从复制设定,重载配置文件,重启服务。

cd /usr/lib/systemd/system/
vim redis.service 			##注意仔细修改该文件
///
[Unit]
Description=Redis data structure server
Documentation=https://redis.io/documentation
#Before=your_application.service another_example_application.service
#AssertPathExists=/var/lib/redis
Wants=network-online.target
After=network-online.target

[Service]
#ExecStart=/usr/local/bin/redis-server --supervised systemd --daemonize no
## Alternatively, have redis-server load a configuration file:
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
#LimitNOFILE=10032
#NoNewPrivileges=yes
#OOMScoreAdjust=-900
#PrivateTmp=yes
Type=forking
#TimeoutStartSec=infinity
#TimeoutStopSec=infinity
#UMask=0077
#User=redis
#Group=redis
#WorkingDirectory=/var/lib/redis
///
mkdir /etc/redis
mkdir /var/lib/redis
cd 
cd redis-6.2.4/
cp redis.conf /etc/redis/
vim /etc/redis/redis.conf 
///
   94 protected-mode no				##关闭保护模式
   75 #bind 127.0.0.1 -::1			##注释,允许网络ip链接redis
   257 daemonize yes					##以守护进程的方式运行
   302 logfile "/var/log/redis.log"	##日志存放目录
   454 dir /var/lib/redis				##数据文件放置的目录
   2052 slaveof 172.25.173.5 6379		##主从复制
///
systemctl daemon-reload 
systemctl restart redis

在这里插入图片描述

2、此时在server1主机上插入数据,可以在server2主机上看到,即主从复制设定成功。

127.0.0.1:6379> set name westos
OK
127.0.0.1:6379> get name
"westos"
127.0.0.1:6379> 
[root@server2 redis]# redis-cli
127.0.0.1:6379> get name
"westos"
127.0.0.1:6379> 

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第10张图片

四、redis主从自动切换(基于sentinel哨兵模式)

主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用,哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。
Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第11张图片
部署步骤

1、在server3安装redis,在server3主机进行配置。解压,安装gcc,make,删除c环境下生成的缓存,重新解压,make install,修改安装文件,运行自带的安装程序

server3

ls
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、修改配置文件,重启服务,进入redis,info可以看到role:slave master_host:172.25.173.5,即,当前主机server3为server1的从机。

vim /etc/redis/6379.conf 
///
2052 slaveof 172.25.173.5 6379
  94 protected-mode no
  75 #bind 127.0.0.1 -::1
///
/etc/init.d/redis_6379 restart
redis-cli
> info			

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第12张图片

3、在server1主机中,配置sentinel,并复制到server2和server3中

配置哨兵模式,即高可用
###server1		
cd redis-6.2.4/
cp sentinel.conf /etc/redis/
cd /etc/redis/
vim sentinel.conf 
///
sentinel monitor mymaster 172.25.173.5 6379 2	##master为server1,2表示需要两票通过,这台主机就被认定宕掉
sentinel down-after-milliseconds mymaster 10000	##连接超时为10s
///
scp sentinel.conf server2:/etc/redis/
scp sentinel.conf server3:/etc/redis/
redis-sentinel /etc/redis/sentinel.conf 		##可以看到两个slave端

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第13张图片此时在server2和server3,可以看到一个master和两个slave端,并且相互连接

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第14张图片Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第15张图片

4、重新ssh连接server1,info查看当前为master,有两个slave端,然后关闭当前主机

redis-cli
> info		
> shutdown

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第16张图片

5、在原来的server1中,可以看到本机down,并且新的slave为1和3,即新的master为2,而且此时的slave1是挂掉的

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第17张图片

6、在新连接的server1中,连接到server2,info查看到当前为master,有一个slave端,因为server1当前为挂掉状态。

###server1(新)
redis-cli -h 172.25.173.6	##连接到2
> info 						##可以看到role:master connected_slaves:1,一个slave端

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第18张图片

7、重新开启server1,info查看,当前为slave状态,并且master端为server2主机。即就是,当master宕机时,sentinel自动切换master主机成功

systemctl restart redis_6379.service
redis-cli
> info 		

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第19张图片

五、集群

Redis 的哨兵模式基本已经可以实现高可用,读写分离 ,但是在这种模式下每台 Redis 服务器都存储相同的数据,很浪费内存,所以在redis3.0上加入了 Cluster 集群模式,实现了 Redis 的分布式存储,也就是说每台 Redis 节点上存储不同的内容
Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第20张图片

1、手动构建集群

在server1主机(master),重启redis,开启AOF模式,建立medis目录,并建立集群7001~7006目录,切入7001,修改配置文件,启动服务。将配置文件复制到其他几个实例目录中,根据情况做修改。

###server1(master)
systemctl restart redis_6379.service
vim /etc/redis/6379.conf
///
appendonly yes						##开启AOF模式
///
cd /usr/local
mkdir redis
cd redis/
mkdir 700{1..6}
cd 7001

vim redis.conf
port 7001							##不同的文件此处不同
cluster-enabled yes					##开启集群
cluster-config-file nodes.conf		##集群配置文件
cluster-node-timeout 5000			##节点超时
appendonly yes						##开启AOF模式
daemonize yes						##用守护线程的方式启动

redis-server redis.conf 			##启动服务

cp redis.conf ../7002/				##复制配置文件到7002
cp redis.conf ../7003/
cp redis.conf ../7004/
cp redis.conf ../7005/
cp redis.conf ../7006/

7002~7006相同
ps ax

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第21张图片

2、使用redis-cli来进行集群的交互,使用客户端连接任意一个节点,使用-c表示以集群的方式登录,-p指定端口。info查看,当前为master,没有slave端。创建集群主从节点,–cluster-replicas 参数为数字,1表示每个主节点需要1个从节点,然后检查集群,查看集群信息

redis-cli -c -p 7001
> info

redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1

redis-cli --cluster check 127.0.0.1:7001	##检查集群

redis-cli --cluster info 127.0.0.1:7001		##集群信息查看

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第22张图片Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第23张图片Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第24张图片

3、脚本构建

cd redis-6.2.4/
cd utils/create-cluster/
./create-cluster start		##开启实例Starting 30001~30006
ps ax
./create-cluster stop		##停止所有实例,使用手动构建的集群来做接下来的实验
ps ax

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第25张图片Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第26张图片

2、自动切换

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第27张图片

1、由上图可知,7004为7002的slave。当连接7002端口,并关掉当前节点,7004会自动切换为主节点,此时没有从节点。开启7002,此时7002成为从节点,检查集群,可以看到7004有一个从节点7002

redis-cli -c -p 7002	
> SHUTDOWN
ps ax										##7002消失
redis-cli --cluster check 127.0.0.1:7001	##7004 0 slaves

cd ..
cd 7002
redis-server redis.conf 
ps ax										##redis-server *:7002 [cluster]
redis-cli --cluster check 127.0.0.1:7001	##7004 1 slaves为7002

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第28张图片Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第29张图片

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第30张图片

3、添加节点和分片

先和之前一样创建两个节点

cd /usr/local/redis
mkdir 700{7,8}
cd 7007
cp ../7001/redis.conf .
vim redis.conf 
///
port 7007
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
///
redis-server redis.conf 

7008相同
ps ax

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第31张图片将7007节点加入集群中,但是并没有分配slot,所以这个节点并没有真正的开始分担集群工作,所以要进行分片。重新分片基本上意味着将哈希槽从一组节点移动到另一组节点,并且像群集创建一样

redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7001	
##将节点加入了集群中,但是并没有分配slot,所以这个节点并没有真正的开始分担集群工作
redis-cli --cluster check 127.0.0.1:7001	
##7007 0 slaves slots: (0 slots) master

redis-cli --cluster reshard 127.0.0.1:7001								##重新分片
分片操作
How many slots do you want to move (from 1 to 16384)? 1000				##移动的插槽数量
What is the receiving node ID?	##接收节点的ID
Source node #1: all	
##从哪些节点获取这些密钥,键入all以从所有其他主节点获取哈希槽
Do you want to proceed with the proposed reshard plan (yes/no)? yes		##确定是否要继续重新分片,输入yes

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第32张图片

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第33张图片Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第34张图片

redis-cli --cluster check 127.0.0.1:7001

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第35张图片检查集群,此时7007节点有1000哈希槽,没有从节点,于是把7008 节点加入到7001 节点的集群中,并且当做node_id为 6124a3bb3f26f85ddad86b50fed9e57d5088d048 的从节点。如果不指定 --cluster-master-id 会随机分配到任意一个主节点。检查集群,此时7007有一个从节点

redis-cli --cluster check 127.0.0.1:7001	
##7007 1000 slots | 0 slaves
redis-cli --cluster add-node 127.0.0.1:7008 127.0.0.1:7001 --cluster-slave --cluster-master-id 6124a3bb3f26f85ddad86b50fed9e57d5088d048
##把7008 节点加入到7001 节点的集群中,并且当做node_id为 6124a3bb3f26f85ddad86b50fed9e57d5088d048 的从节点。
##如果不指定 --cluster-master-id 会随机分配到任意一个主节点。
redis-cli --cluster check 127.0.0.1:7001	
##7007  1 slaves

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第36张图片Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第37张图片

六、redis+mysql 的缓存服务器

1、在server1主机

server1要提前安装nginx+php,这里以前实验已经安装,不再过多阐述。
安装进程管理工具psmisc,便于使用killall命令,关掉redis所有进程

yum install -y psmisc	##便于使用killall命令
killall redis-server
ps ax					##没有redis、nginx、php的进程

安装软件包php、gearmand、libevent-devel、libgearman相关软件包
Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第38张图片

yum install -y *.rpm      #全部安装
systemctl daemon-reload   
systemctl start php-fpm   #开启php

将测试页test.php移动到nginx的发布目录下,修改主从ip

[root@server1 rhel7]# cp test.php /usr/local/nginx/html/

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第39张图片

2、在server2主机中(redis)

开启redis,info查看信息,如果server2为server1的从机。修改配置文件/etc/redis/redis.conf,删除关于主从的设定,重启redis。info查看server2此时为master主机
Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第40张图片

3、在server3主机中(mariadb数据库)

在server3主机,停掉rdis,并且取消开机自启。删除redis环境变量并且生效,安装mariadb 还原mysql的配置文件,删除mysql所有数据文件,开启mariadb

/etc/init.d/redis_6379 stop
chkconfig redis_6379 off		##取消开机自启
vim .bash_profile
///
PATH=$PATH:$HOME/bin
///
source .bash_profile 

yum install -y mariadb-server.x86_64 
vim /etc/my.cnf
///
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
[mysqld_safe]
log-error=/var/lib/mysql/mysqld.log
pid-file=/var/lib/mysql/mysqld.pid
///

systemctl start mariadb

进入数据库,可以看到test库,将本地文件test.sql文件导入,进入数据库,可以看到导入的数据,并授权redis用户

mysql
show databases;

mysql < test.sql     #将test库内容导入
mysql
> use test
> show tables;
> select * from test;		##test1~test9
> grant all on test.* to redis@'%' identified by 'westos';    #授权

systemctl restart mariadb.service

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第41张图片
Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第42张图片在浏览器访问172.25.173.5/test.php
此数据只能同步复制,不能异步复制,只能在redis上改写和读取数据,mysql端更改不生效,即数据不一致,因为客户端读的时候去找redis缓存;客户端写的时候去找mysql

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第43张图片
Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第44张图片

七、redis如何与mysql保持数据一致

1、Gearman是什么与Gearman工作原理

Gearman提供了一个通用的应用程序框架,用于将工作转移到更适合于工作的其他机器或流程。它允许你并行工作,负载平衡处理,并在语言间调用函数。它可用于从高可用性网站到传输数据库复制事件的各种应用程序
在这里插入图片描述
一个Gearman驱动的应用程序由三部分组成:一个客户端,一个工作者和一个作业服务器。客户端负责创建要运行的作业并将其发送到作业服务器。作业服务器将找到可以运行作业并转发作业的合适工作人员。工作人员执行客户端请求的工作,并通过作业服务器向客户端发送响应。Gearman提供您的应用程序调用的客户端和工作者API来与Gearman作业服务器(也称为gearmand)交谈,因此开发人员不需要处理网络或作业的映射。在内部,gearman客户端和工作者API使用TCP套接字与作业服务器进行通信

2、在server3安装数据库的开发包

通过 lib_mysqludf_json UDF 库函数将关系数据映射为 JSON 格式,拷贝 lib_mysqludf_json.so 模块。进入数据库,查看mysql 的模块目录,注册 UDF 函数,查看函数

server3(mariadb) 

yum install -y unzip 
unzip lib_mysqludf_json-master.zip 
cd lib_mysqludf_json-master/
yum install -y gcc 
gcc $(mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c 
cp lib_mysqludf_json.so  /usr/lib64/mysql/plugin/

进入mysql查看
mysql
mysql> show global variables like 'plugin_dir';

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第45张图片

3、注册UDF函数

mysql> CREATE FUNCTION json_object RETURNS STRING SONAME 'lib_mysqludf_json.so';
mysql> select * from mysql.func;

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第46张图片

4、server3下载解压gearman,并解决依赖性进行编译

tar zxf gearman-mysql-udf-0.6.tar.gz  
cd gearman-mysql-udf-0.6/
./configure --libdir=/usr/lib64/mysql/plugin/ 

server1主机上的rhel7包中含有以下rpm安装包
yum install -y libgearman* libevent* 
#libevent-devel-2.0.21-4.el7.x86_64.rpm
#libgearman-1.1.12-18.el7.x86_64.rpm
#libgearman-devel-1.1.12-18.el7.x86_64.rpm 
./configure --libdir=/usr/lib64/mysql/plugin/   再次检测

make   编译
make install    安装

注册UDF函数,并查看
mysql 
mysql> CREATE FUNCTION gman_do_background RETURNS STRING SONAME 'libgearman_mysql_udf.so'; 
mysql> CREATE FUNCTION gman_servers_set RETURNS STRING SONAME 'libgearman_mysql_udf.so';
mysql> select * from mysql.func;

SELECT gman_servers_set('172.25.173.5:4730'); 	指定gearman的服务信息

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第47张图片Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第48张图片Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第49张图片

5、编辑mysql触发器,重新导入数据库

vim test.sql				##编写 mysql 触发器

mysql -pwestos < test.sql 
mysql
> SHOW TRIGGERS FROM test;	##查看触发器

注释第一段,开启第二段
Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第50张图片Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第51张图片

6、在server1中启动服务及worker任务

systemctl  start gearmand	##启动gearman服务
php -m | grep gearman		#查看服务
php -m | grep redis
netstat -antlp				#查看4370端口是否开启
cd /root/rhel7/             #切换环境到worker.php目录中

vim worker.php			    #编写 gearman 的 worker 端
///
  7 $redis->connect('172.25.173.6', 6379);
///
cp worker.php /usr/local
cd /usr/local

nohup php worker.php  &		#运行worker.php并打入后台
ps ax						#查看是否开启 worker.php

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第52张图片Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第53张图片

在这里插入图片描述

7、在server3更新 mysql 中的数据

###server3
> use test
> update test set name='hhhh' where id=1;	##更新 mysql 中的数据

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第54张图片

在server2进行查看

###server2
redis-cli 	##查看 redis
> get 1		##hello

Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第55张图片

在浏览器可以查看,此时server1端已经同步了server3中mysql经由server2中redis上传的数据
Linux企业运维——Redis部署+redis主从复制+redis主从自动切换(基于sentinel哨兵模式)+集群+redis+mysql 的缓存服务器+配置 gearman 实现数据同步_第56张图片

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号