phpadmin+redis实现图形化管理数据库笔记

课前回顾

四层负载均衡	OSI 传输层	转发
七层负载均衡	OSI 应用层	代理

四层负载均衡后面的七层负载均衡server配置一定要相同

四层负载均衡是基于传输层协议包来封装的(如:TCP/IP),那我们前面使用到的七层是指的应用层,他的组装在四层的基础之上,无论四层还是七层都是指的OSI网络模型

四层负载均衡不识别域名,七层负载均衡识别域名

动静分离只有好处:动静分离后,即使动态服务不可用,但静态资源不会受到影响。

使用proxy代理模块可实现,专线内网的传输,多台主机的负载均衡,多台主机的动静分离

公网IP	:
局域网IP	:
弹性IP	:

Nginx负载均衡后端状态

后端Web服务器在前端Nginx负载均衡调度中的状态

状态 概述
down 当前的server暂时不参与负载均衡(等于注释)
backup 预留的备份服务器
max_fails 允许请求失败的次数
fail_timeout 经过max_fails失败后, 服务暂停时间
max_conns 限制最大的接收连接数(连接数不属于请求数)

测试down状态测试该Server不参与负载均衡的调度,和注释类似

upstream load_pass {
    #不参与任何调度, 一般用于停机维护
    server 10.0.0.7:80 down;
}

测试backup以及down状态

#这个得配合错误返回码,proxy_next_upstream error timeout http_500 http_502 http_503 http_504 http_404 http_403;
upstream load_pass {
    server 10.0.0.7:80 down;
    server 10.0.0.8:80 backup;
    server 10.0.0.9:80 max_fails=1 fail_timeout=10s;
}
 
location  / {
    proxy_pass http://load_pass;
    include proxy_params;
}

测试max_fails失败次数和fail_timeout多少时间内失败多少次则标记down

upstream load_pass {
    server 10.0.0.7:80;
    server 10.0.0.8:80 max_fails=2 fail_timeout=10s;
}

测试max_conns最大TCP连接数

upstream load_pass {
    server 10.0.0.7:80;
    server 10.0.0.8:80 max_conns=1;
}

负载均衡模板

vim /etc/nginx/conf.d/wp.conf
server {
	listen 80;
	server_name cs.zh;

    location / {
        proxy_pass http://backend;
        include proxy_params;
    }
}
#include后面的相对路径指定就是/etc/nginx/ 下
vim /etc/nginx/nginx.conf

include /etc/nginx/upstream;
include /etc/nginx/conf.d/*.conf;
vim /etc/nginx/upstream
upstream backend {
    #server backend1.example.com       weight=5;
    #server backend2.example.com:8080;
    #server unix:/tmp/backend3;
    #server backup1.example.com:8080   backup;
    server 10.0.0.7:80 down;
    server 10.0.0.8:80 backup;
    server 10.0.0.9:80 max_fails=1 fail_timeout=10s;
}
vim /etc/nginx/proxy_params
	# 客户端的请求头部信息,带着域名来找我,我也带着域名去找下一级(代理机或者代理服务器)
	proxy_set_header Host $host;
	# 显示客户端的真实ip(和代理的所有IP)
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	
	#nginx代理与后端服务器连接超时时间(代理连接超时)
	proxy_connect_timeout 60s;
	#nginx代理等待后端服务器的响应时间
	proxy_read_timeout 60s;
	#后端服务器数据回传给nginx代理超时时间
	proxy_send_timeout 60s;
	
	#nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传, 不是全部接收完再传给客户端
	proxy_buffering on;
	#设置nginx代理保存用户头信息的缓冲区大小
	proxy_buffer_size 4k;
	#proxy_buffer_size 8k;
	#proxy_buffers 缓冲区
	proxy_buffers 8 4k;
	#proxy_buffers 8 8k;
	#使用http 1.1协议版本
	proxy_http_version 1.1;
	
	#解决集群单点故障的反馈页面影响用户体验,自动跳转到下一个负载均衡主机
	proxy_next_upstream error timeout http_500 http_502 http_503 http_504 http_404;

phpmyadmin

phpmyadmin和Navicat类似(软件,包,工具),都是使用图形化管理数据库

phpmyadmin不依赖外网,可以通过代码直接连接数据库

Navicat需要连接外网,来管理数据库

phpmyadmin可以通过所有库所有表的用户直接连接数据库,不用创建数据库

1.上传phpmyadmin安装包
mkdir /code/pm && cd /code/pm
rz -E
2.解压
unzip phpMyAdmin-4.9.0.1-all-languages.zip 
mv phpMyAdmin-4.9.0.1-all-languages/* .
rm -rf phpMyAdmin-4.9.0.1-all-languages*
3.编辑虚拟主机
vim /etc/nginx/conf.d/phpmy.conf 
server {
        listen 80;
        server_name cs.pm.com;
        root /code/pm;
        index info.php index.php;

        location ~ \.php$ {
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
                }
}
4.只能手动cp(#因为开发没有做图形化代码)
cp config.sample.inc.php config.inc.php
5.修改对数据库的IP指向
vim config.inc.php 
$cfg['Servers'][$i]['host'] = '10.0.0.51';
6.域名解析
10.0.0.9 cs.pm.com
7.浏览器访问
cs.pm.com

多台web配置phpmyadmin

scp和rsync拷贝目录的时候小心带和不带根是不同的

1.拷贝phpmyadmin的server语句
[root@web03 ~]# rsync -avz /etc/nginx/conf.d/phpmy.conf 10.0.0.8:/etc/nginx/conf.d/
[root@web03 ~]# rsync -avz /etc/nginx/conf.d/phpmy.conf 10.0.0.7:/etc/nginx/conf.d/
2.拷贝phpmyadmin的安装包(/pm 和 /pm/结果不同)
[root@web03 ~]# rsync -avz /code/pm 10.0.0.8:/code/
[root@web03 ~]# rsync -avz /code/pm 10.0.0.7:/code/

3.重载nginx
nginx -sreload

配置负载均衡 lb

1.单独写一个虚拟主机,避免混淆,同样因为服务的不同
[root@lb01 ~]# vim /etc/nginx/conf.d/phpmy.conf
upstream phpmy {
    server 10.0.0.7;
    server 10.0.0.8;
    server 10.0.0.9;
}
server {
        listen 80;
        server_name cs.pm.com;

    location / {
        proxy_pass http://phpmy;
        include proxy_params;
    }
}
2.重载nginx配置文件
nginx -sreload
3.域名解析
10.0.0.5 cs.pm.com
4.浏览器访问
cs.pm.com

5.通过对比浏览器的cookie和本地的session可以判断出用户登录的是哪台web服务器,因为cookie和session是一一对应的,同生共死的
[root@web03 ~]# ll /var/lib/php/session/
total 8
-rw------- 1 apache apache 5779 May 28 02:29 sess_70e081786ab1807e20da946ddbd4b785

使用redis做共享存储(企业常用)

使用nfs作为redis服务器,监听(bind)某一网段,redis为PHPadmin提供服务(类似于nfs共享存储),把/var/lib/php/session/* 保存到数据库

使用了redis,就不能再使用WordPress,因为使用redis时候修改了php.ini代码,导致wp不能连接数据库(状态码500)

1.安装redis
yum install -y redis
2.修改监听网段
sed  -i '/^bind/c bind 127.0.0.1 172.16.1.31' /etc/redis.conf
3.启动redis
systemctl start redis
systemctl enable redis
#查看redis端口(6379)
netstat -lntup|grep redis

配置web01

1.php配置session,连接redis
#1.修改/etc/php.ini文件
[root@web ~]# vim /etc/php.ini
修改session.save_handler = files为
session.save_handler = redis

修改 ;session.save_path = "/tmp"为 (#小心注释)
session.save_path = "tcp://172.16.1.31:6379"

#待定
;session.save_path = "tcp://172.16.1.31:6379?auth=123" #如果redis存在密码,则使用该方式

#0改成1
session.auto_start = 1

#2.注释php-fpm.d/www.conf里面的两条内容,否则session内容会一直写入/var/lib/php/session目录中(;是注释)
;php_value[session.save_handler] = files
;php_value[session.save_path]    = /var/lib/php/session

2.重启php-fpm
systemctl restart php-fpm

使用rsync,扩展多台web

1.将web01上配置好的文件推送到web02
[root@web01 code]# rsync -avz /etc/php.ini [email protected]:/etc/php.ini  
[root@web01 code]# rsync -avz /etc/php-fpm.d/www.conf [email protected]:/etc/php-fpm.d/www.conf 
2.重启php-fpm
[root@web02 code]# systemctl restart php-fpm

使用redis查看

[root@db01 redis]# redis-cli
127.0.0.1:6379> FLUSHALL	#清空session
OK
127.0.0.1:6379> keys *		#查看本地记录的session
1) "PHPREDIS_SESSION:1365eaf0490be9315496cb7382965954"
#查看session生存时间
127.0.0.1:6379> TTL PHPREDIS_SESSION:1365eaf0490be9315496cb7382965954	


碎碎念
#查看服务器记录的session,该文件与浏览器的登录(cookie)状态息息相关
[root@web03 ~]# ll /var/lib/php/session/
total 8
-rw------- 1 apache apache 5779 May 28 02:29 sess_70e081786ab1807e20da946ddbd4b785
#使用开发者工具可以看到浏览器的cookie名 70e081786ab1807e20da946ddbd4b785

#删除本地session可导致浏览器已有的登录状态变更
rm -rf /var/lib/php/session/
#失误删除session可导致phpadmin无法连接
mkdir /var/lib/php/session
chown apache. /var/lib/php/session/

#测试某一主机的端口是否可以连通
[root@web01 /code/pm]# telnet 172.16.1.31 6379
Trying 172.16.1.31...
Connected to 172.16.1.31.	#可以连通
Escape character is '^]'.
quit

redis

[root@nfs ~]# rpm -q redis
redis-3.2.12-2.el7.x86_64
[root@nfs ~]# rpm -ql redis
/etc/logrotate.d/redis		#redis的日志切割
/etc/redis-sentinel.conf
/etc/redis.conf
/etc/systemd/system/redis-sentinel.service.d
/etc/systemd/system/redis-sentinel.service.d/limit.conf
/etc/systemd/system/redis.service.d
/etc/systemd/system/redis.service.d/limit.conf
/usr/bin/redis-benchmark
/usr/bin/redis-check-aof
/usr/bin/redis-check-rdb
/usr/bin/redis-cli			#使用redis连接数据库
/usr/bin/redis-sentinel
/usr/bin/redis-server
/usr/lib/systemd/system/redis-sentinel.service
/usr/lib/systemd/system/redis.service
/var/lib/redis
/var/log/redis
/var/run/redis
[root@nfs ~]# cat /var/lib/php/session/		#本地的session记录

你可能感兴趣的:(phpadmin+redis实现图形化管理数据库笔记)