# 命令行部署 ## 前提 选取集群中的首台机器(192.168.1.11)登录root用户,并进行以下操作: 首先创建一个`eshosts`文件,包含Elasticsearch集群中所有的机器 ``` sh 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角色的机器 ``` sh 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命令行管理工具 ```sh # 从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免密码登陆和分发配置文件 ```sh # 和集群内其他机器交换公钥 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` ```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 ``` 分发脚本 ```sh lava scp -f ${HOME}/eshosts /tmp/es_sys_conf.sh =:/tmp/es_sys_conf.sh ``` 执行脚本 ```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 ```sh lava ssh -f ${HOME}/eshosts -e "yum install -y elasticsearch" ``` 激活服务命令及自启动 ```sh # 激活服务命令 lava ssh -f ${HOME}/eshosts -e "systemctl daemon-reload" # 设置开机启动(按需) lava ssh -f ${HOME}/eshosts -e "systemctl enable elasticsearch.service" ``` ## 配置 ### 准备数据目录 在首台机器上执行以下命令 ```sh 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`文件 在每台机器上创建该文件并根据角色填写配置,直接覆盖原文件内容,参考如下 ```yaml 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 ``` ## 启动 ```shell lava ssh -f ${HOME}/eshosts -e "systemctl start elasticsearch.service" ``` - 登录到集群中任意一台机器,执行如下命令,即可修改密码 ```shell 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" }' ``` ## 检查状态 登录到集群中任意一台机器,执行如下命令: ```sh curl -X GET http://localhost:9200 ``` 如果得到类似如下结果,表示该集群已正常工作: ```json { "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并添加数据 ```sh 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" }' ``` 获取数据 ```sh 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' ``` ## 常用命令 ### 停止 ```sh lava ssh -f ${HOME}/eshosts -e "systemctl start elasticsearch.service" ``` ### 重启 ```sh lava ssh -f ${HOME}/eshosts -e "systemctl restart elasticsearch.service" ``` ## 注册到skylab(可选) Kerberos将要部署的机器需要通过机器管理添加到skylab中,如果您尚未添加,请参考[注册机器](../start/install-lava.md)。 在集群首台机器(191.168.1.11)上进行使用oushu用户进行如下操作: 首先修改/usr/local/oushu/lava/conf配置`server.json`,替换localhost为skylab的服务器ip,具体skylab的基础服务lava安装步骤请参考:[lava安装](../start/start-installation.rst)。 然后创建`~/Elasticsearch.json`文件,文件内容参考如下: ```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 -T {租户id} 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进程在机器上的状态。 ![](images/es_register_skylab.png)