Clúster de Memcache de compilación de CentOS 7.6 para lograr alta disponibilidad

Uno: descripción general de Memcache

  • Memcache es un sistema de almacenamiento en caché de objetos de memoria distribuida de alto rendimiento. Al mantener una enorme tabla hash unificada en la memoria, se puede usar para almacenar datos en varios formatos, incluidas imágenes, videos, archivos y resultados de recuperación de bases de datos. . En pocas palabras, los datos se introducen en la memoria y luego se leen de la memoria, lo que mejora enormemente la velocidad de lectura.
  • Memcache es un proyecto de danga. Originalmente era un servicio de LiveJournal. Originalmente fue desarrollado para acelerar la velocidad de acceso de LiveJournal y luego fue adoptado por muchos sitios web grandes.
  • Memcached se ejecuta en uno o más servidores como un demonio y recibirá conexiones y operaciones de clientes en cualquier momento.

1.1: la diferencia entre memcache y memcached

  • Memcache es el nombre de este proyecto y memcached es el nombre del archivo de programa principal en el lado del servidor
  • Memcached es un sistema de almacenamiento en caché de objetos de memoria distribuida de alto rendimiento que se utiliza para reducir la carga de la base de datos y aumentar la velocidad de acceso en aplicaciones dinámicas. Memcached es desarrollado por Danga Interactive para mejorar la velocidad de acceso de LiveJournal.com. LJ tiene miles de páginas vistas dinámicas por segundo y 7 millones de usuarios. Memcached reduce en gran medida la carga de la base de datos, asigna mejor los recursos y acelera el acceso.

2: Introducción al entorno práctico

2.1: Medio ambiente

  • Software de VMware
  • Una máquina virtual centos7 como servidor principal de Memcache, dirección IP: 20.0.0.51
  • Una máquina virtual centos7 actúa como un servidor esclavo de Memcache, dirección IP: 20.0.0.52
  • Una máquina virtual centos7 actúa como cliente de Memcache, dirección IP: 20.0.0.20
  • Dirección IP de deriva: 20.0.0.100, que es la dirección IP en la que el cliente inicia sesión

2.2: Propósito experimental

  • Al crear un clúster de alta disponibilidad de Memcache, se realizan funciones de sincronización maestro-esclavo y alta disponibilidad del clúster

2.3: Descripción general de magent

  • Magent es un software de servidor proxy Memcached de código abierto, que utiliza el principio de hash coherente, que se puede utilizar para sincronizar datos almacenados en caché

Tres: configuración experimental

3.1: Construcción del servidor maestro-esclavo Memcache

  • El servidor principal debe estar instalado: memcached, libevent, keepalived, magent
  • Necesita instalar desde el servidor: memcached, libevent, keepalived

3.2: compile memcached con servidores maestro y esclavo

  • Tenga en cuenta que: los servidores maestro y esclavo están configurados, solo se demuestra el funcionamiento del servidor maestro
'解压源码包'
[root@master memcache]# tar zxvf libevent-2.1.8-stable.tar.gz -C /opt
[root@master memcache]# tar zxvf memcached-1.5.6.tar.gz -C /opt
[root@master memcache]# mkdir /opt/magent	'此步骤从服务器不需要操作'
[root@master memcache]# tar zxvf magent-0.5.tar.gz -C /opt/magent/	'此步骤从服务器不需要操作'
'编译安装libevent和memcached'
[root@master memcache]# yum install gcc gcc-c++ make -y
[root@master memcache]# cd /opt/libevent-2.1.8-stable/
[root@master libevent-2.1.8-stable]# ./configure --prefix=/usr	'路径不在/usr的话,后面magent在make的时候会报错:magent.c:64:19: 致命错误:event.h:没有那个文件或目录'
[root@master libevent-2.1.8-stable]# make && make install
[root@master libevent-2.1.8-stable]# cd /opt/memcached-1.5.6/
[root@master memcached-1.5.6]# ./configure \
> --prefix=/usr/local/memcached \
> --with-libevent=/usr/local/libevent
[root@master memcached-1.5.6]# make && make install
[root@master memcached-1.5.6]# systemctl stop firewalld.service '关闭防火墙'
[root@master memcached-1.5.6]# setenforce 0

3.3: Instale magent agent en el servidor principal

  • Instale magent en el servidor maestro, no es necesario instalar el servidor esclavo
[root@master memcached-1.5.6]# cd /opt/magent/
[root@master magent]# ls
ketama.c  ketama.h  magent.c  Makefile
[root@master magent]# vim ketama.h	'修改magent配置文件'
    '前两行修改如下'
#ifndef SSIZE_MAX
#define SSIZE_MAX 32767
...省略内容
[root@master magent]# vim Makefile 	'修改Makefile配置文件'
 LIBS = -levent -lm	  '首行后面添加-lm'
...省略内容
[root@master magent]# make	'编译后会产生一个magent可执行程序'
[root@master magent]# yum install openssh-clients -y
[root@master magent]# cp magent /usr/bin/	'将magent可执行程序复制到/usr/bin中'
[root@master magent]# scp magent root@20.0.0.52:/usr/bin	'将magent可执行程序复制到从服务器的/usr/bin中'
'此命令需要输入yes,输入从服务器的密码才能将文件拷贝过去,根据提示操作即可'

3.4: mantenimiento de la compilación del servidor maestro-esclavo

[root@master ~]# yum install keepalived -y
'主从服务器都要安装keepalived'
  • Modifique el archivo de configuración keepalived.conf en el servidor principal
[root@master ~]# vim /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
    '此段落为:定义一个函数脚本,稍后我们需要创建它'
vrrp_script magent {
    
    	
                script "/opt/shell/magent.sh"
                interval 2
            }
'全局配置'
global_defs {
    
    
   notification_email {
    
    
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id MAGENT_HA	'router_id自定义,不可与从服务器相同'
}
'实例区域'
vrrp_instance VI_1 {
    
    	
    state MASTER	'主服务器为MASTER,从服务器要改为BACKUP'
    interface ens33	'网卡改为本机网卡ens33'
    virtual_router_id 51	'主不可相同,从服务器需要修改'
    priority 100	'优先级要高于从服务器'
    advert_int 1
    track_script {
    
    	'此三行为调用函数的段落,配置文件开头已经添加了函数,此处需要调用'
                magent
    }
    authentication {
    
    
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    
    
        20.0.0.100	'定义漂移地址'
    }
}
  • Modifique el archivo de configuración keepalived.conf del servidor
[root@slave ~]# cd /etc/keepalived/
[root@slave keepalived]# mv keepalived.conf keepalived.conf.bak	'备份配置文件'
'回到主服务器,将配置文件复制到从服务器'
[root@master ~]# scp /etc/keepalived/keepalived.conf root@20.0.0.52:/etc/keepalived
[root@slave keepalived]# vim keepalived.conf
'其他配置都相同,只需要修改如下几个配置'
router_id MAGENT_HB         'id名和第一台要不一样,从服务器改为MAGENT_HB'
state BACKUP               '从服务器为BACKUP'
virtual_router_id 52       'id号和第一台不一样即可'
priority 90                 '优先级低与主服务器 '
  • Cree un script magent en el servidor maestro y esclavo
'主从服务器都要创建magent脚本'
[root@master ~]# mkdir /opt/shell
[root@master ~]# cd /opt/shell/
[root@master shell]# vim magent.sh
#!/bin/bash
K=`ps -ef | grep keepalived | grep -v grep | wc -l`
if [ $K -gt 0 ]; then
        magent -u root -n 51200 -l 20.0.0.100 -p 12000 -s 20.0.0.51:11211 -b 20.0.0.52:11211
else
pkill -9 magent
fi
'如下解释'
-n 51200             '定义用户最大连接数'
-l 20.0.0.100   '指定虚拟IP'
-p 12000             '指定端口号'
-s                   '指定主缓存服务器20.0.0.51:11211'
-b                   '指定从缓存服务器20.0.0.52.134:11211'
11211				'端口号'
  • Servicio de inicio del servidor maestro-esclavo
'主从服务器都要做'
[root@master shell]# chmod +x magent.sh 	'增加magent脚本执行权限'
[root@master shell]# systemctl start keepalived.service	'开启keepalived服务'
[root@master shell]# netstat -ntap |grep 12000	'keepalived启动会有点慢,我们需要稍等一下'
tcp        0      0 20.0.0.100:12000    0.0.0.0:*               LISTEN      67513/magent 
  • Verificar maestro y esclavo
[root@master shell]# vim /var/log/messages 
搜索'Transition to MASTER STATE',有即成功
[root@master shell]# ip addr	'查看漂移地址是否绑定成功'
...省略内容
 inet 20.0.0.100/32 scope global ens33	'绑定成功 '
...省略内容
[root@slave keepalived]# vim /var/log/messages 
搜索'//Entering BACKUP STATE',有即成功
[root@slave keepalived]# ip addr	'查看漂移地址是否绑定成功'
...省略内容
 inet 20.0.0.100/32 scope global ens33	'绑定成功 '
...省略内容

3.5: el servidor maestro-esclavo abre Memcache y prueba la conexión local

  • Los servidores maestro y esclavo habilitan Memcache
'主服务器开启'
[root@master ~]# ln -s /usr/local/memcached/bin/* /usr/local/bin/
[root@master ~]# memcached -m 512k -u root -d -l 20.0.0.51 -p 11211
[root@master ~]# netstat -ntap |grep 11211
tcp        0      0 20.0.0.51:11211    0.0.0.0:*               LISTEN      88178/memcached     
[root@master ~]# 
'从服务器开启'
[root@slave keepalived]# ln -s /usr/local/memcached/bin/* /usr/local/bin/
[root@slave keepalived]# memcached -m 512k -u root -d -l 20.0.0.52 -p 11211
[root@slave keepalived]# netstat -ntap |grep 11211
tcp        0      0 20.0.0.52:11211    0.0.0.0:*               LISTEN      124927/memcached  
  • Pruebe si puede conectarse a Memcache localmente
'主服务器测试'
[root@master ~]# yum install telnet -y	'安装Telnet远程登陆程序'
[root@master ~]# telnet 20.0.0.51 11211
Trying 20.0.0.51...	'连接成功'
Connected to 20.0.0.51.
Escape character is '^]'.
quit	'退出'
Connection closed by foreign host.
'从服务器测试'
[root@slave keepalived]# yum install telnet -y
[root@slave keepalived]# telnet 20.0.0.52 11211
Trying 20.0.0.52...	'连接成功'
Connected to 20.0.0.52.
Escape character is '^]'.
quit	'退出'
Connection closed by foreign host.

Cuatro: prueba del cliente de Memcache

  • Inicio de sesión del cliente en Memcache
[root@client ~]# yum install telnet -y	
[root@client ~]# telnet 20.0.0.100 12000	'使用漂移地址登陆'
Trying 20.0.0.100...
Connected to 20.0.0.100.
Escape character is '^]'.
  • Prueba de la sincronización maestro-esclavo
[root@client ~]# telnet 20.0.0.100 12000	
Trying 20.0.0.100...
Connected to 20.0.0.100.
Escape character is '^]'.
add username 0 0 5	'客户端连接并新建一个数据'
12345
STORED
'返回主服务器查看是否同步生成数据'
[root@master ~]# telnet 20.0.0.51 11211
Trying 20.0.0.51...
Connected to 20.0.0.51.
Escape character is '^]'.
get username
VALUE username 0 5	
12345	'主服务器成功生成'
END
'返回从服务器查看是否同步生成数据'
[root@slave keepalived]# telnet 20.0.0.52 11211
Trying 20.0.0.52...
Connected to 20.0.0.52.
Escape character is '^]'.
get username
VALUE username 0 5	
12345	'从服务器成功生成'
END
'测试成功,主从都成功生成数据'
  • Prueba un clúster de alta disponibilidad
'宕机主服务器,看从服务器是否正常使用'
[root@master ~]# systemctl stop keepalived.service 	'关闭主服务器keepalived服务'
[root@client ~]# telnet 20.0.0.100 12000	'客户端登陆成功'
Trying 20.0.0.100...
Connected to 20.0.0.100.
Escape character is '^]'.
set username 
UNSUPPORTED COMMAND
set username 0 0 4	'修改一下数据'
1234
STORED
'从服务器查看数据是否同步'
get username
VALUE username 0 4
1234	'成功同步'
END

Luego, el clúster de alta disponibilidad se construye con éxito

Supongo que te gusta

Origin blog.csdn.net/m0_47219942/article/details/108538145
Recomendado
Clasificación