使用多台低配置服务器相互协作工作,以达到系统最高性能为目标。
不吹牛逼了,开始干活吧!
1. 安装多台虚拟机
集群需要多台服务器配合,由于硬件限制,这里以四台虚拟机为例。
1.1clone虚拟机
给一台虚拟机分配2G内存,20G硬盘,1核cpu,虚拟机使用桥接方式,如下图:
1.1.2 clone虚拟机
根据上一章节,搭建好一台虚拟机,clone成多台,我们以clone一台为例,将安装好的虚拟关机
虚拟机-》管理-》克隆-》“下一步”-》“下一步”-》“克隆类型”,选择“创建完整克隆(F)”-》“新虚拟机名称”,名称和路径不要有中文-》“完成”
等待clone完成后,被克隆的虚拟机将自动开机,接下来就是配置网卡了。
1.2 修改网卡配置
这里以一台虚拟机配置为例,余下的也这样配置
1.2.1 查看ip和mac地址
虚拟机-》编辑-》虚拟网络编辑器-》选择类型为“NAT模式”项-》点击“DHCP配置”
虚拟机-》设置-》硬件-》网络适配器-》“网络连接”下的“高级”,查看mac地址
1.2.2 修改mac地址和绑定ip
查看Mac地址和ip
使用Root用户登录Linux,进入shell终端,查看ifcfg-enoxxxxx文件
ls /etc/sysconfig/network-scripts/
需要修改的文件为 ifcfg-eno16777736(不同机子后面的数字不一样,但是都是以 ifcfg-eno 开头)
填写1.2.1查看到的ip和Mac
填写如下红色框处,填写完保存退出(执行命令 :wq )
删除备份文件和隐藏文件
删除备份文件和隐藏文件,执行如下命令:
rm /etc/sysconfig/network-scripts/ifcfg-eno16777736~
rm /etc/sysconfig/network-scripts/.ifcfg-eno16777736*
1.2.3 配置dns
填写dns
vim /etc/resolv.conf
删除自动备份和隐藏文件:
rm /etc/resolv.conf~ -rf
rm /etc/.resolv.conf* -rf
重启系统,执行命令: reboot 或者点击关机图标关机.
1.2.4 重启网络
执行命令
service network restart
如果重启失败,请自行百度解决,也可以看下我是怎么粗暴解决的,参考我抄袭的文章:
Failed to start LSB: Bring up/down networking
1.3 Ip指向站点
在《环境部署》一文中,我们已经将代码部署好,但是不同的服务器域名和ip不同,所以我们需要每个虚拟的NGINX下的conf都要修改。
1.3.1 增加ip指向
给当前站点增加ip指向,配置文件:
vim /usr/local/nginx/conf/vhost/www.sw.com.conf
1.3.2 更改default指向
vim /usr/local/nginx/conf/nginx.conf
修改root站点指向,修改包含为enable-php-thinkphp.conf , 如下图:
1.3.3 重启nginx
执行命令:
/etc/init.d/nginxrestart
此时访问ip地址,可访问到站点了,其它三台虚拟机也配置各自ip指向各自站点。
2. 安装多台物理机
多台物理机安装,将全部采用ip方式,没有域名。除了以多台物理机安装《环境搭建》方式搭建多台物理机服务器代替克隆外,其它跟安装多台虚拟机一致
3. 安装多台云服务器
多台云服务器安装和多台物理机安装一致
4. 如何分布式部署
为了部署更加接近真实环境(多台物理机或多台云服务器),这里在虚拟机上也采用ip方式进行部署演示。
4.1 资源分配
通过对虚拟的部署,我们有了四台主机,ip地址分别是192.168.218.128、192.168.218.129、192.168.218.130、192.168.218.131,四台虚拟机功能分别如下:
192.168.218.128:充当register、gateway、businessworker服务器,gateway和businessworker服务器分别开启4个进程
192.168.218.129:充当businessworker服务器,开启4个进程
192.168.218.130、192.168.218.131:充当gateway服务器,分别开启4个进程
4.2 部署第一台(register)
第一台服务器为ip地址为192.168.218.128的服务器,充当register、gateway、businessworker服务器,gateway和businessworker分别开启4个进程。
4.2.1 修改gatewayClient的register地址
修改代码 ./config/worker/config.php
在return 中返回
"register_ip_port" =>'192.168.218.128:1236',
说明:192.168.218.128 为当前服务器ip地址,1236为register监听端口,提供gateway和businessworker连接。
4.2.2 修改服务器启动参数
修改代码: ./application/worker/controller/Server.php
protected $register =true;// 是否将当前服务器配置为 register 服务器
protected $registerIpPort ='192.168.218.128:1236';// register 服务器的ip和端口(一定要填写,不管 register 是true还是false)
protected $businessWorker = true; // 是否配置为business_worker服务器
protected $businessWorkerCount = 4; // 当前business_worker服务器开启的进程数
protected $gateway = true; // 是否将当期服务器配置为gateway服务器
protected $gatewayLanIp ='192.168.218.128';// 当前gateway服务器ip地址(内网ip)
protected $gatewayWebSocket = '192.168.218.128:8082';//服务器webSocket地址和端口,提供客户端连接,一般是当前gateway服务器外网ip和端口
protected $gatewayCount = 4; // 当前gateway服务器的进程数
protected $gatewayStartPort = 2300;/*当前gateway服务器的内部通讯起始端口,如果gateway_count为4,则一般会使用2300 2301 2302 2303 4个端口作为内部通讯端口*/
4.2.3 导入数据库
编辑文件 ./config/databases.php ,把服务器地址、数据库名、用户名、密码设置成当前mysql服务器mysql对应信息。
导入sw.sql数据库。例如下图,导入到sw数据库中。
4.2.4 部署代码
将修改好后的代码部署到ip地址为192.168.218.128 的服务器上,例如,这里部署到:/home/wwwroot/SimplerWorker/下,同时进行命令:
cd /home/wwwroot/SimplerWorker/
chown -R www:www */*
chgrp -R www */*
4.3 部署第二台(businessworker)
第二台ip地址为:192.168.218.129,充当businessworker服务器,开启4个进程
4.3.1 修改gatewayClient的register地址
修改代码 ./config/worker/config.php
在return 中返回
"register_ip_port" =>'192.168.218.128:1236',
说明:192.168.218.128 为当前服务器ip地址,1236为register监听端口,提供gateway和businessworker连接。这个地址不变,表示这个businessworker服务器需要到第一台(192.168.218.128)的服务器上获取gatewayworker注册列表信息。
4.3.2 修改服务器启动参数
修改代码: ./application/worker/controller/Server.php (红色字体为修改处)
protected $register =false;// 是否将当前服务器配置为 register 服务器
protected $registerIpPort ='192.168.218.128:1236';// register 服务器的ip和端口(一定要填写,不管 register 是true还是false)
protected $businessWorker = true; // 是否配置为business_worker服务器
protected $businessWorkerCount = 4; // 当前business_worker服务器开启的进程数
protected $gateway =false; // 是否将当期服务器配置为gateway服务器
protected $gatewayLanIp ='192.168.218.128';// 当前gateway服务器ip地址(内网ip)
protected $gatewayWebSocket ='192.168.218.128:8082';// 服务器webSocket地址和端口,提供客户端连接,一般是当前gateway服务器外网ip和端口
protected $gatewayCount = 4; // 当前gateway服务器的进程数
protected $gatewayStartPort = 2300;/*当前gateway服务器的内部通讯起始端口,如果gateway_count为4,则一般会使用2300 2301 2302 2303 4个端口作为内部通讯端口*/
4.3.3 导入数据库
编辑文件 ./config/databases.php ,把服务器地址、数据库名、用户名、密码设置成当前mysql服务器mysql对应信息。
导入sw.sql数据库。例如下图,导入到sw数据库中。
4.3.4 部署代码
将修改好后的代码部署到ip地址为192.168.218.129 的服务器上,例如,这里部署到:/home/wwwroot/SimplerWorker/下。同时进行命令:
cd /home/wwwroot/SimplerWorker/
chown -R www:www */*
chgrp -R www */*
4.4 部署第三台(gateway)
第三台服务器ip地址为:192.168.218.130,充当gateway服务器,分别开启4个进程。
4.4.1 修改gatewayClient的register地址
修改代码./config/worker/config.php
在return 中返回
"register_ip_port" =>'192.168.218.128:1236',
说明:192.168.218.128 为当前服务器ip地址,1236为register监听端口,提供gateway和businessworker连接。这个地址不变,表示这个gateway服务器需要向第一台(192.168.218.128)服务器上进行连接列表信息注册。
4.4.2 修改服务器启动参数
修改代码: ./application/worker/controller/Server.php (红色字体为修改处)
protected $register = false;// 是否将当前服务器配置为 register 服务器
protected $registerIpPort ='192.168.218.128:1236';// register 服务器的ip和端口(一定要填写,不管 register 是true还是false)
protected $register =false;// 是否将当前服务器配置为 register 服务器
protected $registerIpPort ='192.168.218.128:1236';// register 服务器的ip和端口(一定要填写,不管 register 是true还是false)
protected $businessWorker = false; // 是否配置为business_worker服务器
protected $businessWorkerCount= 4; // 当前business_worker服务器开启的进程数
protected $gateway = true; // 是否将当期服务器配置为gateway服务器
protected $gatewayLanIp = '192.168.218.130';// 当前gateway服务器ip地址(内网ip)
protected $gatewayWebSocket ='192.168.218.130:8082';// 服务器webSocket地址和端口,提供客户端连接,一般是当前gateway服务器外网ip和端口
protected $gatewayCount = 4;// 当前gateway服务器的进程数
protected $gatewayStartPort =2300;/*当前gateway服务器的内部通讯起始端口,如果gateway_count为4,则一般会使用2300 2301 2302 2303 4个端口作为内部通讯端口*/
4.4.3 导入数据库
编辑文件 ./config/databases.php ,把服务器地址、数据库名、用户名、密码设置成当前mysql服务器mysql对应信息。
导入sw.sql数据库。例如下图,导入到sw数据库中。
4.4.4 部署代码
将修改好后的代码部署到ip地址为192.168.218.130 的服务器上,例如,这里部署到:/home/wwwroot/SimplerWorker/下,同时进行命令:
cd /home/wwwroot/SimplerWorker/
chown -R www:www */*
chgrp -R www */*
4.5 部署第四台(gateway)
第四台部署和第三台一样(除了ip地址不同之外)
第三台服务器ip地址为:192.168.218.131,充当gateway服务器,分别开启4个进程。
4.5.1 修改gatewayClient的register地址
修改代码 ./config/worker/config.php
在return 中返回
"register_ip_port" =>'192.168.218.128:1236',
说明:192.168.218.128 为当前服务器ip地址,1236为register监听端口,提供gateway和businessworker连接。这个地址不变,表示这个gateway服务器需要向第一台(192.168.218.128)服务器上进行连接列表信息注册。
4.5.2 修改服务器启动参数
修改代码:./application/worker/controller/Server.php (红色字体为修改处)
protected $register = false;// 是否将当前服务器配置为 register 服务器
protected $registerIpPort ='192.168.218.128:1236';// register 服务器的ip和端口(一定要填写,不管 register 是true还是false)
protected $register =false;// 是否将当前服务器配置为 register 服务器
protected $registerIpPort ='192.168.218.128:1236';// register 服务器的ip和端口(一定要填写,不管 register 是true还是false)
protected $businessWorker = false; // 是否配置为business_worker服务器
protected$businessWorkerCount = 4; // 当前business_worker服务器开启的进程数
protected $gateway = true; // 是否将当期服务器配置为gateway服务器
protected $gatewayLanIp = '192.168.218.131';// 当前gateway服务器ip地址(内网ip)
protected $gatewayWebSocket ='192.168.218.131:8082';// 服务器webSocket地址和端口,提供客户端连接,一般是当前gateway服务器外网ip和端口
protected $gatewayCount = 4;// 当前gateway服务器的进程数
protected $gatewayStartPort =2300;/*当前gateway服务器的内部通讯起始端口,如果gateway_count为4,则一般会使用2300 2301 2302 2303 4个端口作为内部通讯端口*/
4.5.3 导入数据库
编辑文件 ./config/databases.php ,把服务器地址、数据库名、用户名、密码设置成当前mysql服务器mysql对应信息。
导入sw.sql数据库。例如下图,导入到sw数据库中。
4.5.4 部署代码
将修改好后的代码部署到ip地址为192.168.218.131 的服务器上,例如,这里部署到:/home/wwwroot/SimplerWorker/下,同时进行命令:
cd /home/wwwroot/SimplerWorker/
chown -R www:www */*
chgrp -R www */*
4.6 启动服务器
我们分别启动四台服务器,先启动第一台,然后分别启动第二台,第三台。启动方式如下:
1. 使用root用户登录系统
2. 进入服务器的 /home/wwwroot/SimplerWorker/worker 目录
3. 以root执行命令
php worker_server.php start -d
第一台服务器启动成功将显示如下图所示:(都显示OK后,可以ctrl+c,此时register、businessworker、gateway以守护进程模式运行)
第二台服务器启动成功将显示如下图所示:
第三台服务器启动成功将显示如下图所示:
第四台服务器启动成功将显示如下图所示:
5. 初步测试
在其他网段,例如192.168.218.132 (需要能访问gateway服务器)下打开网页,输入: http://192.168.218.131/worker/index/index, F12打开控制台,点击网页上的“发送”按钮,将打印出 sw_user 表的信息。此时,分布式部署初步成功。
6. DNS代理
在这里,我们有两台gateway服务器,而客户端要连接服务器,就需要连接gateway服务器,两台gateway服务器并不方便客户端接入。此时,我们需要做DNS负载均衡反向代理或者LVS负载均衡反向代理。这里我们直接使用nginx服务器的反向代理为例:
负载均衡反向代理的作用:优化服务器负载,单一入口方便客户端接入,其它......
(DNS 代理我将在下一节讲解)