consul部署---多数据中心部署
1.版本
Consul:0.9.3
系统:centos 7.4
2.Consul介绍
官方URL:
https://www.consul.io/
Consul各版本更新细节介绍:
https://github.com/hashicorp/consul/blob/v1.4.0/CHANGELOG.md
关于raft算法和gossip协议介绍:
https://www.backendcloud.cn/2017/11/12/raft-gossip/
3.consul的两个用途
服务注册与服务发现
以下图为例,以往的做法是将后端IP+Port都配置在前段配置文件中,这会带来一下几个问题:
- 需要配置N个后端的网络位置,加大配置的复杂性
- 后端的网络位置变化,都需要改变每个前端的配置
- 在后端数量大的情况下,负载均衡需要前端程序内部解决,加重了前端程序的负担
- 后端出现故障(网络、设备、程序)时前端无法获得反馈,仍然将数据发送给后端,出现数据丢失的情况.
加入服务发现模块之后,后端A、B、C把当前自己的网络位置注册到服务发现模块,服务发现就以Key/Value的方式记录下,K一般是服务名,V就是IP:port。服务发现模块定时对注册的服务以轮询的方式进行健康检查。前端在调用服务A、B、C的时候,就根据服务发现模块下当前已有的网络位置,调用已有的服务。
集中配置管理
,每个数据中心内存在一个LAN Gossip池,它包含数据中心的所有成员——client和server。
LAN池用于以下几个目的:
1、 成员关系运行,client自动发现server,减少配置量
2、 分布式的故障检测,允许故障检测的工作由整个集群承担,而不是集中在少数server上
3、 Gossip池允许可靠和快速的事件广播,比如leader选举。
多个数据中心根据consul
******构成一个集群,一个集群存在唯一一个WAN Gossip
池,所有的server都(应)加入 WAN
Gossip池,不论是哪个数据中心的。WAN池提供的成员关系,允许server执行跨数据中心请求。
概念:client与server
不管是client还是server,都是consul集群中的一个节点,在consul中,不存在传统的server管理client这样的概念,它们之间是平等的,client与server具体的区别如下:
Client:
这种模式下,所有注册到当前节点的服务会被转发到SERVER,本身是不持久化这些信息。
Server:
功能和client都一样,唯一不同的是,它会把所有的信息持久化的本地,这样遇到故障,信息是可以被保留的。
Server-leader:
负责同步注册的信息给其它的SERVER,同时也负责各个节点的健康监测
4**. 常用命令**
consul ****** 生成consul集群的key
consul info consul运行状态信息
consul monitor 查看consul运行日志
consul members 查看consul lan
gossip中的IP(同一DC中的server和client)
consul members -wan 查看consul wan
gossip中的IP(不同DC中的server)
consul snapshot save kv_bak.snap 备份KV
consul snapshot restore kv_bak.snap 导入备份的KV数据
consul join -wan x.x.x.x 在Server节点执行,将该节点所在数据中心加入其他数据中心
5.部署
安装前要求
百度云盘连接
https://pan.baidu.com/s/1q9JpBfKUyNE-H_S1a8UJ8g
所需要的文件
更改主机名脚本
在每台服务器上创建目录把需要的安装包依赖包上传
[[email protected] ~]# mkdir /home/cries
[[email protected] ~]# cd /home/cries/
[[email protected] cries]# rz
安装consul
Server1 test1-server
tar -zxf consul_install_package.tgz -C /
解压consul包
ln /opt/consul/bin/consul /bin/
创建软链接
consul ******
Consul命令 生成一个唯一的mak
cd /opt/consul/etc/consul/
vim config-server.json
修改server的配置文件
[[email protected]]# vim /opt/consul/etc/systemd/consul-server.service修改配置文件
cd /opt/consul/
./install.sh
进入目录 安装consul
systemctl restart consul-server
systemctl status consul-server
启动成功
consul members
查看数据中心test1节点
Server2 test1-client
tar -zxf consul_install_package.tgz -C /
解压consul安装包
ln /opt/consul/bin/consul /bin/
创建软连接
vim /opt/consul/etc/consul/config-client.json
编辑配置文件 (ensrypt的mak必须一样 ip是server的ip)
cd /opt/consul/
./install.sh
进入目录安装consul
systemctl restart consul-client
重启consul
systemctl status consul-client
查看是否启动成功
consul members查看数据库test1的节点 client已经添加入数据库中
Web页面访问(server的ip+8500端口号)
Server3 test2-server
tar -zxf consul_install_package.tgz -C /
解压consul安装包
ln /opt/consul/bin/consul /bin/
创建软链接
vim /opt/consul/etc/consul/config-server.json编辑配置文件
cd /opt/consul/
./install.sh
进入目录安装consul
systemctl restart consul-server
重启consul
systemctl status consul-server
查看consul状态 看是否启动成功
去server1添加server3
consul join -wan 192.168.11.208
将server3添加到server1中(因为这两个不是一个数据中心)
consul members –wan
添加成功
刷新页面数据中心成了两个
6.多数据中心部署
DC-1:
- 全部为Server模
- 一台server配置文件start_join自己的IP,并开启bootstrap模式,其余两台start_join到这一台
- 其中一台启用UI,其它做备机
- 界面编辑、修改KV
- DC-2,DC-3向DC-1获取KV
DC-2、DC-3:
- Server-A启用bootstrap模式
- Client-B1~B* start_join Server-B
- Client-C1~C* start_join Server-C
- Server-B、Server-C、Server-A start_join Server-A
——————————————————————————
在每台服务器上安装av_frag_rssb
tar -zxf av_frag_rssb.tar.gz
解压av_frag_rssb
rm -rf /root/.bash_profile
cp .bash_profile /root/
删除原有的环境变量把新的环境变量复制过去
rpm -ivh framework-1.0.6-1.el6.x86_64.rpm
安装framework
source /root/.bash_profile
使环境变量立即生效
cp libasmislog.so libsoqav_dedup.so /opt/MESA/lib/
chmod 755 /opt/MESA/lib/libasmislog.so libsoqav_dedup.so
复制两个依赖包到指定目录先,并给与执行权限
cd /home/cries/av_frag_rssb/
ldd av_rssb_maskey
进入目录 并进行测试
7.管理配置文件详解
在KEY/VALUE中创建配置文件目录(AV_RSSB_MAIN_CONF)
进入刚创建的目录,创建配置文件对应的Section及配置参数
[DEBUG]
FileStorePath=./log/file/
FileStoreSwitch=0
FragSurveyInvalid=0
HlsAboffsetInMode=1
JSONLocalSwitch=0
[LOG]
AppName=av_rssb
FragLogLevel= 20
FragLogPath= ./log/frag.log
LogLevel= 30
LogPath= ./log/runtime.log
MediaCreateLogPath= ./log/media_create.log
MediaExpireLogPath= ./log/media_expire.log
RespLogPath= ./log/survey.log
StatCycle=30
StatFile=./log/rssb_stat.log
StatRemoteSwitch=1
StatServerIP=10.4.20.206
StatServerPort=8125
SysinfoCycle=30
SysinfoFile=./log/rssb_sysinfo.log
[NETWORK]
BizmanAckAccumulateNum=5
BizmanAckAccumulateTime=10
BizmanAckPort=22084
BizmanAckSmoothTime= 10
BizmanPort=22082
CPZMsgPort=22080
FwdIP=eth2
LocalIP=eth2
QDMsgPort=22080
UdpSendIP=127.0.0.1;127.0.0.1;
UdpSendIPNum=2
UdpSendPort=33082;33083
[SYSTEM]
AckSwitch=0
AsmisSwitch=0
BizmanQueueMaxnum=2000000
BizmanQueueMode=1
CPZTpye=0
IVISwitch=1
IndexQueryTime=10
IndexQueryTimerCbMaxNum=500
MediaHashElemNum=1048576
MediaHashExpireTime=300
MediaHashSize=65536
ModifyCapIPSwitch=1
RenewTimeMax=7200
RenewTimeMin=600
RenewTimeStep=6
ThreadNum=1
[VOIP]
VOIPFilterSwitch=0
VOIPFullLogIP=
VOIPFullLogIPNum=
VOIPFullLogPort=
VOIPLogLevel= 20
VOIPLogPath= ./log/voip.log
VOIPSurveyLogIP=
VOIPSurveyLogIPNum=
VOIPSurveyLogPort=
[WLB]
bfd_recv_port=0
capacity=32
cost=32
data_port=30000
health_check_interval=10
health_check_port=52100
user_tag=xx
wlb_group_name=xx
wlb_on=0
wlb_report_interval=10
wlb_topic=AV
对应的配置文件为av_frag_rssb/conf/main.conf,其中WIRED_INFO这个Section为自动生成,不需要配置,
#######################################
Test2同步test1的数据
cp consul-replicate /opt/consul/bin/
复制脚本到指定目录下
chmod 755 /opt/consul/bin/consul-replicate
给予权限
cd /opt/consul/bin/
./consul-replicate -prefix “[email protected]” &>/dev/null &
启动脚本
脚本启动后就会同步