一个简单的集群环境搭建
1、两台服务器,ip分别是192.168.1.250和192.168.1.251,都安装的是centos7操作系统;
2、要求:应用程序做集群,数据库做双主热备,附件存储在文档服务器;看起来大概像这样的结构:
3、说明:刚开始开发的时候,没有这些要求,只要一个单机版的应用程序。因为没有准备附件上传到ftp的代码,为了不改动代码,才选择了磁盘挂载的方案。
二、搭建" title="环境搭建">环境搭建
1、拿到手里的是两台裸机,用之前刻录好的CentOS7.6的系统盘做了系统。因为是core版本的iso镜像,很多工具没有,给后边的环境搭建带来不少麻烦(在服务器不能联网的情况下);
2、开始的时候,服务器不能上外网,用路由器组建一个局域网,把本地的安装包通过FileZilla上传到服务器。jdk版本是1.8(下载地址: https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html ),mysql版本是5.6(下载地址: https://dev.mysql.com/downloads/mysql/5.6.html ),nginx版本是1.18(下载地址: http://nginx.org/en/download.html )。
3、安装JDK。进入 jdk安装包所在路径,通过命令:
tar -zxvf XXX.gz
把压缩包解压,然后通过命令:
vi /etc/profile
把jdk的安装路径添加到PATH环境变量。保存退出后,执行命令:
source /etc/profile
使环境变量生效,命令运行java -version能看到jdk版本信息,则jdk安装就完成了。
4、安装mysql。安装mysql之前,先要把系统自带的数据库卸载,由于我安装的centos是core版,没有自带的mariadb,则略过卸载的步骤。
提前说一下,在连通网络的情况先执行(根据提示,少什么模块就安装什么模块)
yum -y install gcc zlib openssl pcre pcre-devel openssl-devel autoconf
如果上来就执行mysql_install_db命令,会跳出一大堆的错误信息,基本都是缺少依赖的工具包。比如出现如下错误:
FATAL ERROR: please install the following Perl modules before executing /usr/local/mysql/scripts/mysql_install_db:Data::Dumper
其实缺少的是autoconf模块。具体安装mysql的过程,就不细说了,网上教程非常详细。
5、安装nginx。这里提两点:一是在执行./configure命令的时候,一定要把--with-stream加上,后边要用到;二是centos7.6安装nginx后,没有自动做成系统服务,如果想通过service nginx start这样的命令来启动nginx,需要手动写一些配置文件,具体过程自行查找。
6、应用系统负载配置,nginx在251服务器上。
所有的负载都通过nginx来实现,同时文档服务器也是用nginx做代理。springboot开发的项目,server的端口是8080,将项目jar包分别上传到两台服务器。像这样:
192.168.1.250:8080,192.168.1.251:8080
直接上nginx的负载配置:
#user nobody;worker_processes 1;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
autoindex off;
sendfile on;
keepalive_timeout 65;
upstream lvsTest{
ip_hash;
server 192.168.1.250:8080;
server 192.168.1.251:8080;
}
server {
listen 8088;
server_name 192.168.1.251;
location / {
proxy_pass http://lvsTest;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location /fserver {
alias /usr/upload;
}
}
}
负载策略是ip_hash,防止出现session相关问题;上边一个location是用作应用程序负载,下边一个location是用作文档服务器,注意是alias。
7、数据库负载,nginx在250服务器上。配置文件:
#user nobody;worker_processes 1;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
stream{
upstream cloudsocket {
hash $remote_addr consistent;
# $binary_remote_addr;
server 192.168.1.250:3306 weight=5 max_fails=3 fail_timeout=300s;
server 192.168.1.251:3306 weight=5 max_fails=3 fail_timeout=300s;
}
server {
listen 13306;
proxy_connect_timeout 10s;
proxy_timeout 3000s;
proxy_pass cloudsocket;
}
}
代理msyql数据库,用的是stream模块,不是http了。前期如果没有安装stream模块的话,这会在stream这一行报错。
8、磁盘挂载。
程序原本是把附件存储在应用程序所在服务器本地,然后通过nginx代理来查看附件。现在做了集群后,就会出现部分文件找不到的情况。在不修改代码的前提下,决定通过nfs服务和mount操作来实现磁盘挂载。这样的话,在250服务器上运行的程序,执行附件上传后,代码里是把文件保存在本地,但是通过挂载,会把这个文件拷贝到251服务器上挂载的目录下。251服务器是被挂载服务器,250服务器是挂载服务器,那么就需要在251服务器上配置/etc/exports文件,例如:
/usr/upload 192.168.1.250(insecure,rw,sync,no_root_squash)
如果挂载过程中出现access denied错误,则需要把insecure权限加上,否则可以不加。
挂载服务器和被挂载服务器都要安装rpcbind模块和nfs模块并都需要启动。
到这里,就实现了开头部分那个结构图的要求了。
以上就是全部内容。
以上是 一个简单的集群环境搭建 的全部内容, 来源链接: utcz.com/z/518985.html