设置git同时推送github和gitee远程仓库
进入工程根目录打开.git文件夹(需要显示隐藏文件夹)
打开.git文件夹下的config文件进行编辑添加github和gitee仓库地址
推送验证
进入工程根目录打开.git文件夹(需要显示隐藏文件夹)
打开.git文件夹下的config文件进行编辑添加github和gitee仓库地址
推送验证
负载均衡器(LB)负责分发设备的 MQTT 连接与消息到 EMQ X 集群,采用 LB 可以提高 EMQ X 集群可用性、实现负载平衡以及动态扩容。
HAProxy 是一款使用 C 语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于 TCP 和 HTTP 的应用程序代理,它是免费、快速并且可靠的一种解决方案。
本文将介绍如何基于 HAProxy 部署 EMQ X 集群并在 HAProxy 上终结 SSL 连接,这种部署模式下 EMQ X 单集群可轻松支持数百万设备。
准备
软硬件版本
Ubuntu 18.04
EMQ X Broker v4.2.5
HAProxy 2.2+
机器分配
172.16.239.107:HAProxy
172.16.239.108:EMQ X 节点 1
172.16.239.109:EMQ X 节点 2
安装
EMQX
参考 EMQ X Broker
wget https://www.emqx.io/downloads/broker/v4.2.5/emqx-ubuntu18.04-4.2.5-x86_64.zip
unzip emqx-ubuntu18.04-4.2.5-x86_64.zip
HAProxy
sudo apt-get update
sudo apt-get install software-properties-common -y
sudo add-apt-repository -y ppa:vbernat/haproxy-2.2
sudo apt-get update
sudo apt-get install -y haproxy=2.2.*
配置
EMQX
修改 emqx/etc/emqx.conf 配置文件,另一台同理
node.name = emqx@172.16.239.108
cluster.discovery = static
cluster.static.seeds = emqx@172.16.239.108, emqx@172.16.239.109
listener.tcp.external.proxy_protocol = on
HAProxy
修改 /etc/haproxy/haproxy.cfg
添加 TCP backend 配置
backend backend_emqx_tcp
mode tcp
balance roundrobin
server emqx_node_1 172.16.239.108:1883 check-send-proxy send-proxy-v2 check inter 10s fall 2 rise 5
server emqx_node_2 172.16.239.109:1883 check-send-proxy send-proxy-v2 check inter 10s fall 2 rise 5
添加 dashboard backend 配置
backend backend_emqx_dashboard
balance roundrobin
server emqx_node_1 172.16.239.108:18083 check
server emqx_node_2 172.16.239.109:18083 check
添加 TCP frontend 配置
frontend frontend_emqx_tcp
bind *:1883
option tcplog
mode tcp
default_backend backend_emqx_tcp
添加 dashboard frontend 配置
frontend frontend_emqx_dashboard
bind *:18083
option tcplog
mode tcp
default_backend backend_emqx_dashboard
运行
EMQX
$ ./bin/emqx start
$ ./bin/emqx_ctl cluster status
Cluster status: #{running_nodes =>
['emqx@172.16.239.108','emqx@172.16.239.109'],
stopped_nodes => []}
HAProxy
$ sudo service haproxy start
此时便可以通过 18083 访问 dashboard
通过 1883 连接到集群,连接情况可以在 dashboard 查看,或者在节点上执行命令
$ ./bin/emqx_ctl clients list
证书
如果需要 TLS 终结,先准备好 emqx.key 和 emqx.crt 文件,然后合并生成 emqx.pem 文件
$ cat emqx.crt emqx.key > emqx.pem
然后添加以下配置即可
frontend frontend_emqx_tcp
bind *:8883 ssl crt /opt/certs/emqx.pem no-sslv3
option tcplog
mode tcp
default_backend backend_emqx_tcp
至此,我们完成了基于 HAProxy 搭建 EMQ X 集群以及使用
负载均衡
负载均衡部分是非常简单的。
upstream my_http {
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:9090 weight=2;
}
server {
listen 80;
listen [::]:80;
# security
include nginxconfig.io/security.conf;
location / {
include nginxconfig.io/proxy.conf;
proxy_pass http://my_http;
}
}
重点就在于upstream部分。此处需要先定义一个upstream,然后在下方引用即可。
分配方式在upstream块中定义即可。
nginx的upstream目前支持5种方式的分配
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
3、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream bakend {
ip_hash;
server 192.168.203.14:88;
server 192.168.203.15:80;
}
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream bakend {
fair;
server 192.168.203.14:88;
server 192.168.203.15:80;
}
5、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
自动容灾(故障转移)
下面就是本文的重头戏,关于nginx的自动容灾(故障转移)部分。
所谓自动容灾(故障转移),就是在后台服务器中出现故障时,能够自动转移到健康的服务器上,来维持整个服务的稳定。
配置也是比较简单的,在负载均衡的基础上添加一些配置即可。重点在于两段加了注释的内容,其余的都是装饰。
upstream backend_server {
server 192.168.203.43:80 weight=1 max_fails=2 fail_timeout=10s;
server 192.168.203.44:80 weight=1 max_fails=2 fail_timeout=10s;
server 192.168.203.45:80 weight=1 max_fails=2 fail_timeout=10s;
}
server {
listen 80;
listen [::]:80;
# security
include nginxconfig.io/security.conf;
location / {
#如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。
proxy_next_upstream http_502 http_504 error timeout invalid_header;
#设置一些超时时间。可选
proxy_next_upstream_timeout 1s;
proxy_next_upstream_tries 2;
proxy_connect_timeout 1s;
proxy_read_timeout 1s;
proxy_send_timeout 1s;
include nginxconfig.io/proxy.conf;
proxy_pass http://my_http;
}
}
更改索引方式
InfluxDB 默认的索引是在内存上维护的,不断地数据增长会使用越来越多的内存,并有一个参数 index-version 可以设置索引方式。如果是直接在主机上部署的可以修改配置文件,Docker 部署则需要通过环境变量设置:
environment:
INFLUXDB_DATA_INDEX_VERSION: tsi1
将索引数据存储在磁盘上,可以通过日志或者查看分片的目录结构验证修改是否生效,若索引方式为 tsi1,在分片目录下会有一个名为 index 的目录,inmem 索引则没有。
具体位置是 /var/lib/influxdb/data/<数据库>/<保留策略>/<分片>。
[root@izuf6czs1dw6siz3zokdiez 1_day]# ls
1 10 11 12 13 14 15 16 18 19 20 21 3 4 5 6 7 8 9
[root@izuf6czs1dw6siz3zokdiez 1_day]# cd 15
[root@izuf6czs1dw6siz3zokdiez 15]# ls
000000001-000000001.tsm fields.idx index
禁用状态监控
默认情况下 InfluxDB 会维护一个 _internal 库,来监控系统状态,但是会产生不必要的数据,官方不推荐在生产环境下使用 _internal 库。
InfluxData does not recommend using the _internal database in a production cluster. It creates unnecessary overhead, particularly for busy clusters, that can overload an already loaded cluster. Metrics stored in the _internal database primarily measure workload performance and should only be tested in non-production environments.
添加环境变量:
environment:
INFLUXDB_DATA_INDEX_VERSION: tsi1
INFLUXDB_MONITOR_STORE_ENABLED: "false"