如何在linux服务器上搭建集群
概念:多台服务器同时对外提供服务
优点:
1.高可用
2.解决单个物理服务的上线
常用的集群架构:
主从架构(master-slave)(DB)
负载均衡(应用服务器Tomcat)
主从架构(master-slave)(DB)
-
首先实现mysql读写分离需要解决的问题
a)无法通过精确保证读走从机,写走主机;
b)通过程序访问数据库时,url不能直接写死一个DB服务器的IP
解决方案:使用mycat中间件
-
具体实现步骤:
-
首先从母机克隆一个服务器起名mycat
-
修改ens-37 配置一个新的IP
-
安装Mycat中间件
从官网下载mycat
先安装wget命令插件 yum install -y wget
执行 wget http://dl.mycat.io/1.6.7.1/Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz 下载
-
执行 tar -zxvf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz 解压缩mycat
-
执行 mv mycat /usr/ 移动到usr目录下
-
配置mycat的环境变量
执行 vim .bash_profile 配置信息如下:
export JAVA_HOME=/usr/jdk1.8.0_171
export MYCAT_HOME=/usr/mycat
export PATH=MYCAT_HOME/bin:$PATH
执行 source .bash_profile
mycat
如上最后一行显示配置成功
-
配置mycat中conf下的配置文件schema.xml
执行 vim /usr/mycat/conf/schema.xml
删除schema标签里所有的信息
输入如下信息:
<!-- 定义MyCat的逻辑库 --> <schema name="给mycat起的逻辑名称" checkSQLschema="false" sqlMaxLimit="100" dataNode="testNode"></schema> <!-- 定义MyCat的数据节点 --> <dataNode name="testNode" dataHost="dtHost" database="真是数据库的名称" /> <dataHost name="dtHost" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <!-- can have multi write hosts --> <writeHost host="hostM1" url="192.168.28.128:3306" user="root" password="root"> <!-- can have multi read hosts --> <readHost host="hostS1" url="192.168.28.129:3306" user="root" password="root" /> </writeHost> </dataHost>
-
配置登陆mycat的权限
执行vim server.xml
删除mycat标签中的所有信息
输入信息如下:
<system> <!-- 这里配置的都是一些系统属性,可以自己查看mycat文--> <property name="defaultSqlParser">druidparser</property> <property name="charset">utf8mb4</property> </system> <user name="root"> <property name="password">root</property> <property name="schemas">mycat对应的逻辑名</property> </user>
-
执行 mycat console 前台启动mycat
启动报错:启动超时
解决方法:
修改conf里的wrapper.conf配置文件,修改里面的超时时间
wrapper.startup.timeout=7200 #2小时
-
成功
负载均衡(应用服务器Tomcat)
-
单节点应用服务器存在的问题
a)当单个应用服务器宕机时,整个网站瘫痪无法提供相应的服务
b)当大量用户并发访问应用服务器时,服务器会因为负载过重,宕机,无法对外提供服务器
解决方案:搭建集群解决单节点问题
-
如何做到负载均衡的问题
使用nginx中间件,nginx是一个高性能的HTTP和反向代理web服务器;
-
负载均衡搭建步骤
-
从母机克隆三台服务器并修改静态IP
母机里应该有tomcat
-
使用SCRT连接三台服务器
-
修改服务器index.jsp便于测试观察是否搭建成功
-
克隆nginx服务器修改静态IP 连接SCRT
-
上传nginx的安装包 并解压
-
手工编译nginx 通过 ./configure 初始化编译环境
报错:
解决方案:
因为nginx时c语言编写需要安装gcc c语言编译环境
执行 yum -y install gcc
-
安装完成之后再执行 ./configure
报错
解决方案:
安装pcre-devel
执行 yum -y install pcre-devel
安装zlib-devel
执行 yum -y install zlib-devel
-
./configure
成功
-
编译并安装nginx
执行 make && make install
默认安装位置 : /usr/local/nginx
-
启动nginx
执行 cd /usr/local/nginx/sbin
执行 ./nginx
-
启动成功访问
-
关闭nginx
./nginx -s stop
-
在nginx配置tomcat服务器的负载均衡
-
配置nginx管理的tomcat
-
进入nginx的conf目录下
执行 vim nginx.conf
-
将一下配置信息复制到server上面:
upstream tomcat-servers { #ip_hash; server 192.168.56.204:8989;//需要负载均衡的服务器IP server 192.168.56.205:8989; server 192.168.56.206:8989; }
-
配置访问nginx时的跳转路径
location / { proxy_pass http://tomcat-servers; proxy_redirect off; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_next_upstream http_502 http_504 error timeout invalid_header; }
-
-
测试
成功 nginx 默认的负载均衡方式时轮询
-
补充:负载均衡的策略
-
轮询 按照固定顺序
upstream tomcat-servers { #ip_hash; server 192.168.56.204:8989;//需要负载均衡的服务器IP server 192.168.56.205:8989; server 192.168.56.206:8989; }
-
IP hash 根据访问的IP(数字) % tomcat的数量 得到数字 数字决定请求到哪个服务器
upstream tomcat-servers { ip_hash; server 192.168.56.204:8989;//需要负载均衡的服务器IP server 192.168.56.205:8989; server 192.168.56.206:8989; }
-
weight 根据对应的权重 决定优先级 权重越大 优先级越大
upstream tomcat-servers { #ip_hash; server 192.168.56.204:8989 wegiht=数字; //需要负载均衡的服务器IP wegiht设定权重访问优先级 server 192.168.56.205:8989 wegiht=数字; server 192.168.56.206:8989 wegiht=数字; }
-
least_conn 最少连接方式
-
fair 大数据用 需要安装第三方插件 按照服务器端的响应时间来分配请求,响应时间短的优先分配
-
url_hash 需要安装第三方插件 根据地址按照相应的算法来计算
server 192.168.56.204:8989 wegiht=数字; //需要负载均衡的服务器IP wegiht设定权重访问优先级
server 192.168.56.205:8989 wegiht=数字;
server 192.168.56.206:8989 wegiht=数字;
}
-
least_conn 最少连接方式
-
fair 大数据用 需要安装第三方插件 按照服务器端的响应时间来分配请求,响应时间短的优先分配
-
url_hash 需要安装第三方插件 根据地址按照相应的算法来计算