云服务器下 centos7,nginx 面试题
传统的负载均衡,如果 Upstream 参数发生变化,每次都需要重新加载 nginx.conf 文件,
因此扩展性不是很高,所以我们可以采用动态负载均衡,实现 Upstream 可配置化、动态化,无需人工重新加载 nginx.conf。
这类似分布式的配置中心
什么是 consul?
Consul 是一款开源的分布式服务注册与发现系统,通过 HTTP API 可以使得服务注册、发现实现起来非常简单,它支持如下特性。
服务注册:服务实现者可以通过 HTTP API 或 DNS 方式,将服务注册到 Consul。
服务发现:服务消费者可以通过 HTTP API 或 DNS 方式,从 Consul 获取服
务的 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
=======================
评论