Linux:Redis 的主从缓存,高可用,搭建集群以及作 mysql 的缓存服务器

本文介绍了如何在Linux环境中安装和配置Redis,实现主从同步和高可用集群。详细步骤包括修改配置文件、监控、故障检测及恢复。此外,还探讨了Redis作为MySQL缓存服务器的设置,以及利用Gearman实现数据同步的方法。
摘要由CSDN通过智能技术生成

Redis

redis 是一个高性能的 key-value 数据库。 redis 的出现,很大程度补偿了 memcached 这类 keyvalue
存储的不足,在部分场合可以对关系数据库起到很 好的补充作用。它提供了 Python,Ruby,Erlang,PHP 客户端,使用很方便。
Redis 的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上 (这称为“半持久化模式”);也可以把每一次数据变化都写入到一个append only file(aof)里面(这称为“全持久化模式”)。

实验环境

redis-server: Redis 服务主程序。server3
redis-cli: Redis 客户端命令行工具,也可以用 telnet 来操作 。 server4
redis-benchmark: Redis 性能测试工具,用于测试读写性能。 server5

一·安装redis以及修改配置文件

[root@server3 ~]# yum install -y gcc
[root@server3 ~]# tar zxf redis-4.0.8.tar.gz
[root@server3 ~]# cd redis-4.0.8
[root@server3 redis-4.0.8]# make
[root@server3 redis-4.0.8]# make install
[root@server3 redis-4.0.8]# cd utils/
[root@server3 utils]# ./install_server.sh     #一直按回车
[root@server3 utils]# netstat -antlp    #查看端口
[root@server3 utils]# vim /etc/redis/6379.conf 

这里写图片描述

查看端口

[root@server3 utils]# /etc/init.d/redis_6379 stop
[root@server3 utils]# /etc/init.d/redis_6379 start
[root@server3 utils]# netstat -antlp   #再次查看端口

这里写图片描述

二·主从同步

[root@server3 utils]# cd ..
[root@server3 redis-4.0.8]# redis-cli 
127.0.0.1:6379> set name lzj    #添加name
OK
127.0.0.1:6379> get name
"lzj"

这里写图片描述

[root@server4 utils]# cd /etc/redis/
[root@server4 redis]# vim 6379.conf 
[root@server4 redis]# /etc/init.d/redis_6379 restart

这里写图片描述

[root@server4 redis]# redis-cli 
127.0.0.1:6379> get name
"lzj"

这里写图片描述

三·高可用

再打开一个从机server5,进行配置

[root@server3 redis-4.0.8]# cp sentinel.conf /etc/redis/
[root@server3 redis-4.0.8]# cd /etc/redis/
[root@server3 redis]# vim sentinel.conf 
[root@server3 redis]# scp sentinel.conf server4:/etc/redis/
[root@server3 redis]# scp sentinel.conf server5:/etc/redis/

在 sentinel.conf 文件
这里写图片描述
这里写图片描述

监控

[root@server3 redis]# redis-server /etc/redis/sentinel.conf --sentinel   #监控

这里写图片描述

如果监控退出,需要在/etc/redis/sentinel.conf 文件中 删除最后几行,再去执行监控
这里写图片描述

测试:

再次连接一个master server3

[root@server3 ~]# redis-cli 
127.0.0.1:6379> shutdown    #关闭
[root@server3 ~]# /etc/init.d/redis_6379 start
# 在其他两个主机可以看出,master会跳转
# 在/etc/redis/6379.conf  文件中查看会自动更改为master IP

这里写图片描述
这里写图片描述

四·搭建redis集群

[root@server3 ~]# /etc/init.d/redis_6379 stop
[root@server3 ~]# cd /usr/local/
[root@server3 local]# mkdir cluster
[root@server3 local]# cd cluster/
[root@server3 cluster]# mkdir 7001
[root@server3 cluster]# mkdir 7002
[root@server3 cluster]# mkdir 7003
[root@server3 cluster]# mkdir 7004
[root@server3 cluster]# mkdir 7005
[root@server3 cluster]# mkdir 7006
[root@server3 cluster]# cd 7001
[root@server3 7001]# vim redis.conf    #添加以下内容
port 7001   
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly  yes

这里写图片描述

[root@server3 ~]# cd redis-4.0.8
[root@server3 redis-4.0.8]# cd src
[root@server3 src]# cp redis-trib.rb /usr/local/bin/
[root@server3 src]# cd /usr/local/bin/
[root@server3 bin]# ls
redis-trib.rb

1.安装ruby

[root@server3 ~]# yum install ruby-2.2.3-1.el6.x86_64.rpm  libyaml-0.1.3-4.el6_6.x86_64.rpm  -y
[root@server3 ~]# yum install -y ruby
[root@server3 ~]# gem install --local redis-4.0.1.gem 
[root@server3 ~]# gem list --local
[root@server3 ~]# redis-trib.rb

这里写图片描述
这里写图片描述

[root@server3 7001]# vim redis.conf 
daemonize yes
pidfile  /usr/local/cluster/7001/redis.pid
logfile  /usr/local/cluster/7001/redis.log
[root@server3 7001]# redis-server redis.conf
[root@server3 7001]# ls
appendonly.aof  nodes.conf  redis.conf  redis.log  redis.pid
[root@server3 7001]# ps ax
1494 ?        Ssl    0:00 redis-server *:7001 [cluster]

2.查看日志

[root@server3 7001]# cat redis.log
[root@server3 7001]# echo 511 > /proc/sys/net/core/somaxconn
[root@server3 7001]# sysctl -w vm.overcommit_memory=1
vm.overcommit_memory = 1
[root@server3 7001]# vim /etc/sysctl.conf 
[root@server3 7001]# echo never > /sys/kernel/mm/transparent_hugepage/enabled 
[root@server3 7001]# ls
appendonly.aof  nodes.conf  redis.conf  redis.log  redis.pid

这里写图片描述

文件中永久添加
这里写图片描述

将7001-7006文件redis.conf中内容一致,需要更改端口和pid文件和log文件
这里写图片描述
这里写图片描述

[root@server3 7006]# ps ax    #查看进程
[root@server3 7006]# netstat -antlp    #查看端口

这里写图片描述
这里写图片描述

3.建立集群

[root@server3 7006]# redis-trib.rb create --replicas 1 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
Can I set the above configuration? (type 'yes' to accept): yes   #需要添入yes

4.查看一一对应的master和slave

[root@server3 7006]# redis-trib.rb check 127.0.0.1:7001

这里写图片描述

[root@server3 7006]# redis-cli -c -p 7001
127.0.0.1:7001> set name lzj
127.0.0.1:7002> get name    #会随机跳转
"lzj"
[root@server3 7006]# redis-cli -c -p 7006
127.0.0.1:7006> get name
"lzj"
127.0.0.1:7002>    #跳转到7002

这里写图片描述

5.测试

1.结束1个master

[root@server3 7006]# ps ax
 1494 ?        Ssl    0:02 redis-server *:7001 [cluster]
[root@server3 7006]# kill  1494   #结束master 7001进程
[root@server3 7006]# redis-trib.rb check 127.0.0.1:7001    #登陆不了
[root@server3 7006]# redis-trib.rb check 127.0.0.1:7002

这里写图片描述

[root@server3 7006]# cd ..
[root@server3 cluster]# cd 7001
[root@server3 7001]# redis-server redis.conf    #需要重新开启(维护哈希槽的完整性)
[root@server3 7001]# ps ax   #查看进程

2.结束过半master

[root@server3 7001]# ps ax
[root@server3 7001]# kill 1533   
[root@server3 7001]# kill 1539
[root@server3 7001]# redis-trib.rb check 127.0.0.1:7001

这里写图片描述

[root@server3 7001]# redis-cli -c -p 7006
[root@server3 7001]# redis-cli -c -p 7001

这里写图片描述

五·Redis 作 mysql 的缓存服务器

1.安装

[root@server3 ~]# cd redis/
[root@server3 redis]# ls
php-cli-5.3.3-38.el6.x86_64.rpm
php-common-5.3.3-38.el6.x86_64.rpm
php-devel-5.3.3-38.el6.x86_64.rpm
php-fpm-5.3.3-38.el6.x86_64.rpm
php-gd-5.3.3-38.el6.x86_64.rpm
php-mbstring-5.3.3-38.el6.x86_64.rpm
php-mysql-5.3.3-38.el6.x86_64.rpm
php-pdo-5.3.3-38.el6.x86_64.rpm
php-5.3.3-38.el6.x86_64.rpm 
nginx-1.8.0-1.el6.ngx.x86_64.rpm               
[root@server3 ~]# yum install -y nginx-1.8.0-1.el6.ngx.x86_64.rpm
[root@server3 ~]# yum install -y php-*

修改配置文件

[root@server3 ~]# vim /etc/php.ini 
date.timezone = Asia/Shanghai    #打开并且添加时区

这里写图片描述

[root@server3 ~]# cd /etc/php-fpm.d/
[root@server3 php-fpm.d]# ls
www.conf
[root@server3 php-fpm.d]# vim www.conf 
user = nginx
group = nginx
[root@server3 php-fpm.d]# vim /etc/php-fpm.conf 
[root@server3 php-fpm.d]# id nginx
uid=498(nginx) gid=499(nginx) groups=499(nginx)
[root@server3 php-fpm.d]# /etc/init.d/php-fpm start

这里写图片描述

[root@server3 php-fpm.d]# netstat -antlp    #查看端口

这里写图片描述

2.修改nginx配置文件

[root@server3 php-fpm.d]# cd /etc/nginx/
[root@server3 nginx]# cd conf.d/
[root@server3 conf.d]# vim default.conf 

这里写图片描述

[root@server3 conf.d]# /etc/init.d/nginx start   #打开nginx
[root@server3 conf.d]# netstat -antlp   #再次查看端口

这里写图片描述

3.php页面

[root@server3 conf.d]# cd /usr/share/nginx/html
[root@server3 html]# ls
50x.html  index.html
[root@server3 html]# vim index.php
[root@server3 html]# cat index.php
<?php
phpinfo()
?>
[root@server3 html]# cd /etc/nginx/conf.d/
[root@server3 conf.d]# vim default.conf 
[root@server3 conf.d]# nginx -s reload    #刷新

这里写图片描述

网页访问:172.25.41.3
这里写图片描述

[root@server3 ~]# cd redis/
[root@server3 redis]# ls
test.php
[root@server3 redis]# cp test.php /usr/share/nginx/html/index.php 
[root@server3 redis]# vim /usr/share/nginx/html/index.php

这里写图片描述

[root@server3 redis]# ls
phpredis-master.zip
[root@server3 redis]# yum install -y unzip
[root@server3 redis]# unzip phpredis-master.zip
[root@server3 redis]# cd phpredis-master
[root@server3 phpredis-master]# ls
[root@server3 phpredis-master]# phpize

这里写图片描述
编译三部曲

[root@server3 phpredis-master]# ./configure 
[root@server3 phpredis-master]# make 
[root@server3 phpredis-master]# make install
[root@server3 phpredis-master]# cd /usr/lib64/php/modules/
[root@server3 modules]# ls
redis.so 
[root@server3 modules]# cd /etc/php.d/
[root@server3 php.d]# cp mysql.ini redis.ini
[root@server3 php.d]# vim redis.ini 
[root@server3 php.d]# cat redis.ini 
extension=redis.so       #修改内容
[root@server3 php.d]# /etc/init.d/php-fpm reload
[root@server3 php.d]# php -m |grep redis
redis

这里写图片描述

4.配置 mysql

[root@server5 ~]# rpm -qa|grep mysql   #查看mysql安装包
[root@server5 ~]# cd /var/lib/mysql
[root@server5 mysql]# ls
[root@server5 mysql]# rm -fr *
[root@server5 mysql]# ls
[root@server5 ~]# rpm -e --nodeps `rpm -qa|grep mysql`    #卸载
[root@server5 ~]# yum install -y mysql-server
[root@server5 ~]# cd /var/lib/mysql/
[root@server5 mysql]# ls    #如果查看时还有文件,要全部删除
[root@server5 mysql]# /etc/init.d/mysqld start
[root@server5 mysql]# mysql
mysql> show databases;
mysql> grant all on test.* to redis@'%' identified by 'westos';

这里写图片描述

【server3】

[root@server3 ~]# cd redis/
[root@server3 redis]# ls
test.sql
[root@server3 redis]# scp test.sql server5:    #传给server5

【server5】

[root@server5 ~]# ls
test.sql
[root@server5 ~]# mysql < test.sql

【server4】

[root@server4 src]# vim /etc/redis/6379.conf 
[root@server4 src]# /etc/init.d/redis_6379 restart

这里写图片描述

5.测试

网页访问:172.25.41.3
这里写图片描述

再次刷新网页:
这里写图片描述
【server4】和【server5】查看
这里写图片描述
这里写图片描述

【server5】更改name

[root@server5 ~]# mysql
mysql> use test
mysql> update test set name='westos' where id=1;
mysql> select * from test;

这里写图片描述
但是在网页中看不到更改后的name
这里写图片描述

到这里,我们已经实现了 redis 作为 mysql 的缓存服务器,但是如果更新了 mysql,redis
中仍然会有对应的 KEY,数据就不会更新,此时就会出现 mysql 和 redis 数据不一致的情
况。所以接下来就要通过 mysql 触发器将改变的数据同步到 redis 中。

六·配置 gearman 实现数据同步

Gearman 是一个支持分布式的任务分发框架:
Gearman Job Server: Gearman核心程序,需要编译安装并以守护进程形式运行在后台。
Gearman Client:可以理解为任务的请求者。
GearmanWorker:任务的真正执行者,一般需要自己编写具体逻辑并通过守护进程方式运行,Gearman Worker 接收到 Gearman Client 传递的任务内容后,会按顺序处理。

1. 安装 gearman 软件包

[root@server3 ~]# cd redis/
[root@server3 redis]# ls
gearmand-1.1.8-2.el6.x86_64.rpm
[root@server3 redis]# yum install -y gearmand-1.1.8-2.el6.x86_64.rpm
[root@server3 redis]# /etc/init.d/gearmand start
[root@server3 redis]# netstat -antlp
[root@server3 redis]# scp gearman-mysql-udf-0.6.tar.gz server5:
[root@server3 redis]# scp lib_mysqludf_json-master.zip server5:

这里写图片描述

2. 安装 lib_mysqludf_json

lib_mysqludf_json UDF 库函数将关系数据映射为 JSON 格式。通常,数据库中的数据映
射为 JSON 格式,是通过程序来转换的。
[root@server5 ~]# ls
gearman-mysql-udf-0.6.tar.gz
lib_mysqludf_json-master.zip
[root@server5 ~]# yum install -y unzip
[root@server5 ~]# unzip lib_mysqludf_json-master.zip 
[root@server5 ~]# cd lib_mysqludf_json-master
[root@server5 lib_mysqludf_json-master]# yum install -y gcc mysql-devel
[root@server5 lib_mysqludf_json-master]# gcc $(mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c
[root@server5 lib_mysqludf_json-master]# ll
-rwxr-xr-x 1 root root 22223 Aug 12 15:27 lib_mysqludf_json.so
[root@server5 lib_mysqludf_json-master]# cp lib_mysqludf_json.so /usr/lib64/mysql/plugin/
[root@server5 lib_mysqludf_json-master]# cd /usr/lib64/mysql/plugin/
[root@server5 plugin]# ll
-rwxr-xr-x 1 root root   22223 Aug 12 15:28 lib_mysqludf_json.so
[root@server5 plugin]# mysql
mysql> show global variables like 'plugin_dir';    #查看 mysql 的模块目录
mysql> CREATE FUNCTION json_object RETURNS STRING SONAME 'lib_mysqludf_json.so';   #注册 UDF 函数
mysql> select * from mysql.func;   #查看函数

这里写图片描述

[root@server3 redis]# scp libgearman-devel-1.1.8-2.el6.x86_64.rpm  libgearman-1.1.8-2.el6.x86_64.rpm  server5:
[root@server3 redis]# scp libevent-1.4.13-4.el6.x86_64.rpm  libevent-devel-1.4.13-4.el6.x86_64.rpm  libevent-doc-1.4.13-4.el6.noarch.rpm  libevent-headers-1.4.13-4.el6.noarch.rpm  server5:
[root@server5 ~]# yum install libgearman-*   libevent-* -y
[root@server5 ~]# ls
gearman-mysql-udf-0.6.tar.gz 
[root@server5 ~]# tar zxf gearman-mysql-udf-0.6.tar.gz 
[root@server5 ~]# cd gearman-mysql-udf-0.6
[root@server5 gearman-mysql-udf-0.6]# ./configure --libdir=/usr/lib64/mysql/plugin/
[root@server5 gearman-mysql-udf-0.6]# make && make install
[root@server5 ~]# mysql
mysql> CREATE FUNCTION gman_do_background RETURNS STRING SONAME
    -> 'libgearman_mysql_udf.so';    #注册 UDF 函数
mysql> CREATE FUNCTION gman_servers_set RETURNS STRING SONAME
    -> 'libgearman_mysql_udf.so';    #注册 UDF 函数
mysql> select * from mysql.func;    #查看函数
mysql> SELECT gman_servers_set('172.25.41.3:4730');    #指定 gearman 的服务信息

这里写图片描述

[root@server5 ~]# vim test.sql 
[root@server5 ~]# mysql < test.sql 
[root@server5 ~]# mysql
mysql> SHOW TRIGGERS FROM test;    #查看触发器

这里写图片描述
这里写图片描述

3.编写 gearman 的 worker 端

[root@server3 redis]# cp worker.php /usr/local/
[root@server3 redis]# cd /usr/local/
[root@server3 local]# vim worker.php 
[root@server3 local]# cd 
[root@server3 ~]# cd redis/
[root@server3 redis]# tar zxf gearman-1.1.2.tgz 
[root@server3 redis]# cd gearman-1.1.2
[root@server3 gearman-1.1.2]# phpize
[root@server3 gearman-1.1.2]# ./configure 
[root@server3 gearman-1.1.2]# make && make install
[root@server3 gearman-1.1.2]# cd /usr/lib64/php/modules/
[root@server3 modules]# cd /etc/php.d/
[root@server3 php.d]# ls
[root@server3 php.d]# vim gearman.ini 
[root@server3 php.d]# cat gearman.ini 
extension=gearman.so
[root@server3 php.d]# /etc/init.d/php-fpm reload
[root@server3 php.d]# php -m |grep gearman
gearman
[root@server3 local]# nohup php /usr/local/worker.php  &    #打入后台
[root@server3 local]# ps ax
6535 pts/0    S      0:00 php /usr/local/worker.php

worker.php 修改内容
这里写图片描述

4.测试

[root@server5 ~]# mysql
mysql> use test
mysql> update test set name='redhat';
mysql> select * from test;

这里写图片描述

网页访问:
这里写图片描述

【server4】查看
这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值