Продуктивність Bitrix Старт на Proxmox і Virtuozzo 7 & Virtuozzo Storage


Тестування продуктивності Bitrix Старт на двох принципово різних платформах. Заміряти будемо за допомогою вбудованої панелі продуктивності Bitrix.

C однієї сторони, безкоштовна версія Proxmox 4.4, LXC контейнери з використанням файлової системи ZFS на SSD-дисках.

З іншого боку, ліцензійна Virtuozzo 7 CT + Virtuozzo Storage. У цьому варіанті ми використовуємо звичайні SATA диски + SSD для кеша запису і читання.

Ми враховуємо, що Virtuozzo 7 є комерційною системою, що вимагає обов'язкового ліцензування, а Proxmox 4 можна використовувати безкоштовно, але без технічної підтримки.

З цієї причини, повноцінно порівнювати дві платформи звичайно не коректно, але якщо
цікаво дізнатися як можна збільшити продуктивність сайту використовуючи одне і теж залізо, однакову конфігурацію віртуальних машин і її сервісів, то дана стаття може бути вам корисна.



Інші мої публікації
Мета даного тестування — виміряти продуктивність сайту Bitrix Старт 16.5.4, встановленого всередині контейнерів Proxmox LXC і Virtuozzo 7.

Передісторія

Наша команда займаємось супроводом різних web-проектів.

Основне завдання — проектування і впровадження оточень для web-систем. Ми стежимо за їх високою продуктивністю і доступністю, здійснюємо їх моніторинг і бекап.

Однією з важливих проблем при супроводі проектів є якість роботи хостингу, на якому розміщені проекти наших клієнтів. Виникають ситуації, коли VPS падає або працює повільно. Буває, що сервер без видимої причини недоступний або раптово перезавантажений.
У ці моменти ми стаємо заручниками служби технічної підтримки хостингової компанії і нам доводиться витрачати час на діагностику проблеми, підготовку статистики та надання інформації технічної підтримки хостингу. Рішення подібних проблем іноді триває цілодобово.

Що б вирішити для себе цю проблему, ми прийняли рішення побудувати невеликий хостинг для наших клієнтів. Для цього ми купили сервера і приступили до пошуку підходящого дата-центру для їх розміщення. В якості майданчика ми зупинилися на Selectel — сервера в їх Московському дата-центрі працюють без перебоїв. Технічна підтримка відповідає дуже швидко і вирішує всі виникаючі питання.

Спочатку, ми обрали найбільш просте рішення — піднімати сервера на базі Proxmox 3 з контейнерами OpenVZ і рейдом з SSD дисків. Це рішення було дуже швидким і достатньо надійним.

Час минав, з'явився Proxmox 4 і ми поступово перейшли на його використання у поєднанні з ZFS. Відразу зіткнулися з масою проблем, пов'язаних з LXC. Наприклад, у контейнерах не працював screen і multitail без попереднього запуску
exec </dev/tty
в контейнері, в Centos 6 без виконання команди:

sed -i -e 's/start_udev/false/g' /etc/rc.d/rc.sysinit

не працював ssh, не працював pure-ftpd ітд. Добре вивчивши і допрацювавши конфігурацію, ми налагодили в себе роботу Proxmox і були задоволені.

З плюсів, ми використовували стиснення на рівні ZFS:

  • Це дозволяло економити багато дискового простору для наших користувачів
  • Вирішувало проблему переповнення файлових систем, наприклад з-за логів,
  • Виключало проблему, коли база даних mysql з движком innodb не зменшувалася на диску при видаленні з неї, а просто заповнювалася порожніми блоками
  • Ми могли переміщати VPS клієнтів в режимі реального часу з сервера на сервер, використовуючи pve-zsync.
Загалом, перехід був успішним, але проходив складно. Все перевірялося на тестових серверах і звичайно підсумку, ми благополучно переїхали на нову архітектуру.

В якийсь момент, стало необхідним задуматися про збільшення продуктивності віртуальних машин і сайтів наших клієнтів.

Ми почали пробувати різні альтернативні варіанти. Для тестів ми купили ліцензії на Virtuozzo 7 і Cloud Storage. Зібрали тестовий кластер Virtuozzo Storage, налаштували кешування і запустили перші тестові віртуальні машини. На всіх етапах нам допомагала технічна підтримка Virtuozzo.

У підсумку, виявилися результатом дуже задоволені і перевели клієнтів на нову архітектуру. В одній з наступних статей я розповім основні моменти впровадження і про ті підводні камені, з якими ми зіткнулися.
В якості першого випробуваного використовується Proxmox 4.4-5/c43015a5

Сайти розташовані на пулу zfs з 2 SSD дисків в режимі дзеркала, через драйвер Proxmox:

zpool create -f -o ashift=12 zroot raidz /dev/sdb3 /dev/sda3 
zfs set atime=off zroot
zfs set compression=lz4 zroot
zfs set dedup=off zroot
zfs set snapdir=visible zroot
zfs set primarycache=all zroot
zfs set aclinherit=passthrough zroot
zfs inherit acltype zroot

Все інше для варіанту Proxmox повністю стандартно.

Варіант з Virtuozzo 7:

як гіпервізора у нас Virtuozzo release 7.0.3 (550), в якості дискового масиву використовується Virtuozzo 7 Storage. Як MDS використовуються 3 сервера:

2 avail 0.0% 1/s 0.0% 100m 17d 6h msk-01:2510
3 avail 0.0% 0/s 0.0% 102m 5d 1h msk-03:2510
M 1 avail 0.0% 1/s 1.8% 99m 17d 5h msk-06:2510

На тестовому стенді, чанкі розташовані на 2-ух простих SATA дисках

1025 active 869.2 G 486.2 G 1187 0 29% 1.15/485 1.0 msk-06
1026 active 796.6 G 418.8 G 1243 0 17% 1.18/440 0.4 msk-06

При цьому, на кожному чанке є свої SSD журнали запису, об'ємом близько 166GB

vstorage -c livelinux configure-cs -r /vstorage/livelinux-cs1/data -a /mnt/ssd2/livelinux-cs0-ssd/ -s 170642
vstorage -c livelinux configure-cs -r /vstorage/livelinux-cs2/data -a /mnt/ssd2/livelinux-cs1-ssd/ -s 170642

У клієнтів кластера є локальний кеш на SSD, розміром близько 370GB

vstorage://livelinux /vstorage/livelinux 
fuse.vstorage _netdev,cache=/mnt/ssd1/client_cache,cachesize=380000 0 0

На тестовому кластері використовується режим без реплікації, ті 1:1. На реальних бойових серверах використовується режим 3:2, тобто всі дані одночасно зберігаються на 3 серверах кластера, це дозволяє уникнути втрати даних у разі падіння до 2 серверів кластера.

Тестові VPS Bitrix мають наступні характеристики:

  • CPU 4 ядра
  • RAM 4GB
  • Centos 7
  • Nginx як фронтенд і для віддачі статики
  • Apache 2.4 Prefork для роботи .htaccess і реврайтов
  • PHP 5.6 в режимі php-fpm
  • Opcache
  • MariaDB 10.1 база зберігатися в Innodb
  • Redis для зберігання сесій користувачів
Характеристики тестового сервераПлатформа Supermicro SYS-6016T-U
2x Intel Xeon E5620
12 8GB DDR3-1066, ECC, Reg
2x Intel S3510 Series, 800GB, 2.5" SATA 6Gb/s, MLC
2x Hitachi Ultrastar A7K2000, 1TB, SATA III, 7200rpm 3.5", 32MB cache
/etc/sysctl.confnet.netfilter.nf_conntrack_max=99999999
fs.inotify.max_user_watches=99999999
net.ipv4.tcp_max_tw_buckets=99999999
net.ipv4.tcp_max_tw_buckets_ub=65535
net.ipv4.ip_forward=1
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_max_syn_backlog=65536
net.core.somaxconn=65535
fs.file-max=99999999
kernel.sem=1000 256000 128 1024
vm.dirty_ratio=5
fs.aio-max-nr=262144
kernel.panic=1
net.ipv4.conf.all..=1
kernel.sysrq=1
net.ipv4.conf.default.send_redirects=1
net.ipv4.conf.all.send_redirects=0
net.ipv4.ip_dynaddr=1
kernel.msgmn=1024
fs.inotify.max_user_instances=1024
kernel.msgmax=65536
kernel.shmmax=4294967295
kernel.shmall=268435456
kernel.shmmni=4096
net.ipv4.tcp_keepalive_time=15
net.ipv4.tcp_keepalive_intvl=10
net.ipv4.tcp_keepalive_probes=5
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_window_scaling=0
net.ipv4.tcp_sack=0
net.ipv4.tcp_timestamps=0
vm.swappiness=10
vm.overcommit_memory=1
nginx -Vnginx version: nginx/1.11.8
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC)
built with OpenSSL 1.0.1 e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log-http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock-http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic'
/etc/nginx/nginx.confworker_processes auto;
timer_resolution 100ms;
pid /run/nginx.pid;
thread_pool default threads=32 max_queue=655360;
events {
worker_connections 10000;
multi_accept on;
use epoll;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$host — $remote_user [$time_local] "$request"' '$status $body_bytes_sent "$http_referer"' '"$http_user_agent" "$http_x_forwarded_for"';
log_format defaultServer '[$time_local][$server_addr] $remote_addr ($http_user_agent) -> "$http_referer" $host "$request" $status';
log_format downloadsLog '[$time_local] $remote_addr "$request"';
log_format Counter '[$time_iso8601] $remote_addr $request_uri?$query_string';
access_log off;
access_log /dev/null main;
error_log /dev/null;

connection_pool_size 256;
client_header_buffer_size 4k;
client_max_body_size 2048m;
large_client_header_buffers 8 32k;
request_pool_size 4k;
output_buffers 1 32k;
postpone_output 1460;
gzip on;
gzip_min_length 1000;
gzip_proxied any;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript text/x-javascript application/javascript;
gzip_disable «msie6»;
gzip_comp_level 6;
gzip_http_version 1.0;
gzip_vary on;

sendfile on;
aio threads;
directio 10m;
tcp_nopush on;
tcp_nodelay on;
server_tokens off;

keepalive_timeout 75 20;
server_names_hash_bucket_size 128;
server_names_hash_max_size 8192;
ignore_invalid_headers on;
server_name_in_redirect off;

ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.4.4 8.8.8.8 valid=300s;
resolver_timeout 10s;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'AES128+EECDH:AES128+EDH';
ssl_session_cache shared:SSL:50m;
ssl_prefer_server_ciphers on;

proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_buffering off;
proxy_buffer_size 8k;
proxy_buffers 8 64k;
proxy_connect_timeout 300m;
proxy_read_timeout 300m;
proxy_send_timeout 300m;
proxy_store off;
proxy_ignore_client_abort on;

fastcgi_read_timeout 300m;
open_file_cache max=200000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;

proxy_cache_path /var/cache/nginx/page levels=2 keys_zone=pagecache:100m inactive=1h max_size=10g;

fastcgi_cache_path /var/cache/nginx/fpm levels=2 keys_zone=FPMCACHE:100m inactive=1h max_size=10g;
fastcgi_cache_key "$scheme$request_method$host";
fastcgi_cache_use_stale error timeout invalid_header http_500;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;

fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
upstream memcached_backend { server 127.0.0.1:11211; }

real_ip_header X-Real-IP;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
allow all;
server {
listen 80 reuseport;
}
include /etc/nginx/conf.d/*.conf;
}
/etc/nginx/sites-enabled/start.livelinux.ru.vhostupstream start.livelinux.ru {
keepalive 10;
server 127.0.0.1:82;
}
server {
listen 80;
server_name start.livelinux.ru www.start.livelinux.ru;
root /var/www/start.livelinux.ru/web;
error_page 404 = @fallback;
location @fallback {
proxy_pass start.livelinux.ru;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
error_log /var/log/ispconfig/httpd/start.livelinux.ua/nginx_error.error log;
access_log /var/log/ispconfig/httpd/start.livelinux.ua/nginx_access.log combined;

location ~ * ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
root /var/www/start.livelinux.ru/web;
access_log off;
expires 30d;
}
location ^~ /error { root /var/www; }

location / {
index index.php index.html index.htm;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass start.livelinux.ru;
}
include /etc/nginx/locations.d/*.conf;
}
php -vPHP 5.6.29 (cli) (built: Dec 9 2016 07:40:09)
Copyright © 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright © 1998-2016 Zend Technologies
with the ionCube PHP Loader (enabled) + Intrusion Protection from ioncube24.com (unconfigured) v5.1.2, Copyright © 2002-2016, by ionCube Ltd.
with Zend OPcache v7.0.6-dev, Copyright © 1999-2016, by Zend Technologies
/etc/php.ini[PHP]
engine = On
short_open_tag = On
asp_tags = Off
precision = 14
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func =
serialize_precision = 17
disable_functions =
disable_classes =
realpath_cache_size = 4096k
zend.enable_gc = On
expose_php = off
max_execution_time = 600
max_input_time = 600
max_input_vars = 100000
memory_limit = 512M
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
display_errors = Off
display_startup_errors = Off
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = Off
html_errors = On
variables_order = «GPCS»
request_order = «GP»
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 500M
auto_prepend_file =
auto_append_file =
default_mimetype = «text/html»
default_charset = «UTF-8»
always_populate_raw_post_data = -1
doc_root =
user_dir =
enable_dl = Off
cgi.fix_pathinfo = 1
file_uploads = On
upload_max_filesize = 500M
max_file_uploads = 200
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60
[CLI Server]
cli_server.color = On
[Date]
date.timezone = Europe/Moscow
[Pdo_mysql]
pdo_mysql.cache_size = 2000
pdo_mysql.default_socket=
[Phar]
[mail function]
sendmail_path = /usr/sbin/sendmail -t -i
mail.add_x_header = On
[SQL]
sql.safe_mode = Off
[ODBC]
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1
odbc.max_links = -1
odbc.defaultlrl = 4096
odbc.defaultbinmode = 1
[Interbase]
ibase.allow_persistent = 1
ibase.max_persistent = -1
ibase.max_links = -1
ibase.timestampformat = "%Y-%m-%d %H:%M:%S".
ibase.dateformat = "%Y-%m-%d"
ibase.timeformat = "%H:%M:%S".
[MySQL]
mysql.allow_local_infile = On
mysql.allow_persistent = On
mysql.cache_size = 2000
mysql.max_persistent = -1
mysql.max_links = -1
mysql.default_port =
mysql.default_socket =
mysql.default_host =
mysql.default_user =
mysql.default_password =
mysql.connect_timeout = 60
mysql.trace_mode = Off
[MySQLi]
mysqli.max_persistent = -1
mysqli.allow_persistent = On
mysqli.max_links = -1
mysqli.cache_size = 2000
mysqli.default_port = 3306
mysqli.default_socket =
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
mysqli.reconnect = Off
[mysqlnd]
mysqlnd.collect_statistics = On
mysqlnd.collect_memory_statistics = Off
[OCI8]
[PostgreSQL]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0
[Sybase-CT]
sybct.allow_persistent = On
sybct.max_persistent = -1
sybct.max_links = -1
sybct.min_server_severity = 10
sybct.min_client_severity = 10
[bcmath]
bcmath.scale = 0
[Session]
session.save_handler = redis
session.save_path = «tcp://127.0.0.1:6379»
session.use_strict_mode = 0
session.use_cookies = 1
session.use_only_cookies = 1
session.name = SESSIONID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.referer_check =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 5
url_rewriter.tags = «a=href area=href frame=src,input=src,form=fakeentry»
[MSSQL]
mssql.allow_persistent = On
mssql.max_persistent = -1
mssql.max_links = -1
mssql.min_error_severity = 10
mssql.min_message_severity = 10
mssql.compatibility_mode = Off
mssql.secure_connection = Off
[Tidy]
tidy.clean_output = Off
[soap]
soap.wsdl_cache_enabled=1
soap.wsdl_cache_dir="/tmp"
soap.wsdl_cache_ttl=86400
soap.wsdl_cache_limit = 5
[sysvshm]
[ldap]
ldap.max_links = -1
/etc/php.d/10-opcache.inizend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=512
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=130987
opcache.fast_shutdown=1
opcache.blacklist_filename=/etc/php.d/opcache*.blacklist
/etc/php-fpm.d/bitrix.conf[bitrix]
listen = /var/lib/php5-fpm/web1.sock
listen.owner = web1
listen.group = apache
listen.mode = 0660
user = web1
group = client1
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 5
pm.max_requests = 0
chdir = /
env[HOSTNAME] = $HOSTNAME
env[TMP] = /var/www/clients/client1/web1/tmp
env[TMPDIR] = /var/www/clients/client1/web1/tmp
env[TEMP] = /var/www/clients/client1/web1/tmp
env[PATH] = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
php_admin_value[open_basedir] = none
php_admin_value[session.save_path] = «tcp://127.0.0.1:6379»
php_admin_value[upload_tmp_dir] = /var/www/clients/client1/web1/tmp
php_admin_value[sendmail_path] = "/usr/sbin/sendmail -t -i -f webmaster@biz.livelinux.ru"
php_admin_value[max_input_vars] = 100000
php_admin_value[mbstring.func_overload] = 2
php_admin_value[mbstring.internal_encoding] = utf-8
php_admin_flag[opcache.revalidate_freq] = off
php_admin_flag[display_errors] = on
httpd -VServer version: Apache/2.4.6 (CentOS)
Server built: Nov 14 2016 18:04:44
Server's Module Magic Number: 20120211:24
Server loaded: APR 1.4.8, APR-UTIL 1.5.2
Compiled using: APR 1.4.8, APR-UTIL 1.5.2
Architecture: 64-bit
Server MPM: prefork
threaded: no
forked: yes (variable process count)
Server compiled with…
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="./etc/httpd"
-D SUEXEC_BIN="/usr/sbin/suexec"
-D DEFAULT_PIDLOG="/run/httpd/httpd.pid"
-D DEFAULT_SCOREBOARD=«logs/apache_runtime_status»
-D DEFAULT_ERRORLOG=«logs/error_log»
-D AP_TYPES_CONFIG_FILE=«conf/mime.types»
-D SERVER_CONFIG_FILE=«conf/httpd.conf»
/etc/httpd/conf.modules.d/00-mpm.confAgain mpm_prefork_module modules/mod_mpm_prefork.so
<IfModule mpm_prefork_module>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000

/etc/httpd/conf.modules.d/00-mutex.confMutex posixsem
EnableMMAP Off

/etc/httpd/conf.modules.d/10-fcgid.confAgain fcgid_module modules/mod_fcgid.so
FcgidMaxRequestLen 20000000
/etc/httpd/conf/sites-enabled/100-start.livelinux.ru.vhost<Directory /var/www/start.livelinux.ua>
AllowOverride None
Require all denied
<//Directory>

<VirtualHost *:82>
DocumentRoot /var/www/clients/client1/web3/web
ServerName start.livelinux.ru
ServerAlias www.start.livelinux.ru
ServerAdmin webmaster@start.livelinux.ru
ErrorLog /var/log/ispconfig/httpd/start.livelinux.ua/error.log

<Directory /var/www/start.livelinux.ru/web>
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler None
<//FilesMatch>
Options +FollowSymLinks
AllowOverride All
Require all granted
<//Directory>

<Directory /var/www/clients/client1/web3/web>
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler None
<//FilesMatch>
Options +FollowSymLinks
AllowOverride All
Require all granted
<//Directory>

<IfModule mod_suexec.c>
SuexecUserGroup web3 client1
<//IfModule>

<IfModule mod_fastcgi.c>
<Directory /var/www/clients/client1/web3/cgi-bin>
Require all granted
<//Directory>

<Directory /var/www/start.livelinux.ru/web>
<FilesMatch "\.php[345]?$">
SetHandler php5-fcgi
<//FilesMatch>
<//Directory>

<Directory /var/www/clients/client1/web3/web>
<FilesMatch "\.php[345]?$">
SetHandler php5-fcgi
<//FilesMatch>
<//Directory>

Action php5-fcgi /php5-fcgi virtual
Alias /php5-fcgi /var/www/clients/client1/web3/cgi-bin/php5-fcgi-*-82-start.livelinux.ru
FastCgiExternalServer /var/www/clients/client1/web3/cgi-bin/php5-fcgi-*-82-start.livelinux.ru-idle-timeout 300 -socket /var/lib/php5-fpm/web3.sock -pass-header Authorization
<//IfModule>

<IfModule mod_proxy_fcgi.c>
<Directory /var/www/clients/client1/web3/web>
<FilesMatch "\.php[345]?$">
SetHandler «proxy:unix:/var/lib/php5-fpm/web3.sock|fcgi://localhost»
<//FilesMatch>
<//Directory>
<//IfModule>

<IfModule mpm_itk_module>
AssignUserId web3 client1
<//IfModule>

<IfModule mod_dav_fs.c>
<Directory /var/www/clients/client1/web3/webdav>
<ifModule mod_security2.c>
SecRuleRemoveById 960015
SecRuleRemoveById 960032
<//ifModule>

<FilesMatch "\.ph(p3?|tml)$">
SetHandler None
<//FilesMatch>
<//Directory>

DavLockDB /var/www/clients/client1/web3/tmp/DavLock
<//IfModule>
<//VirtualHost>
10.1.20-MariaDB MariaDB Serversymbolic-links=0
default_storage_engine = InnoDB
innodb_file_per_table = 1
innodb_large_prefix = on
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
connect_timeout = 600000
wait_timeout = 28800
max_connections = 800
max_allowed_packet = 512M
max_connect_errors = 10000
net_read_timeout = 600000
connect_timeout = 600000
net_write_timeout = 600000
innodb_open_files = 512
innodb_buffer_pool_size = 2G
innodb_buffer_pool_instances = 4
innodb_file_format = barracuda
innodb_locks_unsafe_for_binlog = 1
innodb_flush_log_at_trx_commit = 2
transaction-isolation = READ-COMMITTED
innodb-data-file-path = ibdata1:10M:autoextend
innodb-log-file-size = 256M
innodb_log_buffer_size = 32M
skip-name-resolve
skip-external-locking
skip-innodb_doublewrite
query_cache_size = 128M
query_cache_type = 1
query_cache_min_res_unit = 2K
join_buffer_size = 8M
sort_buffer_size = 2M
read_rnd_buffer_size = 3M
table_definition_cache = 2048
table_open_cache = 100000
thread_cache_size = 128
tmp_table_size = 200M
max_heap_table_size = 200M
log_warnings = 2
log_error = /var/log/mysql/mysql-error.log
key_buffer_size = 128M
binlog_format=MIXED
server_id = 226
sync-binlog = 0
expire-logs_days = 3
max-binlog-size = 1G
log-slave-updates
binlog-checksum=crc32
slave-skip-errors = 1062,1146
log_slave_updates = 1
slave_type_conversions=ALL_NON_LOSSY
slave-parallel-threads=4
relay-log = /var/log/mysql/mysql-relay-bin
relay-log-index = /var/log/mysql/mysql-relay-bin.index
relay-log-info-file = /var/log/mysql/mysql-relay-log.info
skip-slave-start
optimizer_switch='derived_merge=off,derived_with_keys=off'
sql-mode=""
innodb_flush_method = O_DIRECT_NO_FSYNC
innodb_use_native_aio = 1
innodb_adaptive_hash_index = 0
innodb_adaptive_flushing = 1
innodb_flush_neighbors = 0
innodb_read_io_threads = 16
innodb_write_io_threads = 16
innodb_max_dirty_pages_pct = 90
innodb_max_dirty_pages_pct_lwm = 10
innodb_lru_scan_depth = 4000
innodb_purge_threads = 4
innodb_max_purge_lag_delay = 10000000
innodb_max_purge_lag = 1000000
innodb_checksums = 1
innodb_checksum_algorithm = crc32
table_open_cache_instances = 16
innodb_thread_concurrency = 32
innodb-use-mtflush=ON
innodb-mtflush-threads=8
innodb_use_fallocate=ON
innodb_monitor_enable = '%'
performance_schema=ON
performance_schema_instrument='%sync%=on'
malloc-lib = /usr/lib64/libjemalloc.so.1
port = 3306

/etc/redis.confbind 127.0.0.1
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 0
pidfile /var/run/redis/redis.pid
loglevel notice
logfile /var/log/redis/redis.log
databases 16
save 1 900
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /var/lib/redis/
unixsocket /tmp/redis.sock
unixsocketperm 777
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename «appendonly.aof»
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
maxmemory 32M
maxmemory-policy volatile-lru
Результати тесту продуктивності:
Proxmox 4


Virtuozzo 7


В якості бонусу, Virtuozzo 7, сайт на php70


В якості підсумку:

Перехід на нову хмарну платформу дав нам високу доступність даних за рахунок реплікації 3 сервера, але ми втратили корисну опцію zfs — стиснення. Ми отримали приріст продуктивності тестового сайту на Bitrix, в середньому на 45%. Якщо говорити про реальних сайтах, то в залежності від кількості плагінів і складності коду, ми отримували приріст до 3 разів.

З плюсів — ми отримали можливість міграції віртуальних машин з сервера на сервер швидко, без необхідності їх виключення. З мінусів, на відміну від Proxmox у Virtuozzo 7 поки що немає надійної та зручної панелі керування, так що все доводилося робити руками або через shell сценарії. Існуючий Automator все ще дуже сирий і працює непередбачувано.

На користь Virtuozzo — це його технічна підтримка, вона на висоті. Також є хороша документація по всім компонентам системи, адже з цим у Proxmox великі проблеми. Навіть щоб написати на форумі, необхідно сплатити підписку, а на мій погляд воно зовсім не варто. Кластер Proxmox працює поки не зламається, але от коли зламається, підняти його дуже складно і документації для цього явно не вистачає.

Сподіваюся, стаття виявиться для вас корисною. У следущий раз я розповім про перехід Bitrix на php70 і порівняю продуктивність різних редакцій Bitrix.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.