一个域名可以解析成多个ip地址,一般来说会轮询方式去解析成各个ip,但是如果其中一个服务器挂了,DNS不会立马将这个ip地址去掉,还是会解析成挂掉的ip,可能会造成访问失败。虽然客户端有重试,但还是会影响用户体验。
在应用web前加反向代理,安全性也会高一点。
正向代理:代理客户机
反向代理:代理服务器
反向代理机:使用keepalived双vip(虚拟ip)互为主备做高可用 www.xx.com 解析成两个虚拟ip
如何测试?
可以直接访问nginx web,也可以绑定域名访问
基于Kafka-Zookeeper-Nginx-FIlebeat-MySQL的日志清洗分析平台搭建
0. 分布式与集群的区别是什么?
太多的说法是分布式是不同的人做不同的事,集群是多个人做同一件事的说法了。
这太误导人了。
比如zookeeper
,3台机器的一个集群。
从系统应用来看zookeeper
,他就是集群,因为他为我提供了一样的服务。
但是这个集群内部,主从之间又有不同的分工,主负责写,从负责读,主从之间又要通过长连接来同步数据副本,这样看,他又是个分布式系统了。
redis
也是,kafka
也是…
其实分布式不一定就是不同的组件,同一个组件也可以,关键在于是否通过交换信息的方式进行协作。比如说Zookeeper
的节点都是对等的,但它自己就构成一个分布式系统。
也就是说,分布式是指通过网络连接的多个组件,通过交换信息协作
1. 环境准备:
-
准备好3台虚拟机搭建nginx和kafka集群
1C2G的配置即可
配置三台nginx服务器的原因:负载均衡
用户的流量过来了,按照调度的策略将他们调度分散到后端的web服务器上。
-
配置好静态ip地址、网关、dns
vim /etc/sysconfig/network-scripts/ifcfg-ens33
# 修改的几项配置 # 三台都需要修改 BOOTPROTO="static" IPADDR=192.168.183.130 GATEWAY=192.168.183.2 DNS1=114.114.114.114
[root@nginx-kafka03 ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 114.114.114.114
dns解析:
1、浏览器的缓存
2、本地hosts文件 --linux(/etc/hosts)
3、找本地域名服务器 – linux(/etc/resolv.conf)
至此以上需要重启一下网络服务
服务:常驻系统内存中的进程且可以提供一些系统和网络功能
现在最新的Linux系统都统一使用systemctl进行服务的管理
服务:NetworkManager (推荐)或者 network 只运行一个
启动/停止/重启:systemctl start/stop/restart NetworkManager
systemctl管理的服务,配置文件在/usr/lib/systemd/system
下,以.service
结尾的配置文件
-
修改主机名
目的:方便映射
vim /etc/hosthname
# nginx-kafka01/02/03
hostname -F /etc/hostname
-
每一台机器上都写好域名解析
这个文件的作用就是提供ip和主机名的对照作用,linux通过这个文件知道某个ip对应于某个主机名
vim /etc/hosts 192.168.0.94 nginx-kafka01 192.168.0.95 nginx-kafka02 192.168.0.96 nginx-kafka03
-
安装基本软件
yum install wget lsof vim -y
- 安装时间同步服务
yum -y install chrony
systemctl enable chronyd
systemctl start chronyd
设置时区:
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
- 关闭防火墙
[root@nginx-kafka01 ~]# systemctl stop firewalld
[root@nginx-kafka01 ~]# systemctl disable firewalld
-
关闭selinux:
vim /etc/selinux/config SELINUX=disabled
selinux关闭 需要重启机器
2. nginx配置文件
2.1 配置的含义
[root@nginx-kafka01 ~]# cd /etc/nginx/
[root@nginx-kafka01 nginx]# ls
conf.d fastcgi.conf.default koi-utf mime.types.default scgi_params uwsgi_params.default
default.d fastcgi_params koi-win nginx.conf scgi_params.default win-utf
fastcgi.conf fastcgi_params.default mime.types nginx.conf.default uwsgi_params
主配置文件: nginx.conf
... #全局块
events {
#events块
...
}
http #http块
{
... #http全局块
server #server块,一个网站一个server,server块写在http块里面
{
... #server全局块
location [PATTERN] #location块
{
...
}
location [PATTERN]
{
...
}
}
server
{
...
}
... #http全局块
}
- 全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
- events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
- http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
- server块:配置虚拟主机的相关参数,一个http中可以有多个server。
- location块:配置请求的路由,以及各种页面的处理情况
2.2 配置文件修改
nginx 的 default_server 指令可以定义默认的 server 去处理一些没有匹配到 server_name 的请求,如果没有显式定义,则会选取第一个定义的 server 作为 default_server。
vim nginx.conf
将
listen 80 default_server;
修改成:
listen 80;
vim /etc/nginx/conf.d/sc.conf
server {
# 没有指定域名就交给默认的服务器去访问
listen 80 default_server;
# 配置访问域名
server_name www.sc.com;
root /usr/share/nginx/html;
access_log /var/log/nginx/sc/access.log main;
location / {
}
}
2.3 语法检测
[root@nginx-kafka01 html]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: [emerg] open() "/var/log/nginx/sc/access.log" failed (2: No such file or directory)
nginx: configuration file /etc/nginx/nginx.conf test failed
# 日志文件地址中的文件夹不存在,新建一下即可
[root@nginx-kafka01 html]# mkdir /var/log/nginx/sc
[root@nginx-kafka01 html]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful