Memcacheは非常に傲慢であると聞きました。------------- Memcache + keepalive高可用性クラスターの詳細な分析

1つは、memcacheクラスターの紹介

memcachedクラスター機能は、主にサーバーの単一障害点を解決します。クラスタをデプロイしないと、サーバー間
でデータの複製や同期が行われません。ダウンタイムになるとデータが失われ、バックグラウンドウェブサーバーの同時接続の圧力を効果的に減らすことができません。したがって、
クラスターサービスを使用してこの問題を解決し、クラスターの展開に複数のmemcachedを使用します。1つまたは2つのサーバーがダウンしていても、通常のユーザーエクスペリエンスには影響せず、バックグラウンドサービスの同時接続のプレッシャーも軽減します。

1. Keepalived + memcachedの高可用性

クライアントは2つのサーバー間のVIPアドレスに接続します。バックエンドサーバーに障害が発生すると、自動的に切り替わります。

2.キープアライブの原則:

1.障害検出:
Keepalivedの機能は、memcachedサーバーのステータスが正常かどうかを検出することです。

2.マスターとスレーブの切り替え:
Keepalivedがmemcachedサービスのダウンまたはクラッシュを検出した場合、VIPをマスターサーバーからスレーブサーバーに移動できます

3.
Keepalived はmemcachedの例外をどのように検出しますか: 1)Keepalivedはメインのmemcachedサーバーに仮想IPを生成します

2)Keepalivedはmemcachedマスターサーバーのポート11211が正常に動作しているかどうかを継続的に確認できます。memcachedダウンマシンが見つかった場合、仮想IPはマスターサーバーからスレーブサーバーに移動されます

3.高可用性アーキテクチャアプリケーションシナリオ:

memcachedに分散ノードがさらにある場合は、レプリケーションに基づく高可用性アーキテクチャを構築する必要はありません。

レプリケーションに基づく高可用性アーキテクチャは、通常、memcachedの単一ノードストレージキャッシュまたはセッションで使用されます。

4. magentソフトウェアの概要

Memcachedサーバーとサーバーの間には通信がなく、データ複製も実行されないため、サーバーノードに障害が発生すると、単一障害点が発生します。HAを実装する必要がある場合は、別の方法で解決する必要があります。

シングルポイントを防ぐためにMagentキャッシュプロキシを介して、キャッシュプロキシはバックアップを実行し、クライアントを介してキャッシュプロキシサーバーに接続し、キャッシュプロキシサーバーはキャッシュ接続サーバーに接続できます。キャッシュプロキシサーバーは複数のMemcachedマシンに接続し、各Memcachedマシンを実行できます。データ同期。キャッシュサーバーの1つがダウンしても、システムは引き続き機能します。Memcachedマシンの1つがダウンしても、データは失われず、データの整合性が保証されます。

memcacheキーと値のストレージ:このストアドプロシージャは、プログラマーが実装する必要があります。プログラマーがKey-Valueを生成します。通常、memcacheは静的コンテンツのキャッシュに使用されます。プライマリノードのサービスが停止し、プログラムをバックアップノードに合わせて自動的に調整する必要があります。マスターノードのサービスが復元された後、キャッシュを再生成する必要があります。

Magentはmemcacheの補足です。Memcacheは、magentの下でアクティブとスタンバイに分けられます。マスターノードはすべてのKey-Valueデータを分散して保存し、スタンバイノードはすべてのKey-Valueデータの完全なセットを保存します。magentは、memcacheがノードを分散できないという問題を解決します。

2.具体的な構成は次のとおりです

1.実験環境

VMwareソフトウェア
memcacheマスターサーバーとしてのcentos7仮想マシン、IPアドレス:192.168.110.132
Memcacheスレーブサーバーとしてのcentos7仮想マシン、IPアドレス:192.168.110.133
Memcacheクライアントとしてのcentos7仮想マシン、IPアドレス:192.168.110.134
ドリフトIPアドレス:192.168.110.100、クライアントがログインするIPアドレス

2.実験トポロジーは次のとおりです

Memcacheマスター/スレーブサーバーの
セットアップマスターサーバーをインストールする必要があります:memcached、libevent、keepalived、およびmagent
スレーブサーバーをインストールする必要があります:memcached、libevent、keepalived

ここに画像の説明を挿入

3. memcacheマスターキャッシュノードとスレーブキャッシュノードを構成します(2つのサーバーの構成は同じです)。

1.依存パッケージをインストールします。

yum install gcc gcc-c++ make -y

2.ソフトウェアパッケージを解凍します。

tar zxvf memcached-1.5.6.tar.gz -C /opt/

tar zxvf libevent-2.1.8-stable.tar.gz -C /opt/

mkdir /opt/magent
tar zxvf magent-0.5.tar.gz -C /opt/magent/

3.コンパイルしてインストールします。

cd /opt/libevent-2.1.8-stable
./configure --prefix=/usr/
make && make install


cd /opt/memcached-1.5.6
./configure \
--with-libevent=/usr
make && make install

4.ソフト接続を作成します。

ln -s /usr/lib/libevent-2.1.so.6 /usr/lib64/libevent-2.1.so.6

4.マスターサーバーをデプロイします----- magentエージェントをインストールします(スレーブサーバーからは不要)

mkdir /opt/magent
tar zxvf magent-0.5.tar.gz -C /opt/magent/
1、cd /opt/magent
vim ketama.h
在开头处增减以下代码:
#ifndef SSIZE_MAX
#define SSIZE_MAX 32767
#endif

vim Makefile
//运营库
LIBS = -levent -lm   //加上 -lm

2、修改完成后 make 编译

3、此时,make完成后,就会产生 magent可执行程序

4、将这个 magent 程序复制到path环境变量中

cp magent /usr/bin/

5、可以将安装好的 magent 复制到从服务器,这样从服务器就不需要再配置了

yum install openssh-clients -y   //安装工具包
scp magent root@192.168.110.133:/usr/bin/

5.マスターサーバーとスレーブサーバーの両方にkeepalivedをインストールして展開します。

(1)メインサーバー:

yum install keepalived -y    //安装keepalived
先将配置文件备份一份  不然改错了麻烦
cp -p /etc/keepalived/keepalived.conf /opt

構成ファイルを変更します。

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived
vrrp_script magent {
    
    
        script "/opt/shell/magent.sh"
        interval 2
      }
global_defs {
    
    
   notification_email {
    
    
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_MAGENT_HA
}

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

    virtual_ipaddress {
    
    
        192.168.110.100
    }
}


//定义一个函数,建议写在最前面
vrrp_script magent {
    
    
        script "/opt/shell/magent.sh"
        interval 2
      }
      
做如下修改:
router_id MAGENT_HA        //修改id名
interface ens33            //修改网卡信息

virtual_ipaddress {
    
    
        192.168.220.100     //定义好虚拟ip地址
    }   
    
vrrp_instance VI_1 {
    
    
.....
//调用函数.以下三行代码写在vrrp模块内
track_script {
    
    
        magent
      }
.....
}

(2)サーバーから:

vim /etc/keepalived/keepalived.conf

做如下修改:
router_id MAGENT_HB         //id名和第一台要不一样
state BACKUP               //从服务器
virtual_router_id 52       //id号和第一台不一样
priority 90                 //优先级低与主服务器 

6、マスターサーバーとスレーブサーバーはmagentスクリプトを作成する必要があります

[root@master ~]# mkdir /opt/shell
[root@master ~]# cd /opt/shell/
[root@master shell]# vim magent.sh
K=`ps -ef | grep keepalived | grep -v grep | wc -l`
if [ $K -gt 0 ]; then
        magent -u root -n 51200 -l 192.168.110.100 -p 12000 -s 192.168.110.132:11211 -b 192.168.79.133:11211
else
pkill -9 magent
fi
'//如下解释'
-n 51200             '//定义用户最大连接数'
-l 192.168.110.100   '//指定虚拟IP'
-p 12000             '//指定端口号'
-s                   '//指定主缓存服务器
-b                   '//指定从缓存服务器
11211				'//端口号'

7.キープアライブを開始して、キープアライブのマスターとスレーブを確認します。

'//主从服务器都要做'
[root@master shell]# chmod +x magent.sh 	'//增加magent脚本执行权限'
[root@master shell]# systemctl start keepalived.service	'//开启keepalived服务'
[root@master shell]# netstat -ntap |grep 12000	'//keepalived启动会有点慢,我们需要稍等一下'
tcp        0      0 192.168.110.100:12000    0.0.0.0:*               LISTEN      67513/magent  
[root@master shell]# vim /var/log/messages 
搜索'//Transition to MASTER STATE',有即成功
[root@master shell]# ip addr	'//查看漂移地址是否绑定成功'
...省略内容
 inet 192.168.110.100/32 scope global ens33	'//绑定成功 '
...省略内容
[root@slave keepalived]# vim /var/log/messages 
搜索'//Entering BACKUP STATE',有即成功
[root@slave keepalived]# ip addr	'//查看漂移地址是否绑定成功'
...省略内容
 inet 192.168.110.100/32 scope global ens33	'//绑定成功 '
...省略内容

8.ローカルでmemcacheに接続できるかどうかをテストする

3、memcacheクライアントテスト

1.クライアントはmemcacheにログインします

#######验证主从memcache
主:
ln -s /usr/local/memcached/bin/* /usr/local/bin/
 memcached -m 512k -u root -d -l 192.168.110.132 -p 11211
[root@master ~]# yum install telnet -y	'//安装Telnet远程登陆程序'
[root@master ~]# telnet 192.168.110.132 11211


从:
ln -s /usr/local/memcached/bin/* /usr/local/bin/
//-d守护进程 ;-m缓存大小32M ;-p端口11211
 memcached -m 512k -u root -d -l 192.168.110.133 -p 11211
[root@master ~]# yum install telnet -y	'//安装Telnet远程登陆程序'
[root@master ~]# telnet 192.168.110.133 11211

2.マスター/スレーブ同期をテストする

メインサーバーはデータを作成します

[root@promote keepalived]# telnet 192.168.110.132 11211
Trying 192.168.110.132...
Connected to 192.168.110.132.
Escape character is '^]'.
get username
VALUE username 0 5
12345
END

サーバーからの眺め

[root@promote shell]# telnet 192.168.110.133 11211
Trying 192.168.110.133...
Connected to 192.168.110.133.
Escape character is '^]'.
get username
VALUE username 0 5
12345
END

クライアントで見る

[root@promote ~]# telnet 192.168.110.100 12000
Trying 192.168.110.100...
Connected to 192.168.110.100.
Escape character is '^]'.
add username 0 0 5
12345
STORED

3.高可用性をテストする

[root@master ~]# systemctl stop keepalived.service 	'//关闭主服务器keepalived服务'
[root@promote ~]# telnet 192.168.110.100 12000   //客户端依旧可以登录
Trying 192.168.110.100...
Connected to 192.168.110.100.
Escape character is '^]'.
get username
VALUE username 0 5
12345
END

おすすめ

転載: blog.csdn.net/weixin_47219935/article/details/108559995