当前位置: 首页 > news >正文

高性能内存对象缓存Memcached原理与部署

目录

一:Memcached

1:Memcached的概述

2:数据存储方式与数据过期方式

(1)数据存储方式:Slab Allocation

(2)数据过期方式:LRU、Laxzy Expiration

3.Memcached 缓存机制

4.Memcached 分布式

5.Memcached 路由算法

(1)求余数 hash 算法

(2)一致性 hash 算法

二,单memcached节点缓存系统

1:设置各节点的主机名:192.168.10.101

2:安装libevent-2.1.8-stable.tar.gz

3:安装memcached-1.5.1.tar.gz 

4:设置Memcached服务脚本

5:在103主机安装gcc*,httpd,mariadb,mariadb-server,php,php-devel,php-mysql

 6:测试服务是否正常

7:安装 libmemcached-1.0.18.tar.gz

8:安装 memcached-2.2.0.tgz 

9:添加模块

 10:查看模块是否存在

11:测试

 12:连接Memcached

13:Memcached命令

 三,Memcached 实现主主复制和高可用的方式

 1:设置各节点的主机名:192.168.10.101

2:关闭防火墙

3:安装开发环境

4:安装 libevent-2.1.8-stable.tar.gz 

5:安装 memcached-1.2.8-repcached-2.2.tar.gz 

6:做个函数链接

7:在101启动memcached并连接102

8:在102启动memcached并连接101 

9:测试102和101是否同步 

10:下载keepalived并修改配置

 11:查看是否配置成功

12 :修改103客户端连接mamcached的ip 

13:测试故障切换


一:Memcached

1:Memcached的概述

  • 一套开源的高性能的分布式内存对象缓存系统
  • 所有的数据都存储在内存中
  • 支持任意存储类型的数据
  • 提高网站的访问速度

2:数据存储方式与数据过期方式

(1)数据存储方式:Slab Allocation

按组分配内存,每次先分配一个Slab,相当于一个大小为1m的页然后在1M的空间里根据数据划分大小相同的Chunk

(2)数据过期方式:LRU、Laxzy Expiration

LRU 和 Laxzy Expiration 是数据过期的两种方式。

LUR 是指追加的数据空间不足时,会根据LRU的情况淘汰最近最少使用的记录。Laxzy Expiration 即惰性过期,是指使用 get 时查看记录时间,从而检查记录是否已经过期。

3.Memcached 缓存机制

缓存是常驻在内存的数据,能够快速进行读取,而Memcached 就是这样一款非常出色的缓存软件。当程序写入缓存数据请求时,Memcached 的API接口将 Key 输入路由算法模块并路由到集群中的一台服务器,之后由API接口与服务器进行通信,完成一次分布式缓存写入,如图 所示。

4.Memcached 分布式

Memcached 分布式部署主要依赖于Memcached的客户来端实现,多个Memcached 服务器是独立的。分布式数据如何存储是由路由算法所决定。当数据到达客户端程序库,客户端的算法就依据路由算法来决定保存的Memcached 服务器。读取数据时,客户端依据使用保存数据时相同的路由算法选中和存储数据时相同的服务器来读取数据,如图所示。

5.Memcached 路由算法

(1)求余数 hash 算法

求余数 hash 算法先用 key 做 hash 运算得到一个整数,再去做 hash 算法,根据余数进行路由,这种算法适合大多数据需求。但是不适合用在动态变化的环境中,比如有大量机器添加或者删除,这样会导致大量的对象存储位置失效。

(2)一致性 hash 算法

一致性 hash 算法适合在动态变化的环境中使用。原理是按照 hash 算法把对应的 key 通过一定的 hash 算法处理后映射形成一个首尾相接闭合循环,然后通过使用与对象存储一样的hash算法将机器也映射到环中,顺时针方向计算将所有对象存储到离自己最近的机器中,如图所示。

案例一

二,单memcached节点缓存系统

1:设置各节点的主机名:192.168.10.101

[root@localhost ~]# hostnamectl set-hostname Memcache1
[root@localhost ~]# bash

主机:192.168.10.103

[root@localhost ~]# hostnamectl set-hostname Memcached-API
[root@localhost ~]# bash

2:安装libevent-2.1.8-stable.tar.gz

[root@memcache1 ~]# ll
总用量 1008
-rw-------. 1 root root    1603 5月  28 01:57 anaconda-ks.cfg
-rw-r--r--. 1 root root 1026485 8月  19 2019 libevent-2.1.8-stable.tar.gz
[root@memcache1 ~]# tar -zxvf libevent-2.1.8-stable.tar.gz 
[root@memcache1 ~]# yum -y install gcc*
[root@memcache1 ~]# cd libevent-2.1.8-stable
[root@memcache1 libevent-2.1.8-stable]# ./configure --prefix=/usr/local/libevent
[root@memcache1 libevent-2.1.8-stable]# make && make install

3:安装memcached-1.5.1.tar.gz 

[root@memcache1 ~]# ll
总用量 1420
-rw-------.  1 root root    1603 5月  28 01:57 anaconda-ks.cfg
drwxr-xr-x. 10 1000 1000    8192 8月  15 20:18 libevent-2.1.8-stable
-rw-r--r--.  1 root root 1026485 8月  19 2019 libevent-2.1.8-stable.tar.gz
-rw-r--r--.  1 root root  407282 8月  19 2019 memcached-1.5.1.tar.gz
[root@memcache1 ~]# tar -zxvf memcached-1.5.1.tar.gz 
[root@memcache1 ~]# cd memcached-1.5.1
[root@memcache1 memcached-1.5.1]# ./configure --prefix=/usr/local/memcached 
--with-libevent=/usr/local/libevent/
[root@memcache1 memcached-1.5.1]# make && make install

4:设置Memcached服务脚本

root@memcache1 ~]# vim memcached_service.sh
#!/bin/bash 
CMD="/usr/local/memcached/bin/memcached"
start(){$CMD -d -m 128 -u root
}
stop(){killall memcached;
}ACTION=$1case $ACTION in'start')start;;'stop')stop;;
'restart')stopsleep 2start;;
*)echo 'Usage:{start|stop|restart}' 
esac
[root@memcache1 ~]# chmod +x memcached_service.sh 
[root@memcache1 ~]# ./memcached_service.sh start
[root@memcache1 ~]# netstat -anpt | grep memcached
tcp        0      0 0.0.0.0:11211           0.0.0.0:*               LISTEN      10144/memcached     
tcp6       0      0 :::11211                :::*                    LISTEN      10144/memcached     
[root@memcache1 ~]# 

5:在103主机安装gcc*,httpd,mariadb,mariadb-server,php,php-devel,php-mysql

[root@memcached-api ~]# yum -y install gcc*
[root@memcached-api ~]# rm -rf /etc/yum.repos.d/*
[root@memcached-api ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed
100  2523  100  2523    0     0    444      0  0:00:05  0:00:05 --:--:--   606
[root@memcached-api ~]# curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed
100   664  100   664    0     0   3058      0 --:--:-- --:--:-- --:--:--  3059
[root@memcached-api ~]# yum clean all
已加载插件:fastestmirror
正在清理软件源: base epel extras updates
Cleaning up list of fastest mirrors
Other repos take up 39 M of disk space (use --verbose for details)
[root@memcached-api ~]# yum -y install httpd mariadb mariadb-server php php-devel php-mysql

 6:测试服务是否正常

[root@memcached-api ~]# systemctl start mariadb
[root@memcached-api ~]# mysqladmin -uroot password 'pwd123'
[root@memcached-api ~]# systemctl start httpd
[root@memcached-api ~]# systemctl stop firewalld
[root@memcached-api ~]# setenforce 0
[root@memcached-api ~]# cd /var/www/html/[root@memcached-api html]# vim test1.php
<?php
phpinfo()
?>

用浏览器访问看看是否能够访问到

7:安装 libmemcached-1.0.18.tar.gz

[root@memcached-api ~]# ll
总用量 1024
-rw-------.  1 root root    1603 5月  28 01:57 anaconda-ks.cfg
drwxr-xr-x. 24  800  800    4096 8月  15 20:59 libmemcached-1.0.18
-rw-r--r--.  1 root root 1039649 8月  24 2018 libmemcached-1.0.18.tar.gz
[root@memcached-api ~]# tar -zxvf libmemcached-1.0.18.tar.gz 
[root@memcached-api ~]# cd libmemcached-1.0.18
[root@memcached-api libmemcached-1.0.18]# ./configure  --prefix=/usr/local/libmemcached 
--with-memcached=/usr/local/memcached
[root@memcached-api libmemcached-1.0.18]# make && make install

8:安装 memcached-2.2.0.tgz 

[root@memcached-api ~]# ll
总用量 1096
-rw-------.  1 root root    1603 5月  28 01:57 anaconda-ks.cfg
drwxr-xr-x. 24  800  800    4096 8月  15 20:59 libmemcached-1.0.18
-rw-r--r--.  1 root root 1039649 8月  24 2018 libmemcached-1.0.18.tar.gz
-rw-r--r--.  1 root root   70449 8月  19 2019 memcached-2.2.0.tgz
[root@memcached-api ~]# tar -zxvf memcached-2.2.0.tgz 
[root@memcached-api ~]# cd memcached-2.2.0
[root@memcached-api memcached-2.2.0]# ll
总用量 268
-rw-r--r--. 1  501 games   5720 4月   1 2014 ChangeLog
-rw-r--r--. 1  501 games  14595 4月   1 2014 config.m4
-rw-r--r--. 1  501 games    532 4月   1 2014 config.w32
-rw-r--r--. 1  501 games     59 4月   1 2014 CREDITS
drwxr-xr-x. 2 root root      53 8月  15 21:02 fastlz
-rw-r--r--. 1  501 games   2297 4月   1 2014 g_fmt.c
-rw-r--r--. 1  501 games   1181 4月   1 2014 g_fmt.h
-rw-r--r--. 1  501 games   3218 4月   1 2014 LICENSE
-rw-r--r--. 1  501 games   5770 4月   1 2014 memcached-api.php
-rw-r--r--. 1  501 games   4067 4月   1 2014 memcached.ini
-rw-r--r--. 1  501 games   1649 4月   1 2014 php_libmemcached_compat.c
-rw-r--r--. 1  501 games   2330 4月   1 2014 php_libmemcached_compat.h
-rw-r--r--. 1  501 games 138353 4月   1 2014 php_memcached.c
-rw-r--r--. 1  501 games   1810 4月   1 2014 php_memcached.h
-rw-r--r--. 1  501 games   5269 4月   1 2014 php_memcached_private.h
-rw-r--r--. 1  501 games  24437 4月   1 2014 php_memcached_server.c
-rw-r--r--. 1  501 games   1471 4月   1 2014 php_memcached_server.h
-rw-r--r--. 1  501 games  12543 4月   1 2014 php_memcached_session.c
-rw-r--r--. 1  501 games   1407 4月   1 2014 php_memcached_session.h
-rw-r--r--. 1  501 games    730 4月   1 2014 README.markdown
drwxr-xr-x. 2 root root    4096 8月  15 21:02 tests
[root@memcached-api memcached-2.2.0]# php
php         php-cgi     php-config  phpize      
[root@memcached-api memcached-2.2.0]# phpize 
Configuring for:
PHP Api Version:         20100412
Zend Module Api No:      20100525
Zend Extension Api No:   220100525
[root@memcached-api memcached-2.2.0]# ls
acinclude.m4    config.sub    install-sh         php_libmemcached_compat.c  php_memcached_session.h
aclocal.m4      configure     LICENSE            php_libmemcached_compat.h  README.markdown
autom4te.cache  configure.in  ltmain.sh          php_memcached.c            run-tests.php
build           config.w32    Makefile.global    php_memcached.h            tests
ChangeLog       CREDITS       memcached-api.php  php_memcached_private.h
config.guess    fastlz        memcached.ini      php_memcached_server.c
config.h.in     g_fmt.c       missing            php_memcached_server.h
config.m4       g_fmt.h       mkinstalldirs      php_memcached_session.c[root@memcached-api memcached-2.2.0]# yum -y install zlib zlib-devel
[root@memcached-api memcached-2.2.0]# ./configure 
--with-php-config=/usr/bin/php-config  
--with-libmemcached-dir=/usr/local/libmemcached/  
--disable-memcached-sasl  
--with-zlib-dir[root@memcached-api memcached-2.2.0]# make[root@memcached-api memcached-2.2.0]# make install
Installing shared extensions:     /usr/lib64/php/modules/

9:添加模块

 10:查看模块是否存在

[root@memcached-api memcached-2.2.0]# systemctl restart httpd

11:测试

[root@memcached-api memcached-2.2.0]# cd /var/www/html/
[root@memcached-api html]# vim test2.php
<?php 
$memcache = new Memcached(); 
$memcache->addServer('192.168.10.101', 11211); 
$memcache->set('key', 'Memcache test successful!', 0, 60); 
$result = $memcache->get('key'); 
unset($memcache); 
echo $result; 
?> 

 12:连接Memcached

[root@memcache1 ~]# yum -y install telnet
[root@memcache1 ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get key 
VALUE key 3932160 25
Memcache test successful!                        //刚刚浏览器访问的那句话
END

13:Memcached命令

命令

描述

实例

set

添加或更新一个键值对。如果键已存在,则更新其值;如果不存在,则添加新键值对。

set mykey 0 0 5hello

add

仅当键不存在时添加新键值对。如果键已存在,则操作失败。

add newkey 0 0 5world

replace

仅当键已存在时替换其值。如果键不存在,则操作失败。

replace mykey 0 0 6hello2

get

检索一个或多个键的值。如果键存在,则返回其值;如果不存在,则不返回任何内容。

get mykey

delete

删除一个键值对。如果键存在,则删除;如果不存在,则操作失败。

delete mykey

incr

对一个数值键的值进行自增操作。仅当键存在且其值为整数时有效。

incr counter(假设counter键已存在且值为1,执行后变为2)

decr

对一个数值键的值进行自减操作。同样,仅当键存在且其值为整数时有效。

decr counter(假设counter键已存在且值为2,执行后变为1)

stats

显示Memcached服务器的状态信息,如命中率、连接数、内存使用等。

stats

stats reset

重置Memcached服务器的统计信息。

stats reset

stats slabs

显示各个slab(内存分配区域)的详细信息,包括chunk大小、使用情况等。

stats slabs

stats items

显示各个slab中item的数目和最老item的年龄。

stats items

stats cachedump

显示指定slab中的部分或全部键值对列表。

stats cachedump 1 100(显示slab 1中的前100个键值对)

flush_all

删除Memcached中的所有键值对。可以配置是否立即生效或延迟一段时间。

flush_all或flush_all 120(延迟120秒删除)

version

显示Memcached服务器的版本信息。

version

quit

退出Memcached的telnet会话(如果通过telnet连接)。

quit

 三,Memcached 实现主主复制和高可用的方式

 1:设置各节点的主机名:192.168.10.101

[root@localhost ~]# hostnamectl set-hostname Memcache1
[root@localhost ~]# bash

主机:192.168.10.102 

[root@localhost ~]# hostnamectl set-hostname Memcache2
[root@localhost ~]# bash

注意101和102配置一样可以一起做

2:关闭防火墙

[root@memcache1 ~]# systemctl stop firewalld
[root@memcache1 ~]# setenforce 0

3:安装开发环境

[root@memcache1 ~]# yum -y install gcc*

4:安装 libevent-2.1.8-stable.tar.gz 

[root@memcache1 ~]# tar -zxvf libevent-2.1.8-stable.tar.gz 
[root@memcache1 ~]# cd libevent-2.1.8-stable
[root@memcache1 libevent-2.1.8-stable]# ./configure --prefix=/usr/local/libevent
[root@memcache1 libevent-2.1.8-stable]# make && make install

5:安装 memcached-1.2.8-repcached-2.2.tar.gz 

[root@memcache1 ~]# tar -zxvf memcached-1.2.8-repcached-2.2.tar.gz 
[root@memcache1 ~]# cd memcached-1.2.8-repcached-2.2
[root@memcache1 memcached-1.2.8-repcached-2.2]# ./configure --prefix=/usr/local/memcached_replication  
--enable-replication  
--with-libevent=/usr/local/libevent/
[root@memcache1 memcached-1.2.8-repcached-2.2]# vim memcached.c   
[root@memcache1 memcached-1.2.8-repcached-2.2]# make && make install

注意先修改memcached.c再make

6:做个函数链接

[root@memcache1 memcached-1.2.8-repcached-2.2]# ln -s /usr/local/libevent/lib/libevent-2.1.so.6 /usr/lib64

注意下面101和102不在同步

7:在101启动memcached并连接102

[root@memcache1 memcached-1.2.8-repcached-2.2]# /usr/local/memcached_replication/bin/memcached -d  -u root -m 128 -x  192.168.10.102
[root@memcache1 memcached-1.2.8-repcached-2.2]# netstat -anpt | grep memcached
tcp        0      0 0.0.0.0:11211           0.0.0.0:*               LISTEN      10112/memcached     
tcp        0      0 192.168.10.101:51294    192.168.10.102:11212    ESTABLISHED 10112/memcached     
tcp6       0      0 :::11211                :::*                    LISTEN      10112/memcached    

8:在102启动memcached并连接101 

[root@memcache2 memcached-1.2.8-repcached-2.2]# /usr/local/memcached_replication/bin/memcached -d  -u root -m 128 -x  192.168.10.101
[root@memcache2 memcached-1.2.8-repcached-2.2]# netstat -anpt | grep memcached
tcp        0      0 0.0.0.0:11211           0.0.0.0:*               LISTEN      10225/memcached     
tcp        0      0 192.168.10.102:60506    192.168.10.101:11212    ESTABLISHED 10225/memcached     
tcp6       0      0 :::11211                :::*                    LISTEN      10225/memcached  

9:测试102和101是否同步 

[root@memcache1 memcached-1.2.8-repcached-2.2]# yum -y install telnet 
[root@memcache1 memcached-1.2.8-repcached-2.2]# telnet 192.168.10.101 11211
Trying 192.168.10.101...
Connected to 192.168.10.101.
Escape character is '^]'.
set username 0 0 8
zhangsan
STORED
get username
VALUE username 0 8
zhangsan
END
quit
Connection closed by foreign host.
[root@memcache1 memcached-1.2.8-repcached-2.2]# telnet 192.168.10.102 11211
Trying 192.168.10.102...
Connected to 192.168.10.102.
Escape character is '^]'.
get username
VALUE username 0 8
zhangsan
END

10:下载keepalived并修改配置

101

[root@memcache1 ~]# yum -y install keepalived! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_01vrrp_skip_check_adv_addr
#   vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_script  check_down  {script  "/etc/keepalived/memcached.sh"interval 1}
vrrp_instance VI_1 {state BACKUPnopreemptinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.10.240}track_script {check_down}}
[root@memcache1 ~]# cd /etc/keepalived/
[root@memcache1 keepalived]# vim memcached.sh
#!/bin/bash
#!/bin/bash
#
if [ $(ps -C memcached --no-header | wc -l) -eq 0 ]; thensystemctl stop keepalived
fi
[root@memcache1 keepalived]# systemctl stop NetworkManager
[root@memcache1 keepalived]# systemctl start keepalived

 102

[root@memcache1 ~]# yum -y install keepalived! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_02vrrp_skip_check_adv_addr
#   vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}
vrrp_script  check_down  {script  "/etc/keepalived/memcached.sh"interval 1}
vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 90advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.10.240}track_script {check_down}}
[root@memcache1 ~]# cd /etc/keepalived/
[root@memcache1 keepalived]# vim memcached.sh
#!/bin/bash
#!/bin/bash
#
if [ $(ps -C memcached --no-header | wc -l) -eq 0 ]; thensystemctl stop keepalived
fi
[root@memcache1 keepalived]# systemctl stop NetworkManager
[root@memcache1 keepalived]# systemctl start keepalived

 11:查看是否配置成功

[root@memcache1 keepalived]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:90:61:c1 brd ff:ff:ff:ff:ff:ffinet 192.168.10.101/24 brd 192.168.10.255 scope global ens33valid_lft forever preferred_lft foreverinet 192.168.10.240/32 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::2f4c:60b5:64be:bc1f/64 scope link noprefixroute valid_lft forever preferred_lft forever
[root@memcache1 keepalived]# ip a

12 :修改103客户端连接mamcached的ip 

[root@memcached-api ~]# cd /var/www/html/
[root@memcached-api html]# vim test2.php 
[root@memcached-api html]# <?php
$memcache = new Memcached();
$memcache->addServer('192.168.10.240', 11211);
$memcache->set('key', 'Memcache test successful!', 0, 60);
$result = $memcache->get('key');
unset($memcache);
echo $result;
?>

13:测试故障切换

101

[root@memcache1 keepalived]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:90:61:c1 brd ff:ff:ff:ff:ff:ffinet 192.168.10.101/24 brd 192.168.10.255 scope global ens33valid_lft forever preferred_lft foreverinet 192.168.10.240/32 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::2f4c:60b5:64be:bc1f/64 scope link noprefixroute valid_lft forever preferred_lft forever
[root@memcache1 keepalived]# pkill memcached
[root@memcache1 keepalived]# netstat -anpt | grep memcached
[root@memcache1 keepalived]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:90:61:c1 brd ff:ff:ff:ff:ff:ffinet 192.168.10.101/24 brd 192.168.10.255 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::2f4c:60b5:64be:bc1f/64 scope link noprefixroute valid_lft forever preferred_lft forever
[root@memcache1 keepalived]# 

102 

[root@memcache2 keepalived]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:8f:4c:a4 brd ff:ff:ff:ff:ff:ffinet 192.168.10.102/24 brd 192.168.10.255 scope global ens33valid_lft forever preferred_lft foreverinet 192.168.10.240/32 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::2f4c:60b5:64be:bc1f/64 scope link tentative noprefixroute dadfailed valid_lft forever preferred_lft foreverinet6 fe80::9525:f940:b201:bb12/64 scope link noprefixroute valid_lft forever preferred_lft forever
[root@memcache2 keepalived]# netstat -anpt | grep memcached
tcp        0      0 0.0.0.0:11211           0.0.0.0:*               LISTEN      10225/memcached     
tcp        0      0 192.168.10.102:60506    192.168.10.101:11212    ESTABLISHED 10225/memcached     
tcp6       0      0 :::11211                :::*                    LISTEN      10225/memcached    10225/memcached     
[root@memcache2 keepalived]# 

相关文章:

高性能内存对象缓存Memcached原理与部署

目录 一&#xff1a;Memcached 1&#xff1a;Memcached的概述 2&#xff1a;数据存储方式与数据过期方式 &#xff08;1&#xff09;数据存储方式&#xff1a;Slab Allocation (2)数据过期方式:LRU、Laxzy Expiration 3.Memcached 缓存机制 4.Memcached 分布式 5.Memcac…...

【C++进阶】map与set的封装实践

文章目录 map和setmapmap的框架迭代器operator()operator--()operator()和operator!()operator*()operator->() insertbegin()end()operator[] ()map的所有代码&#xff1a; set的封装迭代器的封装总结 map和set 通过观察stl的底层我们可以看见&#xff0c;map和set是通过红…...

可视化编程-七巧低代码入门02

1.1.什么是可视化编程 非可视化编程是一种直接在集成开发环境中&#xff08;IDE&#xff09;编写代码的编程方式&#xff0c;这种编程方式要求开发人员具备深入的编程知识&#xff0c;开发效率相对较低&#xff0c;代码维护难度较大&#xff0c;容易出现错误&#xff0c;也需要…...

算法:魔法字典

1️⃣要求&#xff1a; 设计一个使用单词列表进行初始化的数据结构&#xff0c;单词列表中的单词 互不相同 。 如果给出一个单词&#xff0c;请判定能否只将这个单词中一个字母换成另一个字母&#xff0c;使得所形成的新单词存在于你构建的字典中。 实现 MagicDictionary 类…...

html+css 实现hover 翻转按钮

前言:哈喽,大家好,今天给大家分享html+css 绚丽效果!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 一、效果二、原理解析1.这是一个,hover翻转按钮的效果。这其实是用==一个元素==实现的。…...

ETL程序员如何平衡日常编码工作与提升式学习

在快速发展的科技行业中&#xff0c;程序员面临着不断更新的技术和工具&#xff0c;尤其是数据领域的从业者&#xff0c;如ETL&#xff08;抽取、转换、加载&#xff09;工程师。如何在日常繁重的编码工作中找到时间进行提升式学习&#xff0c;成为了许多ETL工程师的共同挑战。…...

被嫌弃的35岁程序员,竟找到了职业的新出路:PMP项目管理

35岁&#xff0c;本应是事业发展的高峰期。更多听到的却是35岁职场天花板&#xff0c;特别是IT从业者&#xff0c;35岁就好像是一道迈不过的坎&#xff1a;多年的工作经验&#xff0c;在35岁的生理年龄面前&#xff0c;一文不值。 IT从业者若想安然度过“35岁危机”&#xff0…...

跟李沐学AI:目标检测、锚框

边缘框 用于表示物体的位置&#xff0c;一个边缘框通过四个数字定义&#xff1a;(坐上x, 左上y, 右下x, 右下y)或&#xff08;左上x, 左上y, 宽, 高&#xff09; 通常物体检测或目标检测的数据集比图片分类的数据集小很多&#xff0c;因为物体检测数据集标注成本高很多。 目…...

【鸿蒙学习】HarmonyOS应用开发者基础 - 构建更加丰富的页面(一)

学完时间&#xff1a;2024年8月14日 一、前言叨叨 学习HarmonyOS的第六课&#xff0c;人数又成功的降了500名左右&#xff0c;到了3575人了。 二、ArkWeb 1、概念介绍 ArkWeb是用于应用程序中显示Web页面内容的Web组件&#xff0c;为开发者提供页面加载、页面交互、页面调…...

机器学习深度学习中的Warmup技术是什么?

机器学习&深度学习中的Warmup技术是什么&#xff1f; 在机器学习&深度学习模型的训练过程中&#xff0c;优化器的学习率调整策略对模型的性能和收敛性至关重要。Warmup是优化器学习率调整的一种技术&#xff0c;旨在改善训练的稳定性&#xff0c;特别是在训练的初期阶…...

ECMAScript6中的模块:export导出、import导入

1、模块概述 早期的 JavaScript 程序很小&#xff0c;通常被用来执行独立的脚本任务&#xff0c;在 Web 页面中需要的地方提供一定的交互。随着 Web 应用程序变得越来越复杂&#xff0c;有必要考虑提供一种将 JavaScript 程序拆分为可按需导入的单独模块的机制&#xff0c;这就…...

mysql写个分区表

因为表量已经达到1个亿了。现在想做个优化&#xff0c;先按照 create_time 时间进行分区吧。 create_time 是varchar类型。 CREATE TABLE orders (id varchar(40) NOT NULL ,order_no VARCHAR(20) NOT NULL,create_time VARCHAR(20) NOT NULL,amount DECIMAL(10,2) NOT NULL,…...

Hystrix——服务容错保护库

熔断机制是解决微服务架构中因等待出现故障的依赖方响应而形成任务挤压&#xff0c;最终导致自身服务瘫痪的一种机制&#xff0c;它的功能类似电路的保险丝&#xff0c;其目的是为了阻断故障&#xff0c;从而保护系统稳定性。Hystrix作为Spring Cloud中实现了熔断机制的组件&am…...

【区块链+金融服务】河北股权交易所综合金融服务平台 | FISCO BCOS应用案例

区域性股权市场是我国资本市场的重要组成部分&#xff0c;是多层次资本市场体系的基石。河北股权交易所&#xff08;简称&#xff1a;河交所&#xff09; 作为河北省唯一一家区域性股权市场运营机构&#xff0c;打造河北股权交易所综合金融服务平台&#xff0c;将区块链技术与区…...

[图解]需要≠需求-《分析模式》漫谈

1 00:00:00,760 --> 00:00:02,910 今天的《分析模式》漫谈 2 00:00:02,920 --> 00:00:04,180 我们来说一下 3 00:00:04,490 --> 00:00:06,490 需要不等于需求 4 00:00:10,490 --> 00:00:11,760 还是第一章 5 00:00:13,120 --> 00:00:15,020 这里 6 00:00:1…...

刷到好听的音频怎么办

在短视频平台上&#xff0c;我们常常会刷到那些好听得让人陶醉的视频&#xff0c;可却无法直接下载保存其中的音频&#xff0c;是不是感觉很遗憾&#xff1f; 比如刷到林俊杰这首前奏超好听的《江南》&#xff0c;却禁止下载无法直接下载保存。 别担心&#xff0c;下面就为您揭…...

怎么在网络攻击中屹立不倒

在当今蓬勃发展的网络游戏产业中&#xff0c;服务器安全无疑是企业生存与发展的基石。面对互联网环境中无处不在的DDoS&#xff08;分布式拒绝服务&#xff09;与CC&#xff08;挑战碰撞&#xff09;攻击威胁&#xff0c;游戏服务器的防御能力与高效处理能力显得尤为重要。相较…...

详解 Python 中的面向对象编程(2)

引言 面向对象编程&#xff08;OOP&#xff09;是一种编程范式&#xff0c;它通过将属性和行为整合到对象中来构建程序。本教程将带你了解Python语言中面向对象编程的基本概念。 想象一下&#xff0c;对象就像是系统中的各个部件。可以把程序比作一条工厂流水线。在流水线的每一…...

数据结构-线性表-顺序表

一. 了解顺序表 顺序表定义&#xff1a; 顺序表&#xff08;也称为线性数组&#xff09;是一种线性数据结构&#xff0c;它将数据元素按顺序存储在一块连续的内存空间中。顺序表的基本特征包括&#xff1a; 元素的顺序性&#xff1a;顺序表中的元素具有线性关系&#xff0c;每…...

AI绘画大模型-StableDiffusion最强模型sd3(本地安装方法)

​ 前言/introduction Stable Diffusion 3&#xff08;简称SD3&#xff09;是Stability AI最新推出的文本到图像生成模型。相比前代模型&#xff0c;SD3在生成质量、细节表现以及运行效率上有了显著提升&#xff0c;尤其在细腻的图像渲染和复杂的场景构建方面表现出色。SD3模型…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意&#xff1a;运行前…...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略&#xff08;地理位置/文件&#xff09; 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型&#xff0c;核心实现方式&#xff1a; 标准消息类型&#xff1a;直接使用 SDK 内置类型&#xff08;文件、图片等&#xff09;自…...

jdbc查询mysql数据库时,出现id顺序错误的情况

我在repository中的查询语句如下所示&#xff0c;即传入一个List<intager>的数据&#xff0c;返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致&#xff0c;会导致返回的id是从小到大排列的&#xff0c;但我不希望这样。 Query("SELECT NEW com…...

Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解

文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一&#xff1a;HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二&#xff1a;Floyd 快慢指针法&#xff08;…...