一、先準備三個虛擬機:
ip:
10.10.102.60
10.10.102.61
10.10.102.62
二寞肖、hostname修改:
永久修改hostname,hostname全部修改為ip
編輯hostname內容:#vim /etc/hostname
將內容刪掉哲身,修改為ip
重啟服務器:#reboot
查看hostname是否修改:#hostname
三辩涝、建立etcd集群
安裝etcd: #yum install etcd -y
如果出現以下情況:
可以嘗試此處提供的兩種解決方案:
a、先自己點擊http://mirrors.cug.edu.cn/.....的那個鏈接勘天,如果可以我們本地網絡可以訪問得到怔揩,那么證明是服務器的網絡問題,可以修改dns脯丝,方法如下:
- 命令行輸入 sudo vim /etc/resolv.conf
- 點擊 i 進入編輯模式
- 修改文件內容:
nameserver 202.101.172.46 #修改成你的主DNS商膊,由于本人在杭州,所以這里用的是杭州電信的dns
search localhost #你的域名 - 點擊 esc 退出編輯模式
- 輸入 :wq 后回車鍵退出
之后執(zhí)行下:
yum makecache
搞定后重新安裝一遍etcd宠进,如果問題還是沒有解決則嘗試用b方案晕拆。
b、由提示的異巢牡牛可以看出实幕,是找不到etcd-2.3.7-2.el7.x86_64導致的阱高,解決方案如下:
先在網上下載etcd-2.3.7-2.el7.x86_64.rpm
- 采用命令:scp /home/rice/桌面/etcd-2.3.7-2.el7.x86_64.rpm root@10.10.102.62:/tmp/etcd-2.3.7-2.el7.x86_64.rpm
(etcd-2.3.7-2.el7.x86_64.rpm的文件地址根據實際情況修改)將文件遠程上傳到虛擬機上 - 采用命令:rpm -i etcd-2.3.7-2.el7.x86_64.rpm (進行安裝)
- 安裝后會出現
不過沒關系,重新安裝一次etcd即可茬缩。
安裝成功后配置etcd集群
修改etcd配置文件,我這里的環(huán)境是在/etc/etcd/etcd.conf,請根據實際情況修改吼旧。
etcd0配置示例:
#[member]
# 節(jié)點名稱
ETCD_NAME=etcd0
# # 數據存放位置
ETCD_DATA_DIR="/var/lib/etcd/etcd0"
# # 監(jiān)聽其他 Etcd 實例的地址
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
# # 監(jiān)聽客戶端地址
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"
# # 通知其他 Etcd 實例地址
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.10.102.60:2380"
# # 初始化集群內節(jié)點地址
ETCD_INITIAL_CLUSTER="etcd0=http://10.10.102.60:2380,etcd1=http://10.10.102.61:2380,etcd2=http://10.10.102.62:2380"
# # 初始化集群狀態(tài)凰锡,new 表示新建
ETCD_INITIAL_CLUSTER_STATE="new"
# # 初始化集群 token
ETCD_INITIAL_CLUSTER_TOKEN="mritd-etcd-cluster"
# # 通知 客戶端地址
ETCD_ADVERTISE_CLIENT_URLS="http://10.10.102.60:2379,http://10.10.102.60:4001"
etcd1配置示例:
#[member]
# 節(jié)點名稱
ETCD_NAME=etcd1
# # 數據存放位置
ETCD_DATA_DIR="/var/lib/etcd/etcd1"
# # 監(jiān)聽其他 Etcd 實例的地址
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
# # 監(jiān)聽客戶端地址
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"
# # 通知其他 Etcd 實例地址
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.10.102.61:2380"
# # 初始化集群內節(jié)點地址
ETCD_INITIAL_CLUSTER="etcd0=http://10.10.102.60:2380,etcd1=http://10.10.102.61:2380,etcd2=http://10.10.102.62:2380"
# # 初始化集群狀態(tài),new 表示新建
ETCD_INITIAL_CLUSTER_STATE="new"
# # 初始化集群 token
ETCD_INITIAL_CLUSTER_TOKEN="mritd-etcd-cluster"
# # 通知 客戶端地址
ETCD_ADVERTISE_CLIENT_URLS="http://10.10.102.61:2379,http://10.10.102.61:4001"
etcd2配置示例:
#[member]
# 節(jié)點名稱
ETCD_NAME=etcd2
# # 數據存放位置
ETCD_DATA_DIR="/var/lib/etcd/etcd2"
# # 監(jiān)聽其他 Etcd 實例的地址
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
# # 監(jiān)聽客戶端地址
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"
# # 通知其他 Etcd 實例地址
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.10.102.62:2380"
# # 初始化集群內節(jié)點地址
ETCD_INITIAL_CLUSTER="etcd0=http://10.10.102.60:2380,etcd1=http://10.10.102.61:2380,etcd2=http://10.10.102.62:2380"
# # 初始化集群狀態(tài)圈暗,new 表示新建
ETCD_INITIAL_CLUSTER_STATE="new"
# # 初始化集群 token
ETCD_INITIAL_CLUSTER_TOKEN="mritd-etcd-cluster"
# # 通知 客戶端地址
ETCD_ADVERTISE_CLIENT_URLS="http://10.10.102.62:2379,http://10.10.102.62:4001"
針對以上配置參數做些解釋:
ETCD_NAME :ETCD的節(jié)點名掂为,在集群中應該保持唯一,可以使用 hostname员串。
ETCD_DATA_DIR:ETCD的數據存儲目錄勇哗,服務運行數據保存的路徑,默認為 ${name}.etcd寸齐。
ETCD_SNAPSHOT_COUNTER:多少次的事務提交將觸發(fā)一次快照欲诺,指定有多少事務(transaction)被提交時,觸發(fā)截取快照保存到磁盤渺鹦。
ETCD_HEARTBEAT_INTERVAL:ETCD節(jié)點之間心跳傳輸的間隔扰法,單位毫秒,leader 多久發(fā)送一次心跳到 followers毅厚。默認值是 100ms塞颁。
ETCD_ELECTION_TIMEOUT:該節(jié)點參與選舉的最大超時時間,單位毫秒吸耿,重新投票的超時時間祠锣,如果 follow 在該時間間隔沒有收到心跳包,會觸發(fā)重新投票咽安,默認為 1000 ms伴网。
ETCD_LISTEN_PEER_URLS:該節(jié)點與其他節(jié)點通信時所監(jiān)聽的地址列表,多個地址使用逗號隔開板乙,其格式可以劃分為scheme://IP:PORT是偷,這里的scheme可以是http、https募逞。和同伴通信的地址蛋铆,比如 http://ip:2380 ,如果有多個放接,使用逗號分隔刺啦。需要所有節(jié)點都能夠訪問,所以不要使用 localhost纠脾。
ETCD_LISTEN_CLIENT_URLS:該節(jié)點與客戶端通信時監(jiān)聽的地址列表玛瘸,對外提供服務的地址:比如 http://ip:2379 ,http://127.0.0.1:2379 蜕青,客戶端會連接到這里和 etcd 交互
ETCD_INITIAL_ADVERTISE_PEER_URLS:該成員節(jié)點在整個集群中的通信地址列表,這個地址用來傳輸集群數據的地址糊渊。因此這個地址必須是可以連接集群中所有的成員的右核。該節(jié)點同伴監(jiān)聽地址,這個值會告訴集群中其他節(jié)點渺绒。
ETCD_INITIAL_CLUSTER:配置集群內部所有成員地址贺喝,其格式為:ETCD_NAME=ETCD_INITIAL_ADVERTISE_PEER_URLS,如果有多個使用逗號隔開宗兼,集群中所有節(jié)點的信息躏鱼,格式為 node1=http://ip1:2380 ,node2=http://ip2:2380 ,…。注意:這里的 node1 是節(jié)點的 --name 指定的名字殷绍;后面的 ip1:2380 是 --initial-advertise-peer-urls 指定的值
ETCD_ADVERTISE_CLIENT_URLS:廣播給集群中其他成員自己的客戶端地址列表
ETCD_INITIAL_CLUSTER_STATE:新建集群的時候染苛,這個值為new;假如已經存在的集群主到,這個值為 existing茶行。
ETCD_INITIAL_CLUSTER_TOKEN:初始化集群token,創(chuàng)建集群的token镰烧,這個值每個集群保持唯一拢军。這樣的話,如果你要重新創(chuàng)建集群怔鳖,即使配置和之前一樣茉唉,也會再次生成新的集群和節(jié)點 uuid;否則會導致多個集群之間的沖突结执,造成未知的錯誤度陆。
注意:所有ETCD_MY_FLAG的配置參數也可以通過命令行參數進行設置,但是命令行指定的參數優(yōu)先級更高献幔,同時存在時會覆蓋環(huán)境變量對應的值懂傀。
測試etcd集群
按上面配置好各集群節(jié)點后,分別在各節(jié)點啟動etcd蜡感。
[root@etcd2 ~]# $ systemctl start etcd
查看所有集群節(jié)點信息蹬蚁。
[root@etcd1 ~]# etcdctl member list
Error: client: etcd cluster is unavailable or misconfigured; error #0: dial tcp 127.0.0.1:4001: getsockopt: connection refused
; error #1: dial tcp 127.0.0.1:2379: getsockopt: connection refused
error #0: dial tcp 127.0.0.1:4001: getsockopt: connection refused
error #1: dial tcp 127.0.0.1:2379: getsockopt: connection refused
如果出現以上錯誤信息,可以通過該方法解決:
在etcd配置文件中的ETCD_LISTEN_CLIENT_URLS項郑兴,加入http://127.0.0.1:2379 ,http://127.0.0.1:4001 犀斋。如:
ETCD_LISTEN_CLIENT_URLS="http://10.10.102.61:2379,http://10.10.102.61:4001,http://127.0.0.1:2379,http://127.0.0.1:4001"
再次查詢:
[root@etcd2 ~]# etcdctl member list
ce2a822cea30bfca: name=etcd2 peerURLs=http://localhost:2380,http://localhost:7001 clientURLs=http://10.10.102.61:2379,http://10.10.102.61:4001 isLeader=true
如果查詢出現:
由提示可知:是集群節(jié)點的版本太低導致的,
在etcd0上:
[root@10 ~]# etcd --version
etcd Version: 3.1.9
Git SHA: 0f4a535
Go Version: go1.7.4
Go OS/Arch: linux/amd64
在etcd1和etcd2上:
[root@10 ~]# etcd --version
etcd Version: 2.3.7
Git SHA: fd17c91
Go Version: go1.6.3
Go OS/Arch: linux/amd64
解決方法是卸載了某個集群節(jié)點的etcd情连,然后安裝同樣版本號的etcd即可叽粹,在這里我將低版本的卸載掉,重新安裝高版本的。
卸載方法:
[root@10 ~]# yum remove etcd
重新安裝好后虫几,再重新像上面那樣配置 etcd.conf锤灿,后啟動etcd,查看集群狀態(tài):
[root@10 tmp]# etcdctl member list
81816861758ee8a9: name=etcd2 peerURLs=http://10.10.102.62:2380 clientURLs=http://10.10.102.62:2379,http://10.10.102.62:4001 isLeader=false
9551f10c6eb4d835: name=etcd0 peerURLs=http://10.10.102.60:2380 clientURLs=http://10.10.102.60:2379,http://10.10.102.60:4001 isLeader=false
e2f8b90ab44a9152: name=etcd1 peerURLs=http://10.10.102.61:2380 clientURLs=http://10.10.102.61:2379,http://10.10.102.61:4001 isLeader=true
證明集群部署成功辆脸。