輕量級 memcached快取代理 twemproxy實踐
本文內容腦圖如下:
文章共 533字,閱讀大約需要 2分鐘 !
概 述
是 Twitter開源的輕量級 memcached / redis 代理伺服器,本質就是一個叢集管理工具,主要用來彌補 Redis和 Memcached對叢集管理的不足,其完成的最大功勞就是透過在後端減少同快取伺服器的連線數從而增加吞吐量。我們將 Twemproxy看成一個老大哥,背後 Carry著一群 memcached / redis例項小弟,如此看來,某一程式上也類似於 memcached / redis 的HA。
本文先實踐一波讓 twemproxy 來 Carry一群 memcached小弟時的工作情況。
環境準備
準備三臺節點:
節點 | OS | 角色 |
---|---|---|
192.168.199.77 | CentOS 7.4 | 部署 memcached1例項 |
192.168.199.78 | CentOS 7.4 | 部署 memcached2例項 |
192.168.199.79 | CentOS 7.4 | 部署 twemproxy代理伺服器 |
memcached 部署
- 安裝
yum install memcached
- 作為後臺服務執行之
memcached -u root -p 11211 -m 64m -d
twemproxy 部署
- 安裝 m4工具
wget
tar -zvxf m4-1.4.9.tar.gz
cd m4-1.4.9
./configure
make
make install
- 安裝 autoconf 工具
wget
tar zxvf autoconf-2.69.tar.gz
cd autoconf-2.69
./configure --prefix=/usr/
make && make install
- 安裝 twemproxy代理
wget
unzip master.zip
mv twemproxy-master twemproxy
mv twemproxy /usr/local/
cd /usr/local/
cd twemproxy/
autoreconf -fvi
./configure --enable-debug=full
make
make install
- 檢視 twemproxy幫助
nutcracker -h
[root@localhost ~]# nutcracker -h
This is nutcracker-0.4.1
Usage: nutcracker [-?hVdDt] [-v verbosity level] [-o output file]
[-c conf file] [-s stats port] [-a stats addr]
[-i stats interval] [-p pid file] [-m mbuf size]
Options:
-h, --help : this help
-V, --version : show version and exit
-t, --test-conf : test configuration for syntax errors and exit
-d, --daemonize : run as a daemon
-D, --describe-stats : print stats description and exit
-v, --verbose=N : set logging level (default: 5, min: 0, max: 11)
-o, --output=S : set logging file (default: stderr)
-c, --conf-file=S : set configuration file (default: conf/nutcracker.yml)
-s, --stats-port=N : set stats monitoring port (default: 22222)
-a, --stats-addr=S : set stats monitoring ip (default: 0.0.0.0)
-i, --stats-interval=N : set stats aggregation interval in msec (default: 30000 msec)
-p, --pid-file=S : set pid file (default: off)
-m, --mbuf-size=N : set size of mbuf chunk in bytes (default: 16384 bytes)
- 準備 twemproxy配置檔案
vim /usr/local/twemproxy/conf/nutcracker.yml
修改配置檔案 nutcracker.yml
memcached:
listen: 127.0.0.1:22121
hash: fnv1a_64
distribution: ketama
timeout: 400
backlog: 1024
preconnect: true
auto_eject_hosts: true
server_retry_timeout: 30000
server_failure_limit: 3
servers:
- 192.168.199.77:11211:1
- 192.168.199.78:11211:1
- 啟動 tewmproxy服務
nutcracker -d -c /usr/local/twemproxy/conf/nutcracker.yml
- 檢查啟動情況
[root@localhost ~]# netstat -nltp | grep nutcracker
tcp 0 0 0.0.0.0:22222 0.0.0.0:* LISTEN 12737/nutcracker
tcp 0 0 192.168.199.79:22121 0.0.0.0:* LISTEN 12737/nutcracker
資料讀/寫測試
- 首先透過 twemproxy代理來寫快取
一連存入了 6個key
[root@localhost conf]# telnet localhost 22121
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
set key1 0 0 1
1
STORED
set key2 0 0 1
2
STORED
set key3 0 0 1
3
STORED
set key4 0 0 1
4
STORED
set key5 0 0 1
5
STORED
set key6 0 0 1
6
STORED
- 檢視發現所有快取都寫到了 memcached2中
[root@localhost ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get key1
VALUE key1 0 1
1
END
get key2
VALUE key2 0 1
2
END
get key3
VALUE key3 0 1
3
END
get key4
VALUE key4 0 1
4
END
get key5
VALUE key5 0 1
5
END
get key6
VALUE key6 0 1
6
END
- 接下來斷開 memcached2
[root@localhost ~]# ps -aux | grep mem
root 634 0.0 0.0 326588 1960 ? Ssl 15:58 0:00 memcached -u root -p 11211 -m 64m -d
root 704 0.0 0.0 112676 984 pts/0 S+ 16:01 0:00 grep --color=auto mem
[root@localhost ~]# kill -9 634
- 繼續透過 twemproxy代理來寫快取
[root@localhost conf]# telnet localhost 22121
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
set key9 0 0 1
9
STORED
[root@localhost conf]#
- 此時去memcached1檢視:
[root@localhost ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get key9
VALUE key9 0 1
9
END
我們發現 memcached2斷開後,快取 key9寫到了 memcached1中,而對於使用者來說,由於是跟 twemproxy代理互動,因此並不能感覺到後端 memcached2例項的下線
- 我們再重新啟動 memcached2
然後再繼續透過代理寫資料:
[root@localhost conf]# telnet localhost 22121
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
set key10 0 0 1
x
STORED
set key11 0 0 1
y
STORED
- 然後發現資料又寫到 memcached2中了
[root@localhost ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get key10
VALUE key10 0 1
x
END
get key11
VALUE key11 0 1
y
END
從上面這個實驗過程可以看出,一臺 memcached例項掛掉後,twemproxy 能自動移除之;而恢復後,twemproxy 能夠自動識別並重新加入到 memcached 組中重新使用
後 記
由於能力有限,若有錯誤或者不當之處,還請大家批評指正,一起學習交流!
- My Personal Blog:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1978/viewspace-2817639/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 輕量級流量複製goreplay實踐Go
- SpringBoot2 整合Ehcache元件,輕量級快取管理Spring Boot元件快取
- okhttp 快取實踐HTTP快取
- nuxt快取實踐UX快取
- 快取&PWA實踐快取
- 配送交付時間輕量級預估實踐
- 前端快取最佳實踐前端快取
- 專案中多級快取設計實踐總結快取
- Nginx 代理快取Nginx快取
- Nginx初步(反向代理/Web伺服器/輕量級)NginxWeb伺服器
- MyBatis快取機制(一級快取,二級快取)MyBatis快取
- Spring的輕量級實現Spring
- mybatis快取-二級快取MyBatis快取
- 阿里專家分享:企業級大資料輕量雲實踐阿里大資料
- Shopify使用Memcached而不是Redis快取提升20%效能Redis快取
- Golang web filter 輕量級實現GolangWebFilter
- SpringBoot中實現兩級快取Spring Boot快取
- nginx反向代理快取教程。Nginx快取
- 微服務快取原理與最佳實踐微服務快取
- 用程式碼來實踐Web快取Web快取
- PHP實現一個輕量級容器PHP
- Mybatis的二級快取、使用Redis做二級快取MyBatis快取Redis
- MySQL與Redis實現二級快取MySqlRedis快取
- Laravel 實現二級快取 提高快取的命中率和細粒化快取 keyLaravel快取
- 代理與反向代理、負載均衡和快取負載快取
- 對比Memcached和Redis,誰才是適合你的快取?Redis快取
- Rust編寫的Memcached快取替代品:memc.rsRust快取
- 代理快取有什麼弊端?快取
- Springboot應用快取實踐之:Ehcache加持Spring Boot快取
- 快取一致性最佳實踐快取
- 不廢話,程式碼實踐帶你掌握 強快取、協商快取!快取
- [實戰驗證] http快取(無代理伺服器)HTTP快取伺服器
- 輕鬆理解HTTP快取策略HTTP快取
- 輕量級超級 css 工具CSS
- MybatisPlus二級快取MyBatis快取
- Oracle輕量級實時監控工具-oratopOracle
- mybatis原始碼學習:一級快取和二級快取分析MyBatis原始碼快取
- LNMP 分散式叢集(四):Memcached 快取伺服器的搭建LNMP分散式快取伺服器