这句话什么意思?
意思是说当客户机来访问服务器的时候,服务器本身并不出面接待,而是将客户的请求转高给手下的子服务器(小弟)负责接待。
比如:你访问www.baidu.com,其实并不时百度总服务器接待的你,而是百度的代理服务器接待的你,不过他们的服务是一样的,提供同样的页面;
如是搭建Nginx服务才能实现这样的效果呢?
搭建一个最简单,最基础nginx代理服务器,需要一台代理服务,两台子服务器,XX台客户机来作验证;
操作流程如下:
第一步、服务器和客户机配好IP地址,其中Nginx代理服务器需要配置两张网卡,两个IP地址,一个和客户机通信,一个和子服务器通信;
代理服务器与客户机和子服务器都分别配置同网段IP地址;
例如:
代理服务器:192.168.4.5 192.168.2.5
子服务器 :192.168.2.100 192.168.2.200
客户机 :192.168.4.10
这样配置的好处是: 可以负载均衡,保障用户的访问体验,保障上网速度,同时也保障了,即便有一台服务器坏掉了,另一台服务可以接待用户访问;
第二步、代理服务器上安装Nginx服务软件,两台子服务器上安装HTTPD服务并写入相应的网页,然后启动服务;
yum -y install httpd ##安装httpd服务;
echo "罗贵" > /var/www/html/index.html ##写一个简单的网页
./configure --user=nginx --group=nginx --with-http_ssl_module
make && make install ##编译安装Nginx
第三步、修改Nginx的配置文件;
vim /usr /local /nginx /conf /nginx.conf
http { ............... ##在文件中找到http开头的行,并在http下面随意找两行添加下面两行的内容;
upstream luogui { ##luogui是集群名字,可以自由定义,upstream 上游的意思;翻译过来就是在上游建立一个名字为luogui的集群,集群中包含下述IP地址;
server 192.168.2.100:80
server 192.168.2.200:80
}
server {
listen 80
server_name www.luogui.com ##域名,可以自由定义;
location ^/.php$ { ##匹配网页地址的意思,匹配以 / 开头.php结尾的网页文件;
proxy_pass http://luogui ##通过proxy代理服务器将用户的请求转发给luogui集群服务器;(注:优先级最高,系统会优先处理这条命令)
}
}
第四步、测试效果;
firefox http://192.168.4.5 或者 本地测试 curl http://192.168.4.5
结果应该是暂停任何一台子服务器,客户机访问网页都没有问题;
以上.......
(EDN)
祝:开心!
罗贵
2019-04-05于深圳
1,切换到nginx的配置目录,找到nginx.conf文件
cd /usr/local/nginx/conf
vim nginx.conf
2,如果是单项目部署的话,只需要在nginx.conf文件里面加上以下
server{
listen 80
# 域名,本地测试可以使用127.0.0.1或localhost
server_name www.zhangc.cn
# php项目根目录
root /home/data-www/blog
location /{
# 定义首页索引文件的名称
index index.php index.html index.htm
# 影藏入口文件
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php
}
if (!-f $request_filename){
rewrite (.*) /index.php
}
try_files $uri $uri/ /index.php?$query_string
}
# PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI协议默认配置.
# Fastcgi服务器和程序(PHP)沟通的协议
.location ~ .*\.php${
# 设置监听端口
fastcgi_pass 127.0.0.1:9000
# 设置nginx的默认首页文件
fastcgi_index index.php
# 设置脚本文件请求的路径
fastcgi_param SCRIPT_FILENAME$document_root$fastcgi_script_name
# 引入fastcgi的配置文件
includefastcgi_params
fastcgi_split_path_info ^(.+?\.php)(/.*)$
set $path_info $fastcgi_path_info
fastcgi_param PATH_INFO $path_info
try_files $fastcgi_script_name =404
}
}
3,如果多项目部署,就需要配置vhost
第一步:编辑nginx.conf文件,在最后加上 include vhost/*.conf
第二步:进入vhost文件夹,创建 域名.conf 文件,如创建一个:quanma.meyat.com.conf
第三步:编辑quanma.meyat.com.conf文件,内容如下:
server
{
listen 80
server_name quanma.meyat.com
index index.html index.htm index.php default.html default.htm default.php
root /data/wwwroot/default/quanma/public/
#error_page 404 /404.html
location / {
index index.html index.php
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php
}
if (!-f $request_filename){
rewrite (.*) /index.php
}
try_files $uri $uri/ /index.php?$query_string
}
location ~ [^/]\.php(/|$)
{
# comment try_files $uri =404to enable pathinfo
#try_files $uri =404
fastcgi_pass 127.0.0.1:9000
fastcgi_index index.php
include fastcgi_params
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name
fastcgi_split_path_info ^(.+?\.php)(/.*)$
set $path_info $fastcgi_path_info
fastcgi_param PATH_INFO $path_info
try_files $fastcgi_script_name =404
#include fastcgi.conf
#include pathinfo.conf
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d
}
location ~ .*\.(js|css)?$
{
expires 12h
}
# Disallow access to .ht, .svn, .bzr, .git, .hg, .cvs directories
location ~ /\.(ht|svn|bzr|git|hg|cvs) {
deny all
}
#access_log /date/nginx/bmp.com.conf/access.log main
}
这里我们介绍动态PV第一个案例,部署3个副本的nginx服务。主要学习 volumeClaimTemplate 属性。
statefulSet的三个组成部分:
1)Headless Service :名为nginx,用来定义Pod网络标识( DNS domain)。
2)StatefulSet :定义具体应用,名为Nginx,有三个Pod副本,并为每个Pod定义了一个域名。
3)volumeClaimTemplates : 存储卷申请模板,创建PVC,指定pvc名称大小,将自动创建pvc,且pvc必须由存储类供应。
为什么需要 headless service 无头服务?
在用Deployment时,每一个Pod名称是没有顺序的,是随机字符串,因此是Pod名称是无序的,但是在statefulset中要求必须是有序 ,每一个pod不能被随意取代,pod重建后pod名称还是一样的。而pod IP是变化的,所以是以Pod名称来识别。pod名称是pod唯一性的标识符,必须持久稳定有效。这时候要用到无头服务,它可以给每个Pod一个唯一的名称 。
为什么需要volumeClaimTemplate?
对于有状态的副本集都会用到持久存储,对于分布式系统来讲,它的最大特点是数据是不一样的,所以各个节点不能使用同一存储卷,每个节点有自已的专用存储,但是如果在Deployment中的Pod template里定义的存储卷,是所有副本集共用一个存储卷,数据是相同的,因为是基于模板来的 ,而statefulset中每个Pod都要自已的专有存储卷,所以statefulset的存储卷就不能再用Pod模板来创建了,于是statefulSet使用volumeClaimTemplate,称为卷申请模板,它会为每个Pod生成不同的pvc,并绑定pv, 从而实现各pod有专用存储。这就是为什么要用volumeClaimTemplate的原因。
rbac
nfsnginx/nfsrbac.yml。与前文保持一致。
nfsnginx/nfsnginxstorage.yml。与前文介绍类似,注意修改storageClass的名称
如果定义多个副本。必须使用volumeClaimTemplate属性。如果定义1个副本。可以使用pod+pvc方式。
nfsnginx/nginxstatefulset.yml
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)