Escuché que Memcache es muy arrogante. ------------- Análisis en profundidad de Memcache + clúster de alta disponibilidad keepalive

Uno, introducción al clúster de Memcache

La función de clúster memcached resuelve principalmente el punto único de falla del servidor. Sin la implementación del clúster, no habrá replicación ni
sincronización de datos entre servidores . Una vez que el tiempo de inactividad, se perderán los datos, no se puede reducir de manera efectiva la presión de las conexiones simultáneas para los servidores web en segundo plano. Por
lo tanto, utilizamos servicios de clúster para resolver este problema, utilizando múltiples memcached para la implementación de clústeres, incluso si uno o dos servidores están inactivos, no afectará la experiencia normal del usuario y también reducirá la presión de las conexiones simultáneas para los servicios en segundo plano.

1. Alta disponibilidad de Keepalived + Memcached

El cliente se conecta a la dirección VIP entre los dos servidores. Si el servidor back-end falla, cambiará automáticamente.

2. Principio de Keepalive:

1. Detección de fallas:
la función de Keepalived es detectar si el estado del servidor Memcached es normal.

2. Conmutación maestro-esclavo:
si Keepalived detecta que el servicio Memcached está inactivo o falla, puede mover el VIP del servidor maestro al servidor esclavo

3. ¿Cómo descubre Keepalived las excepciones de Memcached?
1) Keepalived genera una IP virtual en el servidor principal de Memcached.

2) Keepalived puede verificar continuamente si el puerto 11211 del servidor maestro memcached está funcionando correctamente. Si se encuentra una máquina inactiva memcached, la IP virtual se moverá del servidor maestro al servidor esclavo

3. Escenarios de aplicación de arquitectura de alta disponibilidad:

Si hay más nodos distribuidos en Memcached, no es necesario crear una arquitectura de alta disponibilidad basada en la replicación.

La arquitectura de alta disponibilidad basada en la replicación se usa generalmente en sesiones o caché de almacenamiento de un solo nodo memcached.

4. Introducción al software magent

Dado que no hay comunicación entre el servidor Memcached y el servidor, y no se realiza la replicación de datos, cuando falla cualquier nodo del servidor, habrá un solo punto de falla.Si es necesario implementar HA, debe resolverse de otra manera.

A través del proxy de caché de Magent para evitar puntos únicos, el proxy de caché también puede hacer copias de seguridad, conectarse al servidor de proxy de caché a través del cliente y el servidor de proxy de caché se conecta al servidor de conexión de caché. El servidor de proxy de caché puede conectarse a múltiples máquinas Memcached y puede realizar cada máquina Memcached. Sincronización de datos. Si uno de los servidores de caché está inactivo, el sistema aún puede continuar funcionando. Si una de las máquinas Memcached está inactiva, los datos no se perderán y se puede garantizar la integridad de los datos.

Almacenamiento de clave-valor de Memcache: este procedimiento almacenado requiere que los programadores lo implementen. El programador genera el valor-clave. Generalmente, Memcache se usa para almacenar en caché contenido estático. El servicio del nodo principal se detiene y el programa debe ajustarse automáticamente al nodo de respaldo. La caché debe regenerarse después de que se restaure el servicio del nodo maestro.

Magent es un complemento de Memcache. Memcache se divide en activo y en espera en magent. El nodo maestro almacena todos los datos de valor-clave de forma dispersa, y el nodo en espera almacena un conjunto completo de todos los datos de valor-clave. magent resuelve el problema de que Memcache no puede distribuir nodos.

2. La construcción específica es la siguiente

1. Entorno experimental

Software VMware
Una máquina virtual centos7 como servidor maestro de Memcache, dirección IP: 192.168.110.132
Una máquina virtual centos7 como servidor esclavo de
Memcache , dirección IP: 192.168.110.133 Una máquina virtual centos7 como cliente de Memcache, dirección IP: 192.168.110.134
Dirección IP de deriva: 192.168.110.100, que es la dirección IP en la que el cliente inicia sesión

2. La topología experimental es la siguiente


Configuración del servidor maestro-esclavo de Memcache El servidor maestro debe estar instalado: memcached, libevent, keepalived, y el
servidor esclavo magent debe estar instalado: memcached, libevent, keepalived

Inserte la descripción de la imagen aquí

3. Configure el nodo de caché maestro de Memcache y el nodo de caché esclavo (los dos servidores tienen la misma configuración)

1. Instale paquetes dependientes:

yum install gcc gcc-c++ make -y

2. Descomprima el paquete de software:

tar zxvf memcached-1.5.6.tar.gz -C /opt/

tar zxvf libevent-2.1.8-stable.tar.gz -C /opt/

mkdir /opt/magent
tar zxvf magent-0.5.tar.gz -C /opt/magent/

3. Compile e instale:

cd /opt/libevent-2.1.8-stable
./configure --prefix=/usr/
make && make install


cd /opt/memcached-1.5.6
./configure \
--with-libevent=/usr
make && make install

4. Cree una conexión suave:

ln -s /usr/lib/libevent-2.1.so.6 /usr/lib64/libevent-2.1.so.6

4. Implemente el servidor maestro ----- instale el agente magent (no es necesario desde el servidor esclavo)

mkdir /opt/magent
tar zxvf magent-0.5.tar.gz -C /opt/magent/
1、cd /opt/magent
vim ketama.h
在开头处增减以下代码:
#ifndef SSIZE_MAX
#define SSIZE_MAX 32767
#endif

vim Makefile
//运营库
LIBS = -levent -lm   //加上 -lm

2、修改完成后 make 编译

3、此时,make完成后,就会产生 magent可执行程序

4、将这个 magent 程序复制到path环境变量中

cp magent /usr/bin/

5、可以将安装好的 magent 复制到从服务器,这样从服务器就不需要再配置了

yum install openssh-clients -y   //安装工具包
scp magent root@192.168.110.133:/usr/bin/

5. Instale keepalived en los servidores maestro y esclavo e impleméntelo

(1) Servidor principal:

yum install keepalived -y    //安装keepalived
先将配置文件备份一份  不然改错了麻烦
cp -p /etc/keepalived/keepalived.conf /opt

Modifique el archivo de configuración:

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 LVS_MAGENT_HA
}

vrrp_instance VI_1 {
    
    
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
    
    
        auth_type PASS
        auth_pass 1111
    }
  track_script {
    
    
  magent
}

    virtual_ipaddress {
    
    
        192.168.110.100
    }
}


//定义一个函数,建议写在最前面
vrrp_script magent {
    
    
        script "/opt/shell/magent.sh"
        interval 2
      }
      
做如下修改:
router_id MAGENT_HA        //修改id名
interface ens33            //修改网卡信息

virtual_ipaddress {
    
    
        192.168.220.100     //定义好虚拟ip地址
    }   
    
vrrp_instance VI_1 {
    
    
.....
//调用函数.以下三行代码写在vrrp模块内
track_script {
    
    
        magent
      }
.....
}

(2) Desde el servidor:

vim /etc/keepalived/keepalived.conf

做如下修改:
router_id MAGENT_HB         //id名和第一台要不一样
state BACKUP               //从服务器
virtual_router_id 52       //id号和第一台不一样
priority 90                 //优先级低与主服务器 

6, los servidores maestro y esclavo deben crear scripts magent

[root@master ~]# mkdir /opt/shell
[root@master ~]# cd /opt/shell/
[root@master shell]# vim magent.sh
K=`ps -ef | grep keepalived | grep -v grep | wc -l`
if [ $K -gt 0 ]; then
        magent -u root -n 51200 -l 192.168.110.100 -p 12000 -s 192.168.110.132:11211 -b 192.168.79.133:11211
else
pkill -9 magent
fi
'//如下解释'
-n 51200             '//定义用户最大连接数'
-l 192.168.110.100   '//指定虚拟IP'
-p 12000             '//指定端口号'
-s                   '//指定主缓存服务器
-b                   '//指定从缓存服务器
11211				'//端口号'

7. Inicie keepalive para verificar el maestro y el esclavo de keepalive

'//主从服务器都要做'
[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 192.168.110.100:12000    0.0.0.0:*               LISTEN      67513/magent  
[root@master shell]# vim /var/log/messages 
搜索'//Transition to MASTER STATE',有即成功
[root@master shell]# ip addr	'//查看漂移地址是否绑定成功'
...省略内容
 inet 192.168.110.100/32 scope global ens33	'//绑定成功 '
...省略内容
[root@slave keepalived]# vim /var/log/messages 
搜索'//Entering BACKUP STATE',有即成功
[root@slave keepalived]# ip addr	'//查看漂移地址是否绑定成功'
...省略内容
 inet 192.168.110.100/32 scope global ens33	'//绑定成功 '
...省略内容

8. Pruebe si puede conectarse a Memcache localmente

Tres, prueba de cliente de Memcache

1. El cliente inicia sesión en Memcache.

#######验证主从memcache
主:
ln -s /usr/local/memcached/bin/* /usr/local/bin/
 memcached -m 512k -u root -d -l 192.168.110.132 -p 11211
[root@master ~]# yum install telnet -y	'//安装Telnet远程登陆程序'
[root@master ~]# telnet 192.168.110.132 11211


从:
ln -s /usr/local/memcached/bin/* /usr/local/bin/
//-d守护进程 ;-m缓存大小32M ;-p端口11211
 memcached -m 512k -u root -d -l 192.168.110.133 -p 11211
[root@master ~]# yum install telnet -y	'//安装Telnet远程登陆程序'
[root@master ~]# telnet 192.168.110.133 11211

2. Pruebe la sincronización maestro-esclavo

El servidor principal crea un dato

[root@promote keepalived]# telnet 192.168.110.132 11211
Trying 192.168.110.132...
Connected to 192.168.110.132.
Escape character is '^]'.
get username
VALUE username 0 5
12345
END

Vista desde el servidor

[root@promote shell]# telnet 192.168.110.133 11211
Trying 192.168.110.133...
Connected to 192.168.110.133.
Escape character is '^]'.
get username
VALUE username 0 5
12345
END

Ver en el cliente

[root@promote ~]# telnet 192.168.110.100 12000
Trying 192.168.110.100...
Connected to 192.168.110.100.
Escape character is '^]'.
add username 0 0 5
12345
STORED

3. Pruebe la alta disponibilidad

[root@master ~]# systemctl stop keepalived.service 	'//关闭主服务器keepalived服务'
[root@promote ~]# telnet 192.168.110.100 12000   //客户端依旧可以登录
Trying 192.168.110.100...
Connected to 192.168.110.100.
Escape character is '^]'.
get username
VALUE username 0 5
12345
END

Supongo que te gusta

Origin blog.csdn.net/weixin_47219935/article/details/108559995
Recomendado
Clasificación