今天咱們不講三國,咱們講一講elasticsearch(如下簡稱ES)讀寫分離,這是個好東西,全文索引的時候使用它賊得勁,對elasticsearch索引原理不太清楚的,請自行查找相關的文章node
這裏不作闡述,最近我在網上找了好多,但是關於elasticsearch讀寫分離的文章確實少之又少,由於es不想MySQL那樣的數據庫有主從複製的機制,使用mycat等第三方的插件數據庫
也能夠實現讀寫分離的效果;因此咱們要根據es的分片的機制去實現讀寫分離,具體的原理以下圖所示:json
圖畫的比較醜,我這裏再詳細說明一下app
一、首先咱們須要配置es集羣的配置文件,讓es集羣分爲hot和cool兩個區curl
二、而後咱們在導入數據到es集羣以前,首先須要建立settings,在建立settings的時候,咱們須要指定分片所有分到hot區、副本數爲0(增長導入數據的速度),elasticsearch
三、導入數據到es,這樣咱們導入數據的時候就是在hot區進行的ui
四、調整副本數爲1,這樣是爲了後面的操做url
五、修改settings,指定分區爲cool區,這樣數據就會複製到cool區spa
六、讀取數據,這樣咱們讀取數據的時候就會從cool區去讀取了插件
IP地址 |
端口 |
Es版本號 |
分區 |
10.122.33.103 |
9202/9302 |
6.4.2 |
Hot |
10.122.33.104 |
9202/9302 |
6.4.2 |
hot |
10.122.33.96 |
9202/9302 |
6.4.2 |
Cool |
10.122.33.97 |
9202/9302 |
6.4.2 |
Cool |
10.122.33.97 |
9202/9302 |
6.4.2 |
Cool |
首先咱們須要配置es集羣的配置文件(如下只列出了讀寫分離所須要的配置):
#指定node的屬性標籤名(也就是上面說的分區名)
node.attr.rack: hot
#強制使分片與副本分離。若只有hot標籤的節點,索引只有分片能夠寫入,副本沒法分配;如有hot、cool兩種標籤節點,相同分片與其副本毫不在相同標籤節點上
cluster.routing.allocation.awareness.force.rack.values: hot,cool
cluster.routing.allocation.awareness.attributes: rack
#建立索引setting,指定分片在那個分區上(index_test1爲索引名)
curl -H "Content-Type: application/json" -XPUT 'http://10.122.33.103:9202/ dm_transaction_service_sum /' -d '{
"settings" : {
"index.routing.allocation.require.rack": "hot",
"number_of_replicas" : 0
}
}'
#查看分片的狀況(從查看分片的信息咱們能夠看到,默認的五個分片都在hot區)
#插入數據到es
按照上面分片的結果,能夠知道全部的寫操做都在103和104兩臺機器上
#更改副本數爲1
curl -H "Content-Type: application/json" -XPUT 'http://10.122.33.103:9202/ dm_transaction_service_sum_v20190114_new /_settings' -d '{
"number_of_replicas" : 1
}'
#把分片都挪到cool分區上,供後續索引查詢使用
curl -H "Content-Type: application/json" -XPUT 'http://10.122.33.103:9202/ dm_transaction_service_sum_v20190114_new /_settings' -d '{
"index.routing.allocation.require.rack": "cool",
"number_of_replicas" : 0
}'
#查看集羣分片的狀況(如今全部的分片都在cool分區上)
怎麼樣,看到這裏,應該明白了es讀寫分離了吧!!!!
若是您以爲個人文章對你有必定的幫助,幫我點個贊偶