記事ディレクトリ
- 1つは、memcacheクラスターの紹介
- 2.具体的な構成は次のとおりです
-
- 1.実験環境
- 2.実験トポロジーは次のとおりです
- 3. memcacheマスターキャッシュノードとスレーブキャッシュノードを構成します(2つのサーバーの構成は同じです)。
- 4.マスターサーバーをデプロイします----- magentエージェントをインストールします(スレーブサーバーからは不要)
- 5.マスターサーバーとスレーブサーバーの両方にkeepalivedをインストールして展開します。
- 6、マスターサーバーとスレーブサーバーはmagentスクリプトを作成する必要があります
- 7.キープアライブを開始して、キープアライブのマスターとスレーブを確認します。
- 8.ローカルでmemcacheに接続できるかどうかをテストする
- 3、memcacheクライアントテスト
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