命令行部署#

前提#

选取集群中的首台机器(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.masteres.dataes.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进程在机器上的状态。