1. 程式人生 > >Memcached高可用群集

Memcached高可用群集

system pack pkill 獲取 序列 let ons nature mnt

Memcached高可用群集

主服務器安裝Memcached、magent、libevent

安裝 libevent  memcached    magent  (主服務器)
[root@localhost asd] cd /opt/libevent-2.1.8-stable
[root@localhost libevent-2.1.8-stable] ./configure --prefix=/usr/

[root@localhost asd] cd /opt/memcached-1.5.6
[root@localhost memcached-1.5.6]  ./configure --with-libevent=/usr

#主服務器上需要libevent的這個模塊
[root@localhost opt]# ln -s /usr/lib/libevent-2.1.so.6 /usr/lib64/libevent-2.1.so.6

#解壓出來magent會解壓出來以下幾個文件
[root@localhost asd] tar zxvf magent-0.5.tar.gz -C /opt/
ketama.c
magent.c
ketama.h
Makefile
[root@localhost opt] vi ketama.h #修改開頭兩個聲明,最後一行有#endif聲明不需要做修改
#ifndef SSIZE_MAX
#define SSIZE_MAX 32767
#endif

[root@localhost opt] vim Makefile #修改開頭聲明文件
LIBS = -levent -lm

[root@localhost opt] make #把magent生成的文件讓系統能識別
gcc -Wall -O2 -g  -c -o magent.o magent.c
gcc -Wall -O2 -g  -c -o ketama.o ketama.c
gcc -Wall -O2 -g -o magent magent.o ketama.o -levent -lm

在從服務器上安裝openssh-clients遠程連接

[root@localhost Packages] rpm -ivh openssh-clients-7.4p1-11.el7.x86_64.rpm 
warning: /mnt/Packages/openssh-clients-7.4p1-11.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing...                          ################################# [100%]
    package openssh-clients-7.4p1-11.el7.x86_64 is already installed

把主服務器上編譯產生的magent的文件遠程復制到從服務器上

[root@localhost opt] ls
ketama.c  ketama.o               magent    magent.o  memcached-1.5.6
ketama.h  libevent-2.1.8-stable  magent.c  Makefile
[root@localhost opt] scp magent [email protected]:/usr/bin/
The authenticity of host ‘192.168.32.218 (192.168.32.218)‘ can‘t be established.
ECDSA key fingerprint is SHA256:gJPuAr8ixvbw23RR67aEnt+w9zT1936PhJNzk0nD/Bg.
ECDSA key fingerprint is MD5:1c:34:a1:74:e8:59:a3:54:7d:cd:61:bd:2d:7e:50:32.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘192.168.32.218‘ (ECDSA) to the list of known hosts.
[email protected]‘s password: 
magent                                                                 100%  112KB  10.5MB/s   00:00 

在主從服務器上安裝keepalived

#主從都要裝
! 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_HA
}

vrrp_script magent {
    script "/opt/shell/magent.sh"
    interval 2
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
        magent
    }
    virtual_ipaddress {
        192.168.32.188
    }
}

#下面多余的部分可以全部刪除

#把從服務器上的keepalived.conf配置文件用mv修改為備份文件
[root@localhost memcached-1.5.6]# cd /etc/keepalived/
[root@localhost keepalived]# ls
keepalived.conf
[root@localhost keepalived]# mv keepalived.conf keepalived.conf.bak
[root@localhost keepalived]# ls
keepalived.conf.bak

#用scp遠程復制主服務器上的keepalived.conf配置文件到從服務器上/etc/keeplived/底下
[root@localhost keepalived]# scp keepalived.conf [email protected]:/etc/keepalived/
[email protected]‘s password: 
keepalived.conf                                                        100%  634   309.0KB/s   00:00   
#查看從服務器上有沒有這個配置文件
[root@localhost keepalived]# ls
keepalived.conf  keepalived.conf.bak
#修改keepalived.conf配置文件
 router_id 2 #改為2
 state BACKUP #master改為BACKUP
 priority 90 #優先級改為小於100

配置配置文件裏面的magent.sh腳本(註意路徑要與配置文件裏面路徑相同)

主
[root@localhost opt] mkdir shell
[root@localhost opt] cd shell/
[root@localhost shell] vim magent.sh
#!/bin/bash
K=`ps -ef | grep keepalived | grep -v grep | wc -l`
if [ $K -gt 0 ]; then
        magent -u root -n 51200 -l 192.168.32.188 -p 12000 -s 192.168.32.219:11211 -b 192.168.32.218:11211
else
pkill -9 magent
fi

-n 51200 //定義用戶最大連接數
-l 192.168.x.x //指定虛擬IP
-p 12000  //指定端口號
-s //指定主緩存服務器
-b //指頂從緩存服務器
[root@localhost shell] chmod +x magent.sh

從
#!/bin/bash
K=`ip addr | grep 192.168.32.188 | grep -v grep | wc -l`
if [ $K -gt 0 ]; then
        magent -u root -n 51200 -l 192.168.175.188 -p 12000 -s 192.168.175.128:11211 -b 192.168.175.132:11211
else
pkill -9 magent
fi

開啟keepalived

[root@localhost shell] systemctl start keepalived.service

#用ip addr查看虛擬ip有沒有綁定成功
[root@localhost shell]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:b9:51:08 brd ff:ff:ff:ff:ff:ff
    inet 192.168.32.219/24 brd 192.168.32.255 scope global dynamic ens33
       valid_lft 1238sec preferred_lft 1238sec
    inet 192.168.32.188/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:feb9:5108/64 scope link 
       valid_lft forever preferred_lft forever

#查看12000端口在主服務器上有沒有開啟
[root@localhost shell]# netstat -ntap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 192.168.32.219:11211    0.0.0.0:*               LISTEN      27084/memcached     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1005/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1469/master         
tcp        0      0 192.168.32.188:12000    0.0.0.0:*               LISTEN      27418/magent        
tcp        0      0 192.168.32.219:55552    192.168.32.1:445        ESTABLISHED -                   
tcp        0     52 192.168.32.219:22       192.168.32.1:52961      ESTABLISHED 26820/sshd: root@pt 
tcp6       0      0 :::22                   :::*                    LISTEN      1005/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      1469/master 

這個12000端口是虛擬端口用於登陸使用
從服務器沒有這個端口
如果主服務器down掉後
12000虛擬端口會自動綁定到從服務器上用於
不影響登陸

登錄Memcached服務器

memcached -m 512k -u root -d -l 192.168.32.219 主 -p  11211
memcached -m 512k -u root -d -l 192.168.32.218 從 -p  11211

netstat -ntap |grep 11211

有11211端口表示服務開啟成功

Memcache緩存服務器存儲數據應用

add username 0 0 7 //不進行壓縮和序列化標識   數據過期時間為永不過期  標識號是7就需要輸入7位數。

example //輸入數據

get username //獲取數據
VALUE username 0 7
example

gets username
VALUE username 0 7 1     //最後一位是更新因子會自增1
example

set username 0 0 10    //更新信息,若鍵名不存在,則自行添加
everything

replace username 0 0 8    //更新信息,若鍵名不存在,則報錯
12345678

gets username
VALUE username 0 8 4
12345678

cas username 0 0 7 4     //檢查更新,更新因子相等則更新否則返回EXISTS
lodging
STORED

append username 0 0 7    //鍵值後追加數據
example
STORED

prepend username 0 0 2   //鍵值前追加數據
un
STORED

delete username

flush_all      //清除所有緩存數據
OK

stats //顯示狀態信息

quit //退出

Memcached高可用群集