WEB集群6-10天
第六天 nginx编译安装
全新的进行编译安装
[root@web-1 ~]# mkdir /nginx
[root@web-1 ~]# cd /nginx/
[root@web-1 nginx]# ls
[root@web-1 nginx]#curl -O https://nginx.org/download/nginx-1.26.1.tar.gz
解压源码包
[root@web-1 nginx]#tar xf nginx-1.26.1.tar.gz
[root@web-1 nginx-1.26.1]# ls
auto CHANGES CHANGES.ru conf configure contrib html LICENSE Makefile man objs README src
configure 是一个nginx官方提供的一个进行编译配置的脚本,主要目的是收集用户的指定配置,收集参数。
例如: 用户可以指定安装位置,启用哪些模块(功能),不启用哪些模块(功能)
可以定制nginx这个软件
[root@web-2 nginx-1.26.1]# ./configure --prefix=/usr/local/nginx-1 --user=limingzhe --group=limingzhe --with-http_ssl_module --with-http_v2_module --with-threads --with-stream --with-http_stub_status_module
cat install_nginx.sh
#!/bin/bash#创建存放nginx源码的目录
mkdir -p /nginx#进入目录,开始下载nginx源码包
cd /nginx
curl -O https://nginx.org/download/nginx-1.26.1.tar.gz#解压源码包
tar xf nginx-1.26.1.tar.gz
cd nginx-1.26.1#解决依赖的软件包
yum install gcc pcre-devel openssl-devel -y#配置工作
./configure --prefix=/usr/local/nginx-1 --user=limingzhe --group=limingzhe --with-http_ssl_module --with-http_v2_module --with-threads --with-stream --with-http_stub_status_module#启动2个进程去编译
make -j 2#安装编译,将前面编译好的二进制文件和配置文件复制到/usr/local/nginx-1目录下
make install
cd /usr/local/nginx-1/
conf 存放配置文件的目录
html 存放网站网页的目录
logs 存放日志的
sbin 存放二进制文件 super user binary
新建用户
[root@web-2 sbin]# useradd limingzhe -s /sbin/nologin
改良的脚本
#!/bin/bash#创建存放nginx源码的目录
mkdir -p /nginx#进入目录,开始下载nginx源码包
cd /nginx
curl -O https://nginx.org/download/nginx-1.26.1.tar.gz#解压源码包
tar xf nginx-1.26.1.tar.gz
cd nginx-1.26.1#解决依赖的软件包
yum install gcc pcre-devel openssl-devel -y#配置工作
./configure --prefix=/usr/local/nginx-1 --user=limingzhe --group=limingzhe --with-http_ssl_module --with-http_v2_module --with-threads --with-stream --with-http_stub_status_module#启动2个进程去编译
make -j 2#安装编译,将前面编译好的二进制文件和配置文件复制到/usr/local/nginx-1目录下
make install#新建用户limingzhe
useradd limingzhe -s /sbin/nologin#修改PATH环境变量,增加nginx的安装目录,方便找到安装的nginx
echo 'PATH=/usr/local/nginx-1/sbin/:$PATH' >>/etc/profile
source /etc/profile#启动nginx
/usr/local/nginx-1/sbin/nginx#firewalld and selinux#stop firewall和设置下次开机不启动firewalld
service firewalld stop
systemctl disable firewalld#临时停止selinux和永久停止selinux
setenforce 0
sed -i '/^SELINUX=/ s/enforcing/disabled/' /etc/sysconfig/selinux
修改PATH变量
临时修改PATH变量
PATH=/usr/local/nginx-1/sbin:$PATH
永久修改PATH变量
echo 'PATH=/usr/local/nginx-1/sbin:$PATH' >>/etc/profile
在当前终端里执行脚本/etc/profile 加载PATH环境变量
source /etc/profile
[root@web-2 ~]# nginx -s stop 停止nginx服务
在web1上验证脚本是否可以执行
[root@web-1 nginx]# bash install_nginx.sh
[root@web-1 nginx]# source /etc/profile
[root@web-1 nginx]# ps aux|grep nginx
root 5195 0.0 0.2 149800 5460 pts/0 S+ 11:52 0:00 vim install_nginx.sh
root 8366 0.0 0.0 46240 1172 ? Ss 11:55 0:00 nginx: master process /usr/local/nginx-1/sbin/nginx
思考:编译安装的好处?
1. 可以获得指定的版本
2. 可以定制功能 --》巨大的优势了 --》可以根据自己公司的业务特点定制功能
阿里云、腾讯基于nginx进行了二次开发,搞出了自己的nginx服务器,阿里搞出来 tnginx(taobao nginx)yum install nginx配置配置/etc/nginx可执行的nginx二进制程序 /usr/sbin/nginx网站目录: /usr/share/nginx/html编译安装的nginx配置文件: /usr/local/nginx-1/conf可执行的nginx二进制程序 /usr/local/nginx-1/sbin网站目录: /usr/local/nginx-1/html启动nginx
nginx
停止ningx
nginx -s stop
重启
nginx -s reload --->signal
如何知道自己的cpu的信息?
1.使用top --》1 知道cpu有多少个核心2.cat /proc/cpuinfo3.lscpu
PATH变量问题
PATH变量是一个环境变量,定义了linux查找命令的时候,去哪些文件夹里查找命令
[root@web-2 conf]# env |grep PATH
PATH=/usr/local/nginx-1/sbin/:/node_exporter/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@web-2 conf]#
我们输入的命令在执行的时候,先到PATH变量定义的路径下查找是否有对应的命令,如果有就执行,没有就不执行,查找的时候从左往右查找因为我们是编译安装的nginx,默认安装的位置不在PATH变量定义的文件夹里,所以我们需要去修改PATH变量,让linux系统能找到执行程序nginx这个二进制文件yum安装的软件,默认会把执行的文件存放到PATH变量的目录下,一般在/usr/bin 或者/usr/sbin
临时修改PATH变量
PATH=/usr/local/nginx-1/sbin:$PATH
永久修改PATH变量
echo 'PATH=/usr/local/nginx-1/sbin:$PATH' >>/etc/profile
在当前终端里执行脚本/etc/profile 加载PATH环境变量
source /etc/profile
nginx开机启动的问题
1./etc/rc.local文件,linux在启动的最后阶段会执行这个脚本里的命令/usr/local/nginx-1/sbin/nginx[root@web-2 nginx-1]# vim /etc/rc.local #开启自动启动编译安装的nginx/usr/local/nginx-1/sbin/nginx[root@web-2 nginx-1]# chmod +x /etc/rc.d/rc.local
2.创建一个 nginx.service文件,让systemctl进行管理
nginx.conf配置文件
[root@web-2 ~]# cd /usr/lib/systemd/system
[root@web-2 system]# vim nginx.service
[Unit]
Description=nginx - high performance web server[Service]
Type=forking
PIDFile=/usr/local/nginx-1/logs/nginx.pid
ExecStart=/usr/local/nginx-1/sbin/nginx -c /usr/local/nginx-1/conf/nginx.conf
ExecReload=/bin/sh -c "/bin/kill -s HUP $(/bin/cat $PIDFile)"
ExecStop=/bin/sh -c "/bin/kill -s TERM $(/bin/cat $PIDFile)"[Install]
WantedBy=multi-user.target
[root@web-2 system]# systemctl daemon-reload
[root@web-2 system]# systemctl stop nginx
[root@web-2 system]# ps aux|grep nginx
注释掉第1种启动nginx的方式
[root@web-2 system]# vim /etc/rc.local
开启自动启动编译安装的nginx
在编译安装的nginx里部署一个自己的网站 www.scweb.com
[root@web-2 conf]# cd /usr/local/nginx-1/conf
[root@web-2 conf]# vim nginx.conf[root@web-2 conf]# cat nginx.conf
#user nobody;
worker_processes 2;#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 2048;
}http {include mime.types;default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';#access_log logs/access.log main;sendfile on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 65;#gzip on;#一个server 就是一个网站#一个server就是一个虚拟主机(网站)server {#网站监听的端口listen 80;#网站对应的域名server_name www.scweb.com;#charset koi8-r;#定义访问日志的路径和名字、记录的内容access_log logs/scweb.access.log main;#定义错误日志:访问网站出错的时候,服务器会记录下来error_log logs/scweb.error.log#定义路由 / 网站根目录location / {#定义网站存放网页的文件夹--》网站内容根目录 --》在/usr/local/nginx-1/htmlroot html; index index.html index.htm shouye.html;}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {# proxy_pass http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {# root html;# fastcgi_pass 127.0.0.1:9000;# fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;# include fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {# deny all;#}}# another virtual host using mix of IP-, name-, and port-based configuration##server {# listen 8000;# listen somename:8080;# server_name somename alias another.alias;# location / {# root html;# index index.html index.htm;# }#}# HTTPS server##server {# listen 443 ssl;# server_name localhost;# ssl_certificate cert.pem;# ssl_certificate_key cert.key;# ssl_session_cache shared:SSL:1m;# ssl_session_timeout 5m;# ssl_ciphers HIGH:!aNULL:!MD5;# ssl_prefer_server_ciphers on;# location / {# root html;# index index.html index.htm;# }#}}
nginx -t 测试nginx.conf配置文件是否有语法错误
使用浏览器去访问
[root@web-2 html]# curl 192.168.205.135
第七天 nginx
基于域名的虚拟主机
一台nginx的服务器上部署2个网站
www.feng.com
www.wen.com
http 是超文本传输协议(Hypertext Transfer Protocol,HTTP)--》就是传输网页上的文本、图片、视频、音频等内容
cd /usr/local/nginx-1/conf
vim nginx.conf
server {listen 80;server_name www.feng.com;access_log logs/feng.com.access.log;error_log logs/feng.com.error.log;location / {root html/feng;index index.html index.htm;}}server {listen 80;server_name www.wen.com;access_log logs/wen.com.access.log;error_log logs/wen.com.error.log;location / {root html/wen;index index.html index.htm;}}
去创建网站首页
cd ..[root@web-2 nginx-1]# ls
client_body_temp conf fastcgi_temp html logs proxy_temp sbin scgi_temp uwsgi_temp
[root@web-2 nginx-1]# cd html/
mkdir wen feng 新建wen和feng文件夹
[root@web-2 html]# ls
50x.html feng index.html wen
[root@web-2 html]# cd feng
[root@web-2 feng]# ls
vim index.html 新建首页文件
[root@web-2 feng]# cat index.html
welcome to feng's website
[root@web-2 feng]# cd ..
[root@web-2 html]# cd wen
[root@web-2 wen]# vim index.html新建首页文件
[root@web-2 wen]# cat index.html
welcome to wen's website
重启nginx服务
[root@web-2 wen]# nginx -s reload
测试访问
[root@web-2 wen]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.205.135 www.scweb.com
192.168.205.135 www.feng.com
192.168.205.135 www.wen.com
[root@web-2 wen]# curl www.feng.com
welcome to feng's website
[root@web-2 wen]# curl www.wen.com
welcome to wen's website
[root@web-2 wen]# curl www.scweb.com
<!DOCTYPE html>
<html>
<head>
<title>Welcome to scweb</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to scweb!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
windows里需要修改hosts文件
192.168.205.135 www.scweb.com
192.168.205.135 www.feng.com
192.168.205.135 www.wen.com
隐藏nginx的版本
提供下载功能
修改autoindex的值为on
nginx -s reload
开启状态统计功能
cd /usr/local/nginx-1/conf/
vim nginx.conf
nginx -t
nginx -s reload
访问
http协议
HTTP协议(Hypertext Transfer Protocol,超文本传输协议)是一种用于从万维网服务器传输超文本到本地浏览器的传送协议。它是互联网上应用最为广泛的一种网络协议,也是构成互联网应用的基础。以下是关于HTTP协议的详细介绍:
一、基本介绍
定义:HTTP协议是一种应用层协议,基于TCP/IP通信协议来传送数据。HTTP协议规定了客户端和服务器之间数据传输的格式和类型,确保双方能够正确地发送和接收数据。
作用:HTTP协议主要用于在Web浏览器和Web服务器之间传输数据,是Web上进行任何数据交换的基础。它支持客户端从服务器请求资源(如HTML文档、图片、视频等),并接收服务器返回的响应。
二、主要特点
请求/响应模型:HTTP协议采用请求/响应模型,客户端向服务器发送一个请求,服务器以一个响应来回应客户端的请求。
无状态性:HTTP协议是一种无状态的协议,即服务器不会保留与客户端的任何连接状态信息,每个请求都被视为一个独立的事务。
灵活性:HTTP协议支持多种请求方法(如GET、POST、PUT、DELETE等),允许客户端对服务器上的资源进行不同的操作。
可扩展性:HTTP协议通过头部字段来携带各种元数据,如Content-Type、Content-Length等,支持协议的扩展和自定义。
三、版本演进
HTTP协议自1991年发布以来,已经历了多个版本的演进,主要包括HTTP 1.0、HTTP 1.1、HTTP 2.0和正在推进中的HTTP 3.0。每个版本都在不断优化和改进,以提高数据传输效率、连接利用率和安全性。
HTTP 1.0:最初的版本,支持持久连接(但非默认),但存在队头阻塞问题。
HTTP 1.1:引入了持久连接(默认)、管道化、分块传输编码、头部压缩等特性,提高了数据传输效率和连接利用率。
HTTP 2.0:使用二进制格式进行数据传输,支持多路复用、服务器推送、流控制和优先级等特性,进一步提高了性能。
HTTP 3.0(正在推进中):计划放弃TCP,使用UDP作为传输层协议,并通过QUIC协议实现可靠传输。这将带来更低的延迟、更快的连接建立速度和增强的安全性。
四、安全性
HTTP协议本身并不提供加密和身份验证机制,因此数据在传输过程中容易被截取和解析。为了增强安全性,通常使用HTTPS(HTTP Secure)协议来传输数据。HTTPS在HTTP的基础上增加了一层加密层(如SSL/TLS),对数据进行加密和解密处理,确保数据传输的安全性。
五、应用场景
HTTP协议广泛应用于Web开发中,是构建Web应用的基础。无论是访问网页、下载文件、提交表单还是进行在线支付等操作,都离不开HTTP协议的支持。同时,随着Web技术的不断发展,HTTP协议也在不断演进和扩展,以适应新的应用需求和技术趋势。
六、总结
HTTP协议是互联网上应用最为广泛的一种网络协议之一,它定义了客户端和服务器之间数据传输的格式和类型。通过不断优化和改进版本演进以及引入新的特性(如HTTPS加密传输、QUIC协议等),HTTP协议将继续为Web应用的发展提供坚实的支持。
URL和URI的联系
URL 统一资源定位符 (Uniform Resource Locator)http://www.feng.com/sc/sha.html
uri 统一资源标识符 Uniform Resource Identifier )统一资源标识符(Uniform Resource Identifier,URI)是一个用于标识某一互联网资源名称的字符串。URL 是URI
Web上可用的每种资源 -HTML文档、图像、视频片段、程序等 - 由一个通用资源标识符(Uniform Resource Identifier, 简称URI)进行定位。java ---》spring
python --》flask
go ---》gin 框架 ---》http协议
chrome --》http协议python ---》requests --》http协议 --》访问网站web网站 sshtcp/ip 5层模型
OSI 7层模型7 应用层: http ssh dns
6 表示层
5 会话层
4 传输层: tcp udp
3 网络层: ip icmp arp ospf
2 数据链路层
1 物理层应表会传往树屋
tcp 传输控制协议 : 面向连接、传输可靠(不容易丢失数据)源端口 60162: 目的端口 80先要建立连接,然后传输数据3次握手http 1.0 --》短连接 : 多次访问的时候,就需要频繁的建立连接 --》
http 1.1 -->长连接: 保存一段时间的连接,避免频繁的建立连接,消耗资源--》提高了效率 keepalive_timeout 65;
http 2.0
http 3.0
pv
你知道session和cookie吗?请求报文
响应报文
正反向代理yum install python3 -y
pip3 install requests 在python3里安装requests库请求报文User-Agent:host响应报文servercode status 200 表示服务器成功返回数据给客户机304 表示=服务器告诉客户机,网站内容没有修改,客户机浏览器缓存里的数据,和我现在服务器里的数据一模一样,直接使用缓存里的数据404 表示客户机去访问的网页不存在403 表示客户机没有权限去访问服务器里的网页或者文件50* 表示nginx内部出现问题(web服务器内部出现问题)正反向代理get和post方法都是客户机向服务器发起请求,需要服务器给客户端数据get 方法是在URL里传递参数,明文,可以携带的参数有限制,不能很多post 方法 ,是body部分传递参数 ---》提交表单给服务器
第八天
负载均衡
准备的环境:
web1:192.168.205.132web2:192.168.205.135web3:192.168.205.136LB-1:192.168.205.137
web1 和 web2 web3 都需要编译安装nginx 1.26.1
作用
解决大并发情况下,将流量分散到多台后端服务器上,从而解决web达不到,访问不了的问题
启动冗余的作用
负载均衡器(LB)也要编译nginx 1.26.1
1. 确认3台后端web服务器是正常提供web服务的
2、修改网站首页内容,增加标识web1、web2、web3的文字
3、配置负载均衡功能
[root@lb-1 conf]# vim nginx.conf
[root@lb-1 conf]# cat nginx.conf
worker_processes 2;
events {worker_connections 2048;
}
http {#定义一个负载均衡器 名字叫scweb ,会将流量分发到下面的3台服务器里upstream scweb {server 192.168.205.132;server 192.168.205.135;server 192.168.205.136;}#定义一个虚拟主机,对外提供web服务server {listen 80;#定义一个访问网页根目录,定义一个路由,转发到scweb负载均衡配置上去处理location / {proxy_pass http://scweb;}}
}
nginx -t
nginx -s reload
4、 调用算法(负载均衡算法)
1. round-robin 轮询(轮叫) rr 非常公平
(1) 加权轮询 weight
2. least-connected 最小连接数
3. ip-hash ip_hash算法 让客户机总是访问相同的web服务器,因为客户机的ip地址没有发生变化,适合session信息保存在服务器的场景。 --》 会话持久性
5、健康检测
1. 主动检测
2. 被动检测
6、nfs
nfs: 解决访问3台web服务器看到一样的内容–》数据一致性问题
高可用: 2台负载均衡器
7、数据流过程
第九天
让后端的服务器知道前端的客户机的ip地址
步骤1:在负载均衡器上修改http请求报文头部字段,添加一个X-Real-IP字段
[root@lb-1 conf]# cat nginx.conf
worker_processes 2;
events {worker_connections 2048;
}http {#定义一个负载均衡器 名字叫scweb ,会将流量分发到下面的3台服务器里upstream scweb {#ip_hash;#least_conn;server 192.168.205.132 weight=10;server 192.168.205.135;server 192.168.205.136;}#定义一个虚拟主机,对外提供web服务server {listen 80;#定义一个访问网页根目录,定义一个路由,转发到scweb负载均衡配置上去处理location / {proxy_pass http://scweb;#代理服务器在转发http请求报文的时候,在http请求报文的头部里增加一个字段 名字叫X-Real-IP,它的值来自客户机的ip地址proxy_set_header X-Real-IP $remote_addr;}}
}
nginx -s reload
nginx -s reload
步骤2:在后端real server上使用这个x_real_ip这个字段
[root@web-1 ~]# cd /usr/local/nginx-1/conf/
[root@web-1 conf]# vim nginx.confhttp {include mime.types;default_type application/octet-stream;log_format main '$remote_addr - $http_x_real_ip - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';server {listen 80;server_name localhost;#charset koi8-r;access_log logs/host.access.log main;location / {root html;index index.html index.htm;}
[root@web-1 conf]# nginx -s reload
转发功能,转发到go server上,中台功能
一台服务器里运行了2个web服务器
1. nginx 静态页面 --》80
2. go 动态页面 --》8080
当用户访问nginx的80端口的时候,转发请求到go语言写的网站的8080端口上
启动go server
[root@web-1 system]# cd /web/
[root@web-1 web]# ls
go+html+mysql+redis.zip go.mod go.sum info.sql nohup.out Readme.md server server.go static templates
[root@web-1 web]# nohup ./server &
[1] 1618
[root@web-1 web]# nohup: 忽略输入并把输出追加到"nohup.out"
在nginx服务器上配置转发功能
[root@web-1 conf]# nginx -t
nginx: the configuration file /usr/local/nginx-1/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx-1/conf/nginx.conf test is successful
[root@web-1 conf]# nginx -s reload
[root@web-1 conf]#
也可以转发到www.jd.com 或者www.taobao.com
中台路由转发功能
需要到web2服务器上的网页根目录下新建sc文件夹,同时sc文件夹里新建index.html文件
500错误
open to many files -->因为linux内核限制一个进程默认情况下只能打开1024个
在nginx里的主配置文件里设置了一个worker进程可以起2048个连接(2048个线程)
worker_processes 8;#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 2048;
}
通过给内核传递参数,这是一个进程可以打开100000个文件
临时修改
[root@web-2 sc]# ulimit -n 100000
[root@web-2 sc]# ulimit -n 1000000
永久修改ulimit参数
1. 修改/etc/security/limits.conf
* soft nofile 100000
* hard nofile 100000
[root@web-2 sc]# reboot
502 bad gateway 负载均衡器后面的backend server全部挂了,负载均衡器还是好的
高可用
高可用-->HA High Availability --》有备份
keepalived
准备一台服务器,直接使用LB1服务器克隆
因为LB1服务器上已经安装了nginx,只要安装keepalived软件
LB1:192.168.205.137
LB2:192.168.205.138
keepalived
介绍
keepalive是一个用c语言编写的路由软件,这个项目的主要目标是为Linux系统和基于Linux的基础设施提供简单而健壮的负载平衡和高可用性设施。
keepalived是一个路由软件,有2个功能:
1. loadbalancing 负载均衡 ---》内核里的ipvs软件---》内置到内核里了,不需要安装
2. 高可用 high-availability ---》VRRP协议 high-availability is achieved by VRRP protocol.
(1) VRRP协议:虚拟路由冗余协议
安装keepalived软件
[root@lb-1 ~]# yum install keepalived -y
[root@lb-2 ~]# yum install keepalived -y
[root@lb-1 ~]# cd /etc/keepalived/
[root@lb-1 keepalived]# ls
keepalived.conf
[root@lb-1 keepalived]#
Keepalived.conf配置文件的解析
[root@centos-LB-1 keepalived]# vim keepalived.conf #vrrp_strict 注释掉,遵守最严格的vrrp协议
#这是实现高可用的配置
vrrp_instance VI_1 { 启动一个vrrp的实例 VI_1 实例名,可以自定义,一个实例背后就是一个keepalived相关的进程state MASTER --》角色是master backupinterface ens33 --》在哪个接口上监听vrrp协议,同时绑定vip到那个接口virtual_router_id 105 --》虚拟路由id(帮派) 0~255范围priority 120 ---》优先级 0~255advert_int 1 --》advert interval 宣告消息 时间间隔 1秒authentication { 认证auth_type PASS 认证的类型是密码认证auth_pass 11112222 具体的密码,可以自己修改}virtual_ipaddress { --》vip的配置,vip可以是多个ip,也可以是一个vip192.168.200.16 192.168.200.17192.168.200.18}
}[root@lb-2 keepalived]# cat keepalived.conf
! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addr#vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 88priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.205.188}
}[root@lb-2 keepalived]# [root@lb-1 keepalived]# cat keepalived.conf
! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addr#vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 88priority 120advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.205.188}
}
启动keepalived服务
[root@lb-1 keepalived]# systemctl start keepalived
[root@lb-1 keepalived]# systemctl enable keepalived
Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.
[root@lb-1 keepalived]#
[root@lb-2 keepalived]# systemctl start keepalived
[root@lb-2 keepalived]# systemctl enable keepalived
Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.
查看vip在哪台服务器上
[root@lb-1 keepalived]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:1a:1b:5d brd ff:ff:ff:ff:ff:ffinet 192.168.205.137/24 brd 192.168.205.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet 192.168.205.188/32 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe1a:1b5d/64 scope link valid_lft forever preferred_lft forever
确保nginx负载均衡功能是正常运行的
[root@lb-1 conf]# ps aux|grep nginx
[root@lb-2 keepalived]# ps aux|grep nginx
查看负载均衡的配置
[root@lb-2 keepalived]# [root@lb-1 conf]# vim nginx.confhttp {#定义一个负载均衡器 名字叫scweb ,会将流量分发到下面的3台服务器里upstream scweb {#ip_hash;#least_conn;#server 192.168.205.132:8080 weight=10;#server 192.168.205.132:80 weight=10;server 192.168.205.135;server 192.168.205.136;}
验证2台负载均衡器都是好的
对外我们只公布有vip地址的负载均衡器,本项目里发布LB-1
[root@lb-1 conf]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:1a:1b:5d brd ff:ff:ff:ff:ff:ffinet 192.168.205.137/24 brd 192.168.205.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet 192.168.205.188/32 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe1a:1b5d/64 scope link valid_lft forever preferred_lft forever
[root@lb-1 conf]#
正如您所做的,使用ip add或ip addr show命令来查看网络接口上分配的所有IP地址。如果Keepalived正常工作并且该节点是当前的MASTER,则VIP(例如192.168.205.188)应该显示在其中的一个网络接口上。
根据您提供的信息,似乎192.168.205.188已经被配置到了ens33接口上,这意味着Keepalived可能已经在控制这个VIP。为了进一步确认,可以尝试检查Keepalived的日志文件(通常位于/var/log/messages或通过journalctl -u keepalived查看),以确保没有错误发生,并且Keepalived正在按照预期工作。
对外公布vip 192.168.205.188地址访问
验证vip漂移
systemctl stop keepalived 模拟LB1服务器down机
[root@lb-1 conf]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:1a:1b:5d brd ff:ff:ff:ff:ff:ffinet 192.168.205.137/24 brd 192.168.205.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe1a:1b5d/64 scope link valid_lft forever preferred_lft forever
LB2上就有vip了
[root@lb-2 conf]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:e7:94:6b brd ff:ff:ff:ff:ff:ffinet 192.168.205.138/24 brd 192.168.205.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet 192.168.205.188/32 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fee7:946b/64 scope link valid_lft forever preferred_lft forever
[root@lb-2 conf]#
选举过程
双vip架构
[root@lb-1 keepalived]# cat keepalived.conf
! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addr#vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 88priority 120advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.205.188}
}
vrrp_instance VI_2 {state BACKUPinterface ens33virtual_router_id 99priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.205.199}
}
[root@lb-2 keepalived]# cat keepalived.conf
! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addr#vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 88priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.205.188}
}vrrp_instance VI_2 {state MASTERinterface ens33virtual_router_id 99priority 120advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.205.199}
}
[root@lb-2 keepalived]# systemctl restart keepalived
[root@lb-2 keepalived]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:e7:94:6b brd ff:ff:ff:ff:ff:ffinet 192.168.205.138/24 brd 192.168.205.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet 192.168.205.199/32 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fee7:946b/64 scope link valid_lft forever preferred_lft forever
[root@lb-1 keepalived]# systemctl restart keepalived
[root@lb-1 keepalived]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:1a:1b:5d brd ff:ff:ff:ff:ff:ffinet 192.168.205.137/24 brd 192.168.205.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet 192.168.205.188/32 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe1a:1b5d/64 scope link valid_lft forever preferred_lft forever
[root@lb-1 keepalived]#
脑裂
脑裂: 就是2台或者多台LB上都有vip地址
原因:脑裂现象:1.vrid(虚拟路由id)不一样2.网络通信有问题:中间有防火墙阻止了网络之间的选举的过程,vrrp报文的通信3.认证密码不一样也会出现脑裂
脑裂有没有危害?是否对业务有危害或者对业务有什么影响?
答案:没有危害,能正常访问,反而还有负载均衡的作用脑裂恢复的时候,还是有影响的,会短暂的中断,影响业务的nfs的问题
第十天 DNS服务器
1、介绍
DNS 是域名解析系统 domain name system用来将域名解析到ip,也可以将ip解析到域名正向解析:域名解析到ip --》多反向解析:ip解析到域名因为网络通信过程中使用的ip地址,但是ip地址不好记忆,名字好记,因此开发出来一套系统,给人使用,将域名解析到对应的ip地址。
2、dns服务器的搭建,选择在ansible+Prometheus+nfs服务器(综合服务器)
3、安装软件bind —》加州大学伯克利分校 Berkeley Internet Name Daemon --》BSD ulinx
[root@ansible-prome bin]# yum install bind bind-utils -y
启动named服务
[root@nfs-ansible-prom prom]# service named restart
Redirecting to /bin/systemctl restart named.service
设置named服务开机启动
[root@nfs-ansible-prom prom]# systemctl enable named
Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.
[root@nfs-ansible-prom prom]#
查看进程
[root@nfs-ansible-prom prom]# ps aux|grep named
named 14125 0.1 1.4 242032 57676 ? Ssl 16:34 0:00 /usr/sbin/named -u named -c /etc/named.conf
root 14151 0.0 0.0 112824 976 pts/0 S+ 16:35 0:00 grep --color=auto named
查看开放udp 53号端口
[root@nfs-ansible-prom prom]# netstat -anplut|grep named
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 14125/named
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 14125/named
tcp6 0 0 ::1:53 :::* LISTEN 14125/named
tcp6 0 0 ::1:953 :::* LISTEN 14125/named
udp 0 0 127.0.0.1:53 0.0.0.0:* 14125/named
udp6 0 0 ::1:53 :::* 14125/named
[root@nfs-ansible-prom prom]#
域名解析的时候,采用udp方式访问dns服务器的–》udp 速度快,效率高
测试 dns服务能否使用,默认情况下,dns服务器只给自己做解析,不给其他的服务器做解析。
[root@ansible-prome bin]# vim /etc/resolv.conf
#nameserver 114.114.114.114
#nameserver 222.246.129.80
nameserver 127.0.0.1
[root@ansible-prome bin]# nslookup www.baidu.com
Server: 127.0.0.1
Address: 127.0.0.1#53Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 183.2.172.42
Name: www.a.shifen.com
Address: 183.2.172.185
Name: www.a.shifen.com
Address: 240e:ff:e020:9ae:0:ff:b014:8e8b
Name: www.a.shifen.com
Address: 240e:ff:e020:966:0:ff:b042:f296
[root@ansible-prome bin]# nslookup www.jd.com
Server: 127.0.0.1
Address: 127.0.0.1#53Non-authoritative answer:
www.jd.com canonical name = www.jd.com.gslb.qianxun.com.
www.jd.com.gslb.qianxun.com canonical name = www.jd.com.s.galileo.jcloud-cdn.com.
www.jd.com.s.galileo.jcloud-cdn.com canonical name = wwwv6.jcloudimg.com.
Name: wwwv6.jcloudimg.com
Address: 175.6.186.3
Name: wwwv6.jcloudimg.com
Address: 240e:c2:1800:14d:8000::3
4、修改配置文件,重启服务器允许其他电脑能过来查询dns域名
[root@nfs-ansible-prom prom]# vim /etc/named.conf
options {listen-on port 53 { any; }; #修改listen-on-v6 port 53 { any; }; #修改directory "/var/named";dump-file "/var/named/data/cache_dump.db";statistics-file "/var/named/data/named_stats.txt";memstatistics-file "/var/named/data/named_mem_stats.txt";recursing-file "/var/named/data/named.recursing";secroots-file "/var/named/data/named.secroots";allow-query { any; }; #修改
重新启动named服务
[root@nfs-ansible-prom prom]# service named restart
Redirecting to /bin/systemctl restart named.service
[root@nfs-ansible-prom prom]#
[root@ansible-prome bin]# ps aux|grep named
named 3415 0.2 1.5 390036 58076 ? Ssl 15:29 0:00 /usr/sbin/named -u named -c /etcnamed.conf
root 3423 0.0 0.0 112824 980 pts/0 S+ 15:30 0:00 grep --color=auto named
[root@ansible-prome bin]# netstat -anplut|grep named
tcp 0 0 192.168.205.134:53 0.0.0.0:* LISTEN 3415/named
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 3415/named
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 3415/named
tcp6 0 0 :::53 :::* LISTEN 3415/named
tcp6 0 0 ::1:953 :::* LISTEN 3415/named
udp 0 0 192.168.205.134:53 0.0.0.0:* 3415/named
udp 0 0 127.0.0.1:53 0.0.0.0:* 3415/named
udp6 0 0 :::53 :::* 3415/named
[root@ansible-prome bin]#
测试,在另外一台客户机上使用dns服务器,进行域名查询测试
[root@lb-1 conf]# vim /etc/resolv.conf
#nameserver 114.114.114.114
#nameserver 222.246.129.80
nameserver 192.168.205.134[root@lb-1 conf]# yum install bind-utils -y[root@lb-1 conf]# nslookup www.baidu.com
Server: 192.168.205.134
Address: 192.168.205.134#53Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 183.2.172.185
Name: www.a.shifen.com
Address: 183.2.172.42
Name: www.a.shifen.com
Address: 240e:ff:e020:966:0:ff:b042:f296
Name: www.a.shifen.com
Address: 240e:ff:e020:9ae:0:ff:b014:8e8b
3、 域名需要去购买–》全球统一管理的组织
请你介绍下dns域名的解析过程:
www.baidu.com 为例来说明
www.a.com1.客户机向本地dns服务器发起dns请求,要求解析域名www.baidu.com的ip
2.本地的dns服务器会在缓存里查找对应的域名,如果有,里面返回给客户机ip地址,如果没有,就问根域名服务器要www.baidu.com对应的ip
3.根域名服务器会返回com.的ip地址,告诉本地dns服务器,问com.服务器www.baidu.com的ip
4.本地dns服务器向com服务器发起请求,com服务器返回baidu.com域名对应的dns服务器的地址
5.本地dns服务器向baidu.com服务器发起请求,baidu.com 域名服务器返回www.baidu.com域名对应的ip地址
6.本地dns服务器缓存www.baidu.com对应的ip,然后告诉客户机
7.客户机去访问www.baidu.com对应的ip服务器缓存:1.浏览器缓存2.操作系统缓存3.本地dns服务器里的缓存TTL: time to live 10分钟scweb.com --->17000DNS的记录类型www 192.168.205.1A 地址解析记录 address 将域名解析到ip
NS 域名服务器记录 name server 一个域名里有多台专门负责域名解析的服务器的ip
缓存域名服务器 --》路由器也称为 唯高速缓存服务器通过向其他域名服务器查询获得域名->IP地址记录将域名查询结果缓存到本地,提高重复查询时的速度
主域名服务器 --》qq.com 163.com jd.com didi.com --》可以写入的特定DNS区域的官方服务器,具有唯一性,权威性负责维护该区域内所有域名->IP地址的映射记录
从域名服务器 --->负责读数据,不能写数据也称为 辅助域名服务器其维护的 域名->IP地址记录 来源于主域名服务器
4、搭建一台scweb.com 主域名服务器
1.安装软件 bind bind-utils
可以给自己的web集群项目提供域名解析,我们使用sc.com这个域名
1.修改配置文件,告诉named为sc.com提供域名解析
/etc/name.conf 主配置
/etc/named.rfc1912.zones 次要配置文件
[root@nfs-ansible-prom prom]# vim /etc/named.rfc1912.zones
//添加下面的配置,增加一个sc.com的域名
zone "scweb.com" IN {type master;file "scweb.com.zone";allow-update { none; };
};
3./var/named/ 存放dns域名解析的数据文件sc.com.zone --》创建sc.com的数据文件
[root@nfs-ansible-prom prom]# cd /var/named/
[root@nfs-ansible-prom named]# cp -a named.localhost scweb.com.zone
修改scweb.com.zone文件,添加我们自己的相关服务的A记录和别名记录
[root@nfs-ansible-prom named]# vim scweb.com.zone
$TTL 1D
@ IN SOA ns1.scweb.com. rname.invalid. (0 ; serial1D ; refresh1H ; retry1W ; expire3H ) ; minimumNS ns1.scweb.com.A 192.168.205.134AAAA ::1
www A 192.168.205.188
www A 192.168.205.199
www A 192.168.205.177nfs A 192.168.203.132
xinjiapo A 8.8.8.9web CNAME www
luobiao CNAME nfs
* A 192.168.205.18
@ A 192.168.205.199
- 泛域名解析记录
@ 只是本域名记录 例如: scweb.com
检测数据文件
[root@ansible-prome named]# named-checkzone scweb.com scweb.com.zone
zone scweb.com/IN: loaded serial 0
OK
[root@ansible-prome named]#
[root@ansible-prome named]# named-checkconf /etc/named.rfc1912.zones
[root@ansible-prome named]# [root@nfs-ansible-prom named]#
刷新named服务,让新的配置生效
[root@nfs-ansible-prom named]# service named restart
Redirecting to /bin/systemctl restart named.service
[root@nfs-ansible-prom named]# [root@ansible-prome named]# ps aux|grep named
named 3531 0.1 1.5 390036 60168 ? Ssl 17:23 0:00 /usr/sbin/named -u named -c /etcnamed.conf
root 3539 0.0 0.0 112824 976 pts/0 S+ 17:23 0:00 grep --color=auto named
[root@ansible-prome named]#
验证我们自己添加的scweb.com区域是否有效?在另外一台客户机上进行测试,需要填写本地的dns服务器ip
[root@lb-1 conf]# cat /etc/resolv.conf
# Generated by NetworkManager
#nameserver 114.114.114.114
#nameserver 222.246.129.80
nameserver 192.168.205.134
[root@lb-1 conf]# [root@lb-1 conf]# nslookup www.scweb.com
Server: 192.168.205.134
Address: 192.168.205.134#53Name: www.scweb.com
Address: 192.168.205.199
Name: www.scweb.com
Address: 192.168.205.177
Name: www.scweb.com
Address: 192.168.205.188[root@lb-1 conf]# [root@lb-1 conf]# dig NS scweb.com; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16 <<>> NS scweb.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23042
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 2;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;scweb.com. IN NS;; ANSWER SECTION:
scweb.com. 86400 IN NS ns1.scweb.com.;; ADDITIONAL SECTION:
ns1.scweb.com. 86400 IN A 192.168.205.188;; Query time: 0 msec
;; SERVER: 192.168.205.134#53(192.168.205.134)
;; WHEN: 四 7月 18 17:30:32 CST 2024
;; MSG SIZE rcvd: 72[root@lb-1 conf]# dig +short NS scweb.com
ns1.scweb.com.
[root@lb-1 conf]#[root@lb-1 conf]# nslookup xinjiapo.scweb.com
Server: 192.168.205.134
Address: 192.168.205.134#53Name: xinjiapo.scweb.com
Address: 8.8.8.9[root@lb-1 conf]# ping xinjiapo.scweb.com
PING xinjiapo.scweb.com (8.8.8.9) 56(84) bytes of data.
^C
--- xinjiapo.scweb.com ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1013ms[root@lb-1 conf]#
[root@lb-1 conf]# nslookup www.baidu.com
Server: 192.168.205.134
Address: 192.168.205.134#53Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 183.2.172.42
Name: www.a.shifen.com
Address: 183.2.172.185
Name: www.a.shifen.com
Address: 240e:ff:e020:9ae:0:ff:b014:8e8b
Name: www.a.shifen.com
Address: 240e:ff:e020:966:0:ff:b042:f296[root@lb-1 conf]# nslookup luobiao.scweb.com
Server: 192.168.205.134
Address: 192.168.205.134#53luobiao.scweb.com canonical name = nfs.scweb.com.
Name: nfs.scweb.com
Address: 192.168.203.132[root@lb-1 conf]# [root@lb-1 conf]# nslookup luobiao.scweb.com
Server: 192.168.205.134
Address: 192.168.205.134#53luobiao.scweb.com canonical name = nfs.scweb.com.
Name: nfs.scweb.com
Address: 192.168.203.132[root@lb-1 conf]# nslookup zhouqiang.scweb.com
Server: 192.168.205.134
Address: 192.168.205.134#53Name: zhouqiang.scweb.com
Address: 192.168.205.188[root@lb-1 conf]# nslookup fanzhonglin.scweb.com
Server: 192.168.205.134
Address: 192.168.205.134#53Name: fanzhonglin.scweb.com
Address: 192.168.205.188[root@lb-1 conf]# nslookup scweb.com
Server: 192.168.205.134
Address: 192.168.205.134#53Name: scweb.com
Address: 192.168.205.199
Name: scweb.com
Address: 192.168.205.134
Name: scweb.com
Address: ::1
问题:
hosts文件里的域名解析优先级比DNS服务器高能解析出来不能ping通,不关dns服务器的事,是网络的问题或者相关服务器的问题别名记录的作用,可以将流量导入到其他的地方---》CDN
1、当服务启动不了的时候,如何排错?
1.看日志
2.使用检测工具:检测配置文件和数据文件
/var/log/messages 日志文件
[root@nameserver data]# tail -f /var/log/messages检查数据文件是否有错误
[root@nameserver data]# named-checkzone sc.com /var/named/sc.com.zone
zone sc.com/IN: loaded serial 0
OK
[root@nameserver data]#
检查配置文件
[root@nameserver data]# named-checkconf /etc/named.rfc1912.zones
2.dns的记录类型
3.域名解析的过程
11 项目
简历:项目名称:web集群高性能的web集群基于nginx+keepalived的web高性能的集群项目基于go语言的web高性能的集群项目高性能的音乐交流网站高性能的外卖网站高性能的******后台系统
项目描述:模拟企业里的web项目需求,构建一个高可用高性能的web集群系统。采用nginx做负载均衡软件,keepalived实现高可用,搭建内部的一套基于Prometheus+grafana的监控系统,采用nfs实现数据一致性,采用ansible实现自动化运维,后台的web系统采用(nginx/go后台/python后台/java后台等),数据库采用MySQL+redis,通过域名访问,实现https功能。差异化思路: 1.你的网站的内容和功能,例如:买苹果、买梨子,人事管理、外卖、音乐、电影、二手图书等2.顺序:3.增加或者减少内容:
项目环境: 使用的软件及版本
项目周期: 2021年07月 - 2021年09月
项目步骤:你是如何完成的--》方案:使用什么技术解决了什么问题分类: 监控:存储:自动化运维: 高可用:LB后台:等
项目心得:成果: 成绩摆数据: 服务器的数量、时间、
相关文章:
WEB集群6-10天
第六天 nginx编译安装 全新的进行编译安装 [rootweb-1 ~]# mkdir /nginx [rootweb-1 ~]# cd /nginx/ [rootweb-1 nginx]# ls [rootweb-1 nginx]#curl -O https://nginx.org/download/nginx-1.26.1.tar.gz解压源码包 [rootweb-1 nginx]#tar xf nginx-1.26.1.tar.gz [rootw…...
10.共享内存 信号量集 消息队列
10.共享内存 信号量集 消息队列 **1. IPC对象操作通用框架****2. 共享内存(Shared Memory)****3. 信号量集(Semaphore)****4. 消息队列(Message Queue)****5. 练习与作业****6. 总结** 1. IPC对象操作通用框…...
玩转大语言模型——使用langchain和Ollama本地部署大语言模型
系列文章目录 玩转大语言模型——使用langchain和Ollama本地部署大语言模型 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 玩转大语言模型——使用GraphRAGOllama构建知识图谱 玩转大语言模型——完美解决Gra…...
数据结构与算法学习笔记----容斥原理
数据结构与算法学习笔记----容斥原理 author: 明月清了个风 first publish time: 2025.1.30 ps⭐️介绍了容斥原理的相关内容以及一道对应的应用例题。 Acwing 890. 能被整除的数 [原题链接](890. 能被整除的数 - AcWing题库) 给定一个整数 n n n和 m m m个不同的质数 p 1 …...
Appium介绍
在使用不同版本的Appium包进行自动化测试时,出现警告问题可能是由于版本不兼容、配置不正确等原因导致的。下面将详细介绍解决这些问题的步骤,确保模拟器能够正常启动,并能在Appium查看器中同步显示。 1. 环境准备 首先,确保你已…...
doris:Bitmap
BITMAP 类型可以在 Duplicate 表、Unique 表、Aggregate 表中使用,只能作为 Key 类,无法作为 Value 列使用。在 Aggregate 表中使用 BITMAP 类型,其建表时必须使用聚合类型 BITMAP_UNION。用户不需要指定长度和默认值。长度根据数据的聚合程度…...
gitee——报错修改本地密码
有时候当我们向远端push本地的仓库时会有一些报错的行为。 如下: 这是因为我们在gitee修改了密码时,本地还没有更新提交,总是报错 解决修改密码报错 如下: 1.在本地点击搜索栏找到控制面板 步骤如下...
Leetcode 45. 跳跃游戏 II
这题是一个动态规划问题,首先我先说一下自己的动态规划解题步骤: 1,首先需要明确动态规划数组的含义:这个是根据题目来定的,这一个题目的数组含义:dp【i】指的是从0跳到i所需要的最小的步骤。 2ÿ…...
ROS2---基础操作
工作空间(workspace) workspace是一个存放项目开发相关文件的文件夹。例如我们要开发一个机器人,我们可以创建一个工作空间,然后存放这个机器人不同功能的包(感知(雷达,相机等),运动࿰…...
【Leetcode 每日一题】350. 两个数组的交集 II
问题背景 给你两个整数数组 n u m s 1 nums_1 nums1 和 n u m s 2 nums_2 nums2,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值…...
第13章 深入volatile关键字(Java高并发编程详解:多线程与系统设计)
1.并发编程的三个重要特性 并发编程有三个至关重要的特性,分别是原子性、有序性和可见性 1.1 原子性 所谓原子性是指在一次的操作或者多次操作中,要么所有的操作全部都得到了执行并 且不会受到任何因素的干扰而中断,要么所有的操作都不执行…...
STM32 PWMI模式测频率占空比
接线图: PWMI基本结构 代码配置: 与上一章输入捕获代码一样,根据结构体,需要在输入捕获单元再配置一个通道。我们调用一个函数 这个函数可以给结构体赋值,当我们定义了一遍结构体参数,再调用这个函数&…...
无心剑七绝《恭贺新春》
七绝恭贺新春 软件通灵万象真 生机繁茂绘星辰 智联世界情不尽 系统更新又一春 2025年1月29日 平水韵十一真平韵 无心剑七绝《恭贺新春》以“软件生态”为题旨,巧妙融入新春喜庆氛围,展现出科技与自然和谐共生的意境。首句“软件通灵万象真”,…...
低代码产品表单渲染架构
在React和Vue没有流行起来的时候,低代码产品的表单渲染设计通常会使用操作Dom的方式实现。 下面是一个表单的例子: 产品层 用户通过打开表单,使用不同业务场景业务下的表单页面,中间的Render层就是技术实现。 每一个不同业务的表单…...
allegro修改封闭图形线宽
说在前面 我们先把最优解说在前面,然后后面再说如果当时不熟悉软件的时候为了挖孔是用了shapes该怎么修改回来。 挖空最方便的方式是在cutout层画一个圆弧,下面开始图解,先add一个圆弧 z 最好是在画的时候就选择好层,如果忘记了后续再换回去也行,但好像软件有bug,此处并…...
C++实现2025刘谦魔术(勺子 筷子 杯子)
目录 1、魔术步骤 2、C代码 2.1、定义物品 2.2、枚举初始顺序 2.3、进行step2筷子交换 2.4、进行step3杯子交换 2.5、进行step4勺子交换 3、运行结果 4、全部源码 又是一年春晚啦,今年比较期待的是刘谦的魔术表演,现在用C实现刘谦的第一个魔术&…...
Leetcode:219
1,题目 2,思路 第一种就是简单的暴力比对当时过年没细想 第二种: 用Map的特性key唯一,把数组的值作为Map的key值我们每加载一个元素都会去判断这个元素在Map里面存在与否如果存在进行第二个判断条件abs(i-j)<k,条件 符合直接…...
SpringBoot+Vue的理解(含axios/ajax)-前后端交互前端篇
文章目录 引言SpringBootThymeleafVueSpringBootSpringBootVue(前端)axios/ajaxVue作用响应式动态绑定单页面应用SPA前端路由 前端路由URL和后端API URL的区别前端路由的数据从哪里来的 Vue和只用三件套axios区别 关于地址栏url和axios请求不一致VueJSPS…...
小米CR6606,CR6608,CR6609 启用SSH和刷入OpenWRT 23.05.5
闲鱼上收了一台CR6606和一台CR6609, 一直没时间研究, 趁春节假期把这两个都刷成 OpenWRT 配置说明 CPU: MT7621AT,双核880MHz内存: NT5CC128M16JR-EKI 或 M15T2G16128A, 256MB闪存: F59L1G81MB, 128MB无线基带芯片(BB): T7905DAN无线射频芯片(RF): MT7975DN无外置F…...
我的求职面经:(2)C++中空指针请使用nullptr不要使用NULL
1. C中NULL定义就是整数字面量0 2. 对于C函数,由于存在重载,使用NULL而不是nullptr可能导致函数走错重载。 3. C中定义NULL为(void* )0,确实是代表空指针。使用时隐式转换成对应的需要类型的空指针。 4. C中void指针…...
Java8_StreamAPI
Stream 1.创建流 1.1 集合创建流 List<String> list List.of("a", "b", "c"); Stream<String> stream list.stream(); stream.forEach(System.out::println);1.2 数组创建流 String[] array {"a","b",&qu…...
[STM32 - 野火] - - - 固件库学习笔记 - - -十二.基本定时器
一、定时器简介 STM32 中的定时器(TIM,Timer)是其最重要的外设之一,广泛用于时间管理、事件计数和控制等应用。 1.1 基本功能 定时功能:TIM定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中…...
信息学奥赛一本通 1606:【 例 1】任务安排 1 | 洛谷 P2365 任务安排
【题目链接】 ybt 1606:【 例 1】任务安排 1 洛谷 P2365 任务安排 【题目考点】 1. 动态规划:线性动规 【解题思路】 可以先了解法1,虽然不是正解,但该解法只使用了动规的基本思路,易于理解,有助于理解…...
【解决方案】MuMu模拟器移植系统进度条卡住98%无法打开
之前在Vmware虚拟机里配置了mumu模拟器,现在想要移植到宿主机中 1、虚拟机中的MuMu模拟器12-1是目标系统,对应的目录如下 C:\Program Files\Netease\MuMu Player 12\vms\MuMuPlayer-12.0-1 2、Vmware-虚拟机-设置-选项,启用共享文件夹 3、复…...
【C语言】预处理详解
他们想要逃避工作的压迫,却又被功绩社会深植的价值观绑架。 前言 这是我自己学习C语言的第九篇博客总结。后期我会继续把C语言学习笔记开源至博客上。 上一期笔记是关于C语言的编译链接,没看的同学可以过去看看: 【C语言】编译链接_c 读取一行…...
设计模式Python版 适配器模式
文章目录 前言一、适配器模式二、适配器模式实现三、适配器模式在Django中的应用 前言 GOF设计模式分三大类: 创建型模式:关注对象的创建过程,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式&…...
系统思考—蝴蝶效应
“个体行为的微小差异,可能在系统中引发巨大且不可预测的结果。” — 诺贝尔经济学得主托马斯谢林 我们常说,小变动带来大影响,这种现象,在复杂系统理论中被称为“蝴蝶效应”:即使极小的变化,也能在动态系…...
使用Edu邮箱申请一年免费的.me域名
所需材料:公立Edu教育邮箱一枚(P.S:该服务不支持所有的Edu教育邮箱,仅支持比较知名的院校) 说到域名,.me这个后缀可谓是个性十足,适合个人网站、博客等。.me是黑山的国家顶级域名(c…...
【开源免费】基于SpringBoot+Vue.JS体育馆管理系统(JAVA毕业设计)
本文项目编号 T 165 ,文末自助获取源码 \color{red}{T165,文末自助获取源码} T165,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...
C++ ——— 仿函数
目录 何为仿函数 仿函数和模板的配合使用 何为仿函数 代码演示: class Add { public:int operator()(int x, int y){return x y;} }; 这是一个 Add 类,类里面有一个公有成员函数重载,重载的是括号 那么调用的时候: Add ad…...
基于FPGA的BT656解码
概述 BT656全称为“ITU-R BT.656-4”或简称“BT656”,是一种用于数字视频传输的接口标准。它规定了数字视频信号的编码方式、传输格式以及接口电气特性。在物理层面上,BT656接口通常包含10根线(在某些应用中可能略有不同,但标准配置为10根)。这些线分别用于传输视频数据、…...
【Proteus仿真】【51单片机】简易计算器系统设计
目录 一、主要功能 二、使用步骤 三、硬件资源 四、软件设计 五、实验现象 联系作者 一、主要功能 1、LCD1602液晶显示 2、矩阵按键 3、可以进行简单的加减乘除运算 4、最大 9999*9999 二、使用步骤 系统运行后,LCD1602显示数据,通过矩阵按键…...
【16届蓝桥杯寒假刷题营】第1期DAY2
1.能选取元素的最多个数 - 蓝桥云课 问题描述 给定一个长度为 n 的数组 a,小蓝希望从数组中选择若干个元素(可以不连续),并将它们重新排列,使得这些元素 能够形成一个先严格递增然后严格递减的子序列(可以…...
安卓(android)饭堂广播【Android移动开发基础案例教程(第2版)黑马程序员】
一、实验目的(如果代码有错漏,可查看源码) 1.熟悉广播机制的实现流程。 2.掌握广播接收者的创建方式。 3.掌握广播的类型以及自定义官博的创建。 二、实验条件 熟悉广播机制、广播接收者的概念、广播接收者的创建方式、自定广播实现方式以及有…...
linux的/proc 和 /sys目录差异
/proc 和 /sys 都是Linux系统中用于提供系统信息和进行系统配置的虚拟文件系统,但它们的原理并不完全一样,以下是具体分析: 目的与功能 /proc :主要用于提供系统进程相关信息以及内核运行时的一些参数等,可让用户和程…...
使用Navicat Premium管理数据库时,如何关闭事务默认自动提交功能?
使用Navicat Premium管理数据库时,最糟心的事情莫过于事务默认自动提交,也就是你写完语句运行时,它自动执行commit提交至数据库,此时你就无法进行回滚操作。 建议您尝试取消勾选“选项”中的“自动开始事务”,点击“工…...
HTB:Active[RE-WriteUP]
目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 将靶机TCP开放端口号提取并保存 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用nmap对靶机…...
新春登蛇山:告别岁月,启航未来
大年初一,晨曦透过薄雾,温柔地洒在武汉的大街小巷。2025 年的蛇年春节,带着新春的喜气与希望悄然而至。我站在蛇山脚下,心中涌动着复杂的情感,因为今天,我不仅将与家人一起登山揽胜,更将在这一天…...
如何获取小程序的code在uniapp开发中
如何获取小程序的code在uniapp开发中,也就是本地环境,微信开发者工具中获取code,这里的操作是页面一进入就获取code登录,没有登录页面的交互,所以写在了APP.vue中,也就是小程序一打开就获取用户的code APP.…...
LLM评估与优化技术解析
标题:LLM评估与优化技术解析 文章信息摘要: LLM的评估方法主要包括自动化基准测试、人工评估和基于模型的评估,每种方法各有优缺点。自动化测试快速但难以捕捉细微差别,人工评估细致但成本高,基于模型的评估结合了两者…...
SpringBoot 原理分析
SpringBoot 原理分析 依赖管理相关 启动器 starter Spring Boot 的 Starter 是预定义依赖项集合,可简化 Spring 应用配置与构建,启动时自动引入所需库、配置和功能。 Spring Boot 有很多预定义 Starter,如 spring - boot - starter - web 用…...
go入门Windows环境搭建
简介 Go 即 Golang,是 Google 公司 2009 年 11 月正式对外公开的一门编程语言。 根据 Go 语言开发者自述,近 10 多年,从单机时代的 C 语言到现在互联网时代的 Java,都没有令人满意的开发语言,而 C往往给人的感觉是&a…...
拦截器快速入门及详解
拦截器Interceptor 快速入门 什么是拦截器? 是一种动态拦截方法调用的机制,类似于过滤器。 拦截器是Spring框架中提供的,用来动态拦截控制器方法的执行。 拦截器的作用:拦截请求,在指定方法调用前后,根…...
Fort Firewall:全方位守护网络安全
Fort Firewall是一款专为 Windows 操作系统设计的开源防火墙工具,旨在为用户提供全面的网络安全保护。它基于 Windows 过滤平台(WFP),能够与系统无缝集成,确保高效的网络流量管理和安全防护。该软件支持实时监控网络流…...
第3章 基于三电平空间矢量的中点电位平衡策略
0 前言 在NPC型三电平逆变器的直流侧串联有两组参数规格完全一致的电解电容,由于三电平特殊的中点钳位结构,在进行SVPWM控制时,在一个完整开关周期内,直流侧电容C1、C2充放电不均匀,各自存储的总电荷不同,电容电压便不均等,存在一定的偏差。在不进行控制的情况下,系统无…...
九大服务构建高效 AIOps 平台,全面解决GenAI落地挑战
最近,DevOps运动的联合创始人Patrick Debois分享了他对AI平台与软件研发关系的深刻见解,让我们一起来探讨这个话题。 在AI的落地过程中,我们面临着两个主要难题: 引入AI编码工具后的开发者角色转变:随着像GitHub Copilot这样的AI工具的普及,工程师的角色正在发生深刻变革…...
Leetcode 131 分割回文串(纯DFS)
131. 分割回文串https://leetcode.cn/problems/palindrome-partitioning/https://leetcode.cn/problems/palindrome-partitioning/ 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。 示例 1:…...
我的AI工具箱Tauri+Django内容生产介绍和使用
在现代内容生产环境中,高效、自动化的工具能够显著提升生产力,降低人工成本。Tauri 与 Django 结合打造的工作箱,集成了强大的 音频处理、视频剪辑、内容下载 以及 AI 文章撰写 等模块,帮助用户在多媒体内容生产的各个环节实现高效…...
“星门计划对AI未来的意义——以及谁将掌控它”
“星门计划对AI未来的意义——以及谁将掌控它” 图片由DALL-E 3生成 就在几天前,唐纳德特朗普宣布了“星门计划”,OpenAI随即跟进,分享了更多细节。他们明确表示,计划在未来四年内投资5000亿美元,在美国为OpenAI构建一…...
论文阅读(八):结构方程模型用于研究数量遗传学中的因果表型网络
1.论文链接:Structural Equation Models for Studying Causal Phenotype Networks in Quantitative Genetics 摘要: 表型性状可能在它们之间发挥因果作用。例如,农业物种的高产可能会增加某些疾病的易感性,相反,疾病的…...