47.Redis分布式集群(NoSQL数据库)---(Redis+Mysql+Php)实现读写分离
·
1.读写分离的背景
-
实际的生产环境当中,客户端对数据库的读操作都是直接找Redis拿数据的,如果Redis缓存里面没有数据,那么就会去找Mysql拿数据,并且给Redis中缓存一份
-
Redis中的数据有两种情况不能使用:数据过期、Mysql中的数据更新
-
用户读的时候访问Redis,用户写的时候访问Mysql
-
实际上读取数据的需求量是很大的,Redis是把数据缓存在内存当中,响应速度快,也可以降低后台Mysql数据库的压力
一般对于高并发的系统来说,搭建一个健壮的缓存系统是不可避免的。
单机的Reids的QPS可能只能上万,如果有再高并发的场景,单机是不能搞定的,就会有它的系统瓶颈
一般来说缓存是用来支撑高并发的;读写分离是用来处理读的并发量大而写的并发量小的场景
2.搭建(Redis+Mysql+Php)实现读写分离
注意:此次实验是在上一篇redis的基础上做的,因此搭建实验环境非常简单
| 主机信息 | 主机功能 |
|---|---|
| 172.25.18.1(server1) | 前端服务器 |
| 172.25.18.2(server2) | Redis数据缓存 |
| 172.25.18.3(server3) | Mysql数据库 |
server1中:关闭redis-server
[root@server1 ~]# ps ax
[root@server1 ~]# killall -9 redis-server #yum install -y psmisc
[root@server1 ~]# /etc/init.d/redis_6379 stop
server1中:安装配置nginx
[root@server1 nginx-1.17.0]# yum install -y pcre-devel
[root@server1 ~]# tar zxf nginx-1.17.0.tar.gz
[root@server1 ~]# cd nginx-1.17.0/
[root@server1 nginx-1.17.0]# ls
server1中:安装配置Php
[root@server1 ~]# yum install -y httpd php php-mysql
[root@server1 nginx-1.17.0]# vim auto/cc/gcc
[root@server1 nginx-1.17.0]# ./configure --prefix=/usr/local/nginx
`编译前需安装pcre,zlib,openssl`
[root@server1 nginx-1.17.0]# yum install -y pcre-devel zlib-devel openssl-devel #安装前端服务器需要的服务
[root@server1 nginx-1.17.0]# make && make install
[root@server1 nginx-1.17.0]# cd /usr/local/nginx/
[root@server1 nginx]# ls
[root@server1 nginx]# vim conf/nginx.conf
location / {
root html;
index index.php index.html index.htm;
}
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi.conf;
}
[root@server1 nginx]# /usr/local/nginx/sbin/nginx -t
[root@server1 nginx]# /usr/local/nginx/sbin/nginx
[root@server1 nginx]# curl localhost
[root@server1 ~]# ls
[root@server1 ~]# cd rhel7/
[root@server1 rhel7]# ls
[root@server1 rhel7]# rpm -qa | grep openssl
[root@server1 rhel7]# yum remove -y openssl-devel-1.0.1e-60.el7.x86_64
[root@server1 rhel7]# rpm -qa | grep php
[root@server1 rhel7]# yum remove -y php-common-5.4.16-42.el7.x86_64 php-cli-5.4.16-42.el7.x86_64 php-5.4.16-42.el7.x86_64 php-pdo-5.4.16-42.el7.x86_64 php-mysql-5.4.16-42.el7.x86_64
[root@server1 rhel7]# yum install -y *
[root@server1 rhel7]# systemctl start php-fpm.service
[root@server1 ~]# ls
[root@server1 ~]# vim test.php
[root@server1 ~]# mv test.php /usr/local/nginx/html/index.php
[root@server1 ~]# vim /usr/local/nginx/html/index.php
3 $redis->connect('172.25.18.2',6379) or die ("could net connect redis se rver");
10 $connect = mysql_connect('172.25.18.3','redis','redhat' );
server3中:安装配置数据库
[root@server3 ~]# ls
redis-5.0.3 rhel7
[root@server3 ~]# rpm -qa | grep mysql
[root@server3 ~]# yum install -y mariadb-server
[root@server3 mysql]# systemctl start mariadb
[root@server3 mysql]# mysql_secure_installation
[root@server3 mysql]# mysql -uroot -predhat
MariaDB [(none)]> show databases;
MariaDB [(none)]> create database test;
MariaDB [(none)]> grant all on test.* to redis@'%' identified by 'redhat';
MariaDB [(none)]> flush privileges;
[root@server3 ~]# ls
redis-5.0.3 rhel7 test.sql
[root@server3 ~]# mysql -predhat < test.sql #将数据导入数据库
[root@server2 ~]# cd /etc/redis/
[root@server2 redis]# ls
6379.conf sentinel.conf
[root@server2 redis]# vim sentinel.conf
#删除最后几行,带有ip行
[root@server2 redis]# /etc/init.d/redis_6379 restart
Stopping ...
Redis stopped
Starting Redis server...
[root@server2 redis]#
server2中:删除之前实验的缓存
[root@server2 ~]# vim /etc/redis/6379.conf
[root@server2 ~]# /etc/init.d/redis_6379 restart
Stopping ...
Redis stopped
Starting Redis server...
[root@server2 ~]# redis-cli
127.0.0.1:6379> get name
"sheena"
127.0.0.1:6379> DEL name
(integer) 1
127.0.0.1:6379> get name
(nil)
测试
-
浏览器输入:172.25.18.1
-
server2
[root@server2 redis]# redis-cli
127.0.0.1:6379> get 1
“test1”
127.0.0.1:6379> get 2
“test2”
127.0.0.1:6379> get 3
“test3”
127.0.0.1:6379> -
浏览器输入:172.25.18.1
更多推荐



所有评论(0)