写点什么

云服务器下 centos7,nginx 面试题

用户头像
极客good
关注
发布于: 刚刚

传统的负载均衡,如果 Upstream 参数发生变化,每次都需要重新加载 nginx.conf 文件,


因此扩展性不是很高,所以我们可以采用动态负载均衡,实现 Upstream 可配置化、动态化,无需人工重新加载 nginx.conf。


这类似分布式的配置中心


什么是 consul?




Consul 是一款开源的分布式服务注册与发现系统,通过 HTTP API 可以使得服务注册、发现实现起来非常简单,它支持如下特性。


服务注册:服务实现者可以通过 HTTP API 或 DNS 方式,将服务注册到 Consul。


服务发现:服务消费者可以通过 HTTP API 或 DNS 方式,从 Consul 获取服


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


务的 IP 和 PORT。


故障检测:支持如 TCP、HTTP 等方式的健康检查机制,从而当服务有故障时自动摘除。


K/V 存储:使用 K/V 存储实现动态配置中心,其使用 HTTP 长轮询实现变更触发和配置更改。


多数据中心:支持多数据中心,可以按照数据中心注册和发现服务,即支持只消费本地机房服务,使用多数据中心集群还可以避免单数据中心的单点故障。


Raft 算法:Consul 使用 Raft 算法实现集群数据一致性。


通过 Consul 可以管理服务注册与发现,接下来需要有一个与 Nginx 部署在同一台机器的 Agent 来实现 Nginx 配置更改和 Nginx 重启功能。我们有 Confd 或者 Consul-template 两个选择,而 Consul-template 是 Consul 官方提供的,我们就选择它了。其使用 HTTP 长轮询实现变更触发和配置更改(使用 Consul 的 watch 命令实现)。也就是说,我们使用 Consul-template 实现配置模板,然后拉取 Consul 配置渲染模板来生成 Nginx 实际配置。


什么是 upsync?




百度是百度不到滴,这个据说是新浪微博开发滴 nginx 插件啊,会用就行。


Upsync 是新浪微博开源的基于 Nginx 实现动态配置的三方模块。Nginx-Upsync-Module 的功能是拉取 Consul 的后端 server 的列表,并动态更新 Nginx 的路由信息。此模块不依赖于任何第三方模块。Consul 作为 Nginx 的 DB,利用 Consul 的 KV 服务,每个 Nginx Work 进程独立的去拉取各个 upstream 的配置,并更新各自的路由。


什么是 nginx?




这个能百度有的,百度去吧哈哈。nginx 常见对吧负载均衡,反向代理,高性能服务器。高端一点就是七层负载均衡,也可以做四层负载均衡。

动态负载均衡实现方案?

这里也就不过多熬诉了,网上很多种方案,这里使用 Consul+upsync+Nginx


画个图就理解了。(自己手画滴请谅解)



下面就进入正题了啊,,,打开服务器安装软件,我这里已经安装好了,就不演示了安装这个环境之前你先把 nginx 依赖库都装好。(gcc gcc-c++,PCRE 库,安装 SSL 库,安装 zlib 库,安装 nginx)。


一,Consul 环境搭建(统一安装在 usr/local 不然我也不知道会报什么错)


==========================================


1.下载 consul_0.7.5_linux_amd64.zip

wget https://releases.hashicorp.com/consul/0.7.5/consul_0.7.5_linux_amd64.zip

2.解压 consul_0.7.5_linux_amd64.zip

unzip consul_0.7.5_linux_amd64.zip


-bash: unzip: 未找到命令如果解压出现该错误


解决办法


yum -y install unzip

3,执行以下 ./consul 出现以下信息就说明安装成功

<table border="1" cellspacing="0"><tbody><tr><td style="vertical-align:top;width:426.1pt;"><p style="margin-left:0cm;">[root@localhost soft] ./consul</p><p style="margin-left:0cm;">usage: consul [--version] [--help] <command> [<args>]</p><p style="margin-left:0cm;">Available commands are:</p><p style="margin-left:0cm;">    agent          Runs a Consul agent</p><p style="margin-left:0cm;">    configtest     Validate config file</p><p style="margin-left:0cm;">    event          Fire a new event</p><p style="margin-left:0cm;">    exec           Executes a command on Consul nodes</p><p style="margin-left:0cm;">    force-leave    Forces a member of the cluster to enter the "left" state</p><p style="margin-left:0cm;">    info           Provides debugging information for operators</p><p style="margin-left:0cm;">    join           Tell Consul agent to join cluster</p><p style="margin-left:0cm;">    keygen         Generates a new encryption key</p><p style="margin-left:0cm;">    keyring        Manages gossip layer encryption keys</p><p style="margin-left:0cm;">    kv             Interact with the key-value store</p><p style="margin-left:0cm;">    leave          Gracefully leaves the Consul cluster and shuts down</p><p style="margin-left:0cm;">    lock           Execute a command holding a lock</p><p style="margin-left:0cm;">    maint          Controls node or service maintenance mode</p><p style="margin-left:0cm;">    members        Lists the members of a Consul cluster</p><p style="margin-left:0cm;">    monitor        Stream logs from a Consul agent</p><p style="margin-left:0cm;">    operator       Provides cluster-level tools for Consul operators</p><p style="margin-left:0cm;">    reload         Triggers the agent to reload configuration files</p><p style="margin-left:0cm;">    rtt            Estimates network round trip time between nodes</p><p style="margin-left:0cm;">    snapshot       Saves, restores and inspects snapshots of Consul server state</p><p style="margin-left:0cm;">    version        Prints the Consul version</p><p style="margin-left:0cm;">    watch          Watch for changes in Consul</p></td></tr></tbody></table>

4.启动 consul

我的 linux Ip 地址 192.168.212.131


./consul agent -dev -ui -node=consul-dev -client=192.168.212.131

5.临时关闭防火墙 systemctl stop firewalld

6.浏览器访问(你服务器 ip):8500

就像下面一样。


7.使用 PostMan 注册 Http 服务

http://服务器ip:8500/v1/catalog/register


参数 1


<table border="1" cellspacing="0"><tbody><tr><td style="vertical-align:top;width:426.1pt;"><p style="margin-left:0cm;"><span style="color:#505050;">{"Datacenter": "dc1",</span></p><p style="margin-left:0cm;"><span style="color:#505050;"> "Node":"tomcat", "Address":"192.168.5.165","Service": {"Id" :"192.168.5.165:8080", "Service": "itmayiedu","tags": ["dev"], "Port": 8080}}</span></p></td></tr></tbody></table>

8,创建 upsync_dump_path

mkdir /usr/local/nginx/conf/servers/

upsync_dump_path 指定从 consul 拉取的上游服务器后持久化到的位置,这样即使 consul 服务器出问题了,本地还有一个备份。


Datacenter 指定数据中心,Address 指定服务 IP,Service.Id 指定服务唯一标识,Service.Service 指定服务分组,Service.tags 指定服务标签(如测试环境、预发环境等),Service.Port 指定服务端口。


二,安装 nginx-upsync-module


=======================

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
云服务器下centos7,nginx面试题