Easysearch Single-Node Deployment on Kylin V10 (Lance) ARM64

System Configuration

Configure system resource limits before installing the search engine:

cat > /etc/security/limits.d/es-limits.conf <<'EOF'
*                soft    nofile         1048576
*                hard    nofile         1048576
*                soft    memlock        unlimited
*                hard    memlock        unlimited
root             soft    nofile         1048576
root             hard    nofile         1048576
root             soft    memlock        unlimited
root             hard    memlock        unlimited
EOF

Disable transparent hugepages to avoid potential performance issues:

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

if [ ! -f /etc/rc.local ] || ! grep -q transparent_hugepage /etc/rc.local; then
cat >> /etc/rc.local <<'EOF'
if [ -f /sys/kernel/mm/transparent_hugepage/enabled ]; then
  echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if [ -f /sys/kernel/mm/transparent_hugepage/defrag ]; then
  echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
EOF
fi
chmod +x /etc/rc.local

Apply kernel-level tuning parameters:

cat > /etc/sysctl.d/99-essys.conf <<'EOF'
vm.max_map_count = 262145
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_keepalive_time = 900
net.ipv4.tcp_max_tw_buckets = 2000000
net.ipv4.ip_local_port_range = 1024 65535
EOF
sysctl -p /etc/sysctl.d/99-essys.conf

Operating User Setup

Create a deidcated OS user for running the search service:

groupadd -g 700 search
useradd -u 700 -g search -m -d /home/search -c 'Easysearch' -s /bin/bash search

JDK Installation

Download and set up the Azul Zulu JDK 17 for ARM64 architecture:

JDK_URL="https://release.infinilabs.com/easysearch/jdk/zulu17.40.19-ca-jdk17.0.6-linux_aarch64.tar.gz"
wget -N "$JDK_URL" -P /opt/src

mkdir -p /opt/jdk
tar -zxf /opt/src/zulu*.tar.gz -C /opt/jdk --strip-components 1

cat > /etc/profile.d/jdk.sh <<'EOF'
export JAVA_HOME=/opt/jdk
export CLASSPATH=$JAVA_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
EOF

source /etc/profile.d/jdk.sh
java -version

Easysearch Installation

Install the core search engine using the automated installation script:

curl -sSL http://get.infini.sh | bash -s -- -p easysearch -d /opt/search

Initialize security certificates:

cd /opt/search
/opt/search/bin/initialize.sh
ls -la /opt/search/config/*.crt /opt/search/config/*.key /opt/search/config/*.pem

Generate and configure user credentials:

export ES_HOME=/opt/search
SEC_PASS=$(tr -cd 'a-zA-Z0-9!@#$%' </dev/urandom | head -c24)
echo "$SEC_PASS" > /root/.es_password
SEC_HASH=$(/opt/search/bin/hash_password.sh -p "$SEC_PASS")

cat > $ES_HOME/config/security/user.yml <<EOF
meta:
  type: "user"
  config_version: 2

admin:
  hash: "$SEC_HASH"
  reserved: true
  external_roles:
    - "admin"
  description: "Admin user"
EOF

Main Configuration File

Configure the search engine parameters in the YAML configuration:

cat > /opt/search/config/easysearch.yml <<EOF
cluster.name: search-cluster
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
transport.port: 9300
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
cluster.initial_master_nodes: ["node-1"]

path.home: /opt/search
path.data: /opt/search/data
path.logs: /opt/search/logs

http.compression: true

security.enabled: true
security.audit.type: noop
security.ssl.transport.cert_file: instance.crt
security.ssl.transport.key_file: instance.key
security.ssl.transport.ca_file: ca.crt
security.ssl.transport.skip_domain_verify: true
security.ssl.http.enabled: true
security.ssl.http.cert_file: instance.crt
security.ssl.http.key_file: instance.key
security.ssl.http.ca_file: ca.crt

security.allow_default_init_securityindex: true

security.nodes_dn:
  - 'CN=infini.cloud,OU=UNIT,O=ORG,L=NI,ST=FI,C=IN'

security.restapi.roles_enabled: ["superuser", "security_rest_api_access"]

security.system_indices.enabled: true
security.ssl.http.clientauth_mode: OPTIONAL
security.system_indices.indices: [".infini-*"]

security.authcz.admin_dn:
  - 'CN=admin.infini.cloud,OU=UNIT,O=ORG,L=NI,ST=FI,C=IN'
EOF

JVM Memory Configuration

Adjust heap size based on available system memory. The recommended setting is half of total RAM, capped at 31GB:

sed -i "s/-Xms1g/-Xms4g/g; s/-Xmx1g/-Xmx4g/g" $ES_HOME/config/jvm.options

Directory Permissions

Set up backup directory and assign ownership:

mkdir -p /opt/search/backup
chown -R search:search /opt/search

Service Startup

Configure environment variables and launch the service in daemon mode:

su - search <<'EOF'
if ! grep -q ES_HOME ~/.bashrc; then
  echo 'export ES_HOME=/opt/search' >> ~/.bashrc
fi
export ES_HOME=/opt/search
source ~/.bashrc
$ES_HOME/bin/easysearch -d
EOF

Health Verification

Confirm the search engine is operational:

curl -ku "admin:$SEC_PASS" https://127.0.0.1:9200
curl -ku "admin:$SEC_PASS" https://127.0.0.1:9200/_cluster/health?pretty
curl -ku "admin:$SEC_PASS" https://127.0.0.1:9200/_cat/nodes?v

Console Deployment

Install the web-based management console:

curl -sSL http://get.infini.sh | bash -s -- -p console

cd /opt/console
./console-linux-arm64 -service install
./console-linux-arm64 -service start

systemctl status console

Agent Deployment

Install the data collection agent:

curl -sSL http://get.infini.sh | bash -s -- -p agent

cd /opt/agent
sed -i "/ES_ENDPOINT:/ s|value:.*|value: https://localhost:9200|" agent.yml
sed -i "/ES_USER:/ s|value:.*|value: admin|" agent.yml
sed -i "/ES_PASS:/ s|value:.*|value: $SEC_PASS|" agent.yml
sed -i "/API_BINDING:/ s|value:.*|value: \"0.0.0.0:8080\"|" agent.yml

./agent-linux-arm64 -service install
./agent-linux-arm64 -service start

systemctl status agent

Gateway Deployment

Install the API gateway component:

curl -sSL http://get.infini.sh | bash -s -- -p gateway

cd /opt/gateway
sed -i "/ES_PASS:/ s|value:.*|value: $SEC_PASS|" gateway.yml
head -n 10 gateway.yml

./gateway-linux-arm64 -service install
./gateway-linux-arm64 -service start

systemctl status gateway
curl -u "admin:$SEC_PASS" http://127.0.0.1:8000

Load Geenrator Deployment

Install the load testing tool for performance validation:

curl -sSL http://get.infini.sh | bash -s -- -p loadgen

cd /opt/loadgen
mkdir -p mock

cat > mock/access.log <<'LOGEOF'
192.168.1.100 - - [10/Oct/2023:13:55:36 +0000] "GET /index.html HTTP/1.1" 200 2326 "-" "Mozilla/5.0"
192.168.1.101 - - [10/Oct/2023:13:55:37 +0000] "POST /api/data HTTP/1.1" 201 145 "-" "curl/7.68.0"
192.168.1.102 - - [10/Oct/2023:13:55:38 +0000] "GET /assets/style.css HTTP/1.1" 200 4532 "http://example.com/" "Chrome/119.0.0.0"
LOGEOF

cat > loadgen.yml <<EOF
env:
  ES_USERNAME: admin
  ES_PASSWORD: $SEC_PASS
  ES_ENDPOINT: http://localhost:8000

runner:
  no_warm: false
  log_requests: false
  log_status_codes:
    - 0
    - 500
  assert_invalid: false
  assert_error: false

variables:
  - name: log_line
    type: file
    path: mock/access.log
    replace:
      '"': '"'
      '\\': '\\'
  - name: record_id
    type: sequence
  - name: unique_key
    type: uuid
  - name: timestamp_local
    type: now_local
  - name: timestamp_utc
    type: now_utc
  - name: suffix_range
    type: range
    from: 10
    to: 13

requests:
  - request:
      method: POST
      runtime_variables:
        batch_id: unique_key
      runtime_body_line_variables:
        routing_key: unique_key
      basic_auth:
        username: \$[[env.ES_USERNAME]]
        password: \$[[env.ES_PASSWORD]]
      url: \$[[env.ES_ENDPOINT]]/_bulk
      body_repeat_times: 5000
      body: |
        { "index" : { "_index" : "benchmark-\$[[suffix_range]]", "_id" : "\$[[unique_key]]" } }
        { "id" : "\$[[unique_key]]", "routing_key" : "\$[[routing_key]]", "batch_id" : "\$[[batch_id]]", "log_data" : "\$[[log_line]]", "sequence" : "\$[[suffix_range]]", "timestamp" : "\$[[timestamp_local]]" }
EOF

./loadgen-linux-arm64 -c 6 -d 6 --compress

curl -u "admin:$SEC_PASS" http://127.0.0.1:8000/_cat/indices/benchmark*?v

Access the web console at http://:9000/ to manage the Easysearch deployment.

Tags: Easysearch Kylin V10 arm64 deployment installation

Posted on Thu, 05 Nov 2026 16:38:53 +0000 by PHPThorsten