Memcached的特點:
1.在Memcached中可以保存的item數據量是沒有限制的,只要內存足夠;
2.Memcached單進程最大使用內存爲2GB,要使用更多內存,可以分別在不同端口啓動多個Memcached進程;
3.Memcached是一種無阻塞的socket通信方式的服務,基於libevent庫,由於無阻塞通信,對內存讀寫速度非常之快;
4.Memcached分爲服務器和客戶端,可以配置多個服務器和客戶端,應用於分佈式的服務非常廣泛;
5.Memcached作爲小規模的數據分佈式平臺是非常高效的;
服務器 | IP地址 | 軟件包 |
---|---|---|
主Memcached | 192.168.5.129 | libevent-2.1.8-stable.tar.gz、memcached-1.5.9.tar.gz、magent-0.5.tar.gz、keepalived |
從Memcached | 192.168.5.139 | libevent-2.1.8-stable.tar.gz、memcached-1.5.9.tar.gz、magent-0.5.tar.gz、keepalived |
Client | 192.168.5.141 | telnet |
搭建Memcached服務器
Memcached服務器在兩臺服務器上都需要搭建,方式完全相同,在安裝memcached服務器是需先安裝libevent,然後再安裝memcached。
安裝環境包
yum -y install gcc gcc-c++ make
編譯安裝libevent(必須先安裝)
#解壓
tar zxvf libevent-2.1.8-stable.tar.gz -C /opt#切換到libevent目錄
cd /opt/libevent-2.1.8-stable/#配置
./configure --prefix=/usr/#編譯及安裝
make && make install
編譯安裝memcached
#解壓
tar zxvf memcached-1.5.9.tar.gz -C /opt/#切換到memcached
cd /opt/memcached-1.5.9/#配置(指定libevent路徑)
./configure --with-libevent=/usr/#編譯及安裝
make && make install
優化啓動(支持複製功能的Mencached需要安裝後的libevent-2.1.so.6模塊,不然啓動服務會報錯)
ln -s /usr/lib/libevent-2.1.so.6 /usr/lib64/libevent-2.1.so.6
在主服務器上安裝magent
magent是一個memcached代理軟件,防止單點故障,緩存代理也可以着備份,通過客戶端連接緩存代理服務器,緩存代理服務器連接緩存服務器。
#創建magent目錄
mkdir /opt/magent
#解壓
tar zxvf magent-0.5.tar.gz -C /opt/magent
#切換到目錄
cd /opt/magent
#讓動態鏈接庫爲系統所共享
/sbin/ldconfig
#編輯ketama.h,添加文件頭部信息
vim ketama.h
#ifndef SSIZE_MAX
#define SSIZE_MAX 32767
#endif
#編輯Makefile
vi Makefile
LIBS = -levent -lm
#編譯(完成後會生成一個manage的可執行文件)
make
#讓服務便於系統識別
cp /opt/magent/magent /usr/bin/
scp /opt/magent/magent [email protected]:/usr/bin/ //發送到從服務器上
安裝keepalived
#主從服務器安裝keepalived
yum -y install keepalived
#修改主從服務器配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
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_H1 //router_id自定義,但是要確保主從一致
}
vrrp_script magent {
script "/root/shell/magent.sh"
interval 2 //定義一個函數,此時該腳本還未創建,要在實例外面定義
}
vrrp_instance VI_1 {
state MASTER //從爲BACKUP
interface ens33
virtual_router_id 51 //此處id也相同
priority 100 //主服務器優先級要高於從服務器
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
magent //應用函數
}
virtual_ipaddress {
192.168.5.100 //定義vtp自定義,只要不是在使用中的地址即可
}
} //配置文件下面還有多餘的內容此時就可以直接刪除
#建立shell目錄
mkdir /root/shell
#創建magent.sh腳本
vim /root/shell/magent.sh
#!/bin/bash
Keepalived=`ps -ef | grep keepalived | grep -v grep | wc -l`
if [ $Keepalived -gt 0 ]; then
magent -u root -n 51200 -l 192.168.5.100 -p 12000 -s 192.168.5.129:11211 -b 192.168.5.139:11211
else
pkill -9 magent
fi
參數說明:
-n 51200 #定義用戶最大連接數
-l 192.168.5.100 #指定虛擬IP
-p 12000 #指定端口號
-s #指定主緩存服務器
-b #指定從緩存服務器
#賦予腳本執行權限
chmod +x /root/shell/magent.sh
#啓動keepalived服務
systemctl enable keepalived.service
systemctl start keepalived.service
在從服務器上操作
#將主服務器上keepalived配置文件複製過來
scp [email protected]:/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
#編輯keepalived配置文件
vim keepalived.conf
! Configuration File for keepalived
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_H2 #指定router_id
}
vrrp_script magent { #定義函數
script "/root/shell/magent.sh"
interval 2
}
vrrp_instance VI_1 {
state BACKUP
interface ens33 #本地網卡名稱
virtual_router_id 51 #id主從一致
priority 99 #主服務器優先級大於從服務器優先級
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #vip地址
192.168.5.100
}
track_script { #調用函數
magent
}
}
#創建magent.sh腳本
mkdir /root/shell
vim /root/shell/magent.sh
#!/bin/bash
Keepalived=`ip addr | grep 192.168.5.100 | grep -v grep | wc -l`
if [ $Keepalived -gt 0 ]; then
magent -u root -n 51200 -l 192.168.5.100 -p 12000 -s 192.168.5.129:11211 -b 192.168.5.139:11211
else
pkill -9 magent
fi
#賦予腳本執行權限
chmod +x /root/shell/magent.sh
#啓動keepalived服務
systemctl enable keepalived.service
systemctl start keepalived.service
在主從服務器上開啓memcached
memcached -m 512k -u root -d -l 192.168.5.129 -p 11211 //主服務器
memcached -m 512k -u root -d -l 192.168.5.139 -p 11211 //從服務器
netstat -ntap | grep 11211
客戶端測試連通性
#安裝telnet客戶端
yum -y install telnet
#連接memcached
telnet 192.168.175.188 12000
#測試複製功能
//連接vip進行測試,插入user鍵值
[root@localhost ~]# telnet 192.168.5.100 12000
Trying 192.168.5.100...
Connected to 192.168.5.100.
Escape character is '^]'.
set user 0 0 5
test1
STORED
get user
VALUE user 0 5
test1
END
quit
Connection closed by foreign host.
//連接主Memcached,查詢user鍵值,可以獲取,成功!
[root@localhost ~]# telnet 192.168.5.129 11211
Trying 192.168.5.129...
Connected to 192.168.5.129.
Escape character is '^]'.
get user
VALUE user 0 5
test1
END
quit
Connection closed by foreign host.
//連接從Memcached,查詢user鍵值,也可以獲取,成功!
[root@centos7-1 ~]# telnet 192.168.5.139 11211
Trying 192.168.96.17...
Connected to 192.168.96.17.
Escape character is '^]'.
get user
VALUE user 0 5
test1
END
quit
Connection closed by foreign host.