0. 引言
前幾章我們已經(jīng)講解了solr單機(jī)版的基本使用,但實(shí)際生產(chǎn)中,為了保證高可用、高性能,我們一般會(huì)采用集群模式,所以接下來,我們繼續(xù)講解solr集群的搭建和基本操作
1. 集群模式
1.1 分片
在講解solr集群模式前,我們要先了解“分片”的概念。
當(dāng)節(jié)點(diǎn)由一個(gè)拓展為多個(gè)時(shí),數(shù)據(jù)存儲(chǔ)和同步問題也隨之而來,如果單純的把數(shù)據(jù)存儲(chǔ)到某一個(gè)節(jié)點(diǎn),高可用的目的又實(shí)現(xiàn)不了了,如果把數(shù)據(jù)在每個(gè)節(jié)點(diǎn)中都存儲(chǔ),那么又會(huì)導(dǎo)致空間浪費(fèi),于是就出現(xiàn)了分片的概念。
所謂分片就是將數(shù)據(jù)分成多份,每一份就是一個(gè)分片,然后將這些分片存儲(chǔ)到不同的節(jié)點(diǎn)上,以此實(shí)現(xiàn)存儲(chǔ)擴(kuò)展,同時(shí)因?yàn)椴煌臄?shù)據(jù)存儲(chǔ)在不同的節(jié)點(diǎn)上,實(shí)際上也提高了查詢的性能。
并且這些分片里,還分為主分片盒副本分片,主分片是不同的數(shù)據(jù),副本分片則是主分片的備份,然后將這些分片分布到不同的節(jié)點(diǎn)上,這樣既實(shí)現(xiàn)了數(shù)據(jù)存儲(chǔ),也實(shí)現(xiàn)了數(shù)據(jù)備份
因?yàn)橐獙?shí)現(xiàn)高可用,所以要求相同的主副分片不能在同一個(gè)節(jié)點(diǎn)上,否則當(dāng)一個(gè)節(jié)點(diǎn)掛了,副分片也跟著掛了
1.2 節(jié)點(diǎn)治理
當(dāng)節(jié)點(diǎn)變多了之后,節(jié)點(diǎn)之間的調(diào)用協(xié)調(diào)就成了問題,solr沒有自帶服務(wù)治理,也就需要引入第三方組件,一般我們通過zookeeper來作為注冊(cè)中心,管理服務(wù)調(diào)度
同時(shí)為了保證注冊(cè)中心的高可用,因此我們的zookeeper也需要部署成集群模式??赡苡械耐瑢W(xué)會(huì)有疑惑,zk部署成集群模式了,那么又是誰來協(xié)調(diào)zk多節(jié)點(diǎn)呢,這個(gè)當(dāng)然是zk自身了,它的集群模式自帶了服務(wù)治理功能
1.3 部署架構(gòu)
有了以上的基礎(chǔ)概念后,我們?cè)賮硎崂硭渴鸬膕olr集群架構(gòu)。
首先集群模式最小主節(jié)點(diǎn)數(shù)是3個(gè),這里為了模擬線上環(huán)境,搭建4個(gè)主分片,每個(gè)主分片3個(gè)副本分片的效果,我采用4個(gè)節(jié)點(diǎn),具體大家可根據(jù)服務(wù)器環(huán)境來選擇節(jié)點(diǎn)數(shù),但不要小于3個(gè)
其次zookeeper搭建集群,最小節(jié)點(diǎn)數(shù)是3個(gè),于是部署架構(gòu)如下圖所示
2. 搭建
2.1 搭建zookeeper集群
zookeeper的集群搭建可我另一篇文章:搭建zookeeper集群并設(shè)置開機(jī)自啟
但是注意因?yàn)槲襰olr版本用的是8.2.0
,zookeeper對(duì)應(yīng)版本選3.4.14
,版本不對(duì)應(yīng)可能有連接問題。會(huì)導(dǎo)致報(bào)錯(cuò)TimeoutException: Could not connect to ZooKeeper
2.2 搭建solr集群
1、之前我們已經(jīng)搭建過solr單節(jié)點(diǎn),將該節(jié)點(diǎn)復(fù)制3份到其他3個(gè)服務(wù)器
2、修改solr配置文件solr.xml
vim server/solr/solr.xml
內(nèi)容,調(diào)整為服務(wù)器solr服務(wù)器ip,如果端口有調(diào)整的話直接修改即可
3、修改啟動(dòng)腳本文件solr.in.sh
,配置zk地址
vim bin/solr.in.sh
內(nèi)容
ZK_HOST="192.168.244.42:2181,192.168.244.43:2181,192.168.244.44:2181"
# Set the ZooKeeper client timeout (for SolrCloud mode)
ZK_CLIENT_TIMEOUT="15000"
4、在其他3個(gè)節(jié)點(diǎn),同步調(diào)整上述2步
5、重啟四個(gè)solr節(jié)點(diǎn)
# 如下啟動(dòng)指令是單獨(dú)配置的,參考專欄第一篇文章
service solr restart
能夠正常訪問solr-admin即證明集群部署成功!
這里如果發(fā)現(xiàn)報(bào)錯(cuò)SolrException: ruok is not executed because it is not in the whitelist. Check 4lw.commands.whitelist setting in zookeeper configuration file
這是因?yàn)橐朐诓坏顷憐k客戶端的情況下,簡(jiǎn)單便捷的使用zk的四字指令時(shí),比如ruok是查看zk是否啟動(dòng)的指令,就需要添加zk允許的指令白名單
在zookeeper配置文件conf/zoo.cfg
中添加配置項(xiàng)4lw.commands.whitelist=stat,ruok,conf,isro
,設(shè)置指定的四字指令被遠(yuǎn)程調(diào)用,如果設(shè)置的是*
則表示所有的指令都允許被調(diào)用
配置完后重啟zk,solr,如果是集群記得修改每個(gè)zk節(jié)點(diǎn)
正常啟動(dòng),可以在Cloud
菜單查看集群節(jié)點(diǎn)情況
6、因?yàn)橛脄ookeeper管理集群了,我們要將solr的相關(guān)配置文件上傳到zookeeper上,用zookeeper作為配置中心
先把我們之前單機(jī)solr中創(chuàng)建的orders核心的配置文件上傳到其中一個(gè)solr節(jié)點(diǎn)上
scp -r orders root@192.168.244.42:/data/solr-8.2.0/server/solr
7、而上傳到zk,solr為我們提供了一個(gè)腳本文件server/scripts/cloud-scripts/zkcli.sh
主要將solr.xml
和核心(索引)下的配置文件managed-schema
,solrconfig.xml
在任意一個(gè)solr節(jié)點(diǎn)執(zhí)行:
# 設(shè)置solr配置文件路徑
sh /data/solr-8.2.0/server/scripts/cloud-scripts/zkcli.sh -zkhost 192.168.244.44:2181,192.168.244.43:2181,192.168.244.42:2181 --cmd upconfig -solrhome /data/solr-8.2.0/server/solr
# 上傳核心配置文件目錄
sh /data/solr-8.2.0/server/scripts/cloud-scripts/zkcli.sh -zkhost 192.168.244.44:2181,192.168.244.43:2181,192.168.244.42:2181 --cmd upconfig -confdir /data/solr-8.2.0/server/solr/orders -confname orders
后續(xù)如果還需要上傳其他的核心(索引)配置文件,就只需要執(zhí)行下面的指令即可
sh /data/solr-8.2.0/server/scripts/cloud-scripts/zkcli.sh -zkhost 192.168.244.44:2181,192.168.244.43:2181,192.168.244.42:2181 --cmd upconfig -confdir /data/solr-8.2.0/server/solr/collection_name -confname collection_name
連接zk,也能發(fā)現(xiàn)對(duì)應(yīng)的數(shù)據(jù)了,這里連接使用的是prettyZoo
工具,不知道怎么安裝的可以查看我之前的博客:
安裝zookeeper可視化工具PrettyZoo、ZooKeeperAssistant
8、登陸任意一個(gè)solr-admin,添加核心,名稱與之前上傳的orders
保持一致,同時(shí)因?yàn)槲覀兪?個(gè)節(jié)點(diǎn),一般設(shè)置主分片數(shù)與節(jié)點(diǎn)數(shù)一致,不能超過節(jié)點(diǎn)數(shù),同一主副分片不在一個(gè)節(jié)點(diǎn)上,那么一共就有4個(gè)主分片,每個(gè)主分片有3個(gè)副本分片
因?yàn)閟olr節(jié)點(diǎn)默認(rèn)的maxShardsPerNode
為1,即每個(gè)節(jié)點(diǎn)只允許創(chuàng)建1個(gè)分片(主分片或副分片),明顯不滿足我們上述的架構(gòu),每個(gè)節(jié)點(diǎn)需要?jiǎng)?chuàng)建1個(gè)主分片3個(gè)副本分片,所以一個(gè)節(jié)點(diǎn)需要?jiǎng)?chuàng)建4個(gè)分片,則我們需要將maxShardsPerNode
調(diào)整為4
保存后創(chuàng)建的核心會(huì)同步到其他節(jié)點(diǎn)上
可以在Collections
中查看分片情況
9、執(zhí)行全量同步,如果對(duì)同步操作不熟悉的,可以查看專欄之前的文章
10、查詢數(shù)據(jù),發(fā)現(xiàn)數(shù)據(jù)查詢成功
文章來源:http://www.zghlxwxcb.cn/news/detail-545296.html
總結(jié)
自此,我們針對(duì)solr集群的搭建,核心創(chuàng)建,數(shù)據(jù)同步都講解完了,同時(shí)還需要改變的呢,是我們客戶端連接時(shí)的代碼,要調(diào)整為集群模式,也就是通過zk來連接了文章來源地址http://www.zghlxwxcb.cn/news/detail-545296.html
到了這里,關(guān)于solr快速上手:搭建solr集群并創(chuàng)建核心,設(shè)置數(shù)據(jù)同步(十一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!