Äîâîëüíî ÷àñòî ïîÿâëÿþòñÿ çàäà÷å ïî ïîëíîé íàñòðîéêå è îïòèìèçàöèè web-ñåðâåðîâ. Êàê ïðàâèëî, ýòî ôèçè÷åñêèå ñåðâåðà ñ õîðîøèìè õàðàêòåðèñòèêàìè.  äàííîì ïîñòå ÿ ñêîìïîíîâàë âåñü ñâîé îïûò ïî íà÷àëüíîé íàñòðîéêå. Íà ïðàâèëüíîñòü ýòè äåéñòâèÿ íè êîåì îáðàçîì íå ïðåòåíäóþò. Áûòü ìîæåò íàäî äåëàòü êàê-òî èíà÷å è áóäåò ëó÷øå... ß ïðîñòî íàïèøó êàê äåëàþ ÿ.
Äàëåå âñ¸ áóäåò îòíîñèòñÿ ê îïåðàöèîííîé ñèñòåìå Ubuntu 18.04. Íà äðóãèõ Óáóíòàõ è Äåáèàíàõ èíñòðóêöèè áóäóò àíàëîãè÷íûå.
Ïðè óñòàíîâêå Óáóíòó ìîæíî íàæàòü F4 è âûáðàòü òàì Install minimal system. Íàì âåäü íå íóæåí ìóñîð èç ñòàíäàðòíîãî äèñòðèáóòèâà âðîäå lxc èëè python3?
Óñòàíàâëèâàåì îïåðàöèîííóþ ñèñòåìó.
Ïîñëå óñòàíîâêè ïðåæäå âñåãî îáíîâèì èíôîðìàöèþ î ðåïîçèòîðèÿõ è äàëåå îáíîâèì âñå ïàêåòû.
apt-get update
apt-get upgrade
apt-get autoremove
Îòðåäàêòèðóåì ôàéë /etc/default/grub òàê ÷òîáû â í¸ì ïðèñóòñòâîâàëà òàêàÿ ñòðî÷êà:
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
Ýòî íóæíî äëÿ óñêîðåíèÿ ðàáîòû docker, à áûòü ìîæåò è äðóãèõ ïðîãðàìì. Äàëåå íóæíî îáíîâèòü GRUB:
update-grub
Ïîäðîáíîñòè òîãî çà÷åì ýòî íàäî ìîæíî íàéòè òóò:
https://askubuntu.com/questions/417215/how-does-kernel-support-swap-limit
Óáóíòà ìîãëà îáíîâèòü ÿäðî, ïîýòîìó íà âñÿêèé ñëó÷àé ïåðåçàãðóæàåìñÿ:
shutdown -r now
 áóäóùåì îáíîâëÿòü ÿäðî ÿ êàòåãîðè÷åñêè íå ðåêîìåíäóþ. À ïîêà ñåðâåð ïóñòîé, ìû íè÷åì íå ðèñêóåì.
Ïîñëå ïåðåçàãðóçêè óñòàíîâèì êîå-êàêèå ïàêåòû, ÷òîáû ìîæíî áûëî ïî ÷åëîâå÷åñêè ðàáîòàòü ñ ñèñòåìîé:
apt-get install nano mc htop iftop
nano - êîíñîëüíûé òåêñòîâûé ðåäàêòîð
mc - ôàéëîâûé ìåíåäæåð "äëÿ ëþäåé"
htop - êðàñèâîå îòîáðàæåíèå òåêóùåé ñèòóàöèè íà ñåðâåðå (ïðîöåññîðû, ïàìÿòü, çàïóùåíûå ïðèëîæåíèÿ)
iftop - ìîíèòîðèíã òðàôèêà
Äàëåå ÿ âñ¸ äåëàþ ÷åðåç mc. Ãóëÿþ ïî ïàïêàì, âíîøó èçìåíåíèÿ. Åñëè íàäî íàáðàòü êîíñîëüíûå êîìàíäû, òî æìó Ctrl + O è âñ¸ äåëàþ. Îáðàòíî â mc - òîæå Ctrl + O. Åñëè íóæíî îòðåäàêòèðîâàòü ôàéë - æìó F4. ×òåíèå - F3. Ñîõðàíåíèå - F2. Âûõîä èç ôàéëà - äâà ðàçà ESCAPE. Âñ¸ òàì ïðîñòî è êëàññíî! Äëÿ òîãî ÷òîáû ìíå áûëî óäîáíî ÿ åù¸ íàñòðàèâàþ
ýòî. Äàëåå ëó÷øå ïåðåçàéòè íà ñåðâåð ïî ñâîåìó SSH. ß ñ÷èòàþ, ÷òî íîâè÷êàì òîæå ëó÷øå âñ¸ äåëàòü ÷åðåç mc. Èíà÷å òû íå âèäèøü ñèñòåìó ñ êîòîðîé ðàáîòàåøü.
Òàêæå ðåêîìåíäóþ ïîâåñèòü SSH íà êàêîé-íèáóäü äðóãîé ïîðò, ïîòîìó ÷òî ïî 22 îáû÷íî ëîìÿòñÿ êèòàéöû. Èíñòðóêöèè îïèñàíû, íàïðèìåð,
òóò. Ïîñëå ñìåíû ïîðòà æåëàòåëüíî ïðîäåëàòü è ýòî:
"Äàííîå ïðàâèëî îãðàíè÷èâàåò áîëüøå 20-òè ïîäêëþ÷åíèå ê 80 ïîðòó(web) çà 15 ñåêóíä ñ 1 ip àäðåñà.
(êñòàòè, ïîäîáíîå ïðàâèëî åñòü íà óðîâíå nginx, íî ñæèðàåò îãðîìíîå êîëè÷åñòâî ðåñóðñîâ)":
iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 15 --hitcount 20 -j DROP
"Ïðàâèëî îãðàíè÷èâàåò êîëè÷åñòâî ïîäêëþ÷åíèé ê SSH, íå áîëåå 4-õ ïîäêëþ÷åíèé çà 1 ìèíóòó":
iptables -A INPUT -p tcp --dport 354 -i eth0 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 354 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
"Ãäå 354 ïîðò âàøåãî ssh ñåðâåðà. Íà äåëå ó ìåíÿ íå ïîëó÷àëîñü àâòîðèçîâàòü áîëåå 1 ðàçà çà ìèíóòó. Äàëåå ýòî ïðàâèëî âû äàëüøå ìîæåòå àäàïòèðîâàòü ïîä ñåáÿ è äðóãèå ñåðâèñû."
Äîáàâëÿåì ïðàâèëà äëÿ çàïðåòà Simple Service Discovery Protocol (SSDP) ÷òîáû äàòàöåíòð íå ïðîñèë íàñ ýòî ñäåëàòü â áóäóùåì. Òàêæå áëîêèðóåì âñå ïîðòû êðîìå òåõ ÷òî íàì íóæíû (â ýòîì ïðèìåðå îòêðûâàåì òîëüêî ïîðò 22):
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
-A INPUT -i eth0 -j DROP
-A INPUT -i eth0 -p tcp -m tcp --dport 1900 -j DROP
-A INPUT -i eth0 -p udp -m udp --dport 1900 -j DROP
-A FORWARD -i eth0 -p tcp --dport 22 -j ACCEPT
-A FORWARD -i eth0 -j DROP
-A FORWARD -i eth0 -p tcp -m tcp --dport 1900 -j DROP
-A FORWARD -i eth0 -p udp -m udp --dport 1900 -j DROP
-A OUTPUT -s 234.165.140.130/32 -p tcp -m tcp --sport 1900 -j DROP
-A OUTPUT -s 234.165.140.130/32 -p udp -m udp --sport 1900 -j DROP
Ãäå 234.165.140.130 - ýòî IP àäðåñ âàøåãî ñåðâåðà â èíòåðíåòå.
Èëè òàê:
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i eth0 -p tcp -m tcp -m multiport --dports 22 -j ACCEPT
-A INPUT -i eth0 -m conntrack -j ACCEPT --ctstate RELATED,ESTABLISHED
-A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -i eth0 -j DROP
-A OUTPUT -s 234.165.140.130/32 -p tcp -m tcp --sport 1900 -j DROP
-A OUTPUT -s 234.165.140.130/32 -p udp -m udp --sport 1900 -j DROP
-A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i eth0 -j DROP
Ïîñëå ðåñòàðòà ñèñòåìû âñå ïðàâèëà îáíóëÿòñÿ, ïî ýòîìó äåëàåì ñëåäóþùåå:
apt-get install ifupdown
Äàëåå ñîçäàåì è ðåäàêòèðóåì ôàéë /etc/network/if-up.d/00-iptables
nano -w /etc/network/if-up.d/00-iptables
Ïèøåì â íåãî:
#!/bin/sh
iptables-restore < /etc/firewall.conf
ñîõðàíÿåì è äåëàåì ôàéë èñïîëíÿåìûì:
chmod +x /etc/network/if-up.d/00-iptables
Ñîõðàíÿåì ïðàâèëà â ôàéë:
iptables-save | sudo tee /etc/firewall.conf
Âñ¸, ïðàâèëà íàñòðîåíû è ñîõðàíÿòñÿ ïîñëå ïåðåçàãðóçêè ñèñòåìû."
Âìåñòî ðó÷íîé ïðàâêè iptables ìîæíî èñïîëüçîâàòü
fail2ban.
Ñèíõðîíèçèðóåì âðåìÿ:
apt-get install ntpdate
crontab -e
È ïðîïèñûâàåì â crontab:
* */4 * * * ntpdate 2.de.pool.ntp.org
Ìîæíî áûëî áû âûáðàòü áîëåå óäà÷íûé ñåðâåð âðåìåíè, íî ìíå âëîì èõ èñêàòü. Âñ¸ ðàáîòàåò íà䏿íî.
"Óñêîðÿåì îáùóþ ðàáîòó ñèñòåìû. Prelink è Preload. Prelink - äëÿ ñîçäàíèå ñòàòè÷íûõ àäðåñîâ áèáëèîòåê, Preload - ýòî íåáîëüøîå ïðèëîæåíèå, êîòîðîå ñëåäèò çà ôàéëàìè íàèáîëåå ÷àñòî èñïîëüçóåìûõ ïðèëîæåíèé, è çàãðóæàåò èõ â ïàìÿòü, êîãäà ñèñòåìà ïðîñòàèâàåò.
Óñòàíîâêà Prelink:
apt-get -y install prelink
Ðåäàêòèðóåì ôàéë /etc/default/prelink:
nano /etc/default/prelink
Èçìåíèòå ñòðîêó ñ PRELINKING=unknown íà PRELINKING=yes
Çàïóñêàåì:
/etc/cron.daily/prelink
Óñòàíîâêà Preload:
apt-get -y install preload"
Èíôîðìàöèÿ âçÿòà èç
ýòîé ñòàòüè.
Ïðåäëàãàþ
ïåðåíåñòè /tmp â îïåðàòèâíóþ ïàìÿòü. Â ñòàòüå ïî ññûëêè èçëîæåíû ïðåäïîñûëêè è ðåçóëüòàòû òàêîãî ïåðåíîñà. Äåëàåòñÿ òàê:
echo "tmpfs /tmp tmpfs size=8G,rw,nosuid,nodev 0 0" | tee -a /etc/fstab
reboot
UPD: òåïåðü ÿ äóìàþ, ÷òî ïåðåíîñèòü /tmp â îïåðàòèâêó íå íàäî. Ìîæíî ðàçîê ïîëîæèòü òóäà áîëüøîé ôàéë è ïîëîæèòü ñåðâåð. Ñìûñëà â ýòîì íåò îñîáî, ïîòîìó ÷òî ïàïêà â ïàìÿòè óæå åñòü è îíà íàçûâàåòñÿ /dev/shm - ýòî îáû÷íàÿ ïàïêà íå ñìîòðÿ íà òî, ÷òî ëåæèò â /dev.
Äàëåå ÿ îòêëþ÷àþ ðàçëè÷íûå ëèìèòû. Ïðè îòêëþ÷åíèè ëèìèòîâ ñåðâåð ìîæåò "æåñòêî óïàñòü", â ñëó÷àå áàãà â ïðîãðàììàõ. Íàïðèìåð, ïðîãðàììà ñúåñò âñþ ïàìÿòü. Íî, ïðè òàêèõ íàñòðîéêàõ ñåðâåð ñìîæåò äåðæàòü íàâåðíÿêà áîëåå âûñîêóþ íàãðóçêó. Âîò ÷òî ÿ ïðîïèñûâàþ â ôàéë /etc/security/limits.conf:
# Disable all limits for root
root - core 0
root - nofile 1048576
root - memlock unlimited
root - fsize unlimited
root - data unlimited
root - rss unlimited
root - stack unlimited
root - cpu unlimited
root - nproc unlimited
root - as unlimited
root - locks unlimited
root - sigpending unlimited
root - msgqueue unlimited
# Disable all limits for other users
* - core 0
* - nofile 1048576
* - memlock unlimited
* - fsize unlimited
* - data unlimited
* - rss unlimited
* - stack unlimited
* - cpu unlimited
* - nproc unlimited
* - as unlimited
* - locks unlimited
* - sigpending unlimited
* - msgqueue unlimited
Êàê âèäèòå, ó ìåíÿ ïàðàìåòð core ðàâåí íóëþ, ÷òîáû ñèñòåìà íå êàêàëà core-dump'àìè ïðè ñáîÿõ êàêîãî-íèáóäü php. Âñ¸ îñòàëüíîå ôàêòè÷åñêè áåç îãðàíè÷åíèé.
Òåïåðü íåîáõîäèìî îïòèìèçèðîâàòü ÿäðî ÷åðåç /etc/sysctl.conf. Åñòü ìàññà àëüòåðíàòèâíûõ êîíôèãîâ ýòîãî ôàéëà è ñïîðû íà ýòó òåìó. Âîò íåêîòîðûå ïðèìåðû.
Còàòüÿ ïðî îïòèìèçàöèþ ÿäðà:
https://gist.github.com/kgriffs/4027835
È âîò ýòî äëÿ VDS:
https://habrahabr.ru/post/186362/
À åù¸ âîò (ïðîâåðåíî ßíäåêñ.Òàíêîì):
https://www.prolinux.org/post/nastroyki-nagruzhennogo-servera/
Âîò çäåñü ëèìèòû îòêëþ÷àþò âîîáùå:
https://tobert.github.io/post/2014-06-24-linux-defaults.html
Îïèñàíèå ïàðàìåòðîâ sysctl.conf íà ðóññêîì ÿçûêå åñòü òóò:
http://adminunix.ru/nastrojka-sysctl/
è òóò
https://nikitushkin.wordpress.com/2011/02/12/%D0%B...D0%BF%D1%80%D0%B0%D0%B2%D0%BB/
Àêòèâíåå âûãðóæàåì íåèñïîëüçóåìûå ñòðàíèöû èç êåøà.
vm.vfs_cache_pressure = 1000
Èíà÷å êåø ñîæð¸ò âñþ ïàìÿòü è ýòîãî íå áóäåò âèäíî íè îäíîé òóëçîé! Ïîäðîáíîñòè
òóò. ×òîáû îñâîáîäèòü ïàìÿòü íóæíî ñäåëàòü ýòî:
sync
echo 3 > /proc/sys/vm/drop_caches
Òàêæå íà ñâîé ñòðàõ è ðèñê ìîæíî äîáàâèòü ýòî:
"Ïîñëå ýòîãî ñòîèò íàñòðîèòü îòëîæåííóþ çàïèñü — ÿäðî áóäåò êîïèòü äàííûå, îæèäàþùèå çàïèñè íà äèñê, è çàïèñûâàòü èõ ëèáî ïðè îñòðîé íåîáõîäèìîñòè, ëèáî ïî èñòå÷åíèè òàéìàóòà. ß ñòàâëþ òàéìàóò íà 60 ñåêóíä, êòî-òî — íà 150.
Äëÿ ýòîãî îòêðûâàåì /etc/sysctl.conf è äîáàâëÿåì ïàðàìåòðû
vm.laptop_mode = 5 // Âêëþ÷åíèå ðåæèìà
vm.dirty_writeback_centisecs = 6000 âðåìÿ â ñÑê. Ò.å. 100åä = 1 ñåêóíäà"
Èñòî÷íèê:
ñòàòüÿ íà õàáðå.
ß èñïîëüçîâàë êîíôèã ïî
ïåðâîé ññûëêå. Åãî íàäî ïðîïèñàòü öåëèêîì â /etc/sysctl.conf. Ïîçæå ìîæíî ïðîòåñòèðîâàòü ñâîþ ñèñòåìó â äðóãèõ êîíôèãóðàöèÿõ. Ìîæíî âñ¸ èçó÷èòü è òàê áóäåò ëó÷øå, íî òåìà áîëüøàÿ.  öåëîì ìîé êîíôèã /etc/sysctl.conf âûãëÿäèò òàê:
#
# Èç ñòàòüè: https://www.prolinux.org/post/nastroyki-nagruzhennogo-servera/
#
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
net.ipv4.tcp_syncookies = 0
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
vm.swappiness = 0
net.ipv4.tcp_fack = 1
net.ipv4.tcp_sack = 1
net.ipv4.tcp_mem = 8388608 12582912 16777216
net.ipv4.udp_mem = 8388608 12582912 16777216
net.ipv4.udp_rmem_min = 16384
net.ipv4.udp_wmem_min = 16384
net.core.wmem_max = 8388608
net.core.rmem_max = 8388608
net.ipv4.tcp_rmem = 8192 87380 8388608
net.ipv4.tcp_wmem = 8192 87380 8388608
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_window_scaling = 1
net.core.somaxconn = 300000
net.core.netdev_max_backlog = 8192
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_keepalive_time = 180
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_max_tw_buckets = 1000000
net.ipv4.ip_local_port_range = 1024 65535
net.nf_conntrack_max = 1000000
#
# Îòëîæåííàÿ çàïèñü — ÿäðî áóäåò êîïèòü äàííûå, îæèäàþùèå çàïèñè íà äèñê, è çàïèñûâàòü èõ ëèáî ïðè îñòðîé íåîáõîäèìîñòè, ëèáî ïî èñòå÷åíèè òàéìàóòà.
# ß ñòàâëþ òàéìàóò íà 60 ñåêóíä, êòî-òî — íà 150.
#
vm.laptop_mode = 5 # âêëþ÷åíèå ðåæèìà
vm.dirty_writeback_centisecs = 6000 # âðåìÿ: 100 åä. = 1 ñåêóíäà
#
# Lines, as recommended by the LXD project
#
fs.inotify.max_queued_events = 1048576
fs.inotify.max_user_instances = 1048576
fs.inotify.max_user_watches = 1048576
#
# Àêòèâíåå âûãðóæàåì íåèñïîëüçóåìûå ñòðàíèöû èç êåøà: https://blog.poiuty.com/dopolnitelnye-nastrojki-sysctl-conf.html
#
vm.vfs_cache_pressure = 10000
#
# Íàñòðîéêà äëÿ Redis
#
vm.overcommit_memory = 1
#
# Ïåðåçàãðóçêà ïðè îáíàðóæåíèè kernel panic
#
kernel.core_pattern = /var/crash/core.%t.%p
kernel.panic = 20
kernel.unknown_nmi_panic = 1
Ïðèìåðíÿåì íàñòðîéêè èç êîíôãèà áåç ïåðåçàãðóçêè:
sysctl --system
Âêëþ÷èòü rc.local â Ubuntu 18.04 ìîæíî òàê:
https://askubuntu.com/questions/886620/how-can-i-execute-command-on-startup-rc-local-alternative-on-ubuntu-16-10
Äëÿ íîðìàëüíîé ðàáîòû Percona è Redis íàäî äîáàâèòü ýòó ñòðî÷êó â rc.local:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
Óñòàíîâèì nginx:
apt-get install nginx
Òåïåðü ìîæíî íàñòðîèòü nginx. Èíôû îá ýòîì äîôèãà. Ìîæíî âîñïîëüçîâàòüñÿ
ýòîé èíôîðìàöèåé ê ïðèìåðó. Ìîé êîíôèã /etc/nginx/nginx.conf âûãëÿäèò
òàê.
Óñòàíîâèì âñ¸ íåîáõîäèìîå äëÿ php 7:
apt-get install php-fpm php-common php-cli
Òóò íàäî óáåäèòüñÿ, ÷òî íèêàêèõ ñðàíûõ Àïà÷åé íàì íå óñòàíîâèòñÿ.
Åñëè íóæíà áîëåå ñòàðàÿ âåðñèÿ PHP, òî ïðèä¸òñÿ èñïîëüçîâàòü íåîôôèöèàëüíûå ïàêåòû äëÿ ýòîãî. Ñïîñîá óñòàíîâêè php 5.6 îïèñàí
òóò.
Êîíôèãóðèðîâàòü php-fpm ìîæíî
òàê. Íî ÿ èñïîëüçîâàë ðåêîìåíäàöèè èç
ñòàòüè âûøå.
Äëÿ php7 òàêæå íåîáõîäèìî óñòàíîâèòü êó÷ó ðàñøèðåíèé:
apt-get install php-geoip php-curl php-gd php-intl php-mysql php-tidy php-opcache php-json php-mcrypt php-bz2 php-readline php-xsl php-memcache php-bcmath php-mbstring php-xml php-zip php-memcached
Åñëè áû ýòî íóæíî áûëî ñäåëàòü âåðñèè 5.6, òî áûëî áû òàê:
apt-get install php-geoip php5.6-curl php5.6-gd php5.6-intl php5.6-mysql php5.6-tidy php5.6-opcache php5.6-json php5.6-mcrypt php5.6-bz2 php5.6-readline php5.6-xsl php-memcache php5.6-bcmath php5.6-mbstring php5.6-xml php5.6-zip php-memcached
Âíèìàíèå! PHP â öåëîì ÿâëÿåòñÿ âåñüìà õðåíîâûì ñðåäñòâîì ñ òî÷êè çðåíèÿ áåçîïàñíîñòè. Íàñòðàèâàòü êîíôèãè php.ini íóæíî âäóì÷èâî, âñ¸ òùàòåëüíî âçâåñèâ. Íàïðèìåð, æåëàòåëüíî îòêëþ÷èòü çàãðóçêó ôàéëîâ, åñëè îíà íå èñïîëüçóåòñÿ â âàøåì ïðîåêòå. Îïèñàíèå ìíîãèõ ëàçååê äëÿ õàêåðîâ è ìåð ïðåäîñòîðîæíîñòè ìîæíî íà÷àòü ÷èòàòü òóò:
https://www.cyberciti.biz/tips/php-security-best-practices-tutorial.html Êîãäà ÿ áûë íàèâíûì è íå "áèòûì", òî äóìàë ÷òî ýòè ñòðàõè ïðåóâåëè÷åíû - ÿ ñèëüíî îøèáàëñÿ.
Óñòàíîâèì geoip:
apt-get install php-geoip geoip-database-contrib
Íàñòðàèâàòü òóò íè÷åãî íå íóæíî. Ðàçâå ÷òî â php.ini â íóæíîì ìåñòå ïðîïèñàòü íàñòðîéêó äëÿ browscap:
[browscap]
; http://php.net/browscap
browscap = /etc/php/7.0/modules-available/php_browscap.ini
Òóò ïóòü äîëæåí áûòü äðóãèì - òóäà ãäå ó âàñ íà ñàìîì äåëå ëåæèò php_browscap.ini. Ñàì ýòîò ôàéë ìîæíî âçÿòü íàïðèìåð
òóò.
Óñòàíîâèì memached:
apt-get install memcached
Íàñòðîèòü åãî ìîæíî â ôàéëå /etc/memcached.conf. Ïîñìîòðèòå ýòîò ôàéë è ñàìè âñ¸ ïîéì¸òå. Îí ýëåìåíòàðíûé.
Òåïåðü ñòàâèì ÁÄ. Äëÿ âñåõ ëþáèòåëåé mysql ÿ íàñòîÿòåëüíî ðåêîìåíäóþ íå èñïîëüçîâàòü ñòàíäàðòíóþ ðåàëèçàöèþ ýòîé ÑÓÁÄ. Âìåñòî íå¸ èñïîëüçóåì Percona. Áóäåò ðîâíî òîæå ñàìîå, íî ñ âûèãðûøåì ïî ñêîðîñòè.
UPD: Percona 8.0 ñòàâèòñÿ òàê: https://www.percona.com/doc/percona-server/8.0/installation/apt_repo.html
(òî ÷òî íàïèñàíî äàëüøå ïðî óñòàíîâêó Percona íå àêòóàëüíî)
Ñëåäóþùèå êîìàíäû óñòàíîâÿò Percona:
cd /tmp
wget https://repo.percona.com/apt/percona-release_0.1-4.$(lsb_release -sc)_all.deb
dpkg -i percona-release_0.1-4.$(lsb_release -sc)_all.deb
apt-get update
apt-get install percona-server-server-5.7
mysql -u root -e "CREATE FUNCTION fnv_64 RETURNS INTEGER SONAME 'libfnv_udf.so'"
mysql -u root -p -e "CREATE FUNCTION fnv_64 RETURNS INTEGER SONAME 'libfnv_udf.so'"
mysql -u root -p -e "CREATE FUNCTION murmur_hash RETURNS INTEGER SONAME 'libmurmur_udf.so'"
Ðàñøèôðîâêà óñòàíîâêè Percona
òóò.
Äàëåå ìîæíî íàñòðîèòü å¸:
Ïðè íàñòðîéêå mysql / percona ìû äîëæíû ïîìíèòü îá ýòîì:
http://rimzy.net/category/mysql-5-7/
http://stackoverflow.com/questions/10905226/mysql-...ormance-tuning-recommendations
http://stackoverflow.com/questions/30901041/can-no...l-max-connections-in-ubuntu-15
Ìîé ôàéë /etc/mysql/percona-server.conf.d/mysqld.cnf âûãëÿäèò òàê:
#
# The Percona Server 5.7 configuration file.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
#
http://dev.mysql.com/doc/mysql/en/server-system-variables.html
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
explicit_defaults_for_timestamp
local-infile = 0
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1
# Recommended in standard MySQL setup
#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_ALL_TABLES
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links = 1
# GENERAL #
default-storage-engine = InnoDB
# MyISAM #
key-buffer-size = 96M
#myisam-recover = FORCE,BACKUP
# SAFETY #
max-allowed-packet = 16M
max-connect-errors = 1000000
sysdate-is-now = 1
innodb = FORCE
# CACHES AND LIMITS #
tmp-table-size = 32M
max-heap-table-size = 32M
query-cache-type = 0
query-cache-size = 0
max-connections = 500
thread-cache-size = 50
open-files-limit = 65535
table-definition-cache = 1024
table-open-cache = 2048
# INNODB #
innodb-flush-method = O_DSYNC
innodb-log-files-in-group = 2
innodb-log-file-size = 512M
innodb-flush-log-at-trx-commit = 2
innodb-file-per-table = 1
innodb-buffer-pool-size = 32G
# LOGGING #
log-error = /var/log/mysql/error.log
log-queries-not-using-indexes = 0
slow-query-log = 0
#slow-query-log-file = /var/log/mysql/slow.log
Ñîçäàë ÿ åãî ñ ïîìîùüþ
âèçàðäà íà ñàéòå Percona, ãäå ìîæíî ïîäîáðàòü ïàðàìåòðû ïîä ðàçíûå ñåðâåðà èç çàäà÷è.
Áèíëîãè â ýòîé êîíôèãóðàöèè îòêëþ÷åíû!
Òåïåðü íàäî óñòðàíèòü îäèí êîñÿê ÑÓÁÄ. Âîò òàê:
cp /lib/systemd/system/mysql.service /etc/systemd/system/
Add the following lines to the bottom of the file /etc/systemd/system/mysql.service:
LimitNOFILE=infinity
LimitMEMLOCK=infinity
Now reload the Systemd configuration with:
systemctl daemon-reload
Ïîäðîáíîñòè òîãî çà÷åì ýòî íàäî áûëè â îäíîé èç ññûëîê âûøå.
Ñ îïòèìèçàöèåé íà ýòîì âñ¸. Òåïåðü íóæíî òåñòèðîâàòü âñ¸ ýòî õîçÿéñòâî è ìîíèòîðèòü. Íàïðèìåð, ñ ïîìîùüþ
ßíäåêñ.Òàíêà.