Memcached кластер базы данных

Memcached Обзор

С открытым исходным кодом, высокой производительности распределенной памяти система кэширования объектов,
все данные , хранящиеся в памяти ,
чтобы поддерживать любой тип хранения данных
для повышения скорости доступа к веб - сайт

Memcached механизм кэширования

当程序写入缓存数据请求时,Memcached的API接口将KEY输入路由算法模块路由到集群中的一台服务,之后由API接口与服务器进行通信,完成一次分布式缓存写入
Key索引建立在API中,值value数据存在后面的memcached中

Memcached распределены

Для того, чтобы полагаться на Memcached клиента для достижения
более Memcached серверов не зависит от того,
как определяется распределенное хранилище данных алгоритма маршрутизации

Memcached маршрутизации алгоритм

求余数hash算法
先用key做hash运算的到一个整数,再去做hash算法,根据余数进行路由。不适合在动态变化的环境中
一致性hash算法
按照hash算法把对应key通过一定hash算法处理后映射形成一个首尾接闭合循环,然后通过使用与对象存储一样的hash算法将机器也映射到环中,顺时针方向计算将所有对象存储到离自己最近的机器中。适合在动态变化中使用

Memcached является danga.com (техническая группа операций Живого журнала) разработал набор системы кэширования объектов с распределенной памятью, используется для уменьшения нагрузки баз данных в динамических системах, для повышения производительности. Об этой вещи, я думаю, многие люди использовали, это задумано Memcached реализации и анализа кода, чтобы добраться до этого прекрасного с открытым исходным кодом глубже понимание, и может быть оптимизирована в соответствии с нашими потребностями. Окончательный анализ BSM_Memcache расширить и углубить понимание использования Memcached.

Что такое Memcached

在阐述这个问题之前,我们首先要清楚它“不是什么”。很多人把它当作和SharedMemory那种形式的存储载体来使用,虽然memcached使用了同样的“Key=>Value”方式组织数据,但是它和共享内存、APC等本地缓存有非常大的区别。Memcached是分布式的,也就是说它不是本地的。它基于网络连接(当然它也可以使用localhost)方式完成服务,本身它是一个独立于应用的程序或守护进程(Daemon方式)。

Memcached使用libevent库实现网络连接服务,理论上可以处理无限多的连接,但是它和Apache不同,它更多的时候是面向稳定的持续连接的,所以它实际的并发能力是有限制的。在保守情况下memcached的最大同时连接数为200,这和Linux线程能力有关系,这个数值是可以调整的。关于libevent可以参考相关文档。 Memcached内存使用方式也和APC不同。APC是基于共享内存和MMAP的,memcachd有自己的内存分配算法和管理方式,它和共享内存没有关系,也没有共享内存的限制,通常情况下,每个memcached进程可以管理2GB的内存空间,如果需要更多的空间,可以增加进程数。

Memcached для любого случая

Во многих случаях Memcached были нарушены, и это, конечно, его жалобы. Я часто вижу, кто-то объявление на форуме, похожий на «Как повысить эффективность,» ответ является «с Memcached», о том, как использовать, где использовать, не используется, чтобы сделать нет. Memcached не является панацеей, и он не применим во всех случаях.

Memcached является «распределенная» система кэширования объектов в памяти, так сказать, что не требуют «распределения», без разделения, или просто небольшой масштаб только один сервер приложений, Memcached не принесет никакой выгоды, противоречащее это замедлит эффективность системы, так как подключение к сети также требуются ресурсы, даже если локальное соединение UNIX тоже. В моем предыдущем экране тестовых данных, Memcached локальная память чтения и скорость записи, чем прямой PHP массив медленно несколько раз, и APC и направить общий массив памяти похожи. Смотрите, если только кэш на местном уровне, использовать Memcached очень неэкономично.

Memcached во многих случаях используются в качестве базы данных фронтального кэша. Потому что это намного меньше, SQL синтаксическое, дисковые операции и другие расходы, чем в базе данных, и она использует память для управления данными, так что он может обеспечить лучше, чем прямые чтение базы данных производительности в больших системах, доступ к тем же данным часто, Memcached база данных может значительно уменьшить стресс, повысить эффективность системы. Кроме того, как часто Memcached обмен данными между сервером носителя данных, таких как сохранение системы входа в систему статуса одноточечных данных в системе SSO могут быть сохранены с помощью Memcached, совместно использоваться несколькими приложениями.

Следует отметить, что, используя Memcached данные управлений памятью, поэтому она является летучей, когда сервер перезапускается или Memcached процесс прерывается, данные будут потерян, она не может быть использована Memcached постоянных данных. Многие люди неправильно поняли, Memcached производительность очень хороший, хороший контраст по отношению к памяти и объема жесткого диска, на самом деле, использование Memcached памяти и не будут читать и скорость записи из сотен улучшилась, его фактическое узким местом является подключение к сети, и использовать его системы баз данных на диске по сравнению с преимуществами, которые она сама по себе является очень «свет», потому что нет никакого чрезмерного накладных расходов и прямое чтение и запись, он может легко справиться с очень большим количеством обмена данными, так часто будет две полосы пропускания сети гигабита полная загрузка, Memcached сам процесс не занимает много ресурсов процессора.

Здесь мы начинаем делать Memcached кластер

Экспериментальная среда

4 192.168.136.238 мастера
5 192.168.136.239 от сервера
6 192.168.136.185 Client
дрейфового адреса обращающегося клиента 192.168.136.188 **

установка 4 главный сервер Memcached, Libevent хранилище событий, mamgent пакет агент

[root@localhost ~]# mkdir /abc
[root@localhost ~]# mount.cifs //192.168.100.25/memcached /abc #挂载
Password for root@//192.168.100.25/memcached:  
[root@localhost ~]# cd /abc/
[root@localhost abc]# ls
LAMP-php5.6                   magent-0.5.tar.gz   memcached-1.5.6.tar.gz
libevent-2.1.8-stable.tar.gz  memcache-2.2.7.tgz
[root@localhost abc]# tar zxvf libevent-2.1.8-stable.tar.gz -C /opt #事件库,memcached依赖于事件库
[root@localhost abc]# tar zxvf memcached-1.5.6.tar.gz -C /opt/   #服务端memcached
[root@localhost abc]# yum install gcc gcc-c++ make -y #安装环境包
[root@localhost abc]# mkdir /opt/magent
[root@localhost abc]# tar zxvf magent-0.5.tar.gz -C /opt/magent/
[root@localhost opt]# cd libevent-2.1.8-stable/
[root@localhost libevent-2.1.8-stable]# ./configure --prefix=/usr 
[root@localhost libevent-2.1.8-stable]# make && make install #编译安装
[root@localhost libevent-2.1.8-stable]# cd ../memcached-1.5.6/
[root@localhost memcached-1.5.6]# ./configure --with-libevent=/usr
make
make install

5 установить Memcached, Libevent библиотечных событий с сервера

[root@localhost ~]# mkdir /abc
[root@localhost ~]# mount.cifs //192.168.100.25/memcached /abc
Password for root@//192.168.100.25/memcached:  
[root@localhost ~]# cd /abc/
[root@localhost abc]# ls
LAMP-php5.6                   magent-0.5.tar.gz   memcached-1.5.6.tar.gz
libevent-2.1.8-stable.tar.gz  memcache-2.2.7.tgz
[root@localhost abc]# tar zxvf libevent-2.1.8-stable.tar.gz -C /opt #事件库,memcached依赖于事件库
[root@localhost abc]# tar zxvf memcached-1.5.6.tar.gz -C /opt/   #服务端memcached
[root@localhost abc]# yum install gcc gcc-c++ make -y
[root@localhost opt]# cd libevent-2.1.8-stable/
[root@localhost libevent-2.1.8-stable]# ./configure --prefix=/usr

[root@localhost libevent-2.1.8-stable]# make && make install
[root@localhost libevent-2.1.8-stable]# cd ../memcached-1.5.6/
[root@localhost memcached-1.5.6]# ./configure --with-libevent=/usr
make
make install

4 Основная конфигурация сервера Magent

[root@localhost memcached-1.5.6]# cd /opt/
[root@localhost opt]# ls
libevent-2.1.8-stable  magent  memcached-1.5.6  rh
[root@localhost opt]# cd magent/
[root@localhost magent]# vim ketama.h #改两行
#ifndef SSIZE_MAX 
#define SSIZE_MAX 32767 
[root@localhost magent]# vim Makefile  #指定makefile文件,改一行
LIBS = -levent -lm
make #编译
[root@localhost magent]# ls
ketama.c  ketama.h  ketama.o  magent  magent.c  magent.o  Makefile
[root@localhost magent]# yum install openssh-clients -y #安装scp远程同步软件包
[root@localhost magent]# cp magent /usr/bin/ #把magent脚本放到/usr/local中,让系统能识别
[root@localhost magent]# scp magent [email protected]:/usr/bin/ #把mangent文件拷贝到从服务器上

Ведущий и ведомый закрыты брандмауэр

[root@localhost bin]# systemctl stop firewalld.service 
[root@localhost bin]# setenforce 0

Ведущий и ведомый установлены

[root@localhost bin]# yum install keepalived -y

4 Основная конфигурация сервера синхронизации ведущий-ведомый

[root@localhost magent]# vim /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

vrrp_script magent {    #写一个函数脚本
        script "/opt/shell/magent.sh" ##指定脚本位置
        interval 2  ##检测脚本时间间隔
}

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }   
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id MAGENT_HA   #主服务器id,两台不能一样
}

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
        magent
}       
    virtual_ipaddress {
        192.168.136.188  #客户端访问的漂移地址
    }   
}   

5 с сервера для установки OpenSSH клиента

[root@localhost bin]# cd /etc/keepalived/
[root@localhost keepalived]# mv keepalived.conf keepalived.conf.bak #改名字
[root@localhost keepalived]# yum install openssh-clients -y

4 с УППАМИ основных сервера, передаваемых от файлового сервера keepalived

[root@localhost magent]# cd /etc/keepalived/
[root@localhost keepalived]# scp keepalived.conf [email protected]:/etc/keepalived/

5 конфигурации от сервера синхронизации ведущий-ведомый

[root@localhost keepalived]# ls
keepalived.conf  keepalived.conf.bak
[root@localhost keepalived]# vim keepalived.conf
! Configuration File for keepalived

vrrp_script magent {
        script "/opt/shell/magent.sh"
        interval 2
}

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id MAGENT_HB  #routed_id不能相同
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 52  #从服务器虚拟id不能和主服务器一样
    priority 90  #优先级比主服务器低
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }   
    track_script {
        magent
}       
    virtual_ipaddress {
        192.168.136.188
    }   
}   

4 главный сервер Magent сценария конфигурации

[root@localhost keepalived]# mkdir /opt/shell
[root@localhost keepalived]# cd /opt/shell/
[root@localhost shell]# vim magent.sh
#!/bin/bash
k=`ps -ef | grep keepalived | grep -v grep | wc -l` #检查keepaliveed进程,如果开启
if [ $k -gt 0 ]; then # -n连接数量 -l指定漂移地址,-p指定端口映射到主从服务器的地址
        magent -u root -n 51200 -l 192.168.136.188 -p 12000 -s 192.168.136.238:11211 -b 192.168.136.239:11211
else
pkill -9 magent
fi
[root@localhost shell]# chmod +x magent.sh 
[root@localhost shell]# systemctl start keepalived.service 
[root@localhost shell]# netstat -ntap | grep 12000
tcp        0      0 192.168.136.188:12000   0.0.0.0:*               LISTEN      124720/magent       

Те же самые операции, с сервера 5

[root@localhost keepalived]# mkdir /opt/shell
[root@localhost keepalived]# cd /opt/shell/
[root@localhost 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 192.168.136.188 -p 12000 -s 192.168.136.238:11211 -b 192.168.136.239:11211
else
pkill -9 magent
fi
[root@localhost shell]# chmod +x magent.sh 
[root@localhost shell]# systemctl start keepalived.service 
[root@localhost shell]# netstat -ntap | grep 12000  #查看magent端口
tcp        0      0 192.168.136.188:12000   0.0.0.0:*               LISTEN      11660/magent        

Открытый 4 Первичный сервер Memcached

[root@localhost shell]# memcached -m 512k -u root -d -l 192.168.136.238 -p 11211  #启动主,-m指定空间大小
[root@localhost shell]# netstat -ntap | grep 11211 
tcp        0      0 192.168.136.238:11211   0.0.0.0:*               LISTEN      44647/memcached     

Открытый 5 с сервера memecached

[root@localhost shell]# memcached -m 512k -u root -d -l 192.168.136.239 -p 11211 #启动从
[root@localhost shell]# netstat -ntap | grep 11211
tcp        0      0 192.168.136.239:11211   0.0.0.0:*               LISTEN      42654/memcached     

телнет клиента Проверка подключения к памяти базы данных Memcached

[root@localhost ~]# telnet 192.168.136.188 12000
Trying 192.168.136.188...
Connected to 192.168.136.188.
Escape character is '^]'.
add username 0 0 7  #我们先写个键值对数据
1234567 
STORED

4 первичный сервер, чтобы просмотреть данные не имеют

[root@localhost shell]# telnet 192.168.136.238 11211
Trying 192.168.136.238...
Connected to 192.168.136.238.
Escape character is '^]'.
geer^H^H
ERROR
get username
VALUE username 0 7
1234567
END

5 нет синхронизации данных проверки с сервера

[root@localhost shell]# telnet 192.168.136.239 11211
Trying 192.168.136.239...
Connected to 192.168.136.239.
Escape character is '^]'.
get username
VALUE username 0 7
1234567
END

рекомендация

отblog.51cto.com/14449524/2459410