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

更多推荐