因?yàn)槲覀児疽恢痹谟胢emcache,始終存在幾個(gè)問題,問題如下:1、單點(diǎn)問題;2、緩存無備份和緩存無法同步問題。 針對(duì)以上問題給出具體的解決方案: 1、用magent,做集群和分布式。。 用magent,做集群和分布式。。 magent-0.5.tar.gz libevent-1.4.14b-stable.tar.gz memcached-1.4.25.tar.gz
memcached 的安裝和依賴安裝
1. 安裝libevent
tar zxvf libevent-1.4.13-stable.tar.gz cd libevent-1.4.13-stable ./configure --prefix=/usr/local/libevent-1.4.14 make make install
2. 安裝memcached
tar zxvf memcached-1.4.5.tar.gz cd memcached-1.4.5.tar.gz ./configure --with-libevent=/usr/local/libevent-1.4.14 ## configure 需要加 libevent的安裝路徑世紀(jì)安裝路徑 或者在當(dāng)前路徑下用yum install libevent來安裝 make make install 安裝完成后配置路徑 /usr/bin/install -c 'memcached' '/usr/local/bin/memcached' 配置memcached的路徑 /usr/bin/install -c 'memcached-debug' '/usr/local/bin/memcached-debug' 配置memcached-debug的路徑
安裝magent
mkdir magent tar zxvf magent-0.5.tar.gz -C magent /sbin/ldconfig sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile make cp magent /usr/local/bin/magent cd ../
/usr/local/bin/memcached -d -u kssadmin -p 11211 /usr/local/bin/memcached -d -u kssadmin -p 11212 /usr/local/bin/memcached -d -u kssadmin -p 11213
/usr/local/bin/magent -u root -d -l 192.168.20.122 -p 12000 -s 127.0.0.1:11211 -s 127.0.0.1:11212 -b 127.0.0.1:11213
分別在127.0.0.1機(jī)器的11211,11212,11213端口啟動(dòng)3個(gè)Memcached進(jìn)程,在12000端口開啟magent代理程序
11211和11212為主Memcached,11213為備份Memcached;
2、 用repcache 主備來解決緩存?zhèn)浞莺途彺嫱絾栴} memcached-1.2.8-repcached-2.2.tar repcached下載地址:http://downloads./repcached 參考網(wǎng)上的例子自己安裝repcache,安裝過程中遇到各種問題一一解決并做了整理,并分享出來;首先感謝前人整理分享的資料,其次希望該資料給其他人帶來方便。 具體代碼: # cd /home/kssadmin 進(jìn)入到當(dāng)前用戶的主目錄 #mkdir app 創(chuàng)建app # mv /home/kssadmin/Desktop/ /home/kssadmin/app/ centos實(shí)在VM環(huán)境下搭建的,我從外部下載的安裝包,并拷貝到Desktop中,移動(dòng)到app下 #cd /home/kssadmin/app/ #ll -rwxrwxrwx. 1 kssadmin kssadmin 227510 Jul 1 2014 memcached-1.2.8-repcached-2.2.tar.gz 準(zhǔn)備工作已完成 #tar -zxvf memcached-1.2.8-repcached-2.2.tar.gz 解壓縮 # cd memcached-1.2.8-repcached-2.2/ # yum install libevent-devel //用yum方式安裝的libevent-devel 如果提示Another app is currently holding the yum lock; waiting for it to exit... 請(qǐng)參考后面解決方案 Loaded plugins: fastestmirror, langpacks base | 3.6 kB 00:00 extras | 3.4 kB 00:00 jenkins | 951 B 00:00 updates | 3.4 kB 00:00 extras/7/x86_64/primary_db | 101 kB 00:00 jenkins/primary | 35 kB 00:01 Loading mirror speeds from cached hostfile * base: mirror.bit.edu.cn * extras: mirrors.neusoft.edu.cn * updates: mirror.bit.edu.cn jenkins 321/321 Resolving Dependencies --> Running transaction check ---> Package libevent-devel.x86_64 0:2.0.21-4.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: libevent-devel x86_64 2.0.21-4.el7 base 85 k Transaction Summary ================================================================================ Install 1 Package Total download size: 85 k Installed size: 357 k Is this ok [y/d/N]: y Downloading packages: warning: /var/cache/yum/x86_64/7/base/packages/libevent-devel-2.0.21-4.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY Public key for libevent-devel-2.0.21-4.el7.x86_64.rpm is not installed libevent-devel-2.0.21-4.el7.x86_64.rpm | 85 kB 00:03 Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 Importing GPG key 0xF4A80EB5: Userid : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>" Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5 Package : centos-release-7-1.1503.el7.centos.2.8.x86_64 (@anaconda) From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 Is this ok [y/N]: y Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : libevent-devel-2.0.21-4.el7.x86_64 1/1 Verifying : libevent-devel-2.0.21-4.el7.x86_64 1/1 Installed: libevent-devel.x86_64 0:2.0.21-4.el7 Complete! -----到此libebvent-devel 安裝成功 # ./configure --enable-replication --program-transform-name=s/memcached/repcached/ 配置和生成makefle 文件 checking build system type... x86_64-unknown-linux-gnu checking host system type... x86_64-unknown-linux-gnu checking target system type... x86_64-unknown-linux-gnu checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /usr/bin/mkdir -p .................. #make ###make過程中如果約到一下問題:請(qǐng)參考后面解決方案,親自解決過了 貼出來跟大家分享一下。。 ed.c: In function ‘a(chǎn)dd_iov’: memcached.c:696:30: error: ‘IOV_MAX’ undeclared (first use in this function) if (m->msg_iovlen == IOV_MAX || ^ memcached.c:696:30: note: each undeclared identifier is reported only once for each function it appears in ..... # make install ...... 到此安裝完成,下面完成配置: # /usr/bin/install -c 'memcached' '/usr/local/bin/repcached' 正常模式啟動(dòng) # /usr/bin/install -c 'memcached-debug' '/usr/local/bin/repcached-debug' debug模式啟動(dòng) [kssadmin@localhost memcached-1.2.8-repcached-2.2]$ /usr/local/bin/repcached -p 11211 -v -d ######啟動(dòng) 占用端口 -p(-p <num> TCP port number to listen on (default: 11211))指定端口 11211 -v (verbose (print errors/warnings while in event loop)) 打印錯(cuò)誤信息和警告 -d 以守護(hù)進(jìn)程方式啟動(dòng) (run as a daemon ) replication: listen ## 顯示當(dāng)前信息證明啟動(dòng)成功 [kssadmin@localhost memcached-1.2.8-repcached-2.2]$ ps -ef|grep repchache ### 查看repchache 是否啟動(dòng) kssadmin 3385 1 0 09:31 ? 00:00:01 /usr/bin/ibus-daemon --replace --xim --panel disable kssadmin 9613 1 0 09:49 ? 00:00:00 /usr/local/bin/repcached -p 11211 -v -d kssadmin 9683 3821 0 09:50 pts/0 00:00:00 grep --color=auto rep /usr/local/bin/repcached -p 11212 -x 127.0.0.1 -v -d 啟動(dòng)備份 replication: connect (peer=127.0.0.1:11212) replication: marugoto copying replication: accept [kssadmin@localhost memcached-1.2.8-repcached-2.2]$ replication: start [kssadmin@localhost memcached-1.2.8-repcached-2.2]$ ps -aux 。。。 kssadmin 9613 0.0 0.0 9564 776 ? Ss 09:49 0:00 /usr/local/bin/repcached -p 11211 -v -d kssadmin 9708 0.0 0.0 9516 580 ? Ss 09:50 0:00 /usr/local/bin/repcached -p 11212 -x 127.0.0.1 -v -d 。。。。 repcache啟動(dòng)成功 測(cè)試數(shù)據(jù)是否同步 首先telnet 11211 并寫入數(shù)據(jù) [root@localhost Packages]# telnet localhost 11211 Trying ::1... Connected to localhost. Escape character is '^]'. set seven 0 0 8 注意:最后一位給出的是字符穿個(gè)數(shù),輸入的字符串位數(shù)必須夠,否則會(huì)爆出錯(cuò)誤:CLIENT_ERROR bad data chunk 這是因?yàn)榇鎯?chǔ)的字節(jié)長(zhǎng)度與指定的長(zhǎng)度不匹配造成的 dddddddd STORED get seven VALUE seven 0 8 dddddddd END quit Connection closed by foreign host. [root@localhost Packages]# telnet localhost 11212 -- 在備份的cache中取數(shù)據(jù) Trying ::1... Connected to localhost. Escape character is '^]'. get seven VALUE seven 0 8 dddddddd END 其次測(cè)試在備分緩存集成中寫入數(shù)據(jù)是否會(huì)同步到主緩存中 [root@localhost Packages]# telnet localhost 11212 Trying ::1... Connected to localhost. Escape character is '^]'. set back 0 0 6 ------ STORED get back VALUE back 0 6 ------ END quit Connection closed by foreign host. [root@localhost Packages]# telnet localhost 11211 Trying ::1... Connected to localhost. Escape character is '^]'. get back VALUE back 0 6 ------ END quit Connection closed by foreign host. # yum install libevent-devel //用yum方式安裝的libevent-devel 安裝過過程中一直遇到如下問題,提示app被鎖了,另外京城在占用這,如果遇到了可以選擇殺掉 的進(jìn)程或者直接結(jié)束上一次操作直接執(zhí)行 rm -f /var/run/yum.pid Loaded plugins: fastestmirror, langpacks Existing lock /var/run/yum.pid: another copy is running as pid 4497. Another app is currently holding the yum lock; waiting for it to exit... The other application is: PackageKit Memory : 132 M RSS (1.4 GB VSZ) Started: Wed Feb 24 09:34:01 2016 - 04:48 ago State : Sleeping, pid: 4497 Another app is currently holding the yum lock; waiting for it to exit... The other application is: PackageKit Memory : 132 M RSS (1.4 GB VSZ) Started: Wed Feb 24 09:34:01 2016 - 04:50 ago State : Sleeping, pid: 4497 Another app is currently holding the yum lock; waiting for it to exit... The other application is: PackageKit Memory : 132 M RSS (1.4 GB VSZ) Started: Wed Feb 24 09:34:01 2016 - 04:52 ago State : Sleeping, pid: 4497 #make make && make install 提示編譯出錯(cuò): make all-recursive make[1]: Entering directory `/usr/local/memcached' Making all in doc make[2]: Entering directory `/usr/local/memcached/doc' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/usr/local/memcached/doc' make[2]: Entering directory `/usr/local/memcached' gcc -DHAVE_CONFIG_H -I. -DNDEBUG -m64 -g -O2 -MT memcached-memcached.o -MD MP -MF .deps/memcached-memcached.Tpo -c -o memcached-memcached.o `test -f memcached.c' || echo './'`memcached.c memcached.c: In function ‘a(chǎn)dd_iov’: memcached.c:697: error: ‘IOV_MAX’ undeclared (first use in this function) memcached.c:697: error: (Each undeclared identifier is reported only once memcached.c:697: error: for each function it appears in.) make[2]: *** [memcached-memcached.o] Error 1 make[2]: Leaving directory `/usr/local/memcached' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/usr/local/memcached' make: *** [all] Error 2 解決方案: vi memcached.c 將下面的幾行 /* FreeBSD 4.x doesn't have IOV_MAX exposed. */ #ifndef IOV_MAX #if defined(__FreeBSD__) || defined(__APPLE__) # define IOV_MAX 1024 #endif #endif 修改為 /* FreeBSD 4.x doesn't have IOV_MAX exposed. */ #ifndef IOV_MAX # define IOV_MAX 1024 #endif 重新編譯和安裝: make && make install |
|