redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查

1、Redis 持久化—Redis和AOF

RDB的优点

RDB是一个非常紧凑的文件,它保存了某个时间点得数据集,非常适用于数据集的备份,比如你可以在每个小时报保存一下过去24小时内的数据,同时每天保存过去30天的数据,这样即使出了问题你也可以根据需求恢复到不同版本的数据集.
RDB是一个紧凑的单一文件,很方便传送到另一个远端数据中心或者亚马逊的S3(可能加密),非常适用于灾难恢复.
RDB在保存RDB文件时父进程唯一需要做的就是fork出一个子进程,接下来的工作全部由子进程来做,父进程不需要再做其他IO操作,所以RDB持久化方式可以最大化redis的性能.
与AOF相比,在恢复大的数据集的时候,RDB方式会更快一些.

RDB的缺点

如果你希望在redis意外停止工作(例如电源中断)的情况下丢失的数据最少的话,那么RDB不适合你.虽然你可以配置不同的save时间点(例如每隔5分钟并且对数据集有100个写的操作),是Redis要完整的保存整个数据集是一个比较繁重的工作,你通常会每隔5分钟或者更久做一次完整的保存,万一在Redis意外宕机,你可能会丢失几分钟的数据.
RDB 需要经常fork子进程来保存数据集到硬盘上,当数据集比较大的时候,fork的过程是非常耗时的,可能会导致Redis在一些毫秒级内不能响应客户端的请求.如果数据集巨大并且CPU性能不是很好的情况下,这种情况会持续1秒,AOF也需要fork,但是你可以调节重写日志文件的频率来提高数据集的耐久度.

AOF 优点

使用AOF 会让你的Redis更加耐久: 你可以使用不同的fsync策略:无fsync,每秒fsync,每次写的时候fsync.使用默认的每秒fsync策略,Redis的性能依然很好(fsync是由后台线程进行处理的,主线程会尽力处理客户端请求),一旦出现故障,你最多丢失1秒的数据.
AOF文件是一个只进行追加的日志文件,所以不需要写入seek,即使由于某些原因(磁盘空间已满,写的过程中宕机等等)未执行完整的写入命令,你也也可使用redis-check-aof工具修复这些问题.
Redis 可以在 AOF 文件体积变得过大时,自动地在后台对 AOF 进行重写: 重写后的新 AOF 文件包含了恢复当前数据集所需的最小命令集合。 整个重写操作是绝对安全的,因为 Redis 在创建新 AOF 文件的过程中,会继续将命令追加到现有的 AOF 文件里面,即使重写过程中发生停机,现有的 AOF 文件也不会丢失。 而一旦新 AOF 文件创建完毕,Redis 就会从旧 AOF 文件切换到新 AOF 文件,并开始对新 AOF 文件进行追加操作。
AOF 文件有序地保存了对数据库执行的所有写入操作, 这些写入操作以 Redis 协议的格式保存, 因此 AOF 文件的内容非常容易被人读懂, 对文件进行分析(parse)也很轻松。 导出(export) AOF 文件也非常简单: 举个例子, 如果你不小心执行了 FLUSHALL 命令, 但只要 AOF 文件未被重写, 那么只要停止服务器, 移除 AOF 文件末尾的 FLUSHALL 命令, 并重启 Redis , 就可以将数据集恢复到 FLUSHALL 执行之前的状态。

AOF 缺点

对于相同的数据集来说,AOF 文件的体积通常要大于 RDB 文件的体积。
根据所使用的 fsync 策略,AOF 的速度可能会慢于 RDB 。 在一般情况下, 每秒 fsync 的性能依然非常高, 而关闭 fsync 可以让 AOF 的速度和 RDB 一样快, 即使在高负荷之下也是如此。 不过在处理巨大的写入载入时,RDB 可以提供更有保证的最大延迟时间(latency)。
redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第1张图片

[root@server1 redis]# vim  /etc/redis/redis.conf   编辑配置文件

redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第2张图片

[root@server1 redis]# systemctl restart redis.service   重启redis服务

redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第3张图片
redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第4张图片

2、redis做数据缓存

原始缓存架构:
让redis作为缓存,aap读的请求都来至于redis缓存,当app先读redis的时候,redis缓存里没有的,app会从数据库mysql去读出来,然后app再写入到redis里,下次就直接可以从redis里取。
redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第5张图片
新一种redis架构:
企业自己研发一个函数func,相当于过滤器,把有用的过滤出来,把过滤的数据保存到数据库里
redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第6张图片
阿里redis缓存架构:
当app更新了数据 ,canal模拟成mysql的slave,然后不断复制mysql的master端更新数据,然后将更新的数据传给redis
redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第7张图片

模拟阿里redis缓存架构

搭建lamp架构:
[root@foundation50 redis]# scp -r rhel7/ server2:/mnt   将下载好rpm包拷贝到srevre2的mnt里
[root@server2 mnt]# cd rhel7/  
[root@server2 rhel7]# yum install php-*  libgearman-1.1.12-18.el7.x86_64.rpm libgearman-devel-1.1.12-18.el7.x86_64.rpm libevent-devel-2.0.21-4.el7.x86_64.rpm -y  安装
[root@server2 rhel7]# systemctl start  php-fpm  启动php

redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第8张图片

[root@server1 local]# rsync -a nginx server2:/usr/local/  将server1上nginx目录同步到server2上
[root@server2 ~]# vim .bash_profile  添加环境变量

redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第9张图片

[root@server2 ~]# source .bash_profile
[root@server2 ~]# cd /usr/local/nginx/conf/ 
[root@server2 conf]# cp nginx.conf.default  nginx.conf  从新拷贝一份nginx配置文件

redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第10张图片

[root@server2 conf]# nginx  启动nginx
[root@foundation50 redis]# scp test.php server2:/usr/local/nginx/html/
[root@foundation50 redis]#  scp test.sql server4:/mnt
[root@server4 local]# yum install mariadb-server  -y  在server4上安装mariadb
[root@server4 local]# systemctl start mariadb.service  启动
[root@server4 local]# cd /mnt/
[root@server4 mnt]# mysql < test.sql  将test.sql导入数据库
[root@server4 mnt]# mysql 
MariaDB [(none)]> use test  进入test库
MariaDB [test]> show tables;  查看表
+----------------+
| Tables_in_test |
+----------------+
| test           |
+----------------+
1 row in set (0.00 sec)

MariaDB [test]> select * from test;  
+----+-------+
| id | name  |
+----+-------+
|  1 | test1 |
|  2 | test2 |
|  3 | test3 |
|  4 | test4 |
|  5 | test5 |
|  6 | test6 |
|  7 | test7 |
|  8 | test8 |
|  9 | test9 |
+----+-------+
9 rows in set (0.00 sec)

[root@server2 ~]# cd /usr/local/nginx/html
[root@server2 html]# vim test.php   编辑

redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第11张图片

[root@server4 mnt]# mysql
MariaDB [(none)]> grant all on test.* to redis@'%' identified by 'westos';
Query OK, 0 rows affected (0.01 sec)

访问172.25.50.2/test.php
redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第12张图片
redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第13张图片

3、mysql和redis数据同步

在server4上登陆数据库,更新数据
MariaDB [test]> update test set name='westos' where id='1'; 
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0
MariaDB [test]> select * from test;  查看,数据库已经变更了
+----+--------+
| id | name   |
+----+--------+
|  1 | westos |
|  2 | test2  |
|  3 | test3  |
|  4 | test4  |
|  5 | test5  |
|  6 | test6  |
|  7 | test7  |
|  8 | test8  |
|  9 | test9  |
+----+--------+
9 rows in set (0.00 sec)
在server1上查看redis,redis上并没有变更
127.0.0.1:6379> get 1
"test1"   还是tets1

mysql和redis数据同步:

UDF 库函数将关系数据映射为 JSON 格式,通常数据库中的数据映射为 JSON 格式,是通过程序来转换的。
[root@foundation50 redis]# scp lib_mysqludf_json-master.zip server4:/mnt  将下载好的包拷贝到server4的mnt里
[root@server4 ~]# yum install unzip  gcc -y  
[root@server4 ~]# cd /mnt/
[root@server4 mnt]# unzip lib_mysqludf_json-master.zip  解压 
[root@server4 mnt]# yum install mariadb-devel -y  
[root@server4 lib_mysqludf_json-master]# gcc $(mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c   用gcc生成lib_mysqludf_json.so  文件
[root@server4 lib_mysqludf_json-master]# mysql 登陆mysql
MariaDB [(none)]> show global variables like 'plugin_dir';  查看数据库插件目录
 [root@server4 lib_mysqludf_json-master]# cp lib_mysqludf_json.so /usr/lib64/mysql/plugin/ 把生成的 lib_mysqludf_json.so 文件拷贝到插件目录里面
 mysql> CREATE FUNCTION json_object RETURNS STRING SONAME  'lib_mysqludf_json.so'  自动加载lib_mysqludf_json.so模块
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> select * from mysql.func;  查看json_object对象
+-------------+-----+----------------------+----------+
| name        | ret | dl                   | type     |
+-------------+-----+----------------------+----------+
| json_object |   0 | lib_mysqludf_json.so | function |
+-------------+-----+----------------------+----------+
1 row in set (0.00 sec)

将转换好的json文件发出来,发到分布式框架
[root@foundation50 redis]# cd rhel7/
[root@foundation50 redis]# scp gearman-mysql-udf-0.6.tar.gz server4:/mnt  将下载好的udf函数包拷贝到server4的mnt里
[root@server4 mnt]# tar zxf gearman-mysql-udf-0.6.tar.gz 解压
[root@foundation50 rhel7]# scp libgearman-* server4:/mnt  将下载好的libgearman包拷贝到server4的mnt里
[root@foundation50 rhel7]# scp libevent-devel-2.0.21-4.el7.x86_64.rpm server4:/mnt  将下载好的libevent包拷贝到sever4 的mnt里
[root@server4 mnt]# yum install libgearman-* libevent-devel-2.0.21-4.el7.x86_64.rpm -y 安装
[root@server4 mnt]# cd gearman-mysql-udf-0.6/
[root@server4 gearman-mysql-udf-0.6]# ./configure --libdir=/usr/lib64/mysql/plugin/  编译
[root@server4 gearman-mysql-udf-0.6]# make  
[root@server4 gearman-mysql-udf-0.6]# make install  安装
[root@server4 gearman-mysql-udf-0.6]# cd /usr/lib64/mysql/plugin/
[root@server4 plugin]# ls

redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第14张图片

server4:
MariaDB [(none)]> CREATE FUNCTION gman_do_background RETURNS STRING SONAME 'libgearman_mysql_udf.so';  创建函数,表示发到后端
去
CREATE FUNCTION gman_servers_set RETURNS STRING SONAME 'libgearman_mysql_udf.so';  创建函数server发给谁
MariaDB [(none)]> select * from mysql.func;

redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第15张图片

MariaDB [(none)]> SELECT gman_servers_set('172.25.50.2:4730');   设置server往172.25.50.2上发
+--------------------------------------+
| gman_servers_set('172.25.50.2:4730') |
+--------------------------------------+
| 172.25.50.2:4730                     |
+--------------------------------------+
1 row in set (0.00 sec)

[root@foundation50 redis]# scp rhel7/ server2:/mnt   将下载的包拷贝到server2的mnt里
[root@server2 mnt]# cd rhel7/  
[root@server2 rhel7]# yum install gearmand-1.1.12-18.el7.x86_64.rpm -y
[root@server2 rhel7]# systemctl start gearmand  启动
[root@server4 mnt]# vim test.sql  编辑,打开数据库的触发器

redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第16张图片

[root@server4 mnt]# mysql < test.sql  导入
[root@server4 mnt]# mysql
MariaDB [(none)]> SHOW TRIGGERS FROM test;  查看触发器

redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第17张图片
将发来的server调度到worker

[root@foundation50 redis]# scp worker.php server2:/mnt   
[root@server2 mnt]# vim worker.php 

redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第18张图片

[root@server2 mnt]# nohup php worker.php &  将php打入后台
[root@server2 mnt]# ps ax

redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第19张图片
测试:

在server4上
MariaDB [(none)]> use test
MariaDB [test]> select * from test; 查看表
+----+--------+
| id | name   |
+----+--------+
|  1 | westos |
|  2 | test2  |
|  3 | test3  |
|  4 | test4  |
|  5 | test5  |
|  6 | test6  |
|  7 | test7  |
|  8 | test8  |
|  9 | test9  |
+----+--------+
9 rows in set (0.00 sec)
MariaDB [test]>   update test set name='redhat' where id='1';    更新数据
在server1上登陆redis
[root@server1 local]# redis-cli
127.0.0.1:6379> get 1
"redhat"

访问:172.25.50.2/test.php
redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第20张图片

4、cdn-varnish 缓存

将之前安装的redis ,gearmand,mariadb都停掉
[root@server1 ~]# systemctl stop redis  
[root@server2 mnt]# systemctl stop gearmand
[root@server4 mnt]# systemctl stop mariadb.service 
[root@foundation50 varnish]# scp varnish-libs-4.0.5-1.el7.x86_64.rpm varnish-4.0.5-1.el7.x86_64.rpm server1:/mnt  
[root@server1 mnt]# rpm -ivh varnish-*   安装 varnish,缺少依赖性
warning: varnish-4.0.5-1.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEY
error: Failed dependencies:
	jemalloc is needed by varnish-4.0.5-1.el7.x86_64
	redhat-rpm-config is needed by varnish-4.0.5-1.el7.x86_64
	libjemalloc.so.1()(64bit) is needed by  -4.0.5-1.el7.x86_64
[root@foundation50 varnish]# scp jemalloc-3.6.0-1.el7.x86_64.rpm jemalloc-devel-3.6.0-1.el7.x86_64.rpm server1:/mnt  
[root@server1 mnt]# yum install jemalloc* varnish-* -y 安装依赖性以及varnish
[root@server1 mnt]# cd /etc/varnish/
[root@server1 varnish]# vim varnish.params  

redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第21张图片

[root@server1 varnish]# systemctl start varnish  启动varnish

redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第22张图片

[root@server1 varnish]# systemctl reload varnish.service  刷新服务
[root@foundation50 varnish]# curl 172.25.50.1 访问cdn,cdn没有,去server2去取

redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第23张图片
[root@server2 mnt]# lsof -i :80 server2去连接的serve1
在这里插入图片描述

5、varnish 配置:

添加X-Cache首部,显示缓存是否命中

[root@server1 mnt]# cd /etc/varnish/
[root@server1 varnish]# vim default.vcl  编辑配置文件

redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第24张图片

[root@server1 varnish]# systemctl reload varnish.service   重新加载
[root@foundation50 varnish]# curl -I 172.25.50.1  访问

redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第25张图片

cdn 做server2、server3缓存

再开启一个后端server3
[root@server2 mnt]# cd /usr/local/
[root@server2 local]# rsync -a  nginx server3:/usr/local/   将nginx同步到server3上
[root@server3 ~]# vim .bash_profile 
[root@server3 ~]# source .bash_profile  

redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第26张图片

[root@server3 conf]# nginx   启动nginx
[root@server1 ~]# cd /etc/varnish/
[root@server1 varnish]# vim default.vcl  编辑配置文件
backend web1 {
    .host = "172.25.50.2";    添加后端
    .port = "80";
}

backend web2 {
    .host = "172.25.50.3";      添加后端
    .port = "80";
}

sub vcl_recv {         接收端,  当访问 www.westos.org 域名时从 web1 上取数据,访问 bbs.westos.org 域名时到 web2 取数据, #访问其他页面报错

if (req.http.host ~ "^(www.)?westos.org") {
          set req.http.host = "www.westos.org";
          set req.backend_hint = web1;   
          #return(pass);  如果不想找缓存直接从后端取,可以打开此选项
    }
    elsif (req.http.host ~ "^bbs.westos.org") {
          set req.backend_hint = web2;
          #return(pass);   如果不想找缓存直接从后端取,可以打开此选项
    }
    else {
            return(synth(404, "Not in cache"));
     }
[root@server1 varnish]# systemctl reload varnish.service  重新加载服务
[root@foundation50 varnish]# curl -I bbs.westos.org  访问,cdn掉取server1

redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第27张图片

[root@foundation50 varnish]# curl -I bbs.westos.org  访问,cdn调取server2

redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第28张图片

在server2上添加虚拟主机:
[root@server3 ~]# cd /usr/local/nginx/conf/  进入server3配置目录
[root@server3 conf]# vim nginx.conf  编辑配置文件,在文件最后添加nginx虚拟主机
server {
        listen 80;
        server_name bbs.westos.org;

       location / {
       root /bbs;
       index index.html;
       }
}

[root@server3 conf]# nginx -s reload  重载服务
[root@server3 conf]# mkdir /bbs 
[root@server3 bbs]# echo bbs.westos.org > index.html
[root@foundation50 varnish]# curl bbs.westos.org  访问
bbs.westos.org

在server3上添加虚拟主机:
[root@server2 ~]# mkdir /www
[root@server2 ~]# echo www.westos.org > /www/index.html
[root@server2 ~]# cd /usr/local/nginx/conf/   
[root@server2 conf]# vim nginx.conf  编辑配置文件,在文件最后添加nginx虚拟主机
    server {
           listen 80;
           server_name www.westos.org;

          location / {
          root /www;
          index index.html;
          }
      }
[root@server2 conf]# nginx -s reload  重启服务
[root@foundation50 varnish]# curl www.westos.org  访问
www.westos.org 

cdn 做负载均衡

在server3上再添加一个nginx虚拟主机www.westos.org,此时server2上有www.westos.org虚拟主机,server3上也有
[root@server3 bbs]# mkdir /www 
[root@server3 bbs]# echo www.westos.org > /www/index.html
[root@server3 bbs]# cd /usr/local/nginx/conf/
[root@server3 conf]# vim nginx.conf

redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第29张图片

[root@server1 ~]# cd /etc/varnish/
[root@server1 varnish]# vim default.vcl  编辑配置文件
 backend web1 {
   .host = "172.25.50.2";
   .port = "80";
   .probe = backend_healthcheck;
 }

 backend web2 {
   .host = "172.25.50.3";
   .port = "80";
   .probe = backend_healthcheck;
 }

import directors;

sub vcl_init {
         new web_cluster = directors.round_robin();   把多个后端聚合为一个组
         web_cluster.add_backend(web1);
         web_cluster.add_backend(web2);
}


sub vcl_recv {

if (req.http.host ~ "^(www.)?westos.org") {
          set req.http.host = "www.westos.org";
          set req.backend_hint = web_cluster.backend();
          return(pass);
    }
    elsif (req.http.host ~ "^bbs.westos.org") {
          set req.backend_hint = web2;
          return(pass);
    }
    else {
            return(synth(404, "Not in cache"));
    }

redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第30张图片

[root@server1 varnish]# systemctl reload varnish.service  重启
[root@foundation50 varnish]# curl www.westos.org  访问,已经达到负载均衡效果
www.westos.org  server2
[root@foundation50 varnish]# curl www.westos.org  访问
www.westos.org  server3
[root@foundation50 varnish]# curl www.westos.org
www.westos.org  server2
[root@foundation50 varnish]# curl www.westos.org
www.westos.org  server3

cdn做后端健康检查

varnish 4版本需要自己设置健康检查

[root@server1 ~]# cd /etc/varnish/
[root@server1 varnish]# vim default.vcl   编辑配置文件
probe backend_healthcheck {         添加
         .url = "/index.html";
         .interval = 3s;  检查的间隔时间
         .window = 3;  维持 3个 sliding window 的结果
         .threshold = 2; 至少有2次 window 是成功的,就宣告bachend 健康
 }
 backend web1 {
   .host = "172.25.50.2";
   .port = "80";
   .probe = backend_healthcheck;   添加健康检查方法
 }

 backend web2 {
   .host = "172.25.50.3";
   .port = "80";
   .probe = backend_healthcheck;   添加健康检查方法
 }
[root@server1 varnish]# systemctl reload varnish.service  重载服务
[root@server2 www]# nginx -s stop  停掉nginx
[root@foundation50 varnish]# curl www.westos.org  访问,具有健康检测,不会去调用server2上失败的后端
www.westos.org  server3
[root@foundation50 varnish]# curl www.westos.org   访问,具有健康检测,不会去调用server2上失败的后端
www.westos.org  server3
[root@foundation50 varnish]# curl www.westos.org
www.westos.org  server3
[root@server2 www]# nginx  启用nginx  当server2上的nginx打开后,会自动添加上server2
[root@foundation50 varnish]# curl www.westos.org
www.westos.org  server2
[root@foundation50 varnish]# curl www.westos.org
www.westos.org  server3
[root@foundation50 varnish]# curl www.westos.org
www.westos.org  server2

自定义缓存文件的缓存时长

直接添加到配置文件即可
redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第31张图片
问题:当客户端172.25.50.250访问www.westos.orgs时
[root@server2 logs]# cat access.log 查看server2上nginx日志时可以发现,是varnish的ip主机地址172.25.50.1连过来的,没有客户端信息
在这里插入图片描述
搭建测试环境:
server1为varnish
server2为nginx负载均衡
server3为nginx服务器
整条链路走向:客户端访问域名 通过dns解析到varnish上,varnish访问后端,但是后端是负载均衡,真正调度的应用在server3上

[root@server1 ~]# cd /etc/varnish/
[root@server1 varnish]# vim default.vcl 

 backend default {      定义 后端
   .host = "172.25.50.2";
   .port = "80";
 }

#probe backend_healthcheck {
#         .url = "/index.html";     
#         .interval = 3s;           
#         .window = 3;              
#         .threshold = 2;           
# }
# backend web1 {
#   .host = "172.25.50.2";
#   .port = "80";
#   .probe = backend_healthcheck;
# }

# backend web2 {
#   .host = "172.25.50.3";
#   .port = "80";
#   .probe = backend_healthcheck;
# }

#import directors;

#sub vcl_init {
#         new web_cluster = directors.round_robin();
#         web_cluster.add_backend(web1);
#         web_cluster.add_backend(web2);
#}

sub vcl_recv {                定义域名
if (req.http.host ~ "^(www.)?westos.org") {
          set req.http.host = "www.westos.org";
          set req.backend_hint = default;
          return(pass);
    }
 #   elsif (req.http.host ~ "^bbs.westos.org") {
 #         set req.backend_hint = web2;
 #         return(pass);
 #   } 
    else {
            return(synth(404, "Not in cache"));
    }
[root@server1 varnish]# systemctl reload varnish.service 

[root@server2 ~]# cd /usr/local/nginx/conf/  进入配置目录
[root@server2 conf]# vim nginx.conf 编辑配置文件

redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第32张图片
redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第33张图片

[root@server2 conf]# nginx -s reload 重启服务
[root@foundation50 varnish]# curl www.westos.org  客户端访问域名,真正访问到server3上



Welcome to nginx!



Welcome to nginx! 中文乱码

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

如何从server3上拿到客户端信息:

[root@server2 ~]# cd /usr/local/nginx/conf/  进入配置目录
[root@server2 conf]# vim nginx.conf   编辑配置文件,添加参数

redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第34张图片

[root@server2 conf]# nginx -s reload  重载服务
[root@server3 ~]# cd /usr/local/nginx/conf/
[root@server3 conf]# vim nginx.conf  编辑配置文件

redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第35张图片

[root@server3 conf]# nginx -s reload 重启服务
nginx: [emerg] unknown directive "real_ip_header" in /usr/local/nginx/conf/nginx.conf:38  报错real_ip_header nginx不认识需要从新编译nginx
[root@foundation50 lamp]# scp nginx-1.18.0.tar.gz server3:/mnt 将下载好的nginx拷贝到server3上
[root@server3 mnt]# tar zxf nginx-1.18.0.tar.gz  解压
[root@server3 mnt]# cd nginx-1.18.0/  
[root@server3 nginx-1.18.0]#  yum install -y  pcre-deve openssl-devel  gcc 安装依赖性
[root@server3 nginx-1.18.0]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module 执行
[root@server3 conf]# make  编译
[root@server3 conf]# make install 安装
[root@server3 conf]# nginx  启动nginx
[root@foundation50 lamp]# curl www.westos.org  客户端再次访问域名
[root@server3 ~]# cd /usr/local/nginx/logs  
[root@server3 logs]# ls
access_2021-12-17.log  access.log  error.log  nginx.pid
[root@server3 logs]# cat access.log  查看日志,发现已经拿到客户端信息

redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第36张图片
varnish 工作原理:
redis(2)-redis数据缓存、mysql和redis数据同步、varnish缓存及负载均衡及健康检查_第37张图片

你可能感兴趣的:(自动化运维,redis,缓存,数据库)