命令行部署#
前提#
选取集群中的首台机器(192.168.1.11)登录root用户,并进行以下操作:
首先创建一个eshosts
文件,包含Elasticsearch集群中所有的机器
cat > ${HOME}/eshosts << EOF
192.168.1.11
192.168.1.12
192.168.1.13
EOF
然后创建不同角色的hosts文件
es-master-hosts中
写入只作为Master角色的机器es-data-hosts
中写入只作为Data角色的机器es-master-data-hosts
中写入同时作为Master和Data角色的机器
cat > ${HOME}/es-master-hosts << EOF
192.168.1.11
EOF
cat > ${HOME}/es-data-hosts << EOF
192.168.1.13
EOF
cat > ${HOME}/es-master-data-hosts << EOF
192.168.1.12
EOF
配置yum源并安装lava#
在开始前,请配置yum源,安装lava命令行管理工具
# 从yum源所在机器(假设为192.168.1.10)获取repo文件
scp root@192.168.1.10:/etc/yum.repos.d/oushu.repo /etc/yum.repos.d/oushu.repo
# 追加yum源所在机器信息到/etc/hosts文件
# 安装lava命令行管理工具
yum clean all
yum makecache
yum install -y lava
交换key并分发repo#
在首台机器上和集群内其他节点交换公钥,以便ssh免密码登陆和分发配置文件
# 和集群内其他机器交换公钥
lava ssh-exkeys -f ${HOME}/eshosts -p ********
# 将repo文件分发给集群内其他机器
lava scp -f ${HOME}/eshosts /etc/yum.repos.d/oushu.repo =:/etc/yum.repos.d
系统参数#
创建脚本/tmp/es_sys_conf.sh
cat > /tmp/es_sys_conf.sh << EOF
sysctlFile="/etc/sysctl.conf"
sudo echo vm.max_map_count=655360 | sudo tee -a $sysctlFile
sudo sysctl -p || true
####################/etc/security/limits.d/oushu.conf
securityFile="/etc/security/limits.d/oushu.conf"
sudo echo * soft nofile 1048576 | sudo tee -a $securityFile
sudo echo * hard nofile 1048576 | sudo tee -a $securityFile
sudo echo * soft nproc 131072 | sudo tee -a $securityFile
sudo echo * hard nproc 131072 | sudo tee -a $securityFile
EOF
分发脚本
lava scp -f ${HOME}/eshosts /tmp/es_sys_conf.sh =:/tmp/es_sys_conf.sh
执行脚本
lava ssh -f ${HOME}/eshosts -e "chmod 777 /tmp/es_sys_conf.sh"
lava ssh -f ${HOME}/eshosts -e "/tmp/es_sys_conf.sh"
安装#
使用yum install安装Elasticsearch
lava ssh -f ${HOME}/eshosts -e "yum install -y elasticsearch"
激活服务命令及自启动
# 激活服务命令
lava ssh -f ${HOME}/eshosts -e "systemctl daemon-reload"
# 设置开机启动(按需)
lava ssh -f ${HOME}/eshosts -e "systemctl enable elasticsearch.service"
配置#
准备数据目录#
在首台机器上执行以下命令
lava ssh -f ${HOME}/eshosts -e "mkdir -p /data1/es /data2/es"
lava ssh -f ${HOME}/eshosts -e "chown -R oushu:oushu /data1/es /data2/es"
修改配置文件#
配置/usr/local/oushu/conf/elasticsearch/elasticsearch.yml
文件
在每台机器上创建该文件并根据角色填写配置,直接覆盖原文件内容,参考如下
http.port: 9200
transport.tcp.port: 9300
path.logs: /usr/local/oushu/log/elasticsearch
path.data: [/data1/es,/data2/es]
# Master节点数量除以2向下取整然后加1
discovery.zen.minimum_master_nodes: 2
# 填入作为Master角色机器的内网IP
discovery.zen.ping.unicast.hosts: [192.168.1.11,192.168.1.12]
cluster.name: Elasticsearch468121
# 此处的值就是${HOSTNAME},请勿修改
node.name: ${HOSTNAME}
network.host: 0.0.0.0
# 如果是Master角色配置为true
node.master: true
# 如果是Data角色配置为true
node.data: false
# 如无需开启用户密码登录,则将下面两行注释;默认用户elastic 密码Oushu6.China 启动后建议立即修改密码
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
启动#
lava ssh -f ${HOME}/eshosts -e "systemctl start elasticsearch.service"
登录到集群中任意一台机器,执行如下命令,即可修改密码
curl -H "Content-Type:application/json" -XPOST -u elastic 'http://127.0.0.1:9200/_xpack/security/user/elastic/_password' -d '{ "password" : "your new password" }'
检查状态#
登录到集群中任意一台机器,执行如下命令:
curl -X GET http://localhost:9200
如果得到类似如下结果,表示该集群已正常工作:
{
"name" : "3gAlOL3",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "pt6mNA1oQqmEZRryV0d51A",
"version" : {
"number" : "6.8.14",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "b243943",
"build_date" : "2022-09-16T09:58:00.226316Z",
"build_snapshot" : true,
"lucene_version" : "7.7.3",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
测试创建Index并添加数据
curl -XPUT 'http://localhost:9200/twitter/_doc/1?pretty' -H 'Content-Type: application/json' -d '
{
"user": "kimchy",
"post_date": "2009-11-15T13:12:00",
"message": "Trying out Elasticsearch, so far so good?"
}'
curl -XPUT 'http://localhost:9200/twitter/_doc/2?pretty' -H 'Content-Type: application/json' -d '
{
"user": "kimchy",
"post_date": "2009-11-15T14:12:12",
"message": "Another tweet, will it be indexed?"
}'
curl -XPUT 'http://localhost:9200/twitter/_doc/3?pretty' -H 'Content-Type: application/json' -d '
{
"user": "elastic",
"post_date": "2010-01-15T01:46:38",
"message": "Building the site, should be kewl"
}'
获取数据
curl -XGET 'http://localhost:9200/twitter/_doc/1?pretty=true'
curl -XGET 'http://localhost:9200/twitter/_doc/2?pretty=true'
curl -XGET 'http://localhost:9200/twitter/_doc/3?pretty=true'
常用命令#
停止#
lava ssh -f ${HOME}/eshosts -e "systemctl start elasticsearch.service"
重启#
lava ssh -f ${HOME}/eshosts -e "systemctl restart elasticsearch.service"
注册到skylab(可选)#
Kerberos将要部署的机器需要通过机器管理添加到skylab中,如果您尚未添加,请参考注册机器。
在集群首台机器(191.168.1.11)上进行使用oushu用户进行如下操作:
首先修改/usr/local/oushu/lava/conf配置server.json
,替换localhost为skylab的服务器ip,具体skylab的基础服务lava安装步骤请参考:lava安装。
然后创建~/Elasticsearch.json
文件,文件内容参考如下:
{
"data": {
"name": "my-elasticsearch-cluster",
"group_roles": [{
"role": "es.master",
"cluster_name": "esmaster",
"group_name": "esmaster",
"machines": [{
"id": 981,
"name": "oushu-es1",
"subnet": "lava",
"data_ip": "192.168.1.11",
"manage_ip": "192.168.1.11",
"assist_port": 1622,
"ssh_port": 22
}]
}, {
"role": "es.master_data",
"cluster_name": "esmaster_data",
"group_name": "esmaster_data",
"machines": [{
"id": 982,
"name": "oushu-es2",
"subnet": "lava",
"data_ip": "192.168.1.12",
"manage_ip": "192.168.1.12",
"assist_port": 1622,
"ssh_port": 22
}]
}, {
"role": "es.data",
"cluster_name": "esdata",
"group_name": "esdata",
"machines": [{
"id": 983,
"name": "oushu-es3",
"subnet": "lava",
"data_ip": "192.168.1.13",
"manage_ip": "192.168.1.13",
"assist_port": 1622,
"ssh_port": 22
}]
}]
}
}
配置文件说明,整个json分为3部分:
第一部分name,为集群名称,个性化填写。
第二部分为group_roles,对于Elasticsearch为2个角色,
es.master
、es.data
和es.master_data
,不可修改。第三部分,为每个角色添加机器,需要添加的机器信息可以通过下面的方式获得:
在平台基础组件lava所安装的机器执行(端口和用户名按照lava配置修改):psql lavaadmin -p 4432 -U oushu -c "select m.id,m.name,s.name as subnet,m.private_ip as data_ip,m.public_ip as manage_ip,m.assist_port,m.ssh_port from machine as m,subnet as s where m.subnet_id=s.id;"
获取到所需的机器信息,根据服务角色对应的节点,将机器信息添加到machines数组中。
不同group_roles对应machines内容意义:
es.master : 只作为候选master节点的机器信息列表
es.master_data : 同时作为候选master节点和数据节点的机器信息列表
es.data : 只作为数据节点的机器信息列表
最后调用lava命令注册集群:
lava login -u oushu -p Oushu6@China
lava onprem-register service -s Elasticsearch -f ~/Elasticsearch.json
如果返回值为:
Add service by self success
则表示注册成功,如果有错误信息,请根据错误信息处理。
例如skylab部署在192.168.1.10,访问
http://192.168.1.10:3000/main/Deploy/es
从页面登录后,在自动部署模块对应服务中可以查看到新添加的集群,同时列表中会实时监控Elasticsearch进程在机器上的状态。