准备工作: 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 主存储 启动 ,查看主节点 是否自动会接管过来。
![]()