Seguro que te paso lo mismo. Haces un sitio web, crece, Apache ya no puede aguantarlo, pones Nginx, él tira por un par de años, luego comienza a ralentizar MySQL, compras hosting más potente, también tira por un par de años, luego comienza a ralentizar nuevamente y ahora dentro de 15 años descubres que solo tienias que activar un módulo en PHP y todo volaría incluso sin Sphinx !!! No?
¿Cómo entender que es lo que en un foro phpBB va lento?
Si tienes un foro con un par de millones de publicaciones, entonces está claro que no funcionará normalmente sin optimización, incluso los creadores de phpBB dirán que el foro es demasiado grande para que la búsqueda funcione en los engiens integrados (por cierto, elloos mismos, recomiendan instalar Sphinx en tales casos).
Hay que ejecutar en la consola del servidor
top
Y mira load average muestra los valores en 1, 5 y 15 minutos. En general, se acepta que la carga es normal si es inferior al número de cores del procesador. 0.5 para un núcleo, 1.5 para dos! Pero aquí todo es relativo, de acuerdo con mi expiriencia con dos núcleos, ¡el servidor comienza a ralentizarse a 5-7 (generación de páginas desde 4 segundos), y trabaja constantemente durante 3-5 (generación de páginas 0.4-1.5 segundos)! Esta es la carga total en el servidor y no siempre está claro qué debe optimizarse.
Sin embargo, phpBB tiene una herramienta de diagnóstico, es decir – debuging. En el file de configuración del foro config.php, descomente o escriba
@define('PHPBB_DISPLAY_LOAD_TIME', true); @define('DEBUG', true); @define('DEBUG_EXTRA', true);
Ahora todos verán en la parte inferior del foro una línea con información sobre cuánto tiempo se generó la página, y no cuánto tiempo paso desde que se hizo clic en el enlace y apareció la página, eso depende de la velocidad de conexión.
Y si navegar foro bajo el administrador, también habrá un enlace SQL Explain a la página donde estan estadísticas de cuanto tiempo tomo MySQL para realizar sus operaciones y tambien el PHP
SQL Report Page generated in 1.0217 seconds with 13 queries + 3 queries returning data from cache Time spent on mysqli queries: 0.02616s | Time spent on PHP: 0.9955s
Resulta que PHP consume más tiempo, y no MySQL, ¡como siempre he pensado!
Aquí comienza el misticismo. Un par de administradores de foros grandes notaron y dijeron a los creadores de phpBB que el módulo mbstring debe estar activado en PHP para el funcionamiento normal, y claro que esto debe estar escrito en las instrucciones y en los requisitos del foro, pero … ¡los creadores guardan silencio y no hacen nada! Esto es raro!
Mi foro dejó de frenar cuando la carga de búsqueda paso a Sphinx. Pero los resultados de búsqueda salian muy lentamenta(a veces no pasaba eso antes de timeout), hasta que active mbstring
Activamos el módulo PHP mbstring
Tengo CentOS 6.10 y php 7.2 acabo de actualizarlo desde CentOS 6.7 y php 5.6 mientras buscada la razon de poca permonas del foro(ahora claro solo culpo a PHP)
ver versión php
php -v
ver módulos
php -m
lo mismo de otra manera, muestrame mbstring si es que esta
php -m | grep mbstring
Instalamos módulo
yum install php-mbstring
Reiniciamos php-fpm (o lo que se ocupa de PHP en su web server, apache quizas)
/sbin/service php-fpm restart
Y ya todito va sorprendentemente rapido, cielo y tierra, antes y después … si después de eso tu búsqueda aún se ralentiza, ¡definitivamente nesecitas Sphinx!
Instalamos Sphinx
¡Puede descargar la tercera versión del sitio de desarrolladores www.sphinxsearch.com pero no entendí como instalarla!
Voy a instalar la versión 2, ya está en el archivo del sitio.
Bajatela
wget https://sphinxsearch.com/files/sphinx-2.2.11-2.rhel6.i386.rpm
instalo lo que es necesario pata Sphinx
yum install postgresql-libs unixODBC
yum install rpm
y mas
rpm -Uhv sphinx-2.2.11-2.rhel6.i386.rpm
hacemos folders necesarios
mkdir {/usr/www/sphinx/,/usr/www/sphinx/log}
chown -R sphinx:sphinx /usr/www/sphinx
Para configurar phpBB, aquí se describe casi todo lo que se necesita.
wiki.phpbb.com/Sphinx_Fulltext_SearchVamos al ACP de nuestro foro phpBB3 a GENERAL> Search settings y seleccionamos Sphinx Fulltext en Serach Backend y establecemos la ruta donde está la esfinge /usr/www/sphinx/
Después de hacer clic en Submit , se generará un archivo de configuración de esfinge.
PRECAUCIÓN: aquí debe cuydar el parámetro
mem_limit = 32M
si es demasiado grande puede causar desconexión del MySQL
Luego hay que ir a MANTAINANCE > Search index y hacer clic en Sphinx Fulltext (active) el boton Create index.
Simplemente creará algo, aún no está indexando. Se pueden eliminar otros índices: solo ocupa espacio
La configuración generada por el foro se inserta aquí
vi /etc/sphinx/sphinx.conf
Cambiamos por sus datos las lineas
sql_user = dbuser sql_pass = dbpassword
Aquí debe escribir una contraseña de su base de datos y usuario, se puede ver en la carpeta del foro en el archivo config.php
PRECAUCIÓN: ¡Si hay # en la contraseña, la esfinge decidirá que el resto de linea no es parte de la contraseña, sino un comentario! Si su contraseña tiene #, debe escribirse así
\#
Cambiamos el parametro morphology segun sus preferencias lenguisticas
morphology = stem_ru
Eso permite buscar las mismas palabras pero que terminan con diferentes letras. Lo encendí, pero a veces da resultados extraños: si una palabra se cortada por un espacio, también lo considera como una letra
Ese codigo lo adaptor para la lengua rusa
charset_table = U+FF10..U+FF19->0..9, 0..9, U+FF41..U+FF5A->a..z, U+FF21..U+FF3A->a..z, A..Z->a..z, a..z, U+0149, U+017F, U+0138, U+00DF, U+00FF, U+00C0..U+00D6->U+00E0..U+00F6, U+00E0..U+00F6, U+00D8..U+00DE->U+00F8..U+00FE, U+00F8..U+00FE, U+0100->U+0101, U+0101, U+0102->U+0103, U+0103, U+0104->U+0105, U+0105, U+0106->U+0107, U+0107, U+0108->U+0109, U+0109, U+010A->U+010B, U+010B, U+010C->U+010D, U+010D, U+010E->U+010F, U+010F, U+0110->U+0111, U+0111, U+0112->U+0113, U+0113, U+0114->U+0115, U+0115, U+0116->U+0117, U+0117, U+0118->U+0119, U+0119, U+011A->U+011B, U+011B, U+011C->U+011D, U+011D, U+011E->U+011F, U+011F, U+0130->U+0131, U+0131, U+0132->U+0133, U+0133, U+0134->U+0135, U+0135, U+0136->U+0137, U+0137, U+0139->U+013A, U+013A, U+013B->U+013C, U+013C, U+013D->U+013E, U+013E, U+013F->U+0140, U+0140, U+0141->U+0142, U+0142, U+0143->U+0144, U+0144, U+0145->U+0146, U+0146, U+0147->U+0148, U+0148, U+014A->U+014B, U+014B, U+014C->U+014D, U+014D, U+014E->U+014F, U+014F, U+0150->U+0151, U+0151, U+0152->U+0153, U+0153, U+0154->U+0155, U+0155, U+0156->U+0157, U+0157, U+0158->U+0159, U+0159, U+015A->U+015B, U+015B, U+015C->U+015D, U+015D, U+015E->U+015F, U+015F, U+0160->U+0161, U+0161, U+0162->U+0163, U+0163, U+0164->U+0165, U+0165, U+0166->U+0167, U+0167, U+0168->U+0169, U+0169, U+016A->U+016B, U+016B, U+016C->U+016D, U+016D, U+016E->U+016F, U+016F, U+0170->U+0171, U+0171, U+0172->U+0173, U+0173, U+0174->U+0175, U+0175, U+0176->U+0177, U+0177, U+0178->U+00FF, U+00FF, U+0179->U+017A, U+017A, U+017B->U+017C, U+017C, U+017D->U+017E, U+017E, U+0410..U+042F->U+0430..U+044F, U+0430..U+044F, U+4E00..U+9FFF, U+0400->U+0435, U+0401->U+0435, U+0402->U+0452, U+0452, U+0403->U+0433, U+0404->U+0454, U+0454, U+0405->U+0455, U+0455, U+0406->U+0456, U+0407->U+0456, U+0457->U+0456, U+0456, U+0408..U+040B->U+0458..U+045B, U+0458..U+045B, U+040C->U+043A, U+040D->U+0438, U+040E->U+0443, U+040F->U+045F, U+045F, U+0450->U+0435, U+0451->U+0435, U+0453->U+0433, U+045C->U+043A, U+045D->U+0438, U+045E->U+0443, U+0460->U+0461, U+0461, U+0462->U+0463, U+0463, U+0464->U+0465, U+0465, U+0466->U+0467, U+0467, U+0468->U+0469, U+0469, U+046A->U+046B, U+046B, U+046C->U+046D, U+046D, U+046E->U+046F, U+046F, U+0470->U+0471, U+0471, U+0472->U+0473, U+0473, U+0474->U+0475, U+0476->U+0475, U+0477->U+0475, U+0475, U+0478->U+0479, U+0479, U+047A->U+047B, U+047B, U+047C->U+047D, U+047D, U+047E->U+047F, U+047F, U+0480->U+0481, U+0481, U+048A->U+0438, U+048B->U+0438, U+048C->U+044C, U+048D->U+044C, U+048E->U+0440, U+048F->U+0440, U+0490->U+0433, U+0491->U+0433, U+0490->U+0433, U+0491->U+0433, U+0492->U+0433, U+0493->U+0433, U+0494->U+0433, U+0495->U+0433, U+0496->U+0436, U+0497->U+0436, U+0498->U+0437, U+0499->U+0437, U+049A->U+043A, U+049B->U+043A, U+049C->U+043A, U+049D->U+043A, U+049E->U+043A, U+049F->U+043A, U+04A0->U+043A, U+04A1->U+043A, U+04A2->U+043D, U+04A3->U+043D, U+04A4->U+043D, U+04A5->U+043D, U+04A6->U+043F, U+04A7->U+043F, U+04A8->U+04A9, U+04A9, U+04AA->U+0441, U+04AB->U+0441, U+04AC->U+0442, U+04AD->U+0442, U+04AE->U+0443, U+04AF->U+0443, U+04B0->U+0443, U+04B1->U+0443, U+04B2->U+0445, U+04B3->U+0445, U+04B4->U+04B5, U+04B5, U+04B6->U+0447, U+04B7->U+0447, U+04B8->U+0447, U+04B9->U+0447, U+04BA->U+04BB, U+04BB, U+04BC->U+04BD, U+04BE->U+04BD, U+04BF->U+04BD, U+04BD, U+04C0->U+04CF, U+04CF, U+04C1->U+0436, U+04C2->U+0436, U+04C3->U+043A, U+04C4->U+043A, U+04C5->U+043B, U+04C6->U+043B, U+04C7->U+043D, U+04C8->U+043D, U+04C9->U+043D, U+04CA->U+043D, U+04CB->U+0447, U+04CC->U+0447, U+04CD->U+043C, U+04CE->U+043C, U+04D0->U+0430, U+04D1->U+0430, U+04D2->U+0430, U+04D3->U+0430, U+04D4->U+00E6, U+04D5->U+00E6, U+04D6->U+0435, U+04D7->U+0435, U+04D8->U+04D9, U+04DA->U+04D9, U+04DB->U+04D9, U+04D9, U+04DC->U+0436, U+04DD->U+0436, U+04DE->U+0437, U+04DF->U+0437, U+04E0->U+04E1, U+04E1, U+04E2->U+0438, U+04E3->U+0438, U+04E4->U+0438, U+04E5->U+0438, U+04E6->U+043E, U+04E7->U+043E, U+04E8->U+043E, U+04E9->U+043E, U+04EA->U+043E, U+04EB->U+043E, U+04EC->U+044D, U+04ED->U+044D, U+04EE->U+0443, U+04EF->U+0443, U+04F0->U+0443, U+04F1->U+0443, U+04F2->U+0443, U+04F3->U+0443, U+04F4->U+0447, U+04F5->U+0447, U+04F6->U+0433, U+04F7->U+0433, U+04F8->U+044B, U+04F9->U+044B, U+04FA->U+0433, U+04FB->U+0433, U+04FC->U+0445, U+04FD->U+0445, U+04FE->U+0445, U+04FF->U+0445, U+0410..U+0418->U+0430..U+0438, U+0419->U+0438, U+0430..U+0438, U+041A..U+042F->U+043A..U+044F, U+043A..U+044F
El foro genera un archivo donde solo se describen letras latinas; tomo el alfabeto cirílico aquí www.sphinxsearch.com/wiki/doku.php?id=charset_tables#cyrillic
Comenzamos a indexar, sucede increíblemente rápido. Me lelvo 10-15 minutos, si haces una búsqueda a través de MySQL Fulltext, ¡lleva horas!
tendra que cambiar en todos comandos el valor 819ad66b94720731 por generado por su foro
indexer --config /etc/sphinx/sphinx.conf index_phpbb_819ad66b94720731_main
indexer --config /etc/sphinx/sphinx.conf index_phpbb_819ad66b94720731_delta
indexer --rotate --config /etc/sphinx/sphinx.conf index_phpbb_819ad66b94720731_delta
Arrancamos el servicio de Sphinx
searchd --config /etc/sphinx/sphinx.conf
Para iniciarlo en el boot, dicen que debes hacerlo en CentOS
/sbin/chkconfig searchd on
Pues en mi caso no funciono
Añado a cron
cron -e
la linea
@reboot searchd --config /etc/sphinx/sphinx.conf
Y también debe agregar líneas a la cron que indexarán la base de búsqueda de esfinges. Ligera indexación de solo mensajes nuevos cada 5 minutos. Y dcompleta una vez al día cuando todos duermen
tendra que cambiar en todos comandos el valor 819ad66b94720731 por generado por su foro
*/5 * * * * indexer --rotate --config /etc/sphinx/sphinx.conf index_phpbb_819ad66b94720731_delta >> /usr/www/sphinx/log/indexer.log 2>&1 & 0 14 * * * indexer --rotate --config /etc/sphinx/sphinx.conf index_phpbb_819ad66b94720731_main >> /usr/www/sphinx/log/indexer.log 2>&1 &
Y ya la busqueda Sphinx ya funciona!
Por cierto: puedes ejecutar dos o más esfinges, solo tienes que repetir todos los pasos aquí, crear conf y más, ¡pero cambiar el porto a otro!
Qué tan rápido funciona se Sphinx se puede verificar asi
tail -5 /usr/www/sphinx/log/sphinx-query.log
Y a veces aparecen solicitudes vacías aquí, pero estas no son solicitudes vacías, pasa algún tipo de mo se que
IMPORTANTE: si tienes CentOS inicial, entonces, por supuesto, la terrible seguridad de SELinux está habilitada, sphinx no funcionará, el busqueda del foro mostartara un error:
Search failed: connection to localhost:9312 failed (errno=13, msg=Permission denied)Puedes deshabilitar temporalmente esta seguridad.
setenforce 0
Y la búsqueda funcionará de inmediato, pero me gustaría llegar al fondo … Lo encontré, gracias a Google y a las desafortunadas personas que se enfrentaron a esto.
Debes hacer
setsebool -P httpd_can_network_connect 1
eso permanentemente en SELinux deshabilita el parámetro necesarioY las companias Hosting en los planes VPS en CentOS generalmente simplemente deshabilitan SELinuxpor coompleto, pues claro ¡quien necesita que el servidor esta protegido :)!
UPD: A veces deja de funcionar
Hago script en la carpeta /usr/local/src/
con el texto
vi /usr/local/src/restart_search.sh
ese
!#/usr/bin/bash if netstat -tulpn | grep 9312 then echo "busy" else searchd --config /etc/sphinx/sphinx.conf fi
Si nadie escucha en el puerto 9312, reiniciosearchd
Hay que agregar al cron
crontab -e
eso
*/10 * * * * /usr/bin/bash /usr/local/src/restart_search.sh/search_re.sh
Deja una respuesta