一 反向代理机制
(一)什么是反向代理?
总结:
1.反向代理服务器位于目标服务器与用户之间.
2.对于用户而言,反向代理服务器就是目标服务器.
3.用户访问时根本不清楚真实的服务器资源是谁,保护了真实服务器资源信息.
4.反向代理服务器一般是服务器端代理,保护真实服务器信息.
(二)正向代理(知识补充)
知识点:
1.代理服务器位于用户与服务器之间
2.用户发起请求时,清楚的知道自己访问的真实服务器是谁.
3.代理服务器将用户的请求转交给服务器获取数据.
4.正向代理是客户端代理,保护了用户的信息.
二 Nginx
(一)Nginx介绍
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器
内存: 不到2M
并发能力强: 3-5万次/秒 理想环境下 /tomcat服务器 150-220/秒
(二)Nginx安装(下载Linux版本)
1.Nginx安装路径不要放到C盘 要求路径中不能有中文+空格------职业操作
2.要求以超级管理员的权限 启动nginx服务器. 动态获取权限.
3.检查任务管理器 查看是否有nginx服务项
4.80端口被PID=4的编号占用
https://jingyan.baidu.com/article/b7001fe1d6e9370e7382dd43.html
(三)Nginx命令
Nginx每次启动时会生成2个进程项
1.主进程: 主要提供nginx反向代理服务的.
2.守护进程 防止主进程意外关闭的.
如果需要关闭nginx,则应该先关闭守护进程,再关闭主进程.
命令的运行
1.前提条件: 要求在nginx的根目录中执行,进入安装目录,cmd窗口启动。
2.规范: 启动nginx之后,执行nginx的重启指令,检查是否有异常.
(1) 启动nginx start nginx 即使启动不成功,也不会报错!!!!所以通过重启检查是否异常
(2)重启nginx nginx -s reload 如果配置文件编辑异常,则会显示报错信息
(3)停止nginx nginx -s stop
(四)Nginx 反向代理入门案例
http {
server {
listen 80; # 监听端口号
server_name localhost; # 监听的服务名称
#反向代理的配置,获取用户指定的请求之后,将请求转向到什么位置
# / 请求访问的根目录
location / {
# root关键字 反向代理文件目录
root html;
# index关键字 默认跳转页面
index index.html index.htm;
}
}
}
(五)商品图片回显实现
1.业务分析
url地址: http://image.jt.com/2020/07/11/39ff8758-57bb-4452-bf29-db6061fff24a.jpg
磁盘地址: D:\JT-SOFT\images/2020/07/11/39ff8758-57bb-4452-bf29-db6061fff24a.jpg
利用nginx服务器实现反向代理机制, 当用户访问http://image.jt.com时 要求跳转到路径 D:\JT-SOFT\images\
2.编辑Nginx的配置文件,实现域名和本地文件目录的映射
a.文件位置(nginx-1.19.1/conf/nginx.conf)
b.文件编辑
/ 和 root 关键字
# 配置图片服务器代理 个别windows中"_-"字符可能不识别
server {
listen 80;
server_name image.jt.com;
location / {
#映射到目录中
root D:\JT-SOFT\images;
}
}
c.编辑完之后重启 nginx -s reload
3.网络访问链路说明
4.利用switchHosts软件编辑HOSTS文件,位置C:\Windows\System32\drivers\etc\hosts
# 京淘环境配置
127.0.0.1 image.jt.com
127.0.0.1 manage.jt.com
127.0.0.1 www.jt.com
127.0.0.1sso.jt.com
5.修改hosts文件权限
(六)实现域名代理
要求: 用户通过http://manage.jt.com:80 访问localhost:8091服务器.
# 配置域名代理
server {
listen 80;
server_name manage.jt.com;
location / {
#代理的是服务器地址
proxy_pass http://localhost:8091;
}
}
三 Nginx负载均衡策略
(一)什么是负载均衡?
说明:在分布式条件下,为了提高用户请求的响应能力,准备多台服务器.一起抗击高并发.需要用户通过同一个网址访问不同服务器的技术称之为负载均衡机制.
(二)准备多台tomcat服务器
1.项目打包
需求:准备3台tomcat服务器,并且端口号依次为8081/8082/8083,之后完成项目Windows部署.
在sts软件中右键jt目录,run as ->maven install,后两次直接右键jt-manage目录,run as ->maven install。
在target目录下找到打好的war包,复制走并改名。
2.项目发布
在3个war包所在目录下3次进入cmd窗口,依次执行java -jar 808X.war指令。
发布后在浏览器中依次访问localhost:8081、localhost:8082、localhost:8083。
如果浏览器访问速度较慢(不正常),直接关闭当前dos命令窗口,或者 ctrl + c 方式 释放资源.
(三)Nginx实现负载均衡
1.需求:通过http://manage.jt.com 方式 ,刷新时依次访问8081/8082/8083服务器.
2.负载均衡策略----轮询
说明: 根据配置文件的顺序,依次访问tomcat服务器.
# 配置域名代理
server {
listen 80;
server_name manage.jt.com;
location / {
#代理的是服务器地址
#proxy_pass http://localhost:8091;
proxy_pass http://jtW;
}
}
#定义多台tomcat服务器 1.轮询策略
upstream jtW {
server localhost:8081;
server localhost:8082;
server localhost:8083;
}
3.负载均衡策略----权重
权重策略: 让性能更优的服务器更多的处理请求.
#定义多台tomcat服务器 1.轮询策略 2.权重策略
upstream jtW {
server localhost:8081 weight=6;
server localhost:8082 weight=3;
server localhost:8083 weight=1;
}
4.负载均衡策略----IPHASH策略
说明: 如果需要用户与后端服务器进行绑定时,可以使用IPhash策略.
案例A: 有时用户可能做登录操作,可能将用户信息保存到session对象 中,如果这时采用轮询/权重的策略,可能访问其他的业务服务器.导致用户频繁的登录.
#定义多台tomcat服务器 1.轮询策略 2.权重策略
upstream jtW {
ip_hash;
server localhost:8081 weight=6;
server localhost:8082 weight=3;
server localhost:8083 weight=1;
}
补充知识:
(1)IPHASH一般只做测试时用.
(2)使用IPHASH可能造成负载不均的现象. 某些服务器负载压力过高.有宕机的风险.
(3)使用IPHASH时,如果后端服务器宕机,则直接影响用户的使用.
(4)工作中如果需要实现用户信息的共享,一般采用SSO的方式进行.
用户只需一次登录就可以访问所有相互信任的应用系统
(四)关于Nginx属性配置
1.down属性标识故障机
#定义多台tomcat服务器 1.轮询策略 2.权重策略 3.ip_hash策略
upstream jtW {
server localhost:8081 weight=6 down;
server localhost:8082 weight=3;
server localhost:8083 weight=1;
}
2.backup属性标识备用机,遇到主机全部宕机/遇忙时,这时备用机才会生效
#定义多台tomcat服务器 1.轮询策略 2.权重策略 3.ip_hash策略
upstream jtW {
server localhost:8081 weight=6 down;
server localhost:8082 weight=3 down;
server localhost:8083 weight=1 backup;
}
3.设定访问超时
属性说明:
(1)max_fails=1 允许访问失败的最多次数
(2)fail_timeout=60s 失败的超时时间(理解为时间区间)
当服务器宕机时,这时配置文件还没有被标识为down时.开启了高可用的机制. 只要失败的次数超过最大失败次数,则在指定的时间周期之内,不会再次访问故障机.
#定义多台tomcat服务器 1.轮询策略 2.权重策略 3.ip_hash策略
upstream jtW {
#ip_hash;
server localhost:8081 max_fails=1 fail_timeout=60s;
server localhost:8082 max_fails=1 fail_timeout=60s;
server localhost:8083 max_fails=1 fail_timeout=60s;
}
四 初识Linux
(一)虚拟机安装
(二)虚拟机网络配置
1.windows与Linux的数据通讯的主要的方式2种, 桥接模式 和 nat模式,选NAT模式
2.桥接模式
说明:
a.使用桥接模式相当于虚拟机直接接入当前局域网.并且独占IP
b.如果采用桥接模式,则必须有第三方的设备进行支持.
c.凡是在局域网中的设备,都可以与虚拟机进行通讯.
3.NAT模式
说明:
(1)NAT模式相当于在本机开辟一块网络空间地址.
(2)只有本机能够访问,其他服务器不能访问
4.切换虚拟机网络空间地址(切换网段)
VMware软件中单击“编辑”,选择虚拟网络编辑器。
5.关于Linux系统没有显示IP的说明
在Linux系统中输入ip addr,其中ens33之后没有IP地址展现,需要重启网卡配置.
命令方式:
a. systemctl restart NetworkManager
b. service network restart
c. ip addr
6.Xshell远程连接
(1)通过windows ping Linux 服务器
ping 192.168.126.129 (设置的IP地址从128开始,这里ping个129)
(2)配置xshell程序 连接远程服务器
五 Linux 项目环境搭建
(一)打包及解压命令
tar命令位于/bin目录下,它能够将用户所指定的文件或目录打包成一个文件,但不做压缩。
一般Linux上常用的压缩方式是选用tar将许多文件打包成一个文件,再以gzip压缩命令压缩成name.tar.gz的文件。
-c 创建一个新的tar文件
-v 显示运行过程的信息
-f 指定文件名
-z 调用gzip压缩命令进行压缩
-t 查看压缩文件的内容
-x 解开tar文件
tar –cvf n.tar ./* 压缩当前目录下的所有文件和目录,文件名为n.tar
tar –xvf n.tar 解压压缩包中的文件到当前目录(如果长时间未解压成功 Ctrl+C退出)
tar –cvzf m.tar.gz ./* 压缩文件
tar -zxvf m.tar.gz 解压m.tar文件到当前目录
(二)安装JDK
1.在/usr/local/src 下上传JDK安装包
2.解压JDK
tar -zxvf jdk-8u51-linux-x64.tar.gz
3.删除多余的安装包文件,修改文件名称
4.修改环境变量
命令: vim /etc/profile,加入如下配置,设定jdk环境
5.让环境变量生效
命令: source /etc/profile
(三)安装mariadb数据库
1.在/usr/local/src目录下执行命令: yum install mariadb-server
2.操作数据库命令
(1)启动数据库命令 systemctl start mariadb
(2)停止数据库命令 systemctl stop mariadb
(3)重启数据库命令 systemctl restart mariadb
4.配置数据库,在/usr/local/src目录下执行命令:mysql_secure_installation,设置密码,其他选y即可
5.数据库登录,在/usr/local/src目录下执行命令:mysql -u root -p,输入密码登录
6.设定数据库权限
(1)show databases;
(2)use mysql;
(3)show tables;
(4)select host,user from user where user=“root”;
(5)update user set host="%" where host=“localhost”;
修改之后任意的IP地址可以访问数据库,但是要求用户名和密码正确.
(6)Ctrl+c 回到Mariadb[(none)],执行flush privileges; 刷新数据库权限
(四)关于Linux防火墙
1.防火墙的工作原理
说明:一般防火墙只拦截远程请求本服务器的请求
2.防火墙的配置文件
该配置控制了防火墙 以后的操作状态信息
(1)配置以后不开启防火墙 systemctl disable firewalld.service
(2)配置以后开启防火墙 systemctl enable firewalld.service
3.防火墙的开关配置
(1)检查防火墙工作状态 firewall-cmd --state
(2)关闭防火墙,该操作只能控制现在。当Linux系统重启时,该操作失效。
systemctl stop firewalld.service
systemctl start firewalld.service
4.导入JTDB数据库
(1)连接远程数据库,通过SQLyog软件,连接192.168.126.129主机地址
(2)从sql转储文件导入数据库
(五)搭建tomcat服务器
1.修改文件上传路径
(1)准备图片存储目录,在src目录下新建images文件夹
(2)修改图片存储路径
#image.localDir=D:/JT-SOFT/images
image.localDir=/usr/local/src/images
image.imageUrl=http://image.jt.com
image.imageTypes=.jpg,.png,.gif,.jpeg
2.上传war包文件,在/usr/local/src目录下创建tomcats目录之后上传war包文件
3.tomcat启动测试
(1)启动tomcat服务器,
java -jar 8081.war & java -jar 8082.war & java -jar 8083.war & 该操作是前台启动的方式.会占用当前的控制台.
(2)关闭tomcat服务器
ps -ef | grep java* #查询java相关进程的状态
kill -9 4379 #杀死进程
(3)批量启动tomcat服务器
java -jar 8081.war & java -jar 8082.war & java -jar 8083.war &
4.项目后台运行设定
说明: 通过java -jar xxxx.war 方式表示前台运行,该方式不允许控制台关闭,如果控制台关闭之后,所有的服务都将停止,所以需要开启后台运行的方式。
nohup java -jar 8081.war -> 8081.log & nohup java -jar 8082.war -> 8082.log & nohup java -jar 8083.war -> 8083.log &
5. 通过脚本启动tomcat服务器(外挂) shell的脚本文件
在tomcats文件夹中进入脚本文件编辑页面:vim start.sh
#!/bin/sh
nohup java -jar 8081.war -> 8081.log &
nohup java -jar 8082.war -> 8082.log &
nohup java -jar 8083.war -> 8083.log &
运行脚本业面:sh start.sh
(六)安装Linux nginx服务器
1.下载nginx安装文件
(1)nginx官网(nginx.org),获取Linux版本nginx连接地址
(2)在src目录下,下载nginx安装包:wget http://nginx.org/download/nginx-1.19.1.tar.gz
2.安装准备(都是在/usr/local/src/中执行)
(1)解压nginx tar -zxvf nginx-1.19.1.tar.gz
(2)删除多余文件 rm -f nginx-1.19.1.tar.gz
(3)修改文件名称 mv nginx-1.19.1 nginx
说明: nginx的环境配置有2个环境.
环境1: /usr/local/src/nginx 该路径是nginx的源文件路径 主要负责编译/安装等工作 (安装)
环境2: /usr/local/nginx 该路径是nginx的工作路径 主要实现反向代理配置工作 (工作)
3.安装nginx服务器(在安装目录/usr/local/src/ngnix下执行)
命令1: ./configure 执行nginx目录下configure文件
命令2: make 编译
命令3: make install 安装nginx
命令4: whereis nginx 检查nginx是否安装成功
4.启动nginx服务器(在工作目录/usr/local/ngnix下执行)
(1)跳转到nginx工作目录中 cd /usr/local/nginx
(2)跳转到sbin 目录中 cd sbin, 执行启动命令 ./nginx
a.启动nginx ./nginx
b.重启nginx ./nginx -s reload
c.关闭nginx ./nginx -s stop
5.安装winscp软件,进入/usr/local/nginx/conf/,编辑反向代理配置文件nginx.conf。
#配置图片服务器
server {
listen 80;
server_name image.jt.com;
location / {
#配置反向代理的路径
root /usr/local/src/images;
}
}
#配置域名代理
server {
listen 80;
server_name manage.jt.com;
location / {
#代理tomcat服务器
proxy_pass http://tomcats;
}
}
#配置tomcat集群 默认是轮询策略
upstream tomcats {
server localhost:8081;
server localhost:8082;
server localhost:8083;
}
修改完成之后,进入/usr/local/nginx/sbin目录中,重启nginx服务器,命令:./nginx -s reload
6.通过SwitchHosts软件,修改windows中的hosts文件
# 京淘环境配置
#127.0.0.1 image.jt.com
#127.0.0.1 manage.jt.com
#测试inux项目发布
192.168.126.129 image.jt.com
192.168.126.129 manage.jt.com
127.0.0.1 www.jt.com
127.0.0.1 sso.jt.com
7.开机没有IP的问题 systemctl restart NetworkManager
六 实现数据库高可用
(一)数据库数据同步,热备份原理图
工作原理说明:
1.数据库主库将更新的数据信息写入到二进制日志文件binary log中.
2.数据库从库通过IO线程去主库中获取二进制文件修改内容. 之后写入到中继日志relay log中
3.数据库从库中的Sql线程读取中继日志中的信息,实现数据的同步。并且为了降低组件之间的耦合性,采用异步的方式处理.
(二) 准备第二台Linux操作系统
1.复制虚拟机文件,运行并改名。
2.修改虚拟机IP地址
规定: 主机IP地址 192.168.126.129
从机IP地址 192.168.126.130
(1)进入修改从机IP地址目录 cd /etc/sysconfig/network-scripts/,vim ifcfg-ens33,将该文件中的ipaddr改为192.168.126.130
(2)改完之后在/etc/sysconfig/network-scripts/目录下重置网卡 ,命令:service network restart
(三)在slave(从机)中安装数据库,操作同主机
1.利用sqlYog工具链接从库
2.实现数据库导入导出,在实现数据库主从之前,最好让主库和从库的数据一致
(四)数据库主从配置
1. 开启数据库二进制文件
说明:默认条件下 数据库二进制文件是关闭的.如果需要开启,则必须手动配置. 之后重启数据库.
修改配置文件, vim /etc/my.cnf,添加server-id=1 log-bin=mysql-bin ,保存后退出
修改之后cd /var/lib/mysql/ 进入数据库工作目录,重启数据库 ,命令:systemctl restart mariadb。然后通过 ls 指令检查二进制文件(mysql-bin.000001和mysql-bin.index)是否生成
2.从库开启二进制文件,其中server-id=2,其他和主库相同,改完之后重启数据库
3.在syslog软件中查询主库状态 show master status; 执行该命令。
4.主从数据库挂载,如果需要实现数据库的主从同步,应该由从库向主库进行挂载。
/*130是从机 实现主从的挂载 host/port/user/password/二进制文件/位置*/
change MASTER to MASTER_HOST="192.168.126.129",
MASTER_PORT=3306,
MASTER_USER="root",
MASTER_PASSWORD="root",
MASTER_LOG_FILE="mysql-bin.000001",
MASTER_LOG_POS=245;
/*开启主从服务*/
start slave;
/*检查主从同步状态*/
show SLAVE status;
5. 挂载报错的说明
(1)先查询日志信息
(2)修改数据库配置之后重启
(3)停止主从服务 STOP SLAVE;
(4)重新挂载数据库
6.测试主从同步,操作数据库主库,检查数据库从库是否正确
(五)数据库读写分离-负载均衡机制
1.读写分离说明:当数据库执行写操作时,应该操作主库,如果用户进行读操作时应该读从库,实现该机制需要准备一个代理数据库服务器。
2.Mycat介绍
3.Mycat安装
(1)在主机中/usr/local/src目录下,上传Mycat安装包
(2)解压安装包,tar -xvf Mycat-server-1.7.0-DEV-20170416134921-linux.tar.gz ,删除压缩包,将安装文件夹改名为mycat
4.server.xml(/usr/local/src/mycat/conf/目录下新建该文件),注意事项: 数据库代理的端口号 8066端口
<!--用户标签-->
<user name="root">
<property name="password">root</property>
<!--与schema.xml中的配置相同 注意数据库的大小写-->
<property name="schemas">jtdb</property>
</user>
<user name="user">
<property name="password">user</property>
<property name="schemas">jtdb</property>
<property name="readOnly">true</property>
</user>
5. schema.xml(/usr/local/src/mycat/conf/目录下新建该文件),配置说明:该配置表示了读写分离/负载均衡的设置.
<writeHost host="hostM1" url="192.168.126.129:3306" user="root" password="root">
<!--读数据库1-->
<readHost host="hostS1" url="192.168.126.130:3306" user="root" password="root" />
<!--读数据库2-->
<readHost host="hostS2" url="192.168.126.129:3306" user="root" password="root" />
</writeHost>
6.上传配置文件
(1)删除原有配置文件信息,rm -rf schema.xml server.xml
(2)上传新的配置文件到/usr/local/src/mycat/conf/目录下
7.启动mycat服务器,在/usr/local/src/mycat/bin目录下,执行命令: ./mycat start ,通过 ./mycat status 检查mycat-server的状态。
8. 在sts软件中,修改数据源配置
9.负载均衡测试,启动程序连接数据库,检查数据访问是否正常。之后修改从库信息,检查负载均衡是否正确。
(六)数据库的双机热备,注意事项: 搭建之前保证数据库的数据一致(更新操作)!!!
1.双主模式配置
(1)在从库130中检查主库的状态,show master status
(2)在原来的主库129中实现主从挂载
/*我之前是主库 现在是从库*/
CHANGE MASTER TO
MASTER_HOST="192.168.126.130",
MASTER_PORT=3306,
MASTER_user="root",
MASTER_PASSWORD="root",
MASTER_LOG_FILE="mysql-bin.000001",
MASTER_LOG_POS=482;
(3)主从状态检查
/* 启动主从服务*/
start slave
show SLAVE status;
(七)配置数据库高可用
1.什么是数据库高可用?
说明: 当其中有一台数据库宕机之后,用户依然可以正确的访问数据库不受任何影响,(实现了故障迁移).主要数据库能够正常的工作,则重新启动数据库之后则可以实现自动的数据的同步.
2.实现数据库高可用配置
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--name属性是自定义的 dataNode表示数据库的节点信息 jtdb表示逻辑库-->
<schema name="jtdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="jtdb"/>
<!--定义节点名称/节点主机/数据名称-->
<dataNode name="jtdb" dataHost="localhost1" database="jtdb" />
<!--参数介绍-->
<!--balance 0表示所有的读操作都会发往writeHost主机 -->
<!--1表示所有的读操作发往readHost和闲置的主节点中-->
<!--writeType=0 所有的写操作都发往第一个writeHost主机-->
<!--writeType=1 所有的写操作随机发往writeHost中-->
<!--dbType 表示数据库类型 mysql/oracle-->
<!--dbDriver="native" 固定参数 不变-->
<!--switchType=-1 表示不自动切换, 主机宕机后不会自动切换从节点-->
<!--switchType=1 表示会自动切换(默认值)如果第一个主节点宕机后,Mycat会进行3次心跳检测,如果3次都没有响应,则会自动切换到第二个主节点-->
<!--并且会更新/conf/dnindex.properties文件的主节点信息 localhost1=0 表示第一个节点.该文件不要随意修改否则会出现大问题-->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!--心跳检测策略-->
<heartbeat>select 1</heartbeat>
<!--配置第一台主机主要进行写库操作,在默认的条件下Mycat主要操作第一台主机在第一台主机中已经实现了读写分离.因为默认写操作会发往137的数据库.读的操作默认发往141.如果从节点比较忙,则主节点分担部分压力.
-->
<writeHost host="hostM1" url="192.168.126.129:3306" user="root" password="root">
<!--读数据库1-->
<readHost host="hostS1" url="192.168.126.130:3306" user="root" password="root" />
<!--读数据库2-->
<readHost host="hostS2" url="192.168.126.129:3306" user="root" password="root" />
</writeHost>
<!--定义第二台主机 由于数据库内部已经实现了双机热备.-->
<!--Mycat实现高可用.当第一个主机137宕机后.mycat会自动发出心跳检测.检测3次.-->
<!--如果主机137没有给Mycat响应则判断主机死亡.则回启东第二台主机继续为用户提供服务.-->
<!--如果137主机恢复之后则处于等待状态.如果141宕机则137再次持续为用户提供服务.-->
<!--前提:实现双机热备.-->
<writeHost host="hostM2" url="192.168.126.130:3306" user="root" password="root">-
<!--读数据库1-->
<readHost host="hostS1" url="192.168.126.130:3306" user="root" password="root" />
<!--读数据库2-->
<readHost host="hostS2" url="192.168.126.129:3306" user="root" password="root" />
</writeHost>
</dataHost>
</mycat:schema>