綜合項目: 前端:Keepalived雙擊熱備,節點:LAMP+Discuz搭建,後端:MHA

實驗拓撲圖如下

在這裏插入圖片描述

實驗環境如下

在這裏插入圖片描述

實驗環境如下

所有主機的防火牆要關閉
後面用到的所有軟件包,都在這裏了

鏈接:https://pan.baidu.com/s/1L7j55GvLEuYLFQ1HTWLD8w
提取碼:rgi1

一.首先配置後端mysql

關於安裝這裏不闡述,直接進行MHA配置

在sqlmaster,sqlsalve1,sqlslave2,主機操作,注意看我這前面的主機名,關於在哪個主機上操作,我就不闡述了

1)配置免密登陸

master

[root@sqlmaster ~]# ssh-keygen -t rsa
[root@sqlmaster ~]# ssh-copy-id 192.168.1.11
[root@sqlmaster ~]# ssh-copy-id 192.168.1.12
[root@sqlmaster ~]# ssh-copy-id 192.168.1.13

slave1

[root@sqlslave1 ~]# ssh-keygen -t rsa
[root@sqlslave1 ~]# ssh-copy-id 192.168.1.11
[root@sqlslave1 ~]# ssh-copy-id 192.168.1.12
[root@sqlslave1 ~]# ssh-copy-id 192.168.1.13

slave2

[root@sqlslave2 ~]# ssh-keygen -t rsa
[root@sqlslave2 ~]# ssh-copy-id 192.168.1.11
[root@sqlslave2 ~]# ssh-copy-id 192.168.1.12
[root@sqlslave2 ~]# ssh-copy-id 192.168.1.13

2)上傳節點軟件包並安裝

master

[root@sqlmaster ~]# mkdir mha
在這裏插入圖片描述
[root@sqlmaster mha]# tar -zxvf mhapath.tar.gz -C /root
[root@sqlmaster mha]# vim /etc/yum.repos.d/centos7.repo

[centos]
name=centos7
baseurl=file:///mnt
enabled=1
gpgcheck=0

[mha]
name=mha
baseurl=file:///root/mhapath
enabled=1
gpgcheck=0

[root@sqlmaster mha]# mount /dev/cdrom /mnt/
[root@sqlmaster mha]# yum -y install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager --skip-broken --nogpgcheck
[root@sqlmaster mha]# rpm -ivh mha4mysql-node-0.57-0.el7.noarch.rpm

給slave節點傳過去,也安裝上MHA軟件
[root@sqlmaster ~]# scp -r /etc/yum.repos.d/* 192.168.1.12:/etc/yum.repos.d/
[root@sqlmaster ~]# scp -r /etc/yum.repos.d/* 192.168.1.13:/etc/yum.repos.d/
[root@sqlmaster ~]# scp -r /root/mha/mha4mysql-node-0.57-0.el7.noarch.rpm 192.168.1.12:/root
[root@sqlmaster ~]# scp -r /root/mha/mha4mysql-node-0.57-0.el7.noarch.rpm 192.168.1.13:/root
[root@sqlmaster ~]# scp -rf mhapath 192.168.1.12:/root
[root@sqlmaster ~]# scp -r mhapath 192.168.1.13:/root

slave1中

[root@sqlslave1 ~]# mount /dev/cdrom /mnt/
[root@sqlslave1 ~]# yum -y install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager --skip-broken --nogpgcheck
[root@sqlslave1 ~]# rpm -ivh /root/mha4mysql-node-0.57-0.el7.noarch.rpm

slave2中

[root@sqlsalve2 ~]# mount /dev/cdrom /mnt/
[root@sqlsalve2 ~]# yum -y install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager --skip-broken --nogpgcheck
[root@sqlsalve2 ~]# rpm -ivh /root/mha4mysql-node-0.57-0.el7.noarch.rpm

3)安裝管理節點

安裝一下MHA manager管理節點,我這是在master上安裝的
master中

[root@sqlmaster ~]# yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-CPAN -y
[root@sqlmaster ~]# rpm -ivh /root/mha/mha4mysql-manager-0.57-0.el7.noarch.rpm

4)主從配置

master中

[root@sqlmaster ~]# vim /etc/my.cnf 添加如下兩句

log-bin=mysql-bin-master
server-id=1

[root@sqlmaster ~]# systemctl restart mysqld
授權
[root@sqlmaster ~]# mysql -uroot -p123456

mysql>  grant replication slave on *.* to repl@'192.168.1.%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql>  grant all privileges on *.* to 'root'@'192.168.1.%' identified  by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges; 
Query OK, 0 rows affected (0.00 sec)
slave1中

[root@sqlslave1 ~]# vim /etc/my.cnf
添加

log-bin=mysql-salve1
server-id=2
log_slave_updates=1

[root@sqlslave1 ~]# systemctl restart mysqld
授權
[root@sqlslave1 ~]# mysql -uroot -p123456

mysql> grant replication slave on *.* to 'repl'@'192.168.1.%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> grant all privileges on *.* to 'root'@'192.168.1.%' identified  by '123456';
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> flush privileges; 
Query OK, 0 rows affected (0.01 sec)

建立主從

mysql> change master to master_host='192.168.1.11',master_user='repl',master_password='123456';
Query OK, 0 rows affected, 2 warnings (0.21 sec)

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

mysql> show slave status\G;
...
            Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
...
slave2中

[root@sqlsalve2 ~]# vim /etc/my.cnf
添加

log-bin=mysql-slave2
server-id=3
log_slave_updates=1

[root@sqlsalve2 ~]# systemctl restart mysqld
授權
[root@sqlsalve2 ~]# mysql -uroot -p123456

mysql> grant replication slave on *.* to 'repl'@'192.168.1.%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> grant all privileges on *.* to 'root'@'192.168.1.%' identified  by '123456';
Query OK, 0 rows affected, 1 warning (0.04 sec)

mysql>  flush privileges;
Query OK, 0 rows affected (0.15 sec)

主從關係

mysql> change master to master_host='192.168.1.11',master_user='repl',master_password='123456';
Query OK, 0 rows affected, 2 warnings (0.07 sec)

mysql>  start slave;
Query OK, 0 rows affected (0.08 sec)

mysql> show slave status\G
...
            Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
...

5)兩臺slave設置臨時只讀

[root@sqlslave1 ~]# mysql -uroot -p123456 -e 'set global read_only=1’
[root@sqlsalve2 ~]# mysql -uroot -p123456 -e 'set global read_only=1’

6)MHA設置

master(MHA manager)中

[root@sqlmaster ~]# mkdir -p /etc/masterha
[root@sqlmaster ~]# mkdir -p /var/log/masterha/app1
[root@sqlmaster ~]# vim /etc/masterha/app1.cnf

[server default]
manager_workdir=/var/log/masterha/app1
manager_log=/var/log/masterha/app1/manager.log
master_binlog_dir=/data/mysql/data
user=root
password=123456
ping_interval=1
remote_workdir=/tmp
repl_user=repl
repl_password=123456
ssh_user=root

[server1]
hostname=192.168.1.11
port=3306

[server2]
hostname=192.168.1.12
port=3306
candidate_master=1
check_repl_delay=0

[server3]
hostname=192.168.1.13
port=3306

在slave1和slave2中,設置不自動清除中繼日誌
[root@sqlslave1 ~]# mysql -uroot -p123456 -e 'set global relay_log_purge=0’
[root@sqlsalve2 ~]# mysql -uroot -p123456 -e 'set global relay_log_purge=0’

7)檢測羣集狀態

master(MHA manager)中

SSH檢測
[root@sqlmaster ~]# masterha_check_ssh --conf=/etc/masterha/app1.cnf
在這裏插入圖片描述
環境檢測
[root@sqlmaster ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf
在這裏插入圖片描述

8)配置VIP地址

master(MHAmanager)中

[root@sqlmaster ~]# ifconfig ens33:1 192.168.1.99 netmask 255.255.255.0 up
[root@sqlmaster ~]# ifconfig

...

ens33:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.99  netmask 255.255.255.0  broadcast 192.168.1.255
        ether 00:0c:29:ea:b3:4d  txqueuelen 1000  (Ethernet)

修改配置文件,支持VIP
添加下面句話,在[server default]段中
master_ip_failover_script=/usr/bin/master_ip_failover
如下

[server default]
manager_workdir=/var/log/masterha/app1
manager_log=/var/log/masterha/app1/manager.log
master_binlog_dir=/data/mysql/data
user=root
password=123456
ping_interval=1
remote_workdir=/tmp
repl_user=repl
repl_password=123456
ssh_user=root
master_ip_failover_script=/usr/bin/master_ip_failover

[server1]
hostname=192.168.1.11
port=3306

[server2]
hostname=192.168.1.12
port=3306
candidate_master=1
check_repl_delay=0

[server3]
hostname=192.168.1.13
port=3306

編寫VIP自動切換腳本

[root@sqlmaster ~]# vim /usr/bin/master_ip_failover

#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';

use Getopt::Long;

my (
    $command,          $ssh_user,        $orig_master_host, $orig_master_ip,
    $orig_master_port, $new_master_host, $new_master_ip,    $new_master_port
);

my $vip = '192.168.1.99/24';
my $key = '1';
my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";

GetOptions(
    'command=s'          => \$command,
    'ssh_user=s'         => \$ssh_user,
    'orig_master_host=s' => \$orig_master_host,
    'orig_master_ip=s'   => \$orig_master_ip,
    'orig_master_port=i' => \$orig_master_port,
    'new_master_host=s'  => \$new_master_host,
    'new_master_ip=s'    => \$new_master_ip,
    'new_master_port=i'  => \$new_master_port,
);

exit &main();

sub main {

    print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";

    if ( $command eq "stop" || $command eq "stopssh" ) {

        my $exit_code = 1;
        eval {
            print "Disabling the VIP on old master: $orig_master_host \n";
            &stop_vip();
            $exit_code = 0;
        };
        if ($@) {
            warn "Got Error: $@\n";
            exit $exit_code;
        }
        exit $exit_code;
    }
    elsif ( $command eq "start" ) {

        my $exit_code = 10;
        eval {

給與執行權限
[root@sqlmaster ~]# chmod +x /usr/bin/master_ip_failover

再次檢測,結果應該和上面檢測結果一樣纔對
[root@sqlmaster ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf
在這裏插入圖片描述

9)開啓監控

運行如下指令,然後回車

nohup masterha_manager --conf=/etc/masterha/app1.cnf \
   --remove_dead_master_conf  --ignore_last_failover < /dev/null > \
   /var/log/masterha/app1/manager.log 2>&1 &

查看狀態,如下是成功
[root@sqlmaster ~]# masterha_check_status --conf=/etc/masterha/app1.cnf
app1 (pid:5326) is running(0:PING_OK), master:192.168.1.11

看一下日誌
[root@sqlmaster ~]# cat /var/log/masterha/app1/manager.log
在這裏插入圖片描述

二.配置中間的Web服務器

下面都是Web1上的配置

1)安裝並啓動apache

在這裏插入圖片描述
[root@web1 ~]# tar -zxvf httpd-2.4.38.tar.gz
[root@apache ~]# yum -y install gcc gcc-c++ apr apr-devel cyrus-sasl-devel expat-devel libdb-devel openldap-devel apr-util-devel apr-util pcre-devel pcre openssl*

[root@web1 ~]# cd httpd-2.4.38/
[root@web1 httpd-2.4.38]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-ssl --enable-mpms-shared=all

[[email protected]]# make && make install

[root@web1~]# cp /usr/local/httpd/bin/apachectl /etc/init.d/apache
[root@web1 ~]# vim /etc/init.d/apache
在第一行後添加兩行內容,如下#號也要寫上,注意格式要一致,空格都要一致,不然會報錯

#chkconfig: 2345 11 88
# despriction:httpd apache server

[root@web1 ~]# chkconfig --add apache

[root@web1 ~]# vim /usr/local/httpd/conf/httpd.conf
我這裏主機名是web1你們寫你們的主機名即可,然後保存退出即可
在這裏插入圖片描述
[root@web1 ~]# /etc/init.d/apache start
[root@web1 ~]# netstat -anpt | grep 80
tcp6 0 0 :::80 :::* LISTEN 50482/httpd

2)安裝PHP

PHP的作用是用來連接後端的mysql,mysql返回數據後,PHP進行運算返回客戶端動態頁面
在這裏插入圖片描述
libmcrypt-2.5.7:是PHP的依賴包,因爲系統的yum沒有這個安裝包,這裏安裝上就行了

[root@web1 ~]# tar zxvf libmcrypt-2.5.7.tar.gz
[root@web1 ~]# cd libmcrypt-2.5.7/
[root@web1 libmcrypt-2.5.7]# ./configure --prefix=/usr/local/libmcrypt && make && make install
[root@web1 ~]# mount /dev/cdrom /mnt/

[root@web1 ~]# yum -y install php-mcrypt libmcrypt libmcrypt-devel autoconf freetype gd libmcrypt libpng libpng-devel libjpeg libxml2 libxml2-devel zlib curl curl-devel re2c libmcrypt-devel freetype-devel libjpeg-devel bzip2-devel

[root@web1 ~]# tar -zxvf /root/php-5.6.36.tar.gz -C /usr/local/src/
[root@web1 php-5.6.36]# ./configure --prefix=/usr/local/php5.6 --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-fpm --enable-sockets --enable-sysvshm --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --with-mhash --with-mcrypt=/usr/local/libmcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/usr/local/php5.6/etc/ --with-bz2 --enable-maintainer-zts --with-apxs2=/usr/local/httpd/bin/apxs

這裏解釋幾個重要的參數
--with-mysql=mysqlnd
--with-pdo-mysql=mysqlnd
--with-mysqli=mysqlnd

上面這三個選項的作用是,後端數據庫不和PHP在一臺服務器上,需要添加這項項,就是連接數據庫驅動

--with-apxs2:必須添加這項,表示把PHP作爲apache的一個模塊使用,apache的所有功能,都是模塊的形式體現

--with-config-file-path=/usr/local/php5.6/etc :配置文件存放路徑

沒有提到的參數不是很重要,但最好也都加上,以防止後面要使用

[root@web1 php-5.6.36]# make && make install
[root@web1 php-5.6.36]# cp php.ini-production /usr/local/php5.6/etc/php.ini

3)配置PHP,測試後端數據庫VIP

讓Apache支持PHP,

添加兩處,下面第一處
在這裏插入圖片描述
第二處,添加這句

AddType application/x-httpd-php .php .phtml

在這裏插入圖片描述
保存退出
[root@web1 ~]# /etc/init.d/httpd restart

創建測試頁面
[root@web1 ~]# vim /usr/local/httpd/htdocs/index.php

<?php
phpinfo();
?>

[root@web1 htdocs]# /etc/init.d/httpd restart

訪問http://192.168.1.14/
在這裏插入圖片描述
先去sqlmaster(主)上創建一個測試賬號,也是一會discuz論壇賬號
[root@sqlmaster ~]# mysql -uroot -p123456

mysql> grant all on *.* to dtest@'%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

回到web1中,測試連接,這裏指定後端mysql的VIP就可以
[root@web1 ~]# cd /usr/local/httpd/htdocs/
[root@web1 htdocs]# vim ptest.php

<?php
$link=mysql_connect('192.168.1.99','dtest','123456');
if ($link)echo "connection success......";
mysql_close();
?>

訪問測試,應該是如下頁面,如果是空白頁面,就說明配置有誤
http://192.168.1.14/ptest.php
在這裏插入圖片描述

安裝discuz論壇

discuz是開源的網址論壇軟件,是國內較火的論壇軟件
在這裏插入圖片描述
[root@web1 ~]# unzip Discuz_7.2_FULL_SC_UTF8.zip -d discuz
[root@web1 ~]# cd discuz/
[root@web1 discuz]# cp -r upload /usr/local/httpd/htdocs/discuz

[root@web1 ~]# vim /usr/local/php5.6/etc/php.ini
改爲On
在這裏插入圖片描述
[root@web1 ~]# /etc/init.d/httpd restart

賦予權限,一會瀏覽器用戶,使用daemon用戶去安裝論壇,所以要有權限
[root@web1 ~]# chown -R daemon:daemon /usr/local/httpd/htdocs/

訪問
http://192.168.1.14/discuz/install/index.php
在這裏插入圖片描述
繼續下一步,到我如下,按我下圖填寫
在這裏插入圖片描述
等待安裝,到如下,跳過
在這裏插入圖片描述
在這裏插入圖片描述

下面就是配置Web2服務器

因爲web1上都已經安裝好了,這裏直接把Web1安裝好的PHP和Discuz,傳給Web2

web1中

[root@web1 ~]# scp -r /usr/local/httpd/ [email protected]:/usr/local
[root@web1 ~]# scp -r /usr/local/php5.6 [email protected]:/usr/local
[root@web1 ~]# scp -r /usr/local/libmcrypt [email protected]:/usr/local/

Web2中

Web2中也需要安裝一些依賴包,纔可以運行
[root@web2 ~]# yum -y install gcc gcc-c++ apr apr-devel cyrus-sasl-devel expat-devel libdb-devel openldap-devel apr-util-devel apr-util pcre-devel pcre openssl*

[root@web2 ~]# yum -y install php-mcrypt libmcrypt libmcrypt-devel autoconf freetype gd libmcrypt libpng libpng-devel libjpeg libxml2 libxml2-devel zlib curl curl-devel re2c bzip2-devel libmcrypt-devel freetype-devel libjpeg-devel

[root@web2 ~]# cp /usr/local/bin/apachectl /etc/init.d/
[root@web2 ~]# /etc/init.d/httpd start
[root@web2 htdocs]# chown -R daemon:daemon /usr/local/httpd/htdocs/

訪問並測試數據一致性

http://192.168.1.15/discuz/
可以訪問,註冊一個賬號
在這裏插入圖片描述
如下
在這裏插入圖片描述
到web1的論壇中,登陸zhangsan賬號,可以登陸
http://192.168.1.14/discuz/
在這裏插入圖片描述
這是因爲兩個discuz後端的數據庫都是一個,數據都是在數據庫中的,所以其中數據都是一樣的

三.配置前端的Keepliave熱備

kemaster中

就是keepliave,中的master主機
[root@kemaster ~]# mount /dev/cdrom /mnt/
[root@kemaster ~]# yum -y install ipvsadm keepalived
[root@kemaster ~]# cd /etc/keepalived/
[root@kemaster keepalived]# rm -rf keepalived.conf
[root@kemaster keepalived]# vim keepalived.conf
配置文件中可以有註釋

global_defs {                                                   #全局配置
   router_id master                                     #LVS服務器節點名(不能相同)
}

vrrp_instance VI_1 {
    state MASTER                                                #設置熱備類型(MASTER爲主,BACKUP爲備)
    interface ens33                                     #熱備份接口
    virtual_router_id 51                                #熱備份組號(必須相同)
    priority 100                                                #優先級,主的優先級要比備的高
    advert_int 1                                                #hello time
    authentication {                                    #密碼認證
        auth_type PASS                          #認證的類型爲密碼認證
        auth_pass 1111
    }
    virtual_ipaddress {                                 #虛擬IP
        192.168.1.200
    }
}

virtual_server 192.168.1.200 80 {                       #創建虛擬服務器 VIP 和端口
    delay_loop 6                                                #多長時間檢測一次real server 單位爲秒
    lb_algo rr                                                  #調度算法,rr代表輪詢
    lb_kind DR                                          #集羣工作模式
    persistence_timeout 0                               #健康監測時間,設置0爲不檢測
    protocol TCP                                                #使用爲TCP協議

    real_server 192.168.1.14 80 {                       #添加真實服務器和端口
        weight 1                                                #分配權重
        TCP_CHECK {                                     #檢測模塊,爲TCP連接
            connect_port 80                     #檢測端口
            connect_timeout 3                   #連接超時時間
            nb_get_retry 3                      #重試次數
            delay_before_retry 3                #重試間隔時間
        }
    }

    real_server 192.168.1.15 80 {                       #添加真實服務器和端口
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

keslave中

[root@keslave ~]# yum -y install keepalived ipvsadm
[root@keslave ~]# cd /etc/keepalived/
[root@keslave keepalived]# rm -rf keepalived.conf
[root@keslave keepalived]# vim keepalived.conf

lobal_defs {
   router_id slave  
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.200
    }
}

virtual_server 192.168.1.200 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 0
    protocol TCP

    real_server 192.168.1.14 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.1.15 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

兩臺都啓動keepalived
[root@kemaster ~]# systemctl restart keepalived
[root@keslave keepalived]# systemctl restart keepalived

去到kemaster查看VIP地址

在這裏插入圖片描述

配置Web節點,內核參數

Web1
[root@web1 ~]# vim /root/vip.sh

#!/bin/sh
VIP=192.168.1.200
case  $1  in                                                                                                                                                                                    
start)                                                                                                                                                                                          
    ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
    /sbin/route add -host $VIP dev lo:0
    echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
    sysctl -p >/dev/null 2>&1
    echo "RealServer Start OK"
    exit 0
;;                                                                                                                                                                                              
stop)
    ifconfig lo:0 down
    route del $VIP >/dev/null 2>&1
    echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
    echo "RealServer Stoped OK"
    exit 1
;;
*)
    echo "Usage: $0 {start|stop}"
;;
esac

[root@web1 ~]# chmod +x /root/vip.sh
[root@web1 ~]# cd /root/
[root@web1 ~]# ./vip.sh start

Web2

Web2同這個web1操作一樣,複製腳本內容,賦予權限並執行,這裏不演示了

四.訪問測試

通過VIP的地址訪問Discuz論壇,成功
在這裏插入圖片描述

測試和後端mysql通信

右上角登陸,登陸剛剛創建的 zhangsan 用戶,可以登陸上去

在這裏插入圖片描述

通過查看日誌,來查看是否輪詢

web1
[root@web1 ~]# tail -f /usr/local/httpd/logs/access_log

web2
[root@web2 ~]# tail -f /usr/local/httpd/logs/access_log

只要刷新頁面一次,那個符號應該在web1和web2中變動,表示那個終端有變動
在這裏插入圖片描述
當然也可以觀察,配置文件,訪問一次肯定只有一個Web有日誌產生,就是那個GET請求

五.故障切換keepaliaved和MHA

關閉後端mysql的當前master,關閉當前keepalived主
[root@sqlmaster ~]# systemctl stop mysqld
[root@kemaster ~]# systemctl stop keepalived

KeepalivedVIP漂移了
在這裏插入圖片描述

MHA也已經轉換
[root@sqlmaster ~]# tail -n20 /var/log/masterha/app1/manager.log
在這裏插入圖片描述

另外如果MHA老是切換失敗,可以先關閉監控再打開,命令如下

關閉
[root@sqlmaster ~]# masterha_stop --conf=/etc/masterha/app1.cnf

開啓MHA監控

nohup masterha_manager --conf=/etc/masterha/app1.cnf \
   --remove_dead_master_conf  --ignore_last_failover < /dev/null > \
   /var/log/masterha/app1/manager.log 2>&1 &

訪問測試

新打開一個網頁訪問http://192.168.1.200/discuz/,使用用戶zhangsan登陸,可以登陸即可

在這裏插入圖片描述

實驗完畢 !!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章