Memcached主从复制+keepalived高可用架构
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Memcached主从复制+keepalived高可用架构
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                實現主從復制和高可用的方式
Memcached主從復制是指在主Mencached服務器上修改數據都會被同步到其他服務器上,MemcachedAPI客戶端是無法判斷連接到那一臺Memcached服務器,所以需要VIP地址,提供給MemcachedAPI客戶端進行連接。可以使用keepaived產生的VIP地址連接主Memcached服務器來完成,并且提供高可用架構。
環境準備
- 系統版本:Centos7
- 服務器規劃
| 主Memcached | 172.16.10.24 | libevent、memcached、magent、keepalived | 
| 從Memcached | 172.16.10.22 | libevent、memcached、keepalived | 
| Client | 172.16.10.21 | telnet | 
項目所用源碼包可自行到官方網站下載,或者使用我下載好的項目用安裝包
搭建Memcached服務器
Memcached服務器在兩臺服務器上都需要搭建,方式完全相同,在安裝memcached服務器是需先安裝libevent,然后再安裝memcached。
安裝環境包
yum -y install gcc gcc-c++ make解壓軟件包
tar zxf memcached-1.5.9.tar.gz -C /opt/ tar zxf libevent-2.1.8-stable.tar.gz -C /opt/編譯安裝libevent
cd libevent-2.1.8-stable/ ./configure --prefix=/usr/ make && make install編譯安裝memcached
cd memcached-1.5.9/ ./configure --with-libevent=/usr make && make install優化啟動
ln -s /usr/lib/libevent-2.1.so.6 /usr/lib64/libevent-2.1.so.6 //memcached自帶有復制功能,如果不建立軟連接,則啟動會失敗在主服務器上安裝magent
magent是一個memcached代理軟件,防止單點故障,緩存代理也可以著備份,通過客戶端連接緩存代理服務器,緩存代理服務器連接緩存服務器。
解壓軟件包
mkdir /opt/magent tar zxf magent-0.5.tar.gz -C /opt/magent編譯安裝magent
cd /opt/magent vim ketama.h //修改文件 #ifndef SSIZE_MAX //修改 #define SSIZE_MAX 32767 //修改 #endif //末行也有一行#ndif,刪除 vi Makefile //修改文件 LIBS = -levent -lm //此處為lm,不是一 make //編譯完成之后會生成一個magent可執行文件讓服務便于系統識別
cp /opt/magent/magent /usr/bin/ scp /opt/magent/magent root@172.16.10.22:/usr/bin/ //發送到從服務器上主從服務器安裝keepalived
yum -y install keepalived修改主從服務器配置文件
! Configuration File for keepalived global_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 MAGENT_HA //router_id自定義,但是要確保主從一致 } vrrp_script magent {script "/opt/shell/magent.sh"interval 2 //定義一個函數,此時該腳本還未創建,要在實例外面定義 } vrrp_instance VI_1 {state MASTER //從為BACKUPinterface ens33virtual_router_id 51 //此處id也相同priority 100 //從的優先級低于主advert_int 1authentication {auth_type PASSauth_pass 1111} track_script {magent //應用函數 }virtual_ipaddress {172.16.10.188 //定義vtp自定義,只要不是在使用中的地址即可} } //配置文件下面還有多余的內容此時就可以直接刪除 //從配置文件與主不相同的地方我已經指出來了,其他的都一樣寫主服務器shell腳本
mkdir /opt/shell cd /opt/shell vim magent.sh #!/bin/bash K=`ps -ef | grep keepalived | grep -v grep | wc -l` if [ $K -gt 0 ]; thenmagent -u root -n 51200 -l 172.16.10.188 -p 12000 -s 172.16.10.24:11211 -b 172.16.10.22:11211 else pkill -9 magent fi ##參數解釋 -n 51200 //定義用戶最大連接數 -l 192.168.175.188 //指定虛擬IP -p 12000 //指定端口號 -s //指定主緩存服務器 -b //指定從緩存服務器 chmod +x magent.sh //增加可執行權限寫從服務器shell腳本
mkdir /opt/shell vim /opt/shell/magent.sh #!/bin/bash K=`ip addr | grep 172.16.10.188 | grep -v grep | wc -l` if [ $K -gt 0 ]; thenmagent -u root -n 51200 -l 172.16.10.188 -p 12000 -s 172.16.10.24:11211 -b 172.16.10.22:11211 else pkill -9 magent fi關閉主從服務器防火墻及selinux
systemctl stop firewalld.service setenforce 0開啟主從服務器上keepalived
systemctl start keepalived.service netstat -ntap | grep 12000 //端口開啟可能有點延遲,稍作等待 ipa ddr //查看主服務器上是否綁定VIP在主從服務器上開啟memcached
memcached -m 512k -u root -d -l 172.16.10.24 -p 11211 //主服務器 memcached -m 512k -u root -d -l 172.16.10.22 -p 11211 //從服務器 netstat -ntap | grep 11211客戶端測試
測試連通性
yum -y install telnet telnet 172.16.10.188 12000 //采用VIP連接測試主從復制
連接VIP寫入數據,查看兩臺服務器上是否都已經有了數據
[root@centos]# telnet 172.16.10.188 12000 Trying 172.16.10.24... Connected to 172.16.10.24. Escape character is '^]'. set qwe 0 0 3 123 STORED 連接主從服務器 telnet 172.16.10.24 11211 telnet 172.16.10.22 11211 [root@centos]# telnet 172.16.10.24 11211 Trying 172.16.10.24... Connected to 172.16.10.24. Escape character is '^]'. get user VALUE user 0 3 123 END測試單點故障
systemctl stop keepalived.service //關閉主服務器keepalived服務 ipaddr //查看VIP是否漂移到從服務器上轉載于:https://blog.51cto.com/13643643/2150152
總結
以上是生活随笔為你收集整理的Memcached主从复制+keepalived高可用架构的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 【FTP】FTP服务器的搭建
- 下一篇: 在WPF中,如何得到任何Object对象
