Apache Solr multi-core setup (1)
เพื่อความรวดเร็วในการเขียน ผมขอใช้ terminal กับ shell commands เป็นหลัก เพราะใช้ได้กับทั้ง local และ remote server (Unix หรือ Unix-like ส่วน Windows ผมไม่คุ้น แต่ถ้าเข้าใจว่าเรากำลังทำอะไร OS ไหนก็คงไม่ต่างกันมาก) เดาว่าใครที่คิดจะติดตั้ง Solr เอง ก็คงคุ้นกับ command line อยู่แล้ว
1. ติดตั้ง Java
ใน Mac OS มันมีอยู่แล้วมั้ง? ลอง java -version ของผมมันบอกว่า java version "1.6.0_31" (Apple ให้มา) ถ้าจะติดตั้งใน Debian/Ubuntu ก็
sudo apt-get update
sudo apt-get install openjdk-6-jdkยังไม่เคยลอง openjdk-7-jdk ใครใช้ Distro อื่นก็คงรู้วิธีติดตั้งซอฟต์อยู่แล้วมั้ง ส่วน Windows ผมไม่รู้ ขอผ่าน
2. ดาวน์โหลด Apache Solr
ส่วนใหญ่ใน development environment ผมเก็บไฟล์ใน home directory ของตัวเอง อะไรที่มันเป็น server ก็เลยเก็บไว้ที่ ~/srv ส่วนใน production env จะอยู่ที่ /srv จริงๆจะเก็บไว้ไหนก็ได้ แค่จำให้ได้ว่ามันอยู่ที่ไหน ถ้าใครเซ็ต dev env แบบผมก็
mkdir ~/srv
cd !$ขอใช้ Apache Solr เวอร์ชั่นล่าสุด ณ เวลาที่เขียน คือ 3.6.0 ก็จัดการ download unpack แล้วก็ symlink (เผอิญผมต้องใช้ Solr หลายเวอร์ชั่น เพราะหลายโปรเจ็คต์ที่ทำอยู่ใช้คนละเวอร์ชั่น symlink เปลี่ยนเวอร์ชั่นสะดวกเวลาเรียกใช้งานจาก process อื่น)
wget http://mirrors.issp.co.th/apache/lucene/solr/3.6.0/apache-solr-3.6.0.tgz
tar xzvf apache-solr-3.6.0.tgz
ln -s apache-solr-3.6.0 solr
cd solr3. สร้าง Solr instance
ก็คัดลอก example dir เป็นชื่อ instance ของเรา แล้วก็เคลียร์อะไรที่ไม่จำเป็นทิ้งซะ ตัวอย่างนี้ผมใช้ webzer
cp -rf example webzer
cd webzer
mv solr/conf solr/conf.bak
rm -rf example* work multicore4. สร้าง Solr multi-core
เราสามารถรัน Solr ได้หลายคอร์ ประโยชน์ของมันคือ ไม่ต้องดาวน์โหลด Solr เวอร์ชั่นเดิมซ้ำให้เปลืองเนื้อที่ แต่แยก index ได้หลายเว็บไซต์ (instance) เพราะผมมีหลายโปรเจ็คต์ที่ใช้ Solr เวอร์ชั่นเดียวกัน (ขออภัย คุณอาจปวดหัวเล็กน้อยเวลาอ่านสิ่งที่ผมเขียน เพราะผมอยู่กับความยุ่งเหยิงของงานหลายงานที่ลูกค้าต้องการใช้ซอฟต์แวร์แบบเฉพาะเจาะจงอยู่บ่อยๆ สรุปสั้นๆ คือผมมีหลายเว็บไซต์ที่ใช้ทั้ง Solr เวอร์ชั่นเดียวกันและต่างกันนั่นแหละ)
เอาเป็นว่าเรารันคอร์เดียวก่อนละกัน (จะเพิ่มหลายคอร์ค่อยอธิบายที่หลัง เพราะจริงๆผมใช้ Ruby Chef พิมพ์คำสั่งเดียวมันก็จัดการทุกอย่างให้โดยอัตโนมัติ แต่นั่นเป็นอีกเรื่องนึง เราเริ่มแบบง่ายๆแต่ช้าๆกันก่อนดีกว่า) แก้ไขไฟล์ solr/solr.xml ใน instance ของเรา (webzer) ให้ใช้งานแบบ multi-core ก่อน
mv solr/solr.xml solr/solr.xml.bak
tee -a solr/solr.xml <<EOF
<?xml version="1.0" encoding="UTF-8" ?>
<solr persistent="false">
<cores adminPath="/admin/cores">
<core name="webzer.net" instanceDir="webzer.net" />
</cores>
</solr>
EOFคำสั่งข้างบนคือ backup solr.xml เดิม แล้วสร้างไฟล์ใหม่ด้วยเนื้อหาตามนี้ (ใครจะใช้ text editor ก็ได้ ผมแค่ใช้ tee ใน shell เพราะเนื้อหาไฟล์มันสั้น)
<?xml version="1.0" encoding="UTF-8" ?>
<solr persistent="false">
<cores adminPath="/admin/cores">
<core name="webzer.net" instanceDir="webzer.net" />
</cores>
</solr>คอร์แรกของเราชื่อ webzer.net อยู่ใน directory ชื่อ webzer.net (คุณจะเปลี่ยนเป็นชื่ออะไรก็แล้วแต่คุณ) แต่เรายังไม่มี dir นั้น ก็สร้างแล้วคัดลอก conf dir ไปเก็บในคอร์ของเราซะ เพื่อแก้ไขไฟล์อื่นๆในนั้นต่อไป
mkdir -p solr/webzer.net
cp -r solr/conf.bak solr/webzer.net/conf5. ทดสอบว่าคอร์ใช้งานได้รึยัง
พิมพ์ java -jar start.jar (ถ้าจะ shutdown Solr ก็กด control+c พร้อมกัน)
เปิด web browser แล้วไปที่ http://0.0.0.0:8983/solr/ ถ้าคุณเห็นคำว่า Welcome to Solr! พร้อมลิ้งก์ Admin webzer.net คลิกเข้าไปถ้าเห็นอะไรประมาณนี้รูปข้างล่างนี้ก็แปลว่ามีแววรุ่ง
คิดว่าคงพอจะเดาได้ว่าถ้าต้องการเพิ่มคอร์ใหม่ให้ทำขั้นตอนนี้ซ้ำ
mkdir -p solr/core2
cp -r solr/conf.bak solr/core2/confแล้วก็เพิ่ม <core name="core2" instanceDir="core2" /> ลงในไฟล์ solr/solr.xml (เปลี่ยนชื่อคอร์สุดแต่ใจปรารถนา shutdown Solr แล้วสั่ง java -jar start.jar จนกว่าจะพอใจ)
แต่ตอนนี้มันค่อนข้างไร้ประโยชน์เพราะ Solr ของเรายังไม่ได้ index ให้ websites หรือ web apps ใดๆเลย ผมคุ้นกับ Drupal มากกว่าอันอื่น ก็จะอธิบายว่า Solr กับ Drupal จะทำงานร่วมกันได้ยังไง แล้วจะทำยังไงให้ Solr รู้จักภาษาไทยดีขึ้น รวมถึงเรื่อง Security เปลี่ยน port ตั้ง password ให้ Solr พร้อมวิธีรัน Solr เป็น daemon (service หรือ background process ด้วย init script) ให้มัน start ทุกครั้งเมื่อ OS เริ่มทำงาน คือไม่ต้องสั่ง java -jar start.jar แล้วเปิด terminal ค้างไว้นั่นแหละ
แต่เรื่องมันยาว เดี๋ยวคราวหน้าจะหาเวลาว่างมาเขียนต่อ ลองอ่าน Apache Solr Multi-core Setup using Jetty สำหรับ Drupal กับ Solr 1.4 ดูก่อนก็ได้ ถึงจะเก่าแต่ก็หลักการเดียวกัน
