Linux系统和Dubbo框架
Nginx
Nginx介绍:
Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是一款轻量级的web服务器/反向代理服务器及电子邮件代理服务器,在BSD-like协议下发行。特点是占用内存少,并发能力强。使用nginx的用户有:百度,淘宝,京东等。
\1. Nginx主要是为了反向代理(Http)
\2. 负载均衡
服务器负载均衡有三大基本Feature(特征):负载均衡算法,健康检查和会话保持,
\3. Nginx主要搭建在公司网关服务器上
集群部署原理
![img](https://i-blog.csdnimg.cn/blog_migrate/e1364633ce0bdf628b6ede4210035879.png)
nginx相关命令:
1.start nginx : 启动nginx 2.nginx -s nginx : 重启nginx -s任务树 3.nginx -s nginx : 停止nginx
Nginx属性说明
1.down属性:当用户服务器宕机之后需要通过down属性进行标识,nginx不会再将请求发往故障机,最大失败次数为1 , down属性的周期为60s
2.backup属性:backup用来标识备用机,当主服务器宕机或者主服务器遇亡时请求备用机
3.tomcat高可用机制:当Tomcat服务器发生宕机现象时,由nginx自己判断服务器是否可用 。 如果发现服务器宕机,则自动标识为down。
Linux的介绍以及Linux命令
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
Linux命令的说明:Linux全部都是基于文件的,并且Linux中的目录都是树形结构。分为绝对路径和相对路径:绝对路径是从根目录开始,相对路径是从当前文件开始。
cd命令集
ifconfig/ip addr : 检查IP地址 pwd : 检查当前的位置 tab键 : 自动补齐 cd / : 返回根目录 cd~ : 用户主目录 cd . : 当前目录 cd … : 返回到上一级目录 cd /url/ : 进入到url目录 cd - : 返回上一个目录(从那里来到那里去) cd : 直接回家
ls目录文件
ls -l 详细格式,文件权限,时间
ll 和 ls -l 作用相同 ls *.txt 查看所有的txt类型文档
目录操作
mkdir a 创建a目录 mkdir -p a/b
创建a目录,并在a目录里创建b目录
mkdir -m 777 c
创建一个权限为777的c目录
rmdir
删除目录(目录里有文件就不能用此命令)
Vi/vim 创建/查看/编辑文件
命令行 :Esc切换到命令行模式。
编辑模式:按i,在光标前开始编辑
按a,在光标后开始编辑
按o,在当前行的下一行开始编辑
按u, 撤销之前的操作
底行模式:按 shift+:冒号。
:q! 不保存退出
:wq 保存退出
:/world 从当前光标处,向上查找world关键字
:?world 从当前光标处,向后查找world关键字
删除文件
rm n.txt
提示y删除n放弃 rm -rf dirname
不提示递归删除目录下所有内容 rm -rf *
删除所有文件
复制和移动文件
cp nginx.conf n.txt
复制nginx.conf文件并把文件名改为n.txt`
cp nginx.conf n.txt
cp –R tomcat1 tomcat2
#复制整个目录
mv 修改文件名,移动文件
mv n.txt m.txt
修改文件名称
打包命令(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配置
上传JDK到/usr/local/src/目录下
解压JDK : tar -xvf jdk-8u51…
删除jdk : rm jdk-8u51-linux-x64.tar.gz
修改jdk文件名称 :vim jdk1.8.0_51 jdk1.8 jdk版本 : java -version
配置jdk环境 vim/etc/profile
source/etc/profile
环境变量生效
安装Mysql数据库
下载MariaDB数据库(在usr/local/src目录下安装)
1)确认连接外网时 ping www.baidu.com
2)安装mariadb数据库 yum install mariadb-server 确认下载 y
yum clean all 清空安装文件
4)数据库启动命令
1.启动命令 [root@localhost src]#systemctl start mariadb
- 重启命令 [root@localhost src]#
systemctl restart mariadb
- 关闭命令 [root@localhost src]#
systemctl stop mariadb
- 设定开机自起 [root@localhost src]#
systemctl enable mariadb
- 关闭开机自起 [root@localhost src]#
systemctl disable mariadb
5)数据库初始化操作
命令mysql_secure_installation
然后一直按Y
6)修改mysql库中user表的localhost字段为%
配置Linux防火墙策略
1)检查防火墙状态 命令firewall-cmd --state
2)防火墙配置 需求 告诉Linux系统以后开机不需要启动防火墙
命令systemctl enable firewalld.service
3)手动关闭或开启防火墙
systemctl stop firewalld.service
关闭 systemctl
stsrt firewalld.service 停止
手动开放防火墙端口
1). 检查防火墙开放的端口 firewall-cmd --list-ports
2).检查端口是否开放 firewall-cmd --query-port 80/tcp
3). 开启防火墙 firewall-cmd --zone=public --add-port=80/tcp --permanent
4).移除端口 firewall-cmd --zone=public --remove-port=9090/tcp --permanent
可以连接mysql主机了
Linux脚本
1)优化 编辑Linux脚本实现批量启动 命令nohup java -jar 8081.war -> 8081.log &
2)编辑shell脚本命令vim start.sh
运行脚本sh start.sh
查看war包jps
由于 nginx主要的作用 1.负载均衡 2.完成反向代理 由于图片在Linux的磁盘中,所以必须通过Nginx方式进行反向代理.
Nginx安装步骤
1)上传到指定目录中 /usr/local/src 并解压Nginx压缩文件 命令tar -xvf nginx-1.19...
或者手动下载Nginx安装包 wget http://nginx.org/download/nginx-1.19.8.tar.gz
2)移动安装目录到指定文件 命令mv nginx-1.19...tar.gz software/
3)修改文件名 mv nginx-1.19.4 nginx-source
4)安装nginx服务器(说明:在nginx-source的根目录中执行如下命令)
1)./configure
2)make
编译C语言的程序 3)make install
安装nginx 4)whereis nginx
安装位置
5)nginx命令 在/usr/local/nginx/sbin目录下启动命令
./nginx
启动 ./nginx -s reload
重启 ./nginx -s stop
停止
6)调试:在浏览器输入你的IP地址 出现Welcome ti nginx表示ok
nginx实现反向代理
1)业务需求
1).实现图片代理 域名: image.jt.com
2).实现tomcat服务器负载均衡 域名: manage.jt.com
2)编辑配置文件(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 / {
proxy_pass http://tomcats;
}
}
#配置集群
upstream tomcats {
#内网IP
server 192.168.126.129:8081;
#本机IP
server 127.0.0.1:8082;
}
3)编辑HOSTS文件
![img](https://i-blog.csdnimg.cn/blog_migrate/dbb2148f576bb5601f17fbfed3cb8e3c.png)
准备两台Linux系统
修改IP地址参见博客文档
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aIegKpcm-1617350769409)(C:\Users\uid\AppData\Roaming\Typora\typora-user-images\image-20210313100209180.png)]
关于数据库优化
数据库冷备份
定期有人工手动的将数据库的信息进行导出操作.
弊端: 备份不是实时的. 数据可能丢失.
意义: 数据库冷备份 是公司恢复数据最后有效的手段
数据库热备份
原理:当数据库新增数据时,首先完成数据库操作,并且将新增的数据写入到二进制日志文件中.
数据库从库,通过HOST/PORT/USER/PASSWORD/文件名称/POS(位置),读取主库二进制文件信息.之后将数据写入到从库的中继日志中保存.
数据库从库,启动Sql线程,将中继日志中的文件实时的写入从库中,至此实现了数据库主从同步.
实现数据库主从挂载
1)在主库中修改mysql环境配置 命令vim /etc/mysql
只添加两句: 指定服务编号:server-id=1 文件名称 : log-bin=mysql-bin
2)重启数据库
命令systemctl restart mariadb
3)检查二进制文件是否有效 ls命令(有出现mysql-bin.0000001)就证明可以了
开启从库二进制日志文件
操作方式与上述相同,唯一变化的就是 server-id=2
命令: vim /etc/my.cnf
实现数据库主从挂载
1)在sqlyogApp中检查主库的状态信息
SHOW MASTER STATUS;
2)从库挂载
/*1.实现主从的挂载 host/port/user/pass/文件名称/位置 */
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;
/*2.启动主从服务*/
START SLAVE;
/*3.检查主从状态*/
SHOW SLAVE STATUS;
/*但凡有报错信息 检查日志 io_error 数据库记得重启*/
STOP SLAVE;
/*重置主从结构*/
RESET SLAVE;
/*重新挂载服务*/
检查主从状态
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eJ6HojNO-1617350769412)(C:\Users\uid\AppData\Roaming\Typora\typora-user-images\image-20210313103543946.png)]
Mycat是活跃的、性能好的开源数据库中间件
Mycat特性
1.支持前端作为MySQL通用代理
2.后端JDBC方式支持Oracle,DB2,SQL Server,mongodb,巨杉
3.基于心跳的自动故障切换,支持读写分离
支持MySQL Cluster,Galera,Percona,cluster集群
支持数据的多片自动路由与聚合
支持sum,count,max等常用的聚合函数,支持跨库分页
支持库内分表,支持单库内部任意join全局表,支持跨库2表join
基于caltlet的多表join
支持通过全局表,ER关系的分片策略,实现了高效的多表join查询
Mycat发布
1)进入 /usr/local/src/mycat/bin
启动mycat命令 ./mycat
2)状态检查命令./mycat start
./mycat status
3).日志检查 根据报错提示 检查问题
cat wrapper.log
cat mycat.log
实现数据库高可用
1)业务说明: 当数据库发生宕机的现象,则直接影响用户的使用,最好的解决的策略,实现数据库高可用。前提条件:必须实现数据库主从同步
2)数据库同步策略 : 把之前的主库改为从库,从库改为主库
3)双击热备说明 : 2台数据库同时互为主从结构,称之为双击热备的形式(2台数据库同时都是主机/从机)
关于缓存机制说明
说明: 缓存中的数据都是 数据库中的记录 ,引入缓存机制之后,主要的目的为了降低用户访问物理设备的频次,提高服务器响应效率。维度说明:
1).开发语言: C语言开发
2).数据结构问题: K-V结构 map/properties key不能重复
3).内存数据 断电及擦除: 定期将内存数据持久化操作
4).内存资源有效: 如何有效的维护内存大小? 定期清理内存. LRU算法/LFU算法/TLL算法
Redis介绍
Redis是一个开源的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如字符串(strings),散列(hashes),列表(lists),集合(sets),有序集合(sorted sets)与范围查询,bitmaps,hyperloglogs和地理空间(geospatial)索引半径查询。Redis内置了复制(replication)LUA脚本(Lua scripting),LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
速度: 读: 11.2万次/秒 写: 8.6万次/秒 平均10万次/秒
Redis安装步骤
1)上传Redis安装包到/usr/local/src目录下 2)解压文件tar -xvf redis-5.0.4.tar.gz
rm -f redis- 5.0.4.tar.gz
mv redis-5.0.4 redis
2)安装redis 修改redis.conf配置文件命令vim redis.conf
展示行号:set nu
1)关闭Ip绑定69行
2).关闭保护模式88行把yes改为no
3).开启后台运行136行把no改为yes
Redis启动命令
1)在/usr/local/src/redis目录下启动redis命令redis-server redis.conf
- j进入redis客户端命令
redis-cli -p 6379
3)先退出redis客户端exit
然后再关闭redis命令redis-cli -p 6379 shutdown
关于Redis 持久化机制
持久化: 将内存数据定期保存到磁盘中.
RDB模式说明
1.Redis 定期 将内存数据保存到RDB文件中.
2.RDB模式 redis默认的规则.
3.RDB模式记录的是内存数据的快照 ,持久化效率更高(只保留最新数据)
4.RDB模式由于定期持久化,可能导致数据丢失.
AOF模式说明
1)默认条件下AOF模式 默认关闭的.
2)当开启AOF策略之后,redis持久化以AOF为主.
特点:
\1. AOF文件默认关闭的,需要手动开启
\2. AOF文件记录的是用户的操作过程.则可以实现实时持久化操作.(几乎不丢数据)
\3. AOF文件做追加的操作,所有持久化文件较大.
\4. AOF持久化时,采用异步的方式进行.
\5. AOF文件需要定期清理.
关于AOF与RDB如何选择
1.如果用户追求速度,允许少量的数据丢失 首选RDB模式. 快
2.如果用户追求数据的安全性. 首选AOF模式.
关于Redis缓存常见面试题
1)缓存穿透:在高并发的条件下,用户频繁访问一个不存在的数据.导致大量的请求直接发往数据库.导致服务器宕机.解决方案:\1. 只要能够保障用户访问的数据 数据库中一定存在. 布隆过滤器\2. IP限流 黑名单. 微服务中可以通过API网关进行控制 。 2)缓存击穿:在高并发条件下 用户频繁访问一个热点数据. 但是该热点数据在缓存中失效.导致用户直接访问数据库. 。 3)缓存雪崩:在高并发的条件下, 有大量的缓存数据失效了. 导致redis缓存服务器命中率太低.从而导致用户直接访问数据库.解决方案:1.为热点数据设定超时时间时 采用随机数. 10秒+随机数 保障数据不会同时失效.\2. 设定多级缓存
布隆过滤器
它是一个很长的二进制向量和一系列随机函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好得多,缺点是有一定的误识别率和删除困难。
布隆过滤器原理
原理:用户发一个请求到布隆数据库,有它进行校验数据是否存在,然后返回给用户。
核心1: 很长的二进制向量
核心2: 多个hash函数
解决问题: 校验数据是否存在!!!
数据校验准则:布隆过滤器认为数据不存在的,则一定不在,如果布隆过滤器认为数据存在的,则可能存在
存在问题:好的布隆算法可以将误判率降低到<0.03%
如何降低误判率:1)增加二进制向量数据的长度 2)增加函数个数
Redis分片机制
说明: 如果有海量的内存数据需要保存,但是都把数据保存到1个redis中,查询的效率太低.如果这台redis服务器宕机,.则整个缓存将不能使用.
解决方案: 采用redis分片机制.
Redis哨兵机制
关于Redis分片特点
Redis分片可以实现内存数据的扩容,但是如果节点宕机则直接影响程序的运行.
问题关键: 如果节点宕机,需要实现高可用.
Redis哨兵实现的原理
1)当哨兵启动时,会链接redis主节点,获取所有节点的相关信息 2)当哨兵通过心跳检测机制PING-PONG命令校验服务是否正常 3)如果哨兵连续3次发现服务器没有响应,则断定当前主机宕机 4)之后由哨兵采用随机算法挑选其中的一个从机当选主机 , 并且其他的节点当做新主机的从机
哨兵命令
1.启动 redis-sentinel sentinel.conf
2.关闭哨兵 ps -ef |grep redis kill -9 PID号
关于Redis分片/哨兵总结
1.分片作用:扩大内存实现海量数据的存储 缺点:没有实现高可用
2.哨兵作用:实现了节点的高可用 缺点:1.哨兵没有实现扩容。2.哨兵本身没有高可用想法: 能否有一种机制 既可以实现内存扩容,又可以实现高可用(不需要第三方) 可以通过反射机制。
集群工作原理
就是用多个服务器来处理同一个功能或存储数据(这个有点像分布式(数据备份)),来提高对多用户请求的处理,防止一个服务器处理不过来。一般会通过反向代理(分发请求)来实现集群的功能(nginx:一个反向代理的软件)。
nginx:反向代理软件 1.用户的请求都先到达nginx,nginx再跟据配置计算出把这个请求发到集群里的那个服务器进行处理,nginx再接收它处理完的结果,再把结果返回给用户。
Linux集群主要分成三大类( 高可用集群, 负载均衡集群,科学计算集群)
hash槽算法
说明: RedisCluster采用此分区,所有的键根据哈希函数(CRC16[key]%16384)映射到0-16383槽内,共16384个槽位(2^14次方),每个节点维护部分槽及槽所映射的键值数据.根据主节点的个数,均衡划分区间.
算法:哈希函数: Hash()=CRC16[key]%16384
面试题:1). 如果分区对不同的key hash(key1)= 3000 hash(key2)=3000 问? 算法是否有误? 是否影响数据的存取?
答:不影响 ; 执行过程:存:key1/key2 都归第一个主机node进行管理. redis.set(key1,value1), redis.set(key2,value2);取: key1 hash(key1)=3000 找到node 进行取值操作 redis.get(key1) 结果一定正确
2). redis集群中最多存储16384个数据!!! :错!!
16384只是hash槽位的个数,与存储数量没有必然的联系. 能存储多少 完全由redis内存决定.
3). redis集群中主机的数量有没有要求??? 3-16384台
拦截静态资源.html
通常情况下,需要获取商品信息时,一般采用都是restFul风格, {itemId}.html 要求后端服务器应该拦截.html为结尾的请求即可.
以.html结尾的优势:如果网站页面 以.html为结尾的请求,则该页面更加容易被搜索引擎记录. 通过搜索引擎提高网站的曝光率. 搜索引擎工作原理:使用倒排索引:根据关键字 , 搜索文章的位置
后台服务器拦截策略: 开启配置后缀配置 .html请求时 springmvc才会拦截
关于浏览器同源策略的说明
说明: 浏览器规定 当浏览器解析页面时,当遇到ajax请求时 如果请求与当前页面的 协议://域名:端口号都相同时,则满足同源策略 称之为同域请求.浏览器可以正确解析返回值 请求正常.
如果三者中有一项不同,则把请求称之为叫做跨域请求. 浏览器出于安全性的考虑 则不予解析返回值.
关于跨域的技术
1)HttpClient :支持HTTP协议的客户端编程工具包,java应用程序需要直接通过http协议来访问网络资源,没有经过浏览器,所以它不能进行跨域,它对安全性及业务要求严格。
2)RPC(思想):自己需要完成一项业务,但是由于诸多原因 自己不能直接调用,则通过第三方访问的业务调用称之为RPC.(代理) 。 它解决分布式系统中,服务之间的调用问题。
3)JSONP : 我们通过创建script,然后指定它的src等属性,然后插入到head执行。最基本的jsonp的原理就是在url路径后面加个参数callback
4)CORS(跨域资源共享):是一种基于HTTP头的机制,该机制通过允许服务器标示除了它自己以外的其它origin(域,协议和端口),这样浏览器可以访问加载这些资源。CORS跨域原理:CORS 在响应头中标识哪些网址可以访问服务器.CORS的配置是服务器端的配置和浏览器没关系.
微服务调用的核心机制
步骤:
1.当生产者启动时,会将服务信息(服务名称/服务IP:PORT)写入到注册中心
2.注册中心会动态维护服务列表,定时刷新
3.消费者启动时链接注册中心 , 获取最新的服务数据,之后缓存到本地方便下次调用
4.当用户开始访问消费者时,消费者查询本地的服务列表进行负载均衡,访问其中一个生产者获取数据
5.注册中心通过心跳检测机制,访问生产者,当生产者宕机时,则第一时间更新自己的服务列表,并且全网广播 , 通知所有的消费者更新列表数据。
- ZK选举规则:1.myid的最大值优先 2.超半数同意当选主机
用户登录(单点登录SSO)
单点登录,就是通过用户的一次性鉴别登录,登录一次以后即可获得单点登录系统中其他关联系统和应用软件的权限,可以访问所有相互信任的应用系统。实现该功能主要是为了由登录产生的时间消耗。
实现SSO登录策略
1)用户输入用户名和密码点击登录时传递用户信息到web服务器中,然后web服务器将信息RPC调用到SSO单点登录系统中进行数据校验
2)如果用户名和密码正确就将用户信息保存到redis中。
3)如果用户名和密码正确,则将TICKET信息保存到用户的CooKie中(有效期是7天)
4)当用户重复访问时,则动态获取TICKET信息,之后去Redis缓存中校验数据是否有效,有效则放行,无效拦截
对Shiro框架的认识
shiro 是一个功能强大和易于使用的Java安全框架,为开发人员提供一个直观而全面的解决方案的认证,授权,加密,会话管理
1、shiro主要的功能
三个核心组件:Subject, SecurityManager 和 Realms.
Subject:即“当前操作用户”。但是,在Shiro中,Subject这一概念并不仅仅指人,也可以是第三方进程、后台帐户(Daemon Account)或其他类似事物。它仅仅意味着“当前跟软件交互的东西”。
Subject代表了当前用户的安全操作,SecurityManager则管理所有用户的安全操作。
SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro通过SecurityManager来管理内部组件实例,并通过它来提供安全管理的各种服务。
Realm: Realm充当了Shiro与应用安全数据间的“桥梁”或者“连接器”。也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro会从应用配置的Realm中查找用户及其权限信息。
SOA(面向服务的架构)
面向服务的架构是一个组件模型,它将应用程序的不同功能单元(称之为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来。接口是采用重力的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。
想了解更详细的请访问: https://blog.csdn.net/qq_16804847