准备
-
三台机器
IP HOSTANME OS 是否可成为主节点 172.16.241.2 linux1 centos8 是 (active) 172.16.241.3 linux2 centos8 是 172.16.241.4 linux3 centos8 是 -
Es不允许使用root启动,故而创建用户和组(三台机器)
groupadd es useradd es -g es -p es su es
-
设置系统配置(切换root用户)
vi /etc/sysctl.conf #设置如下 vm.max_map_count=262144 #执行生效 sysctl -p vi /etc/security/limits.conf #增加如下内容 # * 代表所有,可以修改为用户es * soft nproc 4096 * hard nproc 4096
-
打开linux1机器,进入/home/es/目录,执行如下指令:
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.13.3-linux-x86_64.tar.gz wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.13.3-linux-x86_64.tar.gz.sha512 shasum -a 512 -c elasticsearch-7.13.3-linux-x86_64.tar.gz.sha512 // 如找不到指令,使用yum install -y perl-Digest-SHA 安装 tar -xzf elasticsearch-7.13.3-linux-x86_64.tar.gz
-
使用scp指令分发elasticsearch-7.13.3到其他机器上
-
scp传文件到linux2,linux3
scp -r elasticsearch-7.13.3 root@linux2:/home/es scp -r elasticsearch-7.13.3 root@linux3:/home/es
-
配置
-
修改config下的elasticsearch.yaml文件
- linux1(master)
#集群配置 cluster: name: xpp-es-cluster initial_master_nodes: - linux1 path: data: /home/es/elasticsearch-7.13.3/data logs: /home/es/elasticsearch-7.13.3/data node: name: linux1 network: host: linux1 discovery.seed_hosts: - linux1:9300 - linux2:9300 - linux3:9300
-
linux2
#集群配置 cluster: name: xpp-es-cluster initial_master_nodes: - linux1 path: data: /home/es/elasticsearch-7.13.3/data logs: /home/es/elasticsearch-7.13.3/data node: name: linux2 roles: [data] network: host: linux2 discovery.seed_hosts: - linux1:9300 - linux2:9300 - linux3:9300
-
linux3
#集群配置 cluster: name: xpp-es-cluster initial_master_nodes: - linux1 path: data: /home/es/elasticsearch-7.13.3/data logs: /home/es/elasticsearch-7.13.3/data node: name: linux3 roles: [data] network: host: linux3 discovery.seed_hosts: - linux1:9300 - linux2:9300 - linux3:9300
-
先启动linux1下的es,再启动linux2, linux3
./elasticsearch -d
-
访问http://linux1:9200
使用chrome插件elasticsearch head插件访问如图:
-
创建索引book, user, shopping
curl --location --request PUT 'http://linux1:9200/book' curl --location --request PUT 'http://linux1:9200/user' curl --location --request PUT 'http://linux1:9200/shopping'
-
查看集群状态
索引已经创建,并且数据分片没有问题。绿色代表健康。
-
创建Doc
curl --location --request POST 'http://linux1:9200/shopping/_doc/' \ --header 'Content-Type: application/json' \ --data-raw '{ "title":"华为手机魅蓝", "category":"华为", "images":"http://www.gulixueyuan.com/xm.jpg", "price": 4999.00 }'
-
返回结果
{ "_index": "shopping", "_type": "_doc", "_id": "XtfNw3oBpJTUlLZO2-rD", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 2, "failed": 0 }, "_seq_no": 0, "_primary_term": 1 }
三节点的集群搭建完毕,该集群有什么问题?如果master挂掉还能否正常提供服务?
-
答案是否定的,具体是为什么呢?
主要跟角色有关,linux2和linux3都是非master节点,当我把linux1(master)停掉,集群就没有了master,所以无法对外提供服务。
三节点中官方建议每个节点都要设置master角色,这样linux1(master)不能提供服务,集群会选举新的master对外服务。来模拟一下。
-
首先我要修改linux2和linux3的配置
node.roles:[data] 修改为node.roles:[data, master]
-
重启linux2和linux3的es
-
停止linux1(原master)服务
-
打开elasticseatch head查看
linux3已经被选举为master节点。
-
重启linux1节点后,他不会重新变为master节点,而是作为从节点。
-