Memcached内存数据库群集配置(理论+实践篇)
发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,Memcached内存数据库一套开源的高性能分布式内存对象缓存系统所有的数据都存储在内存中支持任意存储类型的数据提高网址访问的速度Memcached缓存机制当程序写入缓存数据请求时,Memcached
千家信息网最后更新 2024年11月23日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是什么
- 在阐述这个问题之前,我们首先要清楚它"不是什么"。很多人把它当作和SharedMemory那种形式的存储载体来使用,虽然memcached使用了同样的"Key=>Value"方式组织数据,但是它和共享内存、APC等本地缓存有非常大的区别。Memcached是分布式的,也就是说它不是本地的。它基于网络连接(当然它也可以使用localhost)方式完成服务,本身它是一个独立于应用的程序或守护进程(Daemon方式)。
- Memcached使用libevent库实现网络连接服务,理论上可以处理无限多的连接,但是它和Apache不同,它更多的时候是面向稳定的持续连接的,所以它实际的并发能力是有限制的。在保守情况下memcached的最大同时连接数为200,这和Linux线程能力有关系,这个数值是可以调整的。关于libevent可以参考相关文档。 Memcached内存使用方式也和APC不同。APC是基于共享内存和MMAP的,memcachd有自己的内存分配算法和管理方式,它和共享内存没有关系,也没有共享内存的限制,通常情况下,每个memcached进程可以管理2GB的内存空间,如果需要更多的空间,可以增加进程数。
memcached群集搭建实践
实验环境
- 主服务器IP地址:192.168.144.238
- 从服务器IP地址:192.168.144.239
- 客户端IP地址:192.168.144.185
- 漂移IP地址:192.168.144.188
主服务器安装memcached,libevent事件库,mamgent代理包
[root@localhost ~]# mkdir /abc[root@localhost ~]# mount.cifs //192.168.100.8/memcached /abc //挂载Password for root@//192.168.100.8/memcached: [root@localhost ~]# cd /abc/[root@localhost abc]# lsLAMP-php5.6 magent-0.5.tar.gz memcached-1.5.6.tar.gzlibevent-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=/usrmake && make install
从服务器安装memcached,libevent事件库
[root@localhost ~]# mkdir /abc[root@localhost ~]# mount.cifs //192.168.100.8/memcached /abcPassword for root@//192.168.100.8/memcached: [root@localhost ~]# cd /abc/[root@localhost abc]# lsLAMP-php5.6 magent-0.5.tar.gz memcached-1.5.6.tar.gzlibevent-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 //解压事件库软件包[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=/usrmake && make install
主服务器配置magent
[root@localhost memcached-1.5.6]# cd /opt/[root@localhost opt]# lslibevent-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 MakefileLIBS = -levent -lm //指定makefile文件make //编译[root@localhost magent]# lsketama.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 root@192.168.144.239:/usr/bin/ //把mangent文件拷贝到从服务器上
主从都关闭防火墙
[root@localhost bin]# systemctl stop firewalld.service [root@localhost bin]# setenforce 0
在主服务器、从服务器同时安装
[root@localhost bin]# yum install keepalived -y
主服务器配置主从同步
[root@localhost magent]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalivedvrrp_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 //主服务器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.144.188 //客户端访问的漂移地址 } }
从服务器安装openssh客户端
[root@localhost bin]# cd /etc/keepalived/[root@localhost keepalived]# mv keepalived.conf keepalived.conf.bak //更改名称[root@localhost keepalived]# yum install openssh-clients -y
主服务器用scp把keepalived文件传到从服务器
[root@localhost magent]# cd /etc/keepalived/[root@localhost keepalived]# scp keepalived.conf root@192.168.144.239:/etc/keepalived/
从服务器配置主从同步
[root@localhost keepalived]# lskeepalived.conf keepalived.conf.bak[root@localhost keepalived]# vim keepalived.conf! Configuration File for keepalivedvrrp_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_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.144.188 } }
主服务器配置magent脚本
[root@localhost keepalived]# mkdir /opt/shell[root@localhost keepalived]# cd /opt/shell/[root@localhost shell]# vim magent.sh#!/bin/bashk=`ps -ef | grep keepalived | grep -v grep | wc -l` //检查keepaliveed进程,如果开启if [ $k -gt 0 ]; then magent -u root -n 51200 -l 192.168.144.188 -p 12000 -s 192.168.144.238:11211 -b // -n连接数量 -l指定漂移地址,-p指定端口映射到主从服务器的地址 192.168.144.239:11211elsepkill -9 magentfi[root@localhost shell]# chmod +x magent.sh [root@localhost shell]# systemctl start keepalived.service [root@localhost shell]# netstat -ntap | grep 12000tcp 0 0 192.168.144.188:12000 0.0.0.0:* LISTEN 124720/magent
从服务器同样的操作
[root@localhost keepalived]# mkdir /opt/shell[root@localhost keepalived]# cd /opt/shell/[root@localhost shell]# vim magent.sh#!/bin/bashk=`ps -ef | grep keepalived | grep -v grep | wc -l`if [ $k -gt 0 ]; then magent -u root -n 51200 -l 192.168.144.188 -p 12000 -s 192.168.144.238:11211 -b 192.168.144.239:11211elsepkill -9 magentfi[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.144.188:12000 0.0.0.0:* LISTEN 11660/magent
开启主服务器memcached
[root@localhost shell]# memcached -m 512k -u root -d -l 192.168.144.238 -p 11211 //启动主,-m指定空间大小[root@localhost shell]# netstat -ntap | grep 11211 tcp 0 0 192.168.144.238:11211 0.0.0.0:* LISTEN 44647/memcached
开启从服务器memecached
[root@localhost shell]# memcached -m 512k -u root -d -l 192.168.144.239 -p 11211 #启动从[root@localhost shell]# netstat -ntap | grep 11211tcp 0 0 192.168.144.239:11211 0.0.0.0:* LISTEN 42654/memcached
客户端中验证用telnet去连接memcached 内存数据库
[root@localhost ~]# telnet 192.168.144.188 12000Trying 192.168.144.188...Connected to 192.168.144.188.Escape character is '^]'.add username 0 0 7 //编写键值对数据1234567 STORED
查看主服务器查看数据有没有
[root@localhost shell]# telnet 192.168.144.238 11211Trying 192.168.144.238...Connected to 192.168.144.238.Escape character is '^]'.geer^H^HERRORget usernameVALUE username 0 71234567END
验证从服务器数据有没有同步
[root@localhost shell]# telnet 192.168.144.239 11211Trying 192.168.144.239...Connected to 192.168.144.239.Escape character is '^]'.get usernameVALUE username 0 71234567END
服务
服务器
内存
数据
算法
地址
存储
事件
分布式
客户
客户端
方式
缓存
脚本
路由
软件
软件包
配置
主从
进程
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
陕西网络时间同步服务器云空间
手机网络安全等级怎么分
数据库防御技术
搭建本地文件服务器
网络安全培训的主要内容
针对一个典型网络安全案例分析
国内免备服务器
网络安全需谨慎
千年服务端数据库教程
微信小程序软件开发多少钱
如何确保网络安全的英语作文
服务器tps
云为智合网络技术深圳
公交数据库
vb数据库编程实例
做网络安全大客户销售
青云数据库
笔记本连接代理服务器失败
小米电视显示服务器有问题
我的世界国际联机必须要服务器吗
什么情况下警察查数据库
中国经济与社会发展统计数据库
利用拼成直角三角形数据库
软件开发银行系统安全
工业园区电子网络技术怎么样
当前流行数据库软件
我的世界服务器有没有
帕拓逊网络技术有限公司工资
创造与魔法299服务器赚金攻略
电商带货软件开发服务