微服务自动化之集群的搭建

一、准备工作:

  • 需要搭建俩个虚拟机(centOS7安装)
  • 俩个虚拟机里面安装docker
  • 俩个虚拟机里面安装etcd

二、 搭建etcd集群

etcd构建自身高可用集群主要有三种形式:

  • 静态发现: 预先已知etcd集群中有哪些节点,在启动时通过--initial-cluster参数直接指定好etcd的各个节点地址
  • etcd动态发现:

静态配置前提是在搭建集群之前已经提前知道各节点的信息,而实际应用中可能存在预先并不知道各节点ip的情况,这时可通过已经搭建的etcd来辅助搭建新的etcd集群。通过已有的etcd集群作为数据交互点,然后在扩展新的集群时实现通过已有集群进行服务发现的机制。比如官方提供的:discovery.etcd.io

  • DNS动态发现: 通过DNS查询方式获取其他节点地址信息

1、集群搭建

  • 安装服务(etcd的安装)
  • 编辑etcd.conf文件,添加集群信息注意修改对应的ip

etcd.conf1

#########################################################
######  请根据各节点实际情况修改配置:1/3/4/5/6/7  ######
#########################################################
#[Member]
#1.节点名称,必须唯一
ETCD_NAME="etcd01"

#2.设置数据保存的目录
ETCD_DATA_DIR="/var/lib/etcd"

#3.用于监听其他etcd member的url
ETCD_LISTEN_PEER_URLS="http://192.168.44.138:2380"

#4.该节点对外提供服务的地址
ETCD_LISTEN_CLIENT_URLS="http://192.168.44.138:2379,http://127.0.0.1:2379"

#[Clustering]
#5.对外公告的该节点客户端监听地址
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.44.138:2379"

#6.该节点成员对等URL地址,且会通告集群的其余成员节点
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.44.138:2380"

#7.集群中所有节点的信息
ETCD_INITIAL_CLUSTER="etcd01=http://192.168.44.138:2380,etcd02=http://192.168.44.139:2380"

#8.创建集群的token,这个值每个集群保持唯一
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"

#9.初始集群状态,新建集群的时候,这个值为new;
ETCD_INITIAL_CLUSTER_STATE="new"

#10.flannel操作etcd使用的是v2的API,而kubernetes操作etcd使用的v3的API
#   为了兼容flannel,将默认开启v2版本,故配置文件中设置 
ETCD_ENABLE_V2="true"

 etcd.conf2

 #########################################################
######  请根据各节点实际情况修改配置:1/3/4/5/6/7  ######
#########################################################
#[Member]
#1.节点名称,必须唯一
ETCD_NAME="etcd02"

#2.设置数据保存的目录
ETCD_DATA_DIR="/var/lib/etcd"

#3.用于监听其他etcd member的url
ETCD_LISTEN_PEER_URLS="http://192.168.44.139:2380"

#4.该节点对外提供服务的地址
ETCD_LISTEN_CLIENT_URLS="http://192.168.44.139:2379,http://127.0.0.1:2379"

#[Clustering]
#5.对外公告的该节点客户端监听地址
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.44.139:2379"

#6.该节点成员对等URL地址,且会通告集群的其余成员节点
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.44.139:2380"

#7.集群中所有节点的信息
ETCD_INITIAL_CLUSTER="etcd01=http://192.168.44.138:2380,etcd02=http://192.168.44.139:2380"

#8.创建集群的token,这个值每个集群保持唯一
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"

#9.初始集群状态,新建集群的时候,这个值为new;
ETCD_INITIAL_CLUSTER_STATE="new"

#10.flannel操作etcd使用的是v2的API,而kubernetes操作etcd使用的v3的API
#   为了兼容flannel,将默认开启v2版本,故配置文件中设置 
ETCD_ENABLE_V2="true"

修改/etc/etcd/etcd.conf文件后,要先删除/var/lib/etcd目录下保存的数据,再重新启用服务,不然失败

cd /var/lib/etcd && rm -rf *

  • 为节点etcd01创建一个etcd服务 /etc/systemd/system/etcd.service

 etcd.service

[Unit]
Description=Etcd Server
Documentation=https://github.com/etcd-io/etcd
After=network.target

[Service]
User=root
Type=notify
## 根据实际情况修改EnvironmentFile和ExecStart这两个参数值
## 1.EnvironmentFile即配置文件的位置,注意“-”不能少
EnvironmentFile=-/etc/etcd/etcd.conf
## 2.ExecStart即etcd启动程序位置
ExecStart=/usr/local/bin/etcd
Restart=always
RestartSec=10s
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

  • 刷新

systemctl daemon-reload

  • 因为需要跨主机通信,需要开放防火墙端口

firewall-cmd --zone=public --add-port=2379/tcp --permanent  开启2379
firewall-cmd --zone=public --add-port=2380/tcp --permanent 开启2380
firewall-cmd --reload   重启
firewall-cmd --list-port  查看开启防火墙的端口

微服务自动化之集群的搭建_第1张图片 

  

然后启动 

  • 启动可能报错信息

master-16 etcd[25461]: request cluster ID mismatch (got bdd7c7c32bde1208 want 698851d67fea3c17)

原因: 集群ip地址变化后,除了修改/etc/etcd/etcd.conf 文件并重新启用服务外,还需要删除/var/lib/etcd目录下保存的数据
解决办法 :删除了etcd集群所有节点中的--data_dir的内容

  • 服务相关指令

systemctl daemon-reload  刷新
systemctl enable etcd  启动
systemctl start etcd   启动
systemctl status etcd  查看状态
systemctl stop etcd  停止
systemctl restart etcd  重启

在另一台虚拟机做同样操作

2.集群测试

各节点重启启动完成后,在任意节点执行etcdctl member list可列所有集群节点信息

etcdctl member list
etcdctl member list -w table
etcdctl endpoint health
etcdctl endpoint status

http命令

 etcdctl --endpoints=http://192.168.44.139:2379,http://192.168.44.139:2379,http://192.168.44.139:2379 endpoint health
etcdctl --endpoints=http://192.168.44.139:2379 endpoint health   
etcdctl --endpoints=http://192.168.44.139:2379 member list -w table

 

你可能感兴趣的:(微服务自动化,微服务,自动化,linux)