基于corosync+pacemaker+drbd+LNMP做web服务器的高可用集群
实验系统:CentOS 6.6_x86_64
实验前提:
1)提前准备好编译环境,防火墙和selinux都关闭;
2)本配置共有两个测试节点,分别coro1和coro2,对应的IP地址分别为192.168.19.55和192.168.19.98;
3)集群服务为nginx服务;
实验软件:corosync-0:1.4.7-1.el6 pacemaker-0:1.1.12-4.el6 crmsh-2.1-1.6 drbd-8.4.4 php-5.6.11 mariadb-10.0.20 tengine-2.1.0
软件下载:http://pan.baidu.com/s/116gQq
注意事项:单主机操作会有标注,除此之外的是两台主机都要完成的
实验拓扑:
一、准备工作
1.所有节点的主机名称和对应的IP地址解析服务可以正常工作,且每个节点的主机名称需要跟“uname -n”命令的结果保持一致。因此,需要保证两个节点上的/etc/hosts文件均添加了下面的内容:
2.为了使得重新启动系统后仍能保持如上的主机名称,还分别需要在各节点执行类似如下的命令:
coro1上:
sed -i 's@\(HOSTNAME=\).*@\1coro1@g' /etc/sysconfig/network
hostname coro1
coro2上:
sed -i 's@\(HOSTNAME=\).*@\1coro2@g' /etc/sysconfig/network
hostname coro2
3.设定两个节点可以基于密钥进行ssh通信,并测试:
coro1上:
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub root@coro2
coro2上:
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub root@coro1
4.两个节点时间必须同步:一般使用ntpdate进行操作,这里不再演示。
二、安装corosync和pacemaker并配置
1.安装epel源:
yum -y install epel*
2.安装corosync和pacemaker:
yum -y install corosync pacemaker
3.在coro1上编辑/etc/corosync.conf
cd /etc/corosync/
cp corosync.conf.example corosync.conf
vim corosync.conf
------------------------------------
bindnetaddr: 192.168.19.0 //为你的网卡所在网络的网络地址
mcastaddr: 239.255.19.1 //组播地址
service { //添加此部分
ver:
name: pacemaker
# use_mgmtd: yes
}
4.在coro1上生成节点间通信时用到的认证密钥文件:
corosync-keygen
5.将corosync.conf和authkey复制至coro2上:
scp -p corosync.conf authkey coro2:/etc/corosync/
三、安装crmsh并启动corosync
1.安装crmsh,需要提前下好rpm包:
yum -y install crmsh-2.1-1.6.x86_64.rpm
2.启动corosync(在coro1上执行):
service corosync start
3.查看corosync引擎是否正常启动:
grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/cluster/corosync.log
4.查看初始化成员节点通知是否正常发出:
grep TOTEM /var/log/cluster/corosync.log
5.检查启动过程中是否有错误产生。下面的错误信息表示packmaker不久之后将不再作为corosync的插件运行,因此,建议使用cman作为集群基础架构服务,此处可安全忽略:
grep ERROR: /var/log/cluster/corosync.log
6.查看pacemaker是否正常启动:
grep pcmk_startup /var/log/cluster/corosync.log
7.如果上面命令执行均没有问题,接着可以在coro1上执行如下命令启动coro2上的corosync:
ssh coro2 'service corosync start'
8.如果安装了crmsh,可使用如下命令查看集群节点的启动状态。从下面的信息可以看出两个节点都已经正常启动,并且集群已经处于正常工作状态:
crm status
四、编译安装drbd并配置
drbd共有两部分组成:内核模块和用户空间的管理工具。其中drbd内核模块代码已经整合进Linux内核2.6.33以后的版本中,因此,如果您的内核版本高于此版本的话,你只需要安装管理工具即可;否则,您需要同时安装内核模块和管理工具两个软件包,并且此两者的版本号一定要保持对应。
1.安装用户空间工具:
tar xf drbd-8.4..tar.gz
cd drbd-8.4.
./configure --prefix=/usr/local/drbd --with-km
make KDIR=/usr/src/kernels/2.6.-504.30..el6.x86_64 //换成自己的内核版本
make install
mkdir -pv /usr/local/drbd/var/run/drbd
cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/rc.d/init.d
chkconfig --add drbd
chkconfig drbd off //一会作为corosync的资源,所以不要开机自动启动
2.安装drbd模块:
cd drbd
make clean
make KDIR=/usr/src/kernels/2.6.-504.30..el6.x86_64 //换成自己的内核版本
cp drbd.ko /lib/modules/`uname -r`/kernel/lib
depmod
3.给主机分区,大小为5G。这里不再给出具体步骤,两台主机的/dev/sda7为一会要使用的分区:
4.配置drbd(在coro1上操作):
drbd的主配置文件为/etc/drbd.conf;为了管理的便捷性,目前通常会将些配置文件分成多个部分,且都保存至/etc/drbd.d/目录中,主配置文件中仅使用"include"指令将这些配置文件片断整合起来。通常/etc/drbd.d目录中的配置文件为global_common.conf和所有以.res结尾的文件。其中global_common.conf中主要定义global段和common段,而每一个.res的文件用于定义一个资源。
cd /usr/local/drbd/etc/drbd.d/
vim global_common.conf
--------------------------------------
global {
usage-count no;
# minor-count dialog-refresh disable-ip-verification
} common {
protocol C; handlers {
# These are EXAMPLE handlers only.
# They may have severe implications,
# like hard resetting the node under certain circumstances.
# Be careful when chosing your poison. # pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /p
roc/sysrq-trigger ; reboot -f";
# pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /p
roc/sysrq-trigger ; reboot -f";
# local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-
trigger ; halt -f";
# fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
# split-brain "/usr/lib/drbd/notify-split-brain.sh root";
# out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
# before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";
# after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;
} startup {
# wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb
} options {
# cpu-mask on-no-data-accessible
} disk {
#on-io-error detach;
# size max-bio-bvecs on-io-error fencing disk-barrier disk-flushes
# disk-drain md-flushes resync-rate resync-after al-extents
# c-plan-ahead c-delay-target c-fill-target c-max-rate
# c-min-rate disk-timeout
}
net {
#cram-hmac-alg "sha1";
#shared-secret "mydrbd";
# protocol timeout max-epoch-size max-buffers unplug-watermark
# connect-int ping-int sndbuf-size rcvbuf-size ko-count
# allow-two-primaries cram-hmac-alg shared-secret after-sb-0pri
# after-sb-1pri after-sb-2pri always-asbp rr-conflict
# ping-timeout data-integrity-alg tcp-cork on-congestion
# congestion-fill congestion-extents csums-alg verify-alg
# use-rle
}
}
5.定义一个资源,web是资源名,可以自己改:
vim /usr/local/drbd/etc/drbd.d/web.res
--------------------------------------
resource web {
on coro1 {
device /dev/drbd0;
disk /dev/sda7;
address 192.168.19.55:;
meta-disk internal;
}
on coro2 {
device /dev/drbd0;
disk /dev/sda7;
address 192.168.19.98:;
meta-disk internal;
}
}
6.以上文件在两个节点上必须相同,因此,可以基于ssh将刚才配置的文件全部同步至coro2节点:
scp /usr/local/drbd/etc/drbd.d/* coro2:/usr/local/drbd/etc/drbd.d/
7.在两个节点上初始化已定义的资源并启动服务:
drbdadm create-md web
service drbd start
8.查看启动状态,从下面的信息中可以看出此时两个节点均处于Secondary状态:
cat /proc/drbd
9.我们接下来需要将其中一个节点设置为Primary,在要设置为Primary的节点上执行如下命令,这里在coro1上操作:
drbdadm primary --force web
cat /proc/drbd
而后再次查看状态,可以发现数据同步过程已经开始。等数据同步完成以后再次查看状态,可以发现主次位置显示是不一样的。斜线前面的代表当前主机,后面的代表对方主机。
在coro1上查看:
在coro2上查看:
10.创建文件系统并挂载:
文件系统的挂载只能在Primary节点进行,因此,也只有在设置了主节点后才能对drbd设备进行格式化,这里在coro1上进行操作。
mke2fs -t ext4 -L DRBD /dev/drbd0
mkdir /mydata //创建挂载点
mount /dev/drbd0 /mydata/
mkdir /mydata/www //创建网页目录
mkdir /mydata/data //创建数据库目录
11.切换Primary和Secondary节点:
对主Primary/Secondary模型的drbd服务来讲,在某个时刻只能有一个节点为Primary,因此要切换两个节点的角色,只能在先将原有的Primary节点设置为Secondary后,才能原来的Secondary节点设置为Primary。
在coro1上:
umount /mydata/
drbdadm secondary web //变为secondary节点
在coro2上:
drbdadm primary web //变为primary节点
cat /proc/drbd
mkdir /mydata //创建挂载点
mount /dev/drbd0 /mydata/
ls /mydata/
可以看到,coro2已经成为了Primary,之前在coro1上创建的目录也能够访问到。测试完成后,再次将coro1变为Primary并挂载。
五、准备LNMP环境
1.编译安装tengine:
yum -y install pcre-devel
useradd -r nginx //要保证两台主机的nginx用户id和组id完全一致
tar xf tengine-2.1..tar.gz
cd tengine-2.1.
./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre
make && make install
2.为tengine提供脚本:
vim /etc/init.d/nginx
------------------------------------
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig: -
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /etc/nginx/nginx.conf
# config: /etc/sysconfig/nginx
# pidfile: /var/run/nginx.pid # Source function library.
. /etc/rc.d/init.d/functions # Source networking configuration.
. /etc/sysconfig/network # Check that networking is up.
[ "$NETWORKING" = "no" ] && exit nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx) NGINX_CONF_FILE="/etc/nginx/nginx.conf" [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx lockfile=/var/lock/subsys/nginx make_dirs() {
# make required directories
user=`nginx -V >& | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
options=`$nginx -V >& | grep 'configure arguments:'`
for opt in $options; do
if [ `echo $opt | grep '.*-temp-path'` ]; then
value=`echo $opt | cut -d "=" -f `
if [ ! -d "$value" ]; then
# echo "creating" $value
mkdir -p $value && chown -R $user $value
fi
fi
done
} start() {
[ -x $nginx ] || exit
[ -f $NGINX_CONF_FILE ] || exit
make_dirs
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq ] && touch $lockfile
return $retval
} stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq ] && rm -f $lockfile
return $retval
} restart() {
configtest || return $?
stop
sleep
start
} reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
} force_reload() {
restart
} configtest() {
$nginx -t -c $NGINX_CONF_FILE
} rh_status() {
status $prog
} rh_status_q() {
rh_status >/dev/null >&
} case "$1" in
start)
rh_status_q && exit
$
;;
stop)
rh_status_q || exit
$
;;
restart|configtest)
$
;;
reload)
rh_status_q || exit
$
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit
esac
------------------------------------
chmod +x /etc/init.d/nginx
chkconfig --add nginx
chkconfig nginx off //一会作为corosync的资源,所以不要开机自动启动
3.安装mysql,man和path路径输出这里不再演示:
useradd -r mysql //保证两台主机的mysql用户id和组id完全一致
tar xf mariadb-10.0.-linux-x86_64.tar.gz -C /usr/local/
cd /usr/local/
ln -sv mariadb-10.0.-linux-x86_64 mysql
cd mysql/
chown -R root:mysql .
ln -sv /usr/local/mysql/include /usr/include/mysql //输出mysql的头文件至系统头文件路径
echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf //输出mysql的库文件给系统库查找路径
ldconfig
本试验中coro1为drbd的Primary,所以下面的操作在coro1上进行,提前将/dev/brbd0挂载至/mydata:
chown -R mysql:mysql /mydata/data/
/usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/mydata/data/ //初始化mysql
cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf //提供配置文件
vim /etc/my.cnf
------------------------------------
datadir = /mydata/data //增加此项
------------------------------------
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld //提供服务脚本
scp -p /etc/init.d/mysqld coro2:/etc/init.d/
scp -p /etc/my.cnf coro2:/etc/
chkconfig --add mysqld
chkconfig mysqld off //一会作为corosync的资源,所以不要开机自动启动
service mysqld start
/usr/local/mysql/bin/mysql //连接mysql
------------------------------------
CREATE DATABASE abcd; //创建abcd数据库
SHOW DATABASES; //显示数据库列表
停掉mysql,让drbd主节点切换至coro2并挂载,在coro2上连接mysql,切换主次步骤请参考前面:
chkconfig --add mysqld
chkconfig mysqld off
service mysqld start
/usr/local/mysql/bin/mysql
-----------------------------------
SHOW DATABASES;
mysql测试成功,coro2上也可以看到coro1创建的数据。停掉mysql,让主节点再次切换到coro1上并挂载/dev/drbd0。
4.编译安装php:
yum -y install libxml2-devel bzip2-devel libcurl-devel libmcrypt-devel
tar xf php-5.6..tar.bz2
cd php-5.6.
./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --enable-fpm --enable-sockets --enable-sysvshm --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib-dir --with-libxml-dir=/usr --enable-xml --with-mhash --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --with-curl --with-pdo-mysql=/usr/local/mysql
make && make install
5.为php和php-fpm提供配置文件:
cp php.ini-production /etc/php.ini //提供php配置文件
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm //提供脚本
chmod +x /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig php-fpm off //一会作为corosync的资源,所以不要开机自动启动
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf //提供php-fpm配置文件
vim /usr/local/php/etc/php-fpm.conf
---------------------------------------------------
pm.max_children =
pm.start_servers =
pm.min_spare_servers =
pm.max_spare_servers =
pid = /usr/local/php/var/run/php-fpm.pid
user = nginx
group = nginx
listen = 192.168.19.150: //监听在VIP的9000端口
六、LNMP与DRBD结合
1.现在试验中coro1为drbd的Primary节点,所以以下操作在coro1上进行:
chown -R nginx:nginx /mydata/www/
vim /etc/nginx/nginx.conf
----------------------------------------
location / {
root /mydata/www;
index index.php index.html index.htm;
}
location ~ \.php$ {
root /mydata/www;
fastcgi_pass 192.168.19.150:;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
----------------------------------------
vim /etc/nginx/fastcgi_params //将此文件内容改为如下几行
----------------------------------------
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
----------------------------------------
scp /etc/nginx/nginx.conf coro2:/etc/nginx/
scp /etc/nginx/fastcgi_params coro2:/etc/nginx/
ifconfig eth0: 192.168.19.150/ up //手动启动VIP
service nginx start
service mysqld start
service php-fpm start
在/mydata/www下放入网页文件,此处以wordpress为例。用浏览器打开http://192.168.19.150,如果没问题,则会出现安装页面,按照提示安装即可。我这里手动创建了wordpress数据库,并给root用户添加了密码,安装时就直接使用root。
/usr/local/mysql/bin/mysql
-----------------------------------------
CREATE DATABASE wordpress;
UPDATE mysql.user SET Password=PASSWORD() WHERE User='root';
FLUSH PRIVILEGES;
2.切换drbd的Primary节点为coro2,并测试:
在coro1上操作:
service nginx stop
service mysqld stop
service php-fpm stop
umount /mydata/
drbdadm secondary web
ifconfig eth0:0 down
在coro2上操作:
drbdadm primary web
mount /dev/drbd0 /mydata/
ifconfig eth0: 192.168.19.150/ up
service nginx start
service mysqld start
service php-fpm start
手动切换完毕之后,同样打开http://192.168.19.150,进行任何操作均没问题。至此,drbd+LNMP搭建完毕。下一步,就要将corosync和pacemaker整合进来了。现在检查两台主机的VIP、nginx、php-fpm、mysql、drbd均为关闭状态,且不能开机自动启动。
七、使用crmsh为corosync添加资源
1.创建drbd配置文件的软连接(两台机器均操作):
ln -sv /usr/local/drbd/etc/drbd.conf /etc/drbd.conf
ln -sv /usr/local/drbd/etc/drbd.d /etc/drbd.d
2.修改php-fpm启动脚本为如下内容,如不修改,则corosync无法识别(两台机器均操作):
#!/bin/sh
#=======================================================================================
# php-fpm - this script start and stop the php-fpm daemon
#
# chkconfig on
# description: php-fpm is a FastCGI web server.
# processname: php-fpm
# config: /usr/local/php/etc/php-fpm.conf
# pidfile: /var/run/php-fpm.pid
#=======================================================================================
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin BINFILE="/usr/local/php/sbin/php-fpm"
CFGFILE="/usr/local/php/etc/php-fpm.conf"
PIDFILE="/var/run/php-fpm.pid"
LOCKFILE="/var/lock/php-fpm.lock" RETVAL= start() {
[[ -x $BINFILE ]] || exit
[[ -f $CFGFILE ]] || exit if [[ `ps aux | grep php-fpm: | grep -v grep | wc -l` -gt ]]; then
echo "The php-fpm is already running."
return
fi $BINFILE -t >/dev/null >& if [[ $? -ne ]]; then
echo "The php-fpm configure has error."
return
fi echo -n "Starting php-fpm......"
$BINFILE -y $CFGFILE -g ${PIDFILE}
RETVAL=$?
echo
[[ $RETVAL -eq ]] && touch $LOCKFILE return $RETVAL
} stop() {
if [[ `ps aux | grep php-fpm: | grep -v grep | wc -l` -eq ]]; then
echo "The php-fpm is not running."
return
fi echo -n "Shutting down php-fpm......" if [[ -f $PIDFILE ]]; then
kill -QUIT `cat ${PIDFILE}`
else
kill -QUIT `ps aux | grep php-fpm | awk '/master/{print $2}'`
fi RETVAL=$?
echo
[[ $RETVAL -eq ]] && rm -f $LOCKFILE $PIDFILE return $RETVAL
} restart() {
stop
sleep while true
do
if [[ `ps aux | grep php-fpm: | grep -v grep | wc -l` -eq ]]; then
start
break
fi
sleep
done RETVAL=$?
echo return $RETVAL
} reload() {
if [[ `ps aux | grep php-fpm: | grep -v grep | wc -l` -eq ]]; then
echo "The php-fpm is not running."
return
fi echo -n $"Reloading php-fpm......" if [[ -f $PIDFILE ]]; then
kill -USR2 `cat ${PIDFILE}`
else
kill -USR2 `ps aux | grep php-fpm | awk '/master/{print $2}'`
fi RETVAL=$?
echo return $RETVAL
} case "$1" in
start)
start
;; stop)
stop
;; restart)
restart
;; reload)
reload
;; *)
echo "Usage: service php-fpm {start|stop|restart|reload}"
RETVAL=
esac exit $RETVAL
下面运行crm命令,进入crm命令行模式,非特殊注明情况下操作均在此模式下进行,在一台机器上操作即可。
3.关闭corosync的stonith检测和仲裁:
configure //进入配置菜单
property stonith-enabled=false //关闭stonith设备
property no-quorum-policy=ignore //关闭仲裁设备
verify //语法检测
commit //提交
4.添加资源(configure菜单下):
primitive mydrbd ocf:drbd params drbd_resource=web op monitor role=Master interval=20s timeout=30s op monitor role=Slave interval=30s timeout=20s op start timeout=240s op stop timeout=240s //定义drbd资源
primitive myfile Filesystem params device="/dev/drbd0" directory="/mydata" fstype="ext4" op monitor interval=30s timeout=60s op start timeout=60s op stop timeout=60s //定义文件系统资源
primitive myip IPaddr params ip=192.168.19.150 op monitor interval=30s timeout=60s //定义VIP资源
primitive mynginx lsb:nginx op monitor interval=30s timeout=20s //定义nginx资源
primitive mysql lsb:mysqld op monitor interval=30s timeout=60s //定义mysqld资源
primitive myphp lsb:php-fpm //定义php-fpm资源
group myserver myfile myip mynginx myphp mysql //定义资源组
verify //语法检测,如没问题,先不要提交
5.添加各种约束:
ms ms_mydrbd mydrbd meta master-max= master-node-max= clone-max= clone-node-max= notify=True //drbd主从资源配置
colocation myfile_with_mydrbd_master inf: myfile ms_mydrbd:Master //定义排列约束,myfile要和drbd的Master节点在一起
colocation mysql_with_myfile inf: mysql myfile //mysql要和myfile在一起
order myfile_after_ms_mydrbd_master Mandatory: ms_mydrbd:promote myfile:start //定义顺序约束,drbd主节点被提升,myfile才能启动
order myip_after_myfile Mandatory: myfile myip
order mynginx_after_myip Mandatory: myip mynginx
verify
commit
6.提交之后,可以看到,所有资源已经运行在coro2,打开http://192.168.19.150进行操作也没问题:
7.下面操作让coro2成为备用节点。可以看到,资源全部转移到coro1上了,打开http://192.168.19.150进行各种操作仍然OK:
cd ..
node standby coro2 //coro2成为备用
----------------------------- 等待5秒
node online coro2 //重新上线
status //查看状态
至此,实验全部结束。因为时间原因,很多细节有待完善,欢迎大家提供宝贵意见,谢谢! QQ:82800452
基于corosync+pacemaker+drbd+LNMP做web服务器的高可用集群的更多相关文章
- Centos 7 下 Corosync + Pacemaker + DRBD + psc + crmsh 实现 mysql 服务高可用
一.介绍 高可用,大家可能会想到比较简单的Keepalived,或者更早一点的 heartbeat,也可能会用到 Corosync+Pacemaker,那么他们之间有什么区别. Heartbeat到了 ...
- Corosync+Pacemaker+crmsh构建Web高可用集群
一.概述: 1.1 AIS和OpenAIS简介 AIS应用接口规范,是用来定义应用程序接口(API)的开放性规范的集合,这些应用程序作为中间件为应用服务提供一种开放.高移植性的程序接口.是在实现高可用 ...
- corosync+pacemaker and drbd实现mysql高可用集群
DRBD:Distributed Replicated Block Device 分布式复制块设备,原理图如下 DRBD 有主双架构和双主架构的,当处于主从架构时,这个设备一定只有一个节点是可以读写的 ...
- 高可用集群之corosync+pacemaker
1.概念 在传统Linux集群种类,主要分了三类,一类是LB集群,这类集群主要作用是对用户的流量做负载均衡,让其后端每个server都能均衡的处理一部分请求:这类集群有一个特点就是前端调度器通常是单点 ...
- corosync+pacemaker高可用集群
高可用集群,是指以减少服务中断(如因服务器宕机等引起的服务中断)时间为目的的服务器集群技术.简单的说,集群就是一组计算机,它们作为一个整体向用户提供一组网络资源.这些单个的计算机系统就是集群的节点. ...
- 高可用集群corosync+pacemaker之crmsh使用(一)
上一篇博客我们聊了下高可用集群corosync+pacemaker的相关概念以及corosync的配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13585 ...
- 高可用集群corosync+pacemaker之crmsh使用(二)
上一篇博客我们聊到了crmsh的安装以及配置一个资源到corosync+pacemaker高可用集群上的相关命令的用法,回顾请参考https://www.cnblogs.com/qiuhom-1874 ...
- 高可用集群corosync+pacemaker之pcs安装使用
前文我们介绍了高可用集群corosync+pacemaker的集群管理工具crmsh的常用命令的使用,回顾请参考https://www.cnblogs.com/qiuhom-1874/tag/crms ...
- CentOS7/RHEL7 pacemaker+corosync高可用集群搭建
TOC \o "1-3" \h \z \u 一.集群信息... PAGEREF _Toc502099174 \h 4 08D0C9EA79F9BACE118C8200AA004B ...
随机推荐
- Nginx配置详解
序言 Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的.从2004年发布至今,凭借开源的力量,已经接近成熟与完善. Nginx功能丰富,可作为HTTP服务器,也 ...
- 【tomcat】HTTPS访问配置 + restful调用远程HTTPS绕过验证
单向验证: 第一步: 生成key: keytool -genkey -alias mykey -keyalg RSA -keystore d:/key/testkey keytool -export ...
- Android开发之Activity的创建跳转及传值
在Android系统的江湖中有四大组件:活动(Activity), 服务(Service), 广播接收器(Broadcast Reciver)和内容提供者(Content Provider).今天所介 ...
- Vertica增加一个数据存储的目录
Vertica增加一个数据存储的目录 操作语法为: ADD_LOCATION ( 'path' , [ 'node' , 'usage', 'location_label' ] ) 各节点添加目录,并 ...
- web开发调试神器——fiddler的使用
好累 以后再写 http://docs.telerik.com/fiddler/knowledgebase/autoresponder
- 跨域之同源策略 Same-origin policy
同源策略是浏览器中最基本的隔离潜在恶意文件的安全策略,他限制了来自不同源(origin)的文档或脚本之间的相互作用. 何谓同源 在跨域之URL中介绍过一个URL的标准格式如下: 协议类型://服务器地 ...
- ASP.NET Core 介绍
原文:Introduction to ASP.NET Core 作者:Daniel Roth.Rick Anderson.Shaun Luttin 翻译:江振宇(Kerry Jiang) 校对:许登洋 ...
- 解决微信授权回调页面域名只能设置一个的问题 [php]
最终的解决方案是:https://github.com/liuyunzhuge/php_weixin_proxy,详细的介绍请往下阅读. 在做项目集成微信登录以及微信支付的时候,都需要进行用户授权.这 ...
- 支持多返回值存储过程的SqlHelper
public readonly string connStr = ConfigurationManager.ConnectionStrings["sql"].ConnectionS ...
- 深度理解CSS样式表,内有彩蛋....
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...