Centos 7.4 LVS ( Nginx lamp NFS DRBD+Heartbeat) 高可用集群环境配置

准备工作:
10台虚拟机,安装Centos 7.4 最小化安装,关掉防火墙、selinux ,内存改为512M ,内存根据自己环境来决定。
一、架构介绍(总共10台 8 Centos 7.4 2台Centos 6.9)
最前端 两台 LVS + Keepalived 做冗余
第二层 两台Nginx 均衡后端两台LAMP
第三层 四台,LAP(两台) + Mariadb (双主)避免主挂掉了,从上数据不能写入,导致数据不同步。
最后端 两台 NFS 做存储,Heartbeat + DRBD做高可用,存储网站文件。
架构图:



注意:本实验环境都已关闭了 iptables firewalld selinux ,后面的文档中如果没有写出关闭防火墙的,其实都已经是关闭的。
二、IP 规划说明:


三、搭建NFS存储
3.1、关闭防火墙、selinux (NFS 两台主机上都要操作)



3.2、配置网络 NFS两台主机 更改为规划的IP 地址。




不要忘了重启网络服务


3.3 配置hosts 文件,并添加路由。 两台NFS主机上都要操作 /etc/hosts 文件两边内容都一样
cat >>/etc/hosts<<eof
192.168.229.26 nfs0126
192.168.229.27 nfs0227
eof
添加路由,nfs0126 主机

添加路由,nfs0227 主机


3.4、安装要用到的软件包以及一些依赖,两台NFS主机上都要操作。
yum install vim wget lrzsz gcc gcc-c++ openss* gparted –y
3.5、安装扩展源 (两台NFS主机上都要安装)
cd /opt
wget http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm
3.6、安装Heartbeat (两台NFS主机上都要安装)
yum install -y heartbeat
cd /usr/share/doc/heartbeat-3.0.4/
cp authkeys ha.cf haresources /etc/ha.d/
cd /etc/ha.d/
chmod 600 authkeysheartbeat 要求authkeys 权限必须 为600
ha.cf heartbeat的配置文件
haresources heartbeat 的资源文件
authkeys heartbeat 的认证文件
3.7、编辑配置文件 先操作nfs0126 主机,再修改 nfs0227 这台nfs 主机。
vim /etc/ra.d/ra.cf
删除原来内容,写入以下内容
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
auto_failback on
keepalive 2
deadtime 30
warntime 10
initdead 60
ucast eth1 192.168.229.27
node nfs0126
node nfs0227
crm no
nfs0126 /etc/ha.d/ha.cf

nfs0227 /etc/ha.d/ha.cf


vim /etc/ha.d/haresources 两台 NFS 主机配置一样,可以直接拷贝过去。
vim /etc/ha.d/authkeys 两台主机这个认证配置一样,直接拷贝过去。

3.8、启动heartbeat
先在 nfs0126 主 的nfs 上启动,再 启动从上面的heartbeat



3.9、DRBD 安装配置
3.9.1、对第二块硬盘进行分区,同样,两台NFS主机上都做相同操作。
parted /dev/sdb mkalabel gpt #转换成gpt分区
parted /dev/sdb mkpart primary 0 8192 #划分主分区,默认单位是M
parted /dev/sdb mkpart primtary 8193 10240
parted /dev/sdb p #显示分区
在工作中,sdb2 用于meta 分区,meta 分区是一个状态信息,不需要特别大。

3.9.2、安装DRBD
cd /opt
安装依赖包
yum -y install gcc gcc-c++ kernel-devel kernel-headers flex make kernel-devel kernel kernel-deaders
安装扩展 yum 源
rpm -Uvh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm
yum install drbd kmod-drbd84 –y
配置DRBD ,修改DRBD配置文件
vim /etc/drbd.conf
global {
usage-count no
}
common {
protocol C;
disk {
on-io-error detach;
no-disk-flushes;
no-md-flushes;
}
net {
sndbuf-size 512k;
max-buffers 8000;
unplug-watermark 1024;
max-epoch-size 8000;
cram-hmac-alg "sha1";
shared-secret "hdhwXes23sYEhart8t";
after-sb-0pri disconnect;
after-sb-1pri disconnect;
after-sb-2pri disconnect;
rr-conflict disconnect;
}
syncer {
rate 330M;
al-extents 517;
}
}
resource data {
on data-1 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.229.26:9876;
meta-disk /dev/sdb2 [0];
}on data-2 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.229.27:9876;
meta-disk /dev/sdb2 [0];
}
}
两台NFS 主机上的DRBD配置文件内容一样,可以直接拷贝到第二台NFS主机 /etc/ 下面
3.9.3、初始化 meta 分区 两台 NFS主机上都要操作
nfs0126 主机上执行
modprobe drbd
drbdadm create-md data
drbdadm up data


nfs0227 主机上执行

3.9.4、设置主,同步数据到对端。
在 nfs0126 上面执行
drbdadm -- ---overwrite-data-of-peer primary data
查看数据同步状态
cat /proc/drbd




同步完成的时间,取决于你的硬盘大小。



3.9.5、格式化分区,在主上操作。
nfs0126 上执行。
mkfs.ext4 –b 4096 /dev/drbd0 #(配置文件中的drbd0 对应的是/dev/sdb1)

3.9.6、创建数据文件夹,并在主上挂载
mkdir –p /data/nfs # 主,备 节点上都要创建名称相同的文件夹。
mount /dev/drbd0 /data/nfs # 只在 主 节点上进行挂载,备 节点上不需要挂载。

3.9.7、DRBD与Heartbeat 整合 ,两台NFS上都操作。
修改heartbeat 的资源配置文件
vim /etc/ha.d/haresources

拷贝 /etc/ha.d/haresources 到 nfs0227 /etc/ha.d/

两台NFS主机重启heartbeat 服务。
3.10、NFS安装配置
3.10.1 、安装NFS ,设置共享文件夹权限 两台NFS主机上都要操作。
yum install -y nfs-utils rpcbind
编辑配置文件
vim /etc/exports





启动服务
service rpcbind start
service nfs start
chkconfig rpcbind on
chkconfig nfs on



3.11、DRBD Heartbeat NFS 最后的整合,两台NFS主机都要操作。
3.11.1、配置脚本 两台NFS主机都需要配置脚本




修改heartbeat 配置文件 两台NFS主机上都要操作
重启Heartbeat ,先重启主节点上的heartbeat ,再启动备节点 heartbeat
service heartbeat restart
修改rc.local 文件,把需要 heartbeat drbd 服务的启动命令写在里面。




四、安装数据库 mariadb
4.1、关闭防火墙 selinux




4.2、yum 安装 mariadb (sql01 sql02 上都要安装)
yum install –y mariadb mariadb-server mariadb-devel
yum install lrzsz vim wget gcc gcc-c++ openss* -y #安装需要用到的软件和一些依赖包
4.3 启动mariadb ,配置 双主
 sql01 sql02 主机上都操作
4.4 sql01 上编辑配置文件 vim /etc/my.cnf

复制/etc/my.cnf 到 sql02 /etc/ 下面 ,修改server-id = 2 auto_increment_offset = 2





两台 sql01 sql02 上重启 mariadb
systemctl restart mariadb
4.5 sql01 sql02 上操作,进入mariadb ,添加授权的同步帐号。
grant replication slave on *.* to 'tb'@'192.168.189.70' identified by 'a1b2c3';





4.6 配置 主 主
4.6.1、sql01 上操作,先要进入到mariadb
show master status; 记录下 同步的点 和 日志文件,sql02 为从,配置主的时候会用到。


4.6.2、sql02 上操作,进入 mariadb




4.6.3、sql02 上操作,进入mariadb
show master status; 记录下同步的日志文件,和同步的点,sql01 为从,配置主的时候,会用到。






4.6.4、测试 ,在sql01 上创建数据库,sql02 上面有没有,同样的,在sql02 上创建数据库,在sql01上面看有没有。




4.7、安装Keepalived
4.7.1 安装依赖包 ,sql01 sql02 都要安装。
yum install gcc* libnl* popt* openssl kernel kernel-devle openssl-devel popt-devel libnfnetlink-devel –y
4.7.2、上传 keepalived 软件,创建文件夹。 sql01 sql02 都要安装,拷贝文件。
官网上下最新版本的keepalived http://www.keepalived.org/download.html
上传 两台sql01 sql02 服务器,到/opt 解压出来
tar zxvf keepalived-1.4.3.tar.gz
cd keepalived-1.4.3
./configure
make ;make install
mkdir -p /etc/keepalived #新建文件夹,用来存放keepalived
cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig
cp /usr/local/sbin/keepalived /usr/sbin
4.7.2 、修改配置文件
sql01 上操作
vim /etc/keepalived/keepalived.conf
清空原有配置,复制下面内容。
!Configuration File for keepalived
global_defs {
notification_email {
admin@localhost.com
}
notification_email_from admin@localhost.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
# VIP1
vrrp_instance VI_1 {
state MASTER
interface ens33
lvs_sync_daemon_inteface ens33
virtual_router_id 120
priority 100
dvert_int 5
nopreempt
authentication {
auth_type PASS
auth_pass 2222
}
virtual_ipaddress {
192.168.189.169
}
}
virtual_server 192.168.189.169 3306 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.189.69 3306 {
weight 100
notify_down /data/sh/mysql.sh
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
sql02 、/etc/keepalived/keepalived.conf
!Configuration File for keepalived
global_defs {
notification_email {
admin@localhost.com
}
notification_email_from admin@localhost.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
# VIP1
vrrp_instance VI_1 {
state BACKUP
interface ens33
lvs_sync_daemon_inteface ens33
virtual_router_id 120
priority 98
dvert_int 5
nopreempt
authentication {
auth_type PASS
auth_pass 2222
}
virtual_ipaddress {
192.168.189.169
}
}
virtual_server 192.168.189.169 3306 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.189.70 3306 {
weight 100
notify_down /data/sh/mysql.sh
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
在两台sql01 sql02 上面创建文件夹 mkdir -p /data/sh/ 用来存放配置文件中的一个脚本mysql.sh
mysql.sh 脚本内容如下:
#!/bin/bash
systemctl stop keepalived
chmod +x /data/sh/mysql.sh
启动keepalived 服务,并设置成开机 启动。 sql01 sql02 都操作。

sql01 上,查看VIP是否有生成。


本地客户端,测试VIP能否ping 通。


五、安装Apache、NFS ,Dixcuz。
5.1 apa01 apa02 上都执行操作。
yum install httpd httpd-devel php php-devel php-mysql rpcbind nfs-utils -y
5.2、启动服务,测试PHP。两台 apache 主机上都操作。
 



vi /var/www/html/test.php


出现如下类似的页面,表示安装成功,没有需要检查apache服务是否启动,以及查看日志。



5.3、上传Discuz 3.2 到 nfs0126 主存储服务器 /opt目录,解压。
在nfs0126 上面操作:
 

没有unzip 命令,需要安装。yum install unzip –y
5.4、设置nfs0126 上面共享的目录 /data/nfs 权限。两台nfs 存储上都要操作。
chmod –R o+w /data/nfs
将解压出来的Dixcuz 中的 upload 下面所有的内容,拷贝到/data/nfs 下面
只需要在nfs0126 主 上面操作。
cd /opt/upload
 对这几个文件夹授权,安装的时候会用到。
5.5、两台apache 服务器,即apa01 apa02 上面挂载。
在挂载之前,可以先查看一下NFS 存储上面有没有共享。
 

建议,最好把挂载写到 /etc/rc.local ,在写之前,不要忘了修改 /etc/rc.d/rc.local 权限,需要+x

 


5.6、创建数据库,并授权。


5.7安装Discuz
打开本地IE,输入其中一台apache 服务器的IP。 









5.7、测试方法,IE 打开 apa01 IP 地址,注册一个帐号,登录,退出,再在IE 中打开,apa02 的IP 址址,用刚才注册的帐号登录,如果能正常登录,则表示安装成功,以及前面的配置没有问题,如果不成功,根据相应的提示,查找问题。

六、安装Nginx
6.1、安装依赖包,两台nginx (nginx01 nginx02)主机上都要操作
yum install pcre pcre-devel gcc* openssl* lrzsz vim –y
6.2、上传nginx 安装包 到/opt/ 解压,安装。 

tar zxvf nginx-1.8.1.tar.gz && cd nginx-1.8.1
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make
make install

6.3、安装nfs rpcbind 挂载 nfs0126 主 存储 上面的共享目录 /data/nfs 到本地的/www/web
两台nginx 主机上都要操作。
yum install nfs-utils rpcbind –y

mkdir –p /www/web

6.4、修改配置文件
worker_processes 4;
events {
use epoll;
worker_connections 102400;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
upstream web{
server 192.168.189.71:80 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.189.72:80 weight=1 max_fails=2 fail_timeout=30s;
}
server {
listen 80;
server_name www.dfsccn.cc localhost;
index index.html index.htm;
location /{
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://web;
root /www/web;
}
location ~ .*\.(php|jsp|cgi)?$
{
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://web;
}
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css|mp4|wmv|flv)?$
{
root /www/web; #静态页面走本地服务器。
expires 3d;
}
access_log /usr/local/nginx/logs/access.log;
}
}
拷贝 /usr/local/nginx/conf/nginx.conf 到、nginx02 /usr/local/nginx/conf/
/usr/local/nginx/sbin/nginx –s reload 重启nginx

6.5、 查看进程,看是否有无 nginx 启动 , IE 测试。






七、安装LVS
7.1、 先安装依赖包,两台LVS 上面都要安装依赖包

yum install popt-static kernel-devel make gcc* openssl-devel lftplibnl* popt* libnl* libpopt* vim lrzsz -y
7.2、上传ipvsadm-1.26.tar.gz keepalived1.4.3.tar.gz文件到/opt,解压,安装。两台 LVS 服务器上都要安装
7.2.1、安装ipvsadm-1.26
tar zxvf ipvsadm-1.26.tar.gz && cd ipvsadm-1.26
make && make install
加载 ip_vs 模块,两台LVS上都要操作。
modprobe ip_vs
把 加载模块 命令 写到 /etc/rc.local 中,以便开机启动后自动添加 ip_vs 模块
vim /etc/rc.local


7.2.2、 添加LVS 需要均衡的 服务器 两台LVS上都要添加
LVS 安装完毕之后,需要进行配置,配置的步骤有两步,第一步为定义端口服务,第二步为添加
realserver 后端服务。
ipvsadm -A -t 192.168.189.77:80 -s rr #先添加一个lvs 的VIP
再在这个VIP上面去添加一个真实的服务器IP
ipvsadm -a -t 192.168.189.77:80 -r 192.168.189.73 -g -w 2
ipvsadm -a -t 192.168.189.77:80 -r 192.168.189.74 -g -w 2





修改/etc/rc.local、添加如下内容,两台IVS 主机上都要操作。 

chmod +x /etc/rc.d/rc.local 修改rc.local 的权限,不要忘了。
7.3、配置 VIP 在均衡的 后端 Nginx 服务器上。两台nginx 上都要执行这个脚本





查看 VIP 配置 结果




echo '/opt/lvsvip.sh start' >>/etc/rc.local 设置开机启动,运行脚本,生成VIP。
7.4、 安装Keepalived 1.4.3 两台LVS 服务器上都要安装
7.4.1、先安装依赖包
yum install gcc* libnl* popt* openssl kernel kernel-devle openssl-devel popt-devel libnfnetlink-devel -y
解压keepalived1.4.3.tar.gz 进入目录
./configure
make
make install
7.4.2、复制文件 两台 LVS 服务器上都要操作
创建目录:
mkdir -p /etc/keepalived
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/sbin/keepalived /usr/sbin/



7.4.3、修改配置文件
在lvs01 操作
! Configuration Filefor keepalived
global_defs {
notification_email {
wgkgood@163.com
}
notification_email_from wgkgood@163.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface ens33
lvs_sync_daemon_inteface ens33
virtual_router_id 41 #组内相同,不同组不能相同。
priority 100
advert_int 5
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.189.77
}
virtual_server 192.168.189.77 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
#REAL_SERVER_1
real_server 192.168.189.73 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
#REAL_SERVER_2
real_server 192.168.189.74 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
     }
}
}
}
复制一份配置文件到 另一台lvs02 上面,MASTER 改为BACKUP 优先级修改成小于Master的优先级
启动服务
systemctl start keepalived
systemctl enable keepalived
7.4.4、查看VIP是否有启动,本地测试与 VIP 是否相通,打开IE 进行测试,打开IE,输入
http://192.168.189.77 能正常打开页面, 能访问,表示配置成功。


命令查看访问


7.5 关闭nfs0126 存储,测试网站是否还能正常访问。






再把 nfa0126 主存储 启动 ,查看主节点 是否自动会接管过来。