ขอบังอาจ สอนสังฆราช เรื่องปรับแต่ง sysctl แบบง่ายๆ

จริงๆผมทราบอยู่แล้วล่ะครับ ว่าท่านทราบดีเรื่องการปรับแต่ง พวกนี้ แต่ sysctl นี้ ผมมาบอกท่านอีกครั้งเพื่อให้ท่านนำไปปรับใช้เพื่อเป็นการปูพรมเพื่อเริ่มโครงการที่ผมกำลังจะเริ่มต้นครับ

http://www.thaihosttalk.com/th1/index.php?topic=13912.0

การปรับ sysctl.conf เป็นการ optimized เพื่อ performance และ เพื่อความปลอดภัยเท่านั้น หากท่านจะใช้ server เพื่อทำ (firewall ppp, squid, oracle, loadbalance ) ท่านจะไม่สามารถใช้คำสั่ง sysctl นี้ได้ ซึ่งท่านจำเป็นจะต้องดูคู่มือของ โปรแกรมที่่ท่านใช้ เช่น oracle จะมีวิธีการปรับแต่งในอีกแบบหนึ่ง หรือ mysql cluster ก็จะมีการปรับแต่งในอีกแบบหนึ่ง ดังนั้นโปรดระมัดระวังในการใช้

ที่สำคัญท่านจะต้องระมัดระวังอย่างยิ่งในเรื่อง eth0 และ eth1 เป็นอย่างยิ่ง
อีกจุดที่ท่านจะต้องระวังคือ ใน freebsd openbsd หรือ macos ท่านจะต้องระวังในเรื่อง eth ต่างๆ เพราะแต่ละ os ที่กล่าวมาใช้ชื่อไม่เหมือนกัน

ในตระกูล linux และ unix สามารถใช้ sysctl ได้หมดครับ ท่านไม่ต้องกลัว ปรับแล้วไม่ขอบก็เอาออกได้ โดยใช้คำสั้ง cp file ที่ backup ไว้กลับมา เท่านั้นเอง

ตัวแรกที่ผมแนะนำนี้เป็นแค่ Basic เท่านั้น และคิดว่าทุกๆท่านคงจะทราบดีแล้ว
ต้วที่สอง นั้นผมได้ MO ขึ้นมาเพื่อ ระบบขนาดใหญ่เช่น Cluster ดังนั้นขอให้ท่านใช้วิจารณญานในการใช้ ให้มากที่สุด

หากท่านไม่มีความรู้เรื่อง syskernel กรุณาสอบถามจากเพื่อนสมาชิกในนี้ซื้งคิดว่าทุกๆท่านคงจะทราบเรื่องนี้ดีอยู่แล้ว

ในการ MO หากท่านได้ MO ด้วยตัวท่านเองนอกเหนือจากที่แนะนำ ระวัง KERNEL ของท่านให้ดี เพราะอาจจะเกิดปัญหา PANIC ได้ครับ >> ข้าน้อยเตือนท่านแล้วนะ

sysctl เป็น คำสั่งธรรมดาๆ ที่ควรรู้

ก่อนอื่นต้อง backup file ด้วยคำสั่ง copy >> cp

cp /etc/sysctl.conf /etc/sysctl.conf.bak

และตามด้วยคำสั้่ง

cp /dev/null /etc/sysctl.conf

เพื่อทำการ ลบ ข้อความภายใน sysctl ทิ้งให้หมด

จากนั้นทำการ edit sysctl.conf

เสริมนิดหนึ่งครับ config นี้ใช้กับ FreeBSD ครับ

ใช้กับ linux ได้ 100 % ครับ ยืนยัน ไม่เฉพาะ freebsd

Kernel sysctl configuration file for Red Hat Linux

For binary values, 0 is disabled, 1 is enabled.

ส่วนอันนี้จะ advance ขึ้นมาอีก ครับ อันนี้นี่ล่ะที่ผมจะให้ท่านใช้ ถ้าท่านจะใช้ระบบ drbl ของผม

คำเตือน :: หากท่านไม่มีความรู้ในเรื่อง SYS KERNEL กรุณาใช้ ตัวแรกที่ผมแนะนำ เพราะปลอดภัยกว่า และดูแลง่ายกว่า
ตัวนี้เหมาะกับ OPENBSD LINUX HPUNIX ส่วน FREEBSD ท่านอาจจะพบปัญหาในเรื่องของรีซอสได้ กรุณาปรับ “Increases the maximum total TCP buffer space”
ลดลงเพื่อความปลอดภัย

คำเตือนที่ 2 :: หาก HDD ของท่านไม่ใช่ SCSI SAS กรุณาหลีกเลี่ยงการใช้ SYSCTL นี้โดยเด็ดขาด เพราะ IO จะทำงานหนักมาก >>แต่แลกกับความเร็วก็คุ้มครับ

>>> ตัวนี้ถูกปรับแต่งเพื่อ performance ระบบมากกว่าเรื่อง safe ไม่แนะนำสำหรับมือใหม่ครับ

Kernel sysctl configuration file for UNIX

For binary values, 0 is disabled, 1 is enabled.

edit by 3_c@windowslive.com

advance config

Controls the System Request debugging functionality of the kernel

kernel.sysrq = 0

Controls whether core dumps will append the PID to the core filename.

Useful for debugging multi-threaded applications.

kernel.core_uses_pid = 1

Have core files deleted

kernel.core_pattern=/dev/null

Controls IP packet forwarding

net.ipv4.ip_forward = 0

Controls source route verification

net.ipv4.conf.default.rp_filter = 1

Enable ignoring broadcasts requests

net.ipv4.icmp_echo_ignore_broadcasts = 1

Disable IP source routing

net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.lo.accept_source_route = 0
net.ipv4.conf.eth0.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0

Enable TCP Syn Cookie protection

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024

Disable ICMP Redirect Acceptance

net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.lo.secure_redirects = 0
net.ipv4.conf.eth0.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0

Enable bad error message protection

net.ipv4.icmp_ignore_bogus_error_responses = 1

Enable IP Spoofing protection

net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.conf.eth0.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

Enable Log spoofed packets, source routed packets, redirect packets

net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.lo.log_martians = 1
net.ipv4.conf.eth0.log_martians = 1
net.ipv4.conf.default.log_martians = 1

Decrease the time default value for tcp_fin timeout connection

net.ipv4.tcp_fin_timeout = 30

Decrease the time default value for tcp_keepalive_time connection

net.ipv4.tcp_keepalive_time = 3600

Turn off tcp_window_scaling support

net.ipv4.tcp_window_scaling = 0

Turn on tcp_sack support

net.ipv4.tcp_sack = 1

tcp_fack should be on because of sack

net.ipv4.tcp_fack = 1

Turn on the tcp_timestamp support

net.ipv4.tcp_timestamps = 1

Increases the maximum total TCP buffer space

#net.ipv4.tcp_mem = 28672 28672 32768
#net.ipv4.tcp_mem = 3129344 3137536 3145728

increase TCP max buffer size

net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

increase Linux autotuning TCP buffer limits

min, default, and max number of bytes to use

net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

Increase the maximum TPC write buffer space

#net.ipv4.tcp_wmem = 16384 65536 524288

Increases the maximum TCP read buffer space

#net.ipv4.tcp_rmem = 49152 196608 1572864

Increase the maximum and default receive socket buffer size

#net.core.rmem_max = 262140
#net.core.rmem_default = 262140

Increase the maximum and default send socket buffer size

#net.core.wmem_max = 262140
#net.core.wmem_default = 262140

For high volume mysql, Postgresql servers

kernel.shmall = 556742272
kernel.shmmax = 556742272

ด้วยความรู้อันน้อยนิดของผม หากท่านใดมีคำแนะนำใดๆ อย่านิ่งเฉย โปรดกรุณาชี้แนะกระผมด้วยนะครับ

ขอบคุณครับ

น่าจะมีอธิบายด้วยนะครับ :slight_smile:

ไอทั้งหมดที่กล่าวมาเป็น ส่วนของ kernel หมดครับ
จึงใช้ได้กับ linux ทั้งหมด

ส่วนอันนี้ kernel linux 100% ครับ แต่ทำแบบนี้มีผลทำให้ HD system I/O พังเอาง่ายๆครับโอกาส kernel panic 85% การปรับ sysctl หรือ system control kernel management ควรปรับตามความเหมาะกับการใช้งาน เพราะ การดึง ทรัพยากร ออกมาใช้งานมากๆมีผลทำให้ I/O process มากเกินความจำเป็นก่อให้ แคทซิ่งหรือที่รู้จักกันดีว่า HD read Error ก็เป็นได้ครับระบบ linux กับ FreeBsd ควรใส่ใจเรื่อง balance I/O ให้มากๆนะครับอย่าปรับอะไรเกินความจำเป็น ถ้าให้ดีที่สุด compile kernel ให้เนียนๆสะดีกว่าครับ

ในความเป็นจริงแล้วผมแนะนำตัวแรกมากกว่าครับ ถ้าเครื่องของท่านไม่ดีพอ เพราะเครื่องที่ผมใช้เป็นพวก io ไม่ต้องพูดถึง

ใครอยากทดสอบลองเล่นและทดสอบเอา ตัวง่ายๆแบบตัวนี้ไปก่อนก็ได้ครับ

http://jakarta.apache.org/jmeter/index.html

ส่วน ตัวที่ผมใช้นั้นเป็น tools ของ mysql (schema pro)ใช้ยากมากๆ ในความเห็นของคนรู้น้อยแบบผม

Memory 32GB เยอะมาก ๆ

[quote author=3_c link=topic=13990.msg136942#msg136942 date=1223270213]
ในความเป็นจริงแล้วผมแนะนำตัวแรกมากกว่าครับ ถ้าเครื่องของท่านไม่ดีพอ เพราะเครื่องที่ผมใช้เป็นพวก io ไม่ต้องพูดถึง

ทำให้ kernel เห็นเต็ม 32GB ก็เครื่องเทพแล้วนะครับ sysctl ไม่จำเป็นกับ case แบบนี้ครับจะมาปรับเรื่องนี้อยากให้ดู process และ load ประกอบกันไป…ปรับกันไปตามความจำเป็นใช้งาน

เป็นการถนอมเครื่องไปด้วยครับ เพราะการปรับแบบนี้…ผมเราไปปรับนมหนูคาบูเรเตอร์อ่านะ ไม่ต้องไปปรับนมหนูหรอก lol

ถ้า compilied เอง จะมี option หนึ่งให้เลือกว่าจะให้เห็นเท่าไหร่ 4 32 หรือ 64M

ใช้ยังไง ปรับยังงั้น ปรับให้เข้ากับการใช้งาน ไม่มีสูตรตายตัว

[quote author=212cafe.com link=topic=13990.msg137438#msg137438 date=1223365879]
ใช้ยังไง ปรับยังงั้น ปรับให้เข้ากับการใช้งาน ไม่มีสูตรตายตัว

ความเห็นแตกกันมากเหลือเกินครับ

เดี๋ยวผมอธิบายดีกว่าครับ ว่าอะไรคืออะไร ไม่อยากให้เดาสุ่มกันแบบนี้ครับ

เดี๋ยวอธิบายให้ฟังครับว่าแต่ละตัวทำอะไรเกี่ยวกับอะไร

สำหรับเครื่องทดสอบนั้น ผมแค่ใช้ทดสอบเรื่อง ram ไม่เกี่ยวกับส่วน sysctl โดยตรงนะครัีบ เข้าใจกันผิดแล้วครับ

ที่แจ้งสเปคเครื่องนั้นผมแจ้งเพื่อให้ท่านทราบว่ามันทำงานได้หนักแค่ไหนเท่านั้ื้น ไม่ใช่เพื่อเป็นการใช้แรมอย่างที่เข้าใจครับ

ไม่ว่าเราจะถอดแรมให้เหลือ 1 - 2 Gb ก็ไม่มีผลโดยตรงกับ sysctl ครับ มันเป็นการเปลี่ยน แบบ dynamic ในส่วนของ network และความปลอดภัยเป็นหลักมากกว่าครับ

ในการจูน sysctl นั้น จุดประสงค์หลักจะเ้ป็นเรื่องความปลอดภัย รองลงมาจะเป็นเรื่อง memory segment และ processes ซึ่งในการ mo จะมีผลทันทีมากกว่า recompiling ซึ่งในการเปลี่ยน นี้เป็นการเปลี่ยน แบบ dynamic ครับ

ในการจูน ผมได้แนะนำให้ใช้ ตัีวแรก ซึ่งเป็น basic ซึ่ง hosting เมืองนอกเค้าใ้ช้ตัวนี้กันส่วนใหญ่ ดังนั้นตัวแรกไม่ได้ทำให้ระบบของท่านมีปัญหา ดังนั้นอย่า panic ครับ

ส่วนตัวที่ 2 advance นั้น เป็นการทดลอง ทดสอบ มากกว่าที่จะนำมาให้ใช้กันจริงๆครับ ซึ่งจะมีแค่บางคำสั่งเท่านั้นที่แนะนำให้ใช้กันครับ >>~ อย่าเพิ่งตกใจกันไปครับ

เวลามาปรับใช้นั้นผมจะทำการทดสอบ แล้วนำมาแจ้งอีกครั้ืงว่า sysctl แบบไหนที่เหมาะกว่ากัน แต่ผมได้ทดสอบแบบ basic มาเป็นเวลากว่า 6 เ้ดือนมาแล้วครับ ผลก็คือ ดีกว่าไม่ปรับมากๆ

ขอเวลาซักเล็กน้อยครับ ผมจะมาอธิบายให้ฟังว่าตัวไหนใช้ทำอะไรครับ

sysctl ชุดแรก มีข้อมูลนี้ซ้ำครับ

Disables IP source routing

net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.lo.accept_source_route = 0
net.ipv4.conf.eth0.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0

Enable IP spoofing protection, turn on source route verification

net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.conf.eth0.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

Disable ICMP Redirect Acceptance

net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0