หลายท่านใช้งาน systemd เพื่อ start service ต่างๆ ปัญหาหนึ่งที่พบคือ haproxy ไม่ยอม auto start หลังการ reboot ถึงแม้ว่าจะได้ทำการ enable service ผ่านทางคำสั่งด้านล่างแล้ว

# systemctl enable haproxy

สาเหตุของปัญหา คือการที่ systemd พยายาม start haproxy ก่อนที่ network service จะทำงานครบ ทำให้ bind ip:port ไม่ได้

อาการก่อนแก้ไข (หลัง reboot, haproxy จะไม่อัพ และแสดงผลแบบนี้)

# systemctl status haproxy -l
● haproxy.service - HAProxy Load Balancer
Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled)
Active: inactive (dead) since Tue 2016-10-25 12:06:43 ICT; 1min 41s ago
Process: 422 ExecStart=/usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg 
-p /run/haproxy.pid $OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 422 (code=exited, status=0/SUCCESS)

Oct 25 12:06:42 test-lb-tv systemd[1]: Started HAProxy Load Balancer.
Oct 25 12:06:42 test-lb-tv systemd[1]: Starting HAProxy Load Balancer...
Oct 25 12:06:43 test-lb-tv haproxy-systemd-wrapper[422]: haproxy-systemd-wrapper: executing 
/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
Oct 25 12:06:43 test-lb-tv haproxy-systemd-wrapper[422]: [ALERT] 298/120643 (441) : 
Starting frontend http-in-web: cannot bind socket [103.xx.xx.xx:80]
Oct 25 12:06:43 test-lb-tv haproxy-systemd-wrapper[422]: haproxy-systemd-wrapper: exit,
haproxy RC=256

ซึ่งจะสังเกตเห็นบรรทัดที่บอกว่า haproxy ไม่สามารถ bind socket ได้

วิธีแก้ไข

ใส่บรรทัดนี้ไปใน /etc/sysctl.conf

# fix haproxy not start with systemd
net.ipv4.ip_nonlocal_bind=1

หลังแก้ไขใส่บรรทัดดังกล่าวเข้าไป หากทดสอบ reboot ก็จะพบว่า haproxy สามารถ auto start ได้ปกติแล้ว

# systemctl status haproxy -l
● haproxy.service - HAProxy Load Balancer
Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2016-10-25 12:10:31 ICT; 1min 39s ago
Main PID: 489 (haproxy-systemd)
CGroup: /system.slice/haproxy.service
├─489 /usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
├─492 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
└─503 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds

Oct 25 12:10:31 test-lb-tv systemd[1]: Started HAProxy Load Balancer.
Oct 25 12:10:31 test-lb-tv systemd[1]: Starting HAProxy Load Balancer...
Oct 25 12:10:31 test-lb-tv haproxy-systemd-wrapper[489]: haproxy-systemd-wrapper: executing 
/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds

บริการ CloudNode ของ HostPacific เป็น Cloud แท้ๆ เริ่มต้นเพียงเดือนละ 250 บาท ซึ่งท่านสามารถสร้าง infrastructure ตามต้องการได้อย่างรวดเร็ว