目录
9、python 中的 Django 框架,并用 Django 搭建过简单的图书管理系统、文件对比系统等
10、自动化部署过 Apache、Nginx、Tomcat 等网络服务
11、 Apache、Nginx 的配置,例如虚拟主机设定、网页重定向、端口转发、黑白名单等,熟悉 Nginx 等代理软件的工作原理及配置,实现反向代理
12、主流的高可用架构(Nginx、Haproxy、LVS 负载均衡+keepalived)的部署
13、mysql 的主从复制、半同步复制、组复制、高可用原理、索引、引擎
一、技能方面
1、linux基础
https://blog.csdn.net/weixin_46833747/article/details/108052438 高频命令合集(top、ps、tar、ls、mkdir)
https://blog.csdn.net/weixin_46833747/article/details/108230122 iptables三表五链
https://blog.csdn.net/weixin_46833747/article/details/108228180 文本处理三剑客实操
https://blog.csdn.net/weixin_46833747/article/details/107120593 文本三剑客基础
2、网络方面知识
https://blog.csdn.net/weixin_46833747/article/details/107563947 四层、五层、七层模型
https://blog.csdn.net/weixin_46833747/article/details/107913765 http状态码
https://blog.csdn.net/weixin_46833747/article/details/108156267 dns解析 访问url过程 拥塞控制 流量控制
https://blog.csdn.net/weixin_46833747/article/details/108308113 http、https、http1.0 1.1 2.0、close_wait、粘包
https://blog.csdn.net/weixin_46833747/article/details/107775859 三次握手、四次挥手
https://blog.csdn.net/weixin_46833747/article/details/108559433 cookie session,buffer、cache,get、post,TCP流量控制,拥塞控制,进程、线程,负载与cpu使用率,硬链接软连接,系统启动,raid,查看进程使用,五种I/O模型
3、DNS
1)什么是DNS?
域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的
一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制
是63个字符,域名总长度则不能超过253个字符。
2)DNS解析过程?
1.浏览器检查缓存种有没有这个域名对应的解析过的ip地址,如果有该解析过程将会结束。
2.检查本地的hosts文件是否有这个网址映射关系
3.如果hosts种没有这个域名映射,查找本地DNS解析器缓存,如果有直接返回
4.通过首选DNS服务器(本地域名服务器),以递归或循环的方式查询域名对应的ip地址并返回。(顶级域,二级域,三级域)
先递归:
1、浏览器缓存
2、/etc/hosts
3、/etc/resolv.conf
再迭代:
本地域名服务器--->顶级域--->二级域--->三级域
3)DNS架构
关于域名的层次结构,如下图所示:
比如:www.baidu.com
1. com: 一级域名. 表示这是一个企业域名。同级的还有 “net”(网络提供商), “org”(⾮非盈利组织) 等。
2. baidu: 二级域名,指公司名。
3. www: 只是一种习惯用法。
4)DNS劫持
DNS劫持 就是通过劫持了 DNS 服务器,通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致对该域名的访问由原 IP 地址转入到修改后的指定 IP,其结果就是对特定的网址不能访问或访问的是假网址,从而实现窃取资料或者破坏原有正常服务的目的。DNS劫持 通过篡改 DNS 服务器上的数据返回给用户一个错误的查询结果来实现的。
DNS劫持 症状:某些地区的用户在成功连接宽带后,首次打开任何页面都指向 ISP 提供的“电信互联星空”、“网通黄页广告”等内容页面。还有就是曾经出现过用户访问 Google 域名的时候出现了百度的网站。这些都属于 DNS劫持。
对于 DNS劫持,可以通过手动更换 DNS 服务器为 公共DNS 解决。
DNS劫持手段
-
利用DNS服务器进行DDOS攻击
正常的DNS服务器递归查询过程可能被利用成DDOS攻击。假设攻击者已知被攻击机器的IP地址,然后攻击者使用该地址作为发送解析命令的源地址。这样当使用DNS服务器递归查询后,DNS服务器响应给最初用户,而这个用户正是被攻击者。那么如果攻击者控制了足够多的肉鸡,反复的进行如上操作,那么被攻击者就会受到来自于DNS服务器的响应信息DDOS攻击。
攻击者拥有着足够多的肉鸡群,那么就可以使被攻击者的网络被拖垮至发生中断。利用DNS服务器攻击的重要挑战是,攻击者由于没有直接与被攻击主机进行通讯,隐匿了自己行踪,让受害者难以追查原始的攻击来。
-
DNS缓存感染
攻击者使用DNS请求,将数据放入一个具有漏洞的的DNS服务器的缓存当中。这些缓存信息会在客户进行DNS访问时返回给用户,从而把用户客户对正常域名的访问引导到入侵者所设置挂马、钓鱼等页面上,或者通过伪造的邮件和其他的server服务获取用户口令信息,导致客户遭遇进一步的侵害。
-
DNS信息劫持
TCP/IP体系通过序列号等多种方式避免仿冒数据的插入,但入侵者如果通过监听客户端和DNS服务器的对话,就可以猜测服务器响应给客户端的DNS查询ID。每个DNS报文包括一个相关联的16位ID号,DNS服务器根据这个ID号获取请求源位置。攻击者在DNS服务器之前将虚假的响应交给用户,从而欺骗客户端去访问恶意的网站。假设当提交给某个域名服务器的域名解析请求的DNS报文包数据被截获,然后按截获者的意图将一个虚假的IP地址作为应答信息返回给请求者。原始请求者就会把这个虚假的IP地址作为它所要请求的域名而进行访问,这样他就被欺骗到了别处而无妨连接想要访问的那个域名。
-
DNS重定向
攻击者将DNS名称查询重定向到恶意DNS服务器上,被劫持域名的解析就完全在攻击者的控制之下。
-
ARP欺骗
ARP攻击就是通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞,攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目,造成网络中断或中间人攻击。ARP攻击主要是存在于局域网网络中,局域网中若有一台计算机感染ARP病毒,则感染该ARP病毒的系统将会试图通过”ARP欺骗”手段截获所在网络内其它计算机的通信信息,并因此造成网内其它计算机的通信故障。
ARP欺骗通常是在用户局网中,造成用户访问域名的错误指向。如果IDC机房也被ARP病毒入侵后,则也可能出现攻击者采用ARP包压制正常主机、或者压制DNS服务器,以使访问导向错误指向的情况。
-
本机劫持
本机的计算机系统被木马或流氓软件感染后,也可能会出现部分域名的访问异常。如访问挂马或者钓鱼站点、无法访问等情况。本机DNS劫持方式包括hosts文件篡改、本机DNS劫持、SPI链注入、BHO插件等方式。
5)智能DNS
智能NDS又称为解析切割,是对请求DNS解析的IP地址进行判断,将域名解析成不同的IP地址
一般智能DNS应用常见的场景就是CDN,中国特色的网络结构,就是联通和电信,二者通过在北京的机房的100G的宽带相连,这就导致了电信访问联通的会非常慢,所以CDN的原理就在智能DNS基础上进行web反向代理缓存实现的,通过不同地域的请求解析到对应的缓存服务器上,然后缓存服务器对主服务器进行数据请求,最终返回给客户,这对静态网页的网站非常有用
6)什么是A记录?
A (Address) 记录是用来指定主机名(或域名)对应的IP地址记录。用户可以将该域名下的网站服务器指向到自己的web server上。同时也可以设置自己域名的二级域名。
7)什么是CNAME记录?
即:别名记录。这种记录允许您将多个名字映射到另外一个域名。通常用于同时提供WWW和MAIL服务的计算机。例如,有一台计算机名为“host.mydomain.com”(A记录)。它同时提供WWW和MAIL服务,为了便于用户访问服务。可以为该计算机设置两个别名(CNAME):WWW和MAIL。这两个别名的全称就 http://www.mydomain.com/和“mail.mydomain.com”。实际上他们都指向“host.mydomain.com”。
8)使用A记录和CNAME进行域名解析的区别
A记录就是把一个域名解析到一个IP地址(Address,特制数字IP地址),而CNAME记录就是把域名解析到另外一个域名。其功能是差不多,CNAME将几个主机名指向一个别名,其实跟指向IP地址是一样的,因为这个别名也要做一个A记录的。但是使用CNAME记录可以很方便地变更IP地址。如果一台服务器有100个网站,他们都做了别名,该台服务器变更IP时,只需要变更别名的A记录就可以了。
9)使用A记录和CNAME哪个好?
域名解析CNAME记录A记录哪一种比较好?如果论对网站的影响,就没有多大区别。但是:CNAME有一个好处就是稳定,就好像一个IP与一个域名的区别。服务商从方便维护的角度,一般也建议用户使用CNAME记录绑定域名的。如果主机使用了双线IP,显然使用CNAME也要方便一些。
A记录也有一些好处,例如可以在输入域名时不用输入WWW.来访问网站哦!从SEO优化角度来看,一些搜索引擎如alex或一些搜索查询工具网站等等则默认是自动去掉WWW.来辨别网站,CNAME记录是必须有如:WWW(别名)前缀的域名,有时候会遇到这样的麻烦,前缀去掉了默认网站无法访问。
有人认为,在SEO优化网站的时候,由于搜索引擎找不到去掉WWW.的域名时,对网站权重也会有些影响。因为有些网民客户也是不喜欢多写三个W来访问网站的,网站无法访问有少量网民客户会放弃继续尝试加WWW.访问域名了,因此网站访问浏览量也会减少一些。
10)全世界有多少根DNS?
13个,其中10个在美国,英国和瑞典各1个,日本1个。
有被问到中国大陆有没有根DNS。回答亚洲有一台。
11)DNS何时使用TCP协议,何时使用UDP协议?
DNS在进行区域传输的时候使用TCP协议,其它时候则使用UDP协议。
DNS的规范规定了2种类型的DNS服务器,一个叫主DNS服务器,一个叫辅助DNS服务器。
在一个区中主DNS服务器从自己本机的数据文件中读取该区的DNS数据信息,而辅助DNS服务器则从区的主DNS服务器中读取该区的DNS数据信息。当一个辅助DNS服务器启动时,它需要与主DNS服务器通信,并加载数据信息,这就叫做区传送(zone transfer)。
为什么既使用TCP又使用UDP?
首先了解一下TCP与UDP传送字节的长度限制:
UDP报文的最大长度为512字节,而TCP则允许报文长度超过512字节。当DNS查询超过512字节时,协议的TC标志出现删除标志,这时则使用TCP发送。通常传统的UDP报文一般不会大于512字节。
区域传送时使用TCP,主要有一下两点考虑:
- 辅助域名服务器会定时(一般是3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,则会执行一次区域传送,进行数据同步。区域传送将使用TCP而不是UDP,因为数据同步传送的数据量比一个请求和应答的数据量要多得多。
- TCP是一种可靠的连接,保证了数据的准确性。
域名解析时使用UDP协议
客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。不用经过TCP三次握手,这样DNS服务器负载更低,响应更快。
虽然从理论上说,客户端也可以指定向DNS服务器查询的时候使用TCP,但事实上,很多DNS服务器进行配置的时候,仅支持UDP查询包。
4、DHCP
1)什么是DHCP?
DHCP(动态主机配置协议)是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。默认情况下,DHCP作为Windows Server的一个服务组件不会被系统自动安装,还需要管理员手动安装并进行必要的配置。DHCP协议采用UDP作为传输协议,主机发送请求消息到DHCP服务器的67号端口,DHCP服务器回应应答消息给主机的68号端口。
2)DHCP的作用与应用场景
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)通常被应用在大型的局域网络环境中,主要作用是集中的管理、分配IP地址,使网络环境中的主机动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。
3)DHCP分配地址的方式
(1) 自动分配方式(Automatic Allocation),DHCP服务器为主机指定一个永久性的IP地址,一旦DHCP客户端第一次成功从DHCP服务器端租用到IP地址后,就可以永久性的使用该地址。
(2) 动态分配方式(Dynamic Allocation),DHCP服务器给主机指定一个具有时间限制的IP地址,时间到期或主机明确表示放弃该地址时,该地址可以被其他主机使用。
(3) 手工分配方式(Manual Allocation),客户端的IP地址是由网络管理员指定的,DHCP服务器只是将指定的IP地址告诉客户端主机。 [
三种地址分配方式中,只有动态分配可以重复使用客户端不再需要的地址。
4)DHCP工作原理
DHCP协议采用UDP作为传输协议,主机发送请求消息到DHCP服务器的67号端口,DHCP服务器回应应答消息给主机的68号端口。详细过程如下:
四步租约:
①客户机请求IP(客户机发DHCPDISCOVER广播包);
②服务器响应(服务器发DHCPOFFER广播包);
③客户机选择IP(客户机发DHCPREQUEST广播包);
④服务器确定租约(服务器发DHCPACK/DHCPNAK广播包)。
5)DHCP搭建过程
服务端:
1.rpm -ivh dhcp-server-4.3.6-30.el8.x86_64.rpm 安装dhcp服务器
2.编辑dhcp配置文件
3.重启服务,查看状态
客户端:
1.编辑网卡静态文件
2.重启网络服务,自动获得ip
服务端查看分派的ip
5、NFS
原理
NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
NFS包括两部分,服务端及客户端
由于NFS服务功能很多,会有很多端口,这些端口还有可能不固定,那么客户端就无法与服务器进行通信,因为程序间通信必须通过端口(tcp/udp都是端到端通信),那么就需要一个中间的桥接机制,RPC进程即充当这样一个角色,RPC的端口是一定的(111),当NFS启动时,会向RPC进行注册, 那么客户端PRC就能与服务器RPC进行通信, 从而进行文件的传输。
当客户端用户打开一个文件或目录时,内核会判断,该文件是本地文件还是远程共享目录文件,如果是远程文件则通过RPC进程访问远程NFS服务端的共享目录,如果是本地文件,则直接打开。
为了更好的并发,RPC进程及NFS进程都有多个。
NFS的搭建
首先确保服务端与客户端的火墙与selinux是关闭的
服务端
[root@server1 ~]# mkdir nfs_test #创建测试目录
[root@server1 ~]# vim /etc/exports #在配置文件中写入要共享的目录及权限
[root@server1 ~]# cat /etc/exports
/nfs_test 172.25.1.0/24(rw,sync)
[root@server1 ~]# exportfs -rv #使共享文件生效
[root@server1 ~]# chmod 777 nfs_test/ #授权,使得客户端对文件可进行读写
[root@server1 ~]# systemctl start nfs-server.service #开启服务
客户端
[root@server2 ~]# mkdir /nfs_test/ #创建与共享目录名称相同的目录以便挂载
[root@server2 ~]# showmount -e 172.25.1.1 #查看共享目录
Export list for 172.25.1.1:
/nfs_test 172.25.1.0/24
[root@server2 ~]# mount 172.25.1.1:/nfs_test/ /nfs_test/ #进行挂载
[root@server2 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 17G 8.5G 8.6G 50% /
devtmpfs 966M 0 966M 0% /dev
tmpfs 982M 0 982M 0% /dev/shm
tmpfs 982M 11M 972M 2% /run
tmpfs 982M 0 982M 0% /sys/fs/cgroup
/dev/sr0 4.2G 4.2G 0 100% /iso
/dev/sda1 1014M 179M 836M 18% /boot
tmpfs 197M 4.0K 197M 1% /run/user/42
tmpfs 197M 20K 197M 1% /run/user/0
172.25.1.1:/nfs_test 17G 4.3G 13G 26% /nfs_test
[root@server2 ~]# cd /nfs_test/
[root@server2 nfs_test]# ls
[root@server2 nfs_test]# touch sss #写操作成功,且写入的文件服务端可见,反之亦然
[root@server2 nfs_test]# ls
sss
6、FTP
ftp:(File Transfer Protocol,文件传输协议) FTP 是 TCP/IP 协议组中的协议之一,互联网中最老牌的文件传输协议。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。
https://blog.csdn.net/weixin_46833747/article/details/106341733
服务端:
dnf install vsftpd -y
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES 启动匿名用户的访问功能
systemctl restart vsftpd
客户端:
lftp ip
7、shell 脚本的编写
shell脚本基础知识(test中各种符号)
https://blog.csdn.net/weixin_46833747/article/details/107028615
基础脚本(显示ip、登录用户,清空日志,用户控制)
https://blog.csdn.net/weixin_46833747/article/details/107160543#%E7%BB%83%E4%B9%A05%EF%BC%9A
判断目录存在、路径是否有效、ip是否能ping通,自动搭建服务apache等
https://blog.csdn.net/weixin_46833747/article/details/107321546
8、python 实现过简单的冒泡排序、插入排序、快速排序
1)Bubble Sort(冒泡排序)
过程:
1. 从0位置开始,比较相邻两个数的大小,如果后面的数小于前面,则交换位置。
2. 遍历一遍下来,最后一个数为整个数组中的最大值。
3. 把最后一个数排除,继续比较剩下的数组。
4. 总共比较次数为N*N,时间复杂度为O(n²)
def bubble_sort(blist):
count = len(blist)
for i in range(0, count):
for j in range(i + 1, count):
if blist[i] > blist[j]:
blist[i], blist[j] = blist[j], blist[i]
return blist
blist = bubble_sort([4, 5, 6, 7, 3, 2, 6, 9, 8])
print(blist)
2)插入排序
过程:
1.从1位置开始,比较与前面数的大小,如果小于前面的数,则交换位置,直到不再小于停止。
2.接着从2位置开始,重复这个过程。直到最后位置为止。
3.时间复杂度取决于数组的排序情况,当数组基本有序时候,复杂度很低,接近O(n)。当数组完全无序时,每个数都要经过多次移动,复杂度趋近于O(n²)。
def insert_sort(ilist):
for i in range(len(ilist)):
for j in range(i):
if ilist[i] < ilist[j]:
ilist.insert(j, ilist.pop(i))
break
return ilist
ilist = insert_sort([4,5,6,7,3,2,6,9,8])
print ilist
3)Quick Sort(快速排序)
快速排序是一种很重要也很常用的排序,也有一些很重要的应用,比如说BFPRT算法,荷兰国旗问题。
快速排序如果每次都选到最大值,或者最小值,就会产生最坏的情况,使复杂度达到O(n²)级别。但是可以通过随机选择partition值,从数学期望上避免这种情况的发生。所以可以默认其复杂度为O(N * lg N)。
一般默认快速排序是非稳定的。
过程:
1.随机选出一个partition值,把大于partition值的放在它右边,小于它的放在它左边。
2.从partition值的左右两边分割,调用自己,开始递归。
3.这里有一点优化,因为partition值在数组中可能不止一个,因此返回一个长度为2的数组,代表partition的左右边界,从边界两端进行递归,更加快速。
def quick_sort(qlist):
if qlist == []:
return []
else:
qfirst = qlist[0]
qless = quick_sort([l for l in qlist[1:] if l < qfirst])
qmore = quick_sort([m for m in qlist[1:] if m >= qfirst])
return qless + [qfirst] + qmore
qlist = quick_sort([4,5,6,7,3,2,6,9,8])
print (qlist)
9、python 中的 Django 框架,并用 Django 搭建过简单的图书管理系统、文件对比系统等
https://blog.csdn.net/weixin_46833747/article/details/107768423 Django常见面试题
10、自动化部署过 Apache、Nginx、Tomcat 等网络服务
nginx
firefox http://nginx.org/en/download.html 下载nginx1.18.0
tar zxf nginx-1.18.0.tar.gz
cd nginx-1.18.0/
yum install gcc -y 安装依赖项
yum install pcre-devel
yum install -y openssl-devel
./configure --prefix=/usr/local/nginx --with-http_ssl_module
make
make install
cd /usr/local/nginx/sbin/
./nginx -v
./nginx -t
./nginx
netstat -antlp|grep :80
tomcat
tomcat部署:
yum insatll jdk-8u121-linux-x64.rpm
tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local
cd /usr/local/
ln -s apache-tomcat-7.0.37/ tomcat 制作软连接
cd /usr/local/tomcat/webapps/ROOT
vim test.jsp
cd /tomcat/bin/
sh startup.sh
11、 Apache、Nginx 的配置,例如虚拟主机设定、网页重定向、端口转发、黑白名单等,熟悉 Nginx 等代理软件的工作原理及配置,实现反向代理
https://blog.csdn.net/weixin_46833747/article/details/108121893 Nginx总结
12、主流的高可用架构(Nginx、Haproxy、LVS 负载均衡+keepalived)的部署
https://blog.csdn.net/weixin_46833747/article/details/107849336 负载均衡
13、mysql 的主从复制、半同步复制、组复制、高可用原理、索引、引擎
https://blog.csdn.net/weixin_46833747/article/details/108394728 mysql各种复制+索引+引擎
https://blog.csdn.net/ThinkWon/article/details/104778621 mysql大全
https://blog.csdn.net/weixin_46833747/article/details/108519180#zabbix%E7%9B%91%E6%8E%A7NGINX redis项目
https://blog.csdn.net/Aimee_c/article/details/106204002 redis+mysql具体流程
https://blog.csdn.net/weixin_46833747/article/details/108140487#redis%E7%9A%84%E4%B8%BB%E4%BB%8E%E5%A4%8D%E5%88%B6 redis主从复制、高可用、集群
https://blog.csdn.net/weixin_46833747/article/details/108175589 redis大全
14、CDN 架构原理、流量模型等
https://blog.csdn.net/weixin_46833747/article/details/108564214
讲解CDN逻辑:
CDN是干啥的(提高访问速度)
CDN的原理(域名--->本地DNS--->特殊DNS服务器返回最近的CDN的ip--->调度至最近的CDN--->CDN用缓存实现加速)
CDN存储的资源(静态资源:图片、视频)
CDN的架构
15、zabbix 等监控软件部署、配置与维护
https://blog.csdn.net/qq_35887546/article/details/104857783 zabbix基础(特点、组件、通讯方式)
https://blog.csdn.net/weixin_46833747/article/details/108324555 zabbix主动被动、自定义发现、与naigos、open-falcon对比
https://blog.csdn.net/weixin_46833747/article/details/108519180#zabbix%E7%9B%91%E6%8E%A7NGINX zabbix监控nginx
16、saltstack、ansible 等自动化部署服务
ansible
https://blog.csdn.net/weixin_46833747/article/details/108441827
saltstack
17、docker
https://blog.csdn.net/weixin_46833747/article/details/108441253 namespace隔离 cgroup限定进程资源使用
https://blog.csdn.net/yrx420909/article/details/105358539 什么是docker
https://blog.csdn.net/yrx420909/article/details/105358294 docker与虚拟机区别
三、项目方面
1、CMDB
1.实验目的
通过编写django框架的各个模块,实现对存活主机信息扫描,并以网页方式呈现给用户
2.实验步骤
1.创建本地数据库,将信息写入settings.py,通过models.py定义数据库结构(存储数据类型、需要创建的表),make migrations、migrate到本地数据库中,在admin.py注册数据库,并创建超户后台管理数据库。
2.编写utils封装nmap、telnetlib、paramiko函数,编写views调用三个函数并实现前端与后端的交互。
3.编写urls,主路由调用子路由,子路由调用视图
4.用户通过浏览器输入需要查询的ip,通过post方式传至视图层,视图层将ip在三个函数中遍历,将扫描结果存入数据库,再返回到前端页面,显示给用户
1)创建Django框架,app应用hostinfo。
2)在本地创建数据库,在数据库中创建用户并授权。
3)在settings.py加入app、数据库信息,配置语言、时区
4)配置models.py,定义数据库模型(数据表、后面需要获取到的数据的格式)
5)make migrations生成迁移脚本、migrate将脚本转化为sql语句并在本地数据库中执行,创建相应的库与表
6)创建超户,编辑admin.py实现超户在web界面对后端进行管理。
7)编写utils.py,定义三个函数(nmap探活,telnet探测端口,paramiko远程登录),为views分流
8)整合views.py,使得用户访问http://ip/hostscan/返回一个html页面,用户填写好网段/IP之后,将填写的信息提交给服务器路由处理
9)编写html页面,美化页面(导航栏、对话框、布局等)
10)配置urls,主路由调用admin,子路由调用hostscan app
3.效果
登录页面,输入ip,给出版本信息
4.相关问题
https://blog.csdn.net/weixin_46833747/article/details/107768423
5.项目中遇到的难点
1.Linux中使用mysql需要mysqlclient模块,需安装mysql-devel这个依赖项才可使用。
SQLITE功能简约,小型化,追求最大磁盘效率;MYSQL功能全面,综合化,追求最大并发效率。如果只是单机上用的,数据量不是很大,需要方便移植或者需要频繁读/写磁盘文件的话,就用SQLite比较合适;如果是要满足多用户同时访问,或者是网站访问量比较大是使用MYSQL比较合适。
2.各个模块的探索,以及,views编写的困难,utils的分离
相关问题
https://blog.csdn.net/weixin_46833747/article/details/107768423
2、LVS-DR keepalived
1.实验目的
随着企业信息化的不断发展,需要面对越来越复杂的业务和越来越多样化的用户需求,例如单点故障问题、负载均衡问题。而 LVS+keepalived 构建的高可用负载均衡集群则完美解决了这些问题,提高了运维服务质量。
lvs实现负载均衡 keepalived实现lvs的高可用
2.实验环境
四台主机
server1、2:keepalived
server3、4:apache/nginx
3.步骤简述
1. 设置调度主机工作模式为 DR,调度算法为 rr
调度节点:
ip addr add 172.25.1.100/24 dev eth0
ipvsadm -A -t 172.25.1.100:80 -s rr
ipvsadm -a -t 172.25.1.100:80 -r 172.25.1.3:80 -g
ipvsadm -a -t 172.25.1.100:80 -r 172.25.1.4:80 -g
2. 为调度主机添加备份,并在两台主机上都安装 keepalived,编辑配置文件实现集群高可用
master、pri、vip、后端rs
3. 在真实主机中通过 arptables 将 RS 对 VIP 的响应屏蔽,此时可实现负载均衡,服务配置完毕
rs配置:
yum install -y arptables
arptables -A INPUT -d 172.25.1.100 -j DROP
arptables -A OUTPUT -s 172.25.1.100 -j mangle --mangle-ip-s 172.25.1.3
4.实现效果
调用后端服务器的负载均衡及健康检测
master端keepalived down掉 vip漂移至backup 自动顶上
5.相关问题
四层七层区别、lvs三种模式、十种调度算法
https://blog.csdn.net/weixin_46833747/article/details/107849336
vrrp协议
VRRP是一种容错协议,它既不需要改变组网情况,也不需要在主机上做任何配置,只需要在相关路由器上配置极少的几条命令,就能实现下一跳网关的备份,并且不会给主机带来任何负担。它保证当主机的下一跳路由器出现故障时,由另一台路由器来代替出现故障的路由器进行工作,从而保持网络通信的连续性和可靠性。
工作过程
(1) 虚拟路由器中的路由器根据优先级选举出Master。Master路由器通过发送免费ARP报文,将自己的虚拟MAC地址通知给与它连接的设备或者主机,从而承担报文转发任务;
(2) Master路由器周期性发送VRRP报文,以公布其配置信息(优先级等)和工作状况;
(3) 如果Master路由器出现故障,虚拟路由器中的Backup路由器将根据优先级重新选举新的Master;
(4) 虚拟路由器状态切换时,Master路由器由一台设备切换为另外一台设备,新的Master路由器只是简单地发送一个携带虚拟路由器的MAC地址和虚拟IP地址信息的免费ARP报文,这样就可以更新与它连接的主机或设备中的ARP相关信息。网络中的主机感知不到Master路由器已经切换为另外一台设备。
(5) Backup路由器的优先级高于Master路由器时,由Backup路由器的工作方式(抢占方式和非抢占方式)决定是否重新选举Master。
3、tomcat会话保持
1.项目背景
在交易类的电子商务网站,需要有购物车记录用户的购买信息,用户每次购买请求都是向购物车中增加商品;在社交类的网站中,需要记录用户的当前登录状态、最新发布的消息及好友状态等, 用户每次刷新页面都需要更新这些信息。而基于 nginx+tomcat+memcache 实现的会话保持则完美解决了这些问题,提升了客户体验与运维服务质量。
2.项目目的
同一客户端访问业务网站,经过调度器负载调度到达后端,不管选择的是那个后端,session ID都不变,都保存在两台或多台的memcached缓存中(负载冗余);以保持会话;客户端请求时nginx通过负载调度算法将请求调度至某一后端服务器;并把session存储到两台memcached中;客户端刷新(不换浏览器)时,请求换成另一个后端服务器响应时session ID保持不变;
3.实验环境
server1:nginx调度器
server2、server3:安装tomcat、jdk,编写test.jsp
4.项目流程
1.环境:server1:nginx server2 : tomcat 实验完添加server3:tomcat
编写test.jsp实现用户登录信息页面。使得nginx将对jsp的访问代理至后端tomcat,只开启一个tomcat时,产生的数据会保存到本地。再实现nginx+tomcat负载均衡。
问题:当开启两个tomcat时,由于在负载均衡状态,受到nginx的调度,server2端提交数据后直接跳到了server3,与之前的建立的session断开了,再次回来数据就不存在了。
2.重新编译nginx,加入sticky模块,避免请求来回跳,信息丢失。此时只要访问的server2不挂,数据会一直保存。
问题:如果server2的tomcat挂掉,那么server2上的数据依然会丢失,因此我们需要memcache的加入实现session交叉存放,就是将访问server2中的tomcat上的数据存放在sever3中的memcache去,将访问server3中tomcat上的数据存放在server2中。
3.serve2、server3配置session管理器,将tomcat/conf/context.xml,n1改为n2,即将2中的缓存存至3中,反之亦然。开启memcache,并重启tomcat,此时多次登录仍会保存之前的登录信息,且当一个服务端挂掉时,另一个服务端会接管并保存之前的登录信息在页面中。
项目中插件简介
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
Memcache是一个自由和开放源代码、高性能、分配的内存对象缓存系统。用于加速动态web应用程序,减轻数据库负载。
相关问题
1.cookie与session的区别
session和cookie的作用有点类似,都是为了存储用户相关的信息。不同的是,cookie是存储在本地浏览器,而session存储在服务器。存储在服务器的数据会更加的安全,不容易被窃取。
2.MemCache的介绍
(1)什么是memcache?
Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。
(2)工作原理:
先检查客户端的请求数据是否在memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作;如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中(memcached客户端不负责,需要程序明确实现);每次更新数据库的同时更新memcached中的数据,保证一致性;当分配给memcached内存空间用完之后,会使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效数据首先被替换,然后再替换掉最近未使用的数据。
3.memcache与redis的相似点与区别
Redis 和 Memcache 都是基于内存的数据存储系统。Memcached是高性能分布式内存缓存服务;Redis是一个开源的key-value存储系统。memcache通过缓存数据库查询结果,减少数据库访问次数,以提高动态 Web 应用的速度、提高可扩展性。
以下为区别
1)数据操作不同。
Memcached基本只支持简单的key-value存储,不支持枚举,不支持持久化和复制等功能。Redis支持服务器端的数据操作相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,支持list、set、sorted set、hash等众多数据结构,还同时提供了持久化和复制等功能。
2)内存管理机制不同。
在Redis中,并不是所有的数据都一直存储在内存中的。这是和Memcached相比一个最大的区别。当物理内存用完时,Redis可以将一些很久没用到的value交换到磁盘。Redis只会缓存所有的key的信息,如果Redis发现内存的使用量超过了某一个阀值,将触发swap的操作,Redis根据“swappability = age*log(size_in_memory)”计算出哪些key对应的value需要swap到磁盘。然后再将这些key对应的value持久化到磁盘中,同时在内存中清除。这种特性使得Redis可以保持超过其机器本身内存大小的数据。
而Memcached默认使用Slab Allocation机制管理内存,其主要思想是按照预先规定的大小,将分配的内存分割成特定长度的块以存储相应长度的key-value数据记录,以完全解决内存碎片问题。
3)存储数据安全性不同
memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化),数据丢失后可以通过aof恢复;
4)集群管理不同
Memcached是全内存的数据缓冲系统,Redis虽然支持数据的持久化,但是全内存毕竟才是其高性能的本质。作为基于内存的存储系统来说,机器物理内存的大小就是系统能够容纳的最大数据量。如果需要处理的数据量超过了单台机器的物理内存大小,就需要构建分布式集群来扩展存储能力。
Memcached本身并不支持分布式,因此只能在客户端通过像一致性哈希这样的分布式算法来实现Memcached的分布式存储。相较于Memcached只能采用客户端实现分布式存储,Redis更偏向于在服务器端构建分布式存储。
5)应用场景不同
Redis出来作为NoSQL数据库使用外,还能用做消息队列、数据堆栈和数据缓存等;Memcached适合于缓存SQL语句、数据集、用户临时性数据、延迟查询数据和session等。
4.memcache高可用
2015:使用magent代理
出现故障:使用Magent代理Memcache节点出现故障恢复导致缓存返回为空,即当master挂了之后再次启动就会把用户踢出去,也就是sesson miss。
2018:Repcached
全称replication cached,日本人高可用技术,简称复制缓冲区技术。
使用场景:它是一个单Master单Slave的方案,但它的Master和Slave都是可读可写的,而且可以相互同步,并且Master和Slave会自动切换(主变从,从变主自由切换)。如果Master宕机,Slave侦测到连接断了,它会自动Listen而成为Master,而如果Slave坏掉,Master也会侦测到连接断了,它就会重新等待新的Slave加入。
优点:
1)能够实现memcached节点冗余备份
2)主从之间可以互相读写
缺点:
1)只支持一主一从备份,单对单
2)冗余备份,占用内存较多
4、ansible自动化部署高可用集群
1.实验目的
通过ansible自动化部署haproxy+keepalived负载均衡高可用架构
2.实验环境
主机:配置epel源,安装ansible 2.9.0
server1、2:部署haproxy+keepalived
server3、4:部署nginx
3.实验步骤
1.主机ansible目录下ansible-galaxy init生成三个角色haproxy keepalived nginx
2.在ansible.cfg下更改角色读取路径为当前目录
3.分别编写各角色下的task、vars、template、handlers等模块
4.编写playbook调用各个角色完成推送
5.测试高可用架构及负载均衡是否实现