这里介绍部署3台程序服务器做集群,再配置一台前端服务器做代理转发。3台程序服务器都是一样的系统环境(建议系统使用同一个集成环境镜像来完成安装)
系统环境要求为
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
系统:centos 7.6(推荐centos7.x)
web环境:安装宝塔面板
然后登陆面板安装Nginx1.16 + MySQL5.7 + PHP7.3 + redis.
PHP需要安装redis扩展
PHP禁用函数里,删除shell_exec、exec
集群部署具体过程主要分5个步骤说明
一 MySQL主从架构
二 redis集群
三 NFS共享目录
四 kodbox部署和配置
五 前端服务器使用Nginx反向代理进行转发
一 MySQL主从架构
参考文章
选择一主多从模式部署准备三台服务器,都安装了MySQL5.7.
192.168.1.194(主)开放3306端口
192.168.1.115(从)
192.168.1.223(从)
实现步骤:
1. 配置master主服务器
在配置文件(/etc/my.cnf)加入如下值
server-id=1 //配置server-id,让主服务器有唯一ID号
log-bin=mysql-bin //打开Mysql日志,日志格式为二进制
skip-name-resolve //关闭名称解析,(非必须)
2. 创建复制帐号slave
在 Master 的数据库中建立一个备份帐户:
每个 slave 使用标准的 MySQL 用户名和密码连接 master 。进行复制操作的用户会授予 REPLICATION SLAVE 权限。grant replication slave,replication client on . to slave@’192.168.%.%’ identified by ‘kod’;
3.查看主服务器状态
在 Master 的数据库执行命令查看主服务器二进制日志状态及位置号。
show master status
4 配置slave从服务器
对 slave 进行配置,打开中继日志,指定唯一servr ID,设置只读权限。在配置文件加入如下值:
1.server-id=2 //配置server-id,让从服务器有唯一ID号
2.relay_log = mysql-relay-bin //打开Mysql日志,日志格式为二进制
3.read_only = 1 //设置只读权限
4.log_bin = mysql-bin //开启从服务器二进制日志
5.log_slave_updates = 1 //使得更新的数据写进二进制日志中另外一台从服务器操作类似,省略。
5 启动从服务器复制线程
让 slave 连接 master ,并开始重做 master 二进制日志中的事件。master_log_file 和 master_log_pos 由上面步骤中show master status 查看,在从服务器MySQL执行以下命令:
1.mysql> change master to master_host=’192.168.1.194’,
2.>master_user=’slave’, >master_password=’kod’,
3.>master_log_file=’mysql-bin.000001’,
4.>master_log_pos=413;另外一台从服务器操作类似,省略。
6 查看从服务器状态
可使用SHOW SLAVE STATUS\G;查看从服务器状态,也可用show processlist \G;查看当前复制状态:
Slave_IO_Running: Yes //IO线程正常运行
Slave_SQL_Running: Yes //SQL线程正常运行
二 redis集群
参考文章
环境准备:
三台机器,分别开放两个redis服务端口和一个客户端通讯端口192.168.1.194 端口:7001,7002 17001
192.168.1.115 端口:7003,7004 17003
192.168.1.223 端口:7005,7006 17005修改配置文件:
192.168.1.1941.mkdir /www/server/redis/cluster
2.cp /www/server/redis/redis.conf /www/server/redis/cluster/redis_7001.conf
3.cp /www/server/redis/redis.conf /www/server/redis/cluster/redis_7002.conf
4.chown -R redis:redis /www/server/redis # mkdir -p /tmp/{redis_7001,redis_7002} && chown -R redis:redis /tmp/{redis_7001,redis_7002}1.# vim /www/server/redis/cluster/redis_7001.conf
2.bind 192.168.1.194 port 7001
3.daemonize yes
4.pidfile “/var/run/redis_7001.pid”
5.logfile “/www/server/redis/cluster/redis_7001.log”
6.dir “/tmp/redis_7001”
7.masterauth 123456
8.requirepass 123456
9.appendonly yes
10.cluster-enabled yes
11.cluster-config-file nodes_7001.conf cluster-node-timeout 1500012.# vim /www/server/redis/cluster/redis_7002.conf
13.bind 192.168.1.194 port 7002
14.daemonize yes
15.pidfile “/var/run/redis_7002.pid”
16.logfile “/www/server/redis/cluster/redis_7002.log”
17.dir “/tmp/redis_7002”
18.masterauth “123456”
19.requirepass “123456”
20.appendonly yes
21.cluster-enabled yes
22.cluster-config-file nodes_7002.conf
23.cluster-node-timeout 15000
其它两台机器配置与192.168.1.194配置类似,只是端口不同,此处省略
启动redis服务和查看日志:
1./www/server/redis/src/redis-server /www/server/redis/cluster/redis_7001.conf
2.tail -f /www/server/redis/cluster/redis_7001.log
3./www/server/redis/src/redis-server /www/server/redis/cluster/redis_7002.conf
4.# tail -f /www/server/redis/cluster/redis_7002.log
其它两台机器配置与192.168.1.194类似,此处省略
创建集群:
redis-cli -a 123456 —cluster create 192.168.1.194:7001 192.168.1.194:7002 192.168.1.115:7003 192.168.1.115:7004 192.168.1.223:7005 192.168.1.223:7006 —cluster-replicas 1
Can I set the above configuration? (type ‘yes’ to accept): yes
输入yes,接受上面配置
执行成功可以知道,
192.168.1.194:7001是master,它的slave是192.168.1.194:7004192.168.1.115:7003是master,它的slave是192.168.1.115:7006192.168.1.223:7005是master,它的slave是192.168.1.223:7002
自动生成nodes.conf文件:
# ls /tmp/redis_7001/ appendonly.aof dump.rdb nodes-7001.conf
三 NFS共享目录
参考文章
简介
NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。Server端IP:192.168.1.194
安装nfs和rpcbind
yum -y install nfs-utils rpcbind
创建共享目录 mkdir /sharedata,
chmod -Rf 755 /sharedata && chown -Rf www:www /sharedata
增加nfs配置文件
vim /etc/exports
/sharedata 192.168.1.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
exportfs -rv — 加载配置生效,等价于重启 /etc/init.d/nfs reload
/sharedata:共享文件夹
192.168.1.0/24:可以挂载服务器目录的客户端ip网段192.168.1.0,子网掩码255.255.255.0
(all_squash):不管访问NFS server共享目录的用户身份如何,它的权限都将被压缩成匿名用户。
(anonuid=1000,anongid=1000):UID和GID,这里代表是www
(rw):该客户端对共享的文件具有读写权限
(sync):同步,同时将数据写入到内存与硬盘中,保证不丢失数据配置hosts文件(略)
启动nfs和rpcbind服务
必须先启动rpcbind,再启动nfs,才能让NFS在rpcbind上注册成功service rpcbind start
service nfs start查看启动状态:
service rpcbind status
service nfs status注意,RPC的状态是Active: active (running);而NFS的状态是Active: active (exited)。
查看自己共享的服务:
showmount -e
/sharedata 192.168.1.223,192.168.1.115
查看 RPC 服务的注册状况
rpcinfo -p localhost
NFS服务使用的111和2049端口是固定的,mountd端口是动态的,需要固定,然后在防火墙放行。
6.1 固定端口
vi /etc/sysconfig/nfs
1.添加:
RQUOTAD_PORT=30001
LOCKD_TCPPORT=30002
LOCKD_UDPPORT=30002
MOUNTD_PORT=30003
STATD_PORT=300042.重启nfs和rpcbind:
service rpcbind restart
service nfs restart6.2防火墙放行端口 111、2049、30001-30004
Client端:192.168.1.115,192.168.1.223
客户端服务器也需要安装nfs 和 rpcbind 服务,参考服务端
显示NFS服务器共享目录列表
showmount -e 192.168.1.194
Export list for 192.168.1.194:
/sharedata 192.168.1.223,192.168.1.115创建挂载目录
mkdir /sharedata
挂载服务端的共享目录
mount -t nfs -o nolock,nfsvers=3,vers=3 192.168.1.194:/sharedata /sharedata
nolock — 禁用文件锁
nfsvers=3,vers=3 — 指定使用那个版本的NFS协议
查看挂载的状态
mount | grep nfs
开机启动NFS服务
systemctl enable nfs
NFS开机自动挂载
系统服务未完全启动,挂载会失败,在系统启动以后,再挂载
chmod +x /etc/rc.d/rc.local
vim /etc/rc.d/rc.local
sleep 30
mount -t nfs 192.168.1.194:/sharedata /sharedata
四 kodbox部署和配置
分别部署kodbox到3个程序服务器上(站点目录最好是相同的),并且./config/setting_user.php这样写
1.$config[‘cache’][‘sessionType’] = ‘redis’;
2.$config[‘cache’][‘cacheType’] = ‘redis’;
3.$config[‘cache’][‘redis’][‘auth’] = ‘123456’; //redis连接密码
4.// mysql集群
5.$config[‘database’] = array (‘DB_DEPLOY_TYPE’ => 1, // 设置分布式数据库支持
‘DB_RW_SEPARATE’ => true, // 分布式数据库的读写是否分离
‘DB_TYPE’ => ‘mysqli’, // 数据库类型
‘DB_HOST’ => ‘192.168.1.194,192.168.1.115,192.168.1.223’, // 数据库服务器地址
‘DB_NAME’ => ‘kodbox2’, // 数据库名称
‘DB_USER’ => ‘slave,slave,slave’, // 数据库用户名
‘DB_PWD’ => ‘kod’, // 数据库密码
‘DB_PORT’ => ‘3306,3306,3306’, // 数据库端口
‘DB_PREFIX’ => ‘’, // 数据表前缀
// ‘DB_MASTER_NUM’ => 2
16.);
17.// // // redis集群
18.$config[‘cache’][‘redis’][‘mode’] = ‘cluster’; // slave、sentinel、cluster 第二种(哨兵模式)暂不支持
19.$config[‘cache’][‘redis’][‘server’] = array(‘192.168.1.194:7001’,
‘192.168.1.194:7002’,
‘192.168.1.115:7003’,
‘192.168.1.115:7004’,
‘192.168.1.223:7005’,
‘192.168.1.223:7006’,
26.);
部署配置选择了前面的MySQL主从和redis集群,并且需要在后台存储管理增加NFS共享目录/sharedata,才能共享存储。
代码上的优化点:
程序更新涉及多个站点,设计代码只更新一次;
后台存储管理调整后,前端显示更新不及时;(删除配置后刷新还有);
插件安装删除的同步。
五 前端服务器使用Nginx反向代理
前端服务器可以是另外找的一台服务器,也可也把上面3台服务器之一当作前端转发服务器。要求是编译安装Nginx,如果使用宝塔面板,下载Nginx时请选择编译安装。模块安装过程参考
Nginx需要编译安装consistent_hash模块
如果使用宝塔面板。可以这样安装:
cd /www/server
git clone https://github.com/replay/ngx_http_consistent_hash
cd ngx_http_consistent_hash && git submodule update —initvim /www/server/panel/install/nginx.sh
找到./configure 这里后面添加—add-module=/www/server/ngx_http_consistent_hash
./configure —user=www —group=www —prefix=${Setup_Path} ${ENABLE_LUA} —add-module=/www/server/ngx_http_consistent_hash
执行 nginx -v 查看版本号,如果是nginx 1.16,则执行
sh /www/server/panel/install/nginx.sh install 1.16
Nginx反向代理配置
1.server
2.{listen 194;
server_name 192.168.1.194;
index index.php index.html index.htm default.php default.htm;
root /www/wwwroot/proxy2.com;
PHP-INFO-START PHP引用配置,可以注释或修改
include enable-php-00.conf;
PHP-INFO-END
REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
include /www/server/panel/vhost/rewrite/proxy2.com.conf;
REWRITE-END
location / {
proxy_pass http://kodCommon94;
proxy_set_header Host $host:$server_port;
index index.php index.html index.htm;
proxy_redirect off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_http_version 1.1;
proxy_set_header Connection “”;
add_header backendIP $upstream_addr;
add_header backendCode $upstream_status;
proxy_headers_hash_max_size 51200;
proxy_headers_hash_bucket_size 6400;
30.if ($kodRouter ~ “explorer/upload/fileUpload”){ proxy_pass http://kodKeep94;}
31.if ($kodRouter ~ “explorer/upload/serverDownload”){ proxy_pass http://kodKeep94;}
32.if ($kodRouter ~ “explorer/share/fileUpload”){ proxy_pass http://kodKeep94;}
33.if ($kodRouter ~ “explorer/index/fileOut”){ proxy_pass http://kodKeep94;}
34.if ($kodRouter ~ “explorer/share/fileOut”){ proxy_pass http://kodKeep94;}
35.if ($kodRouter ~ “explorer/history/fileOut”){ proxy_pass http://kodKeep94;}
36.if ($kodRouter ~ “explorer/share/file”){ proxy_pass http://kodKeep94;}
37.if ($kodRouter ~ “explorer/index/zipDownload”){ proxy_pass http://kodKeep94;}
38.if ($kodRouter ~* “explorer/share/zipDownload”){ proxy_pass http://kodKeep94;}}
access_log /www/wwwlogs/proxy2.com.log main;
error_log /www/wwwlogs/proxy2.com.error.log info;
42.}
43.upstream kodCommon94{server 192.168.1.194:94 weight=1;
server 192.168.1.115:94 weight=1;
server 192.168.1.223:94 weight=1;
47.}
48.upstream kodKeep94{server 192.168.1.194:94;
server 192.168.1.115:94;
server 192.168.1.223:94;
consistent_hash $kodUser;
53.}
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://hqyman.cn/post/3806.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~