P8实战(二):分布式锁前置技能 etcd 集群搭建
etcd 集群環(huán)境搭建
13 什么是 etcd?
etcd 是一個分布式高可用的 Key/Value 存儲系統(tǒng),旨在可靠、快速地保存和提供對關鍵數(shù)據(jù)的訪問,主要用于分享配置和服務發(fā)現(xiàn)。它通過分布式鎖定、領導人選舉和編寫障礙實現(xiàn)可靠的分布式協(xié)調。etcd集群用于高可用性和永久數(shù)據(jù)存儲和檢索。(為后續(xù)分布式 id 的生成做準備)
etcd 和 Zookeeper 的區(qū)別?
zookeeper 是用 java 開發(fā)的,被 Apache 很多項目采用。etcd 是用 go 開發(fā)的,主要是被 Kubernetes 采用。zookeeper 非常穩(wěn)定,是一個著名的分布式協(xié)調系統(tǒng),etcd 是后起之秀,前景廣闊。因為 etcd 是用 go 寫的,現(xiàn)在還沒有很好的 java 客戶端庫,需要通過 http 方式調用。而 zookeeper 在這方面就成熟很多,對于 java 之外的其他開發(fā)語言都有很好的客戶端庫。
具體選擇 zookeeper 還是 etcd,需要根據(jù)您的需求結合它們各自的特性進行判斷,還有您所使用的開發(fā)語言。
etcd 停止開發(fā)了嗎?
2019 年回答:etcd 沒有停止開發(fā),Google、Red Hat、阿里巴巴都有投人進去。但是 CoreOS 被 RedHat 收購后,原 etcd 核心開發(fā)人員都離開了。新來的當然沒有老革命這么有熱情,搞個大事情啥的。而且目前功能也比較穩(wěn)定,趨于偏維護狀態(tài)。
13.1 Rancher Master節(jié)點(etcd開源數(shù)據(jù)庫)
主機規(guī)劃
| 01 | p8-etcd-node01-master | Node01 | 1 | 10.0.0.140 | 123.57.59.137 | 2C 4G | wget &&yum install -y etcd | CentOS7x64 1810 |
| 02 | p8-etcd-node02-slave01 | Node02 | 1 | 10.0.0.141 | 123.57.59.138 | 2C 4G | wget &&yum install -y etcd | CentOS7x64 1810 |
| 03 | p8-etcd-node02-slave02 | Node03 | 1 | 10.0.0.142 | 123.57.59.139 | 2C 4G | wget &&yum install -y etcd | CentOS7x64 1810 |
IP 地址一般設置為連續(xù)的,在寫自動化腳本的時候,寫個循環(huán)就過去了,比較方便。
PS:這里要注意 etcd 并不是很吃硬件,如果業(yè)務量不是很大的話給2C 4G就夠了,如果業(yè)務量比較大的話4G 8G-16G或更大的硬件配置,自己靈活掌握。安裝的時候需要注意7.2版本坑比較多,跟etcd的版本存在兼容性的問題,自己安裝的過程中容易翻車。
CentOS7x64 1810版本下載鏈接 鏈接:https://pan.baidu.com/s/14PWga1We99tkZLJyS_q0gQ 提取碼:glk4
XShell XFtp Typora軟件下載鏈接 鏈接:https://pan.baidu.com/s/1NZWfWqKezXewsHpV0gc2-A 提取碼:48xc
etcd 官方給出的硬件配置 https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/hardware.md
13.2 設置主機 hostname
hostnamectl set-hostname p8-etcd-node01-master hostnamectl set-hostname p8-etcd-node02-slave01 hostnamectl set-hostname p8-etcd-node02-slave02為什么要設置 hostname?
多年老運維要有好的運維習慣,就像編碼規(guī)范那樣。它的作用是,如果沒有 DNS 的情況下,我們可以用 host 文件做 host 解析,相當于是 DNS。當然,如果有條件的話,你也可以做內網(wǎng) DNS,也是一種解決方案。
13.3 修改 IP 地址(有必要的話,就設置 hosts 解析)
虛擬機是虛擬網(wǎng)卡,叫 ens33,物理網(wǎng)卡叫 eth0,eth1…,如果是 Dell 的服務器,也有可能是 em1,em2…
cd /etc/sysconfig/network-scripts && vim ifcfg-ens3313.4 安裝 etcd 搭建集群環(huán)境
etcd集群三種方式:靜態(tài)集群,動態(tài)集群,DNS集群;我們這里搭建的是靜態(tài)集群。
三臺機器上都需要安裝
yum install -y etcd效驗安裝
rpm -qa etcd查看安裝的 etcd 的版本號
etcdctl -v或
etcdctl --version13.5 修改配置文件搭建集群環(huán)境
修改之前先備份!
cp /etc/etcd/etcd.conf /etc/etcd/etcd.conf.bak cd /etc/etcd && vim etcd.conf配置文件修改如下,需要修改的地方均已用注釋 “# 【這里】…” 標出,(坑:最后記得把中文注釋刪掉,否則會報錯)
#[Member] #ETCD_CORS="" ETCD_DATA_DIR="/var/lib/etcd/default.etcd" #ETCD_WAL_DIR="" ETCD_LISTEN_PEER_URLS="http://10.0.0.140:2380" # 【這里】打開這行注釋,并且將localhost修改為本機的ip地址 ETCD_LISTEN_CLIENT_URLS="http://10.0.0.140:2379,http://127.0.0.1:2379" # 【這里】修改ip地址,注意要添加一個127.0.0.1:2379的環(huán)回地址 CD_MAX_SNAPSHOTS="5" #ETCD_MAX_WALS="5" ETCD_NAME="Master" # 【這里】將default修改為Master,Node02,Node03 #ETCD_SNAPSHOT_COUNT="100000" #ETCD_HEARTBEAT_INTERVAL="100" #ETCD_ELECTION_TIMEOUT="1000" #ETCD_QUOTA_BACKEND_BYTES="0" #ETCD_MAX_REQUEST_BYTES="1572864" #ETCD_GRPC_KEEPALIVE_MIN_TIME="5s" #ETCD_GRPC_KEEPALIVE_INTERVAL="2h0m0s" #ETCD_GRPC_KEEPALIVE_TIMEOUT="20s" # #[Clustering] ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.140:2380" # 【這里】修改本機ip ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.140:2379" # 【這里】修改本機ip #ETCD_DISCOVERY="" #ETCD_DISCOVERY_FALLBACK="proxy" #ETCD_DISCOVERY_PROXY="" #ETCD_DISCOVERY_SRV="" ETCD_INITIAL_CLUSTER="Master=http://10.0.0.140:2380,Node02=http://10.0.0.141:2380,Node03=http://10.0.0.142:2380" # 【這里】必須和上面配置的ETCD_NAME名稱相同。在三臺機器上,主節(jié)點始終放在第一個 ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" # 【這里】打開 ETCD_INITIAL_CLUSTER_STATE="new" # 【這里】打開 #ETCD_STRICT_RECONFIG_CHECK="true" #ETCD_ENABLE_V2="true" ...省略保存退出即可
運行 etcd 集群
注:三臺機器都運行以下命令之后,才能成功跑起來。只運行其中一臺時,會阻塞等待連接。
systemctl restart etcd systemctl status etcdetcdctl member list運行起來,這樣,集群就搭建成功了
測試一下
etcdctl set name yanliang # Master節(jié)點 etcdctl get name yanliang # Slave節(jié)點13.6 配置防火墻開放端口C7–firewalld
firewall-cmd --zone=public --add-port=2379/tcp --permanent firewall-cmd --zone=public --add-port=2380/tcp --permanent firewall-cmd --reload && firewall-cmd --list-ports13.7 查看集群列表/健康狀態(tài)
查看集群列表
etcdctl member list查看集群健康狀態(tài)
etcdctl cluster-health13.8 容易出現(xiàn)的問題
定時任務 / 計劃任務 / 定時同步時間
yum install -y ntp crontab -e 0 1 * * * /usr/sbin/ntpdate ntp.sjtu.edu.cn >> /var/log/ntpdate.log 2>&1 &各個節(jié)點配置 crontab 定時同步時間,否則可能會出現(xiàn)以下
node1 etcd[1657]: the clock difference against peer f63afbe816fb463d is too high [8h0m2.595609129s > 1s]這個問題, 將時間進行同步即可。
總結
以上是生活随笔為你收集整理的P8实战(二):分布式锁前置技能 etcd 集群搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: P8实战(一):架构概论,从过去到未来
- 下一篇: 响应式web(三):服务当中的三种耦合,