07
2023
04
10:44:40

kodbox 私有网盘高可用部署



推荐点击下面图片,通过本站淘宝优惠价购买:

image.png

  • 这里介绍部署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.194

    1.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 15000

    12.# 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
  • 集群操作

    redis-cli -c -h 192.168.1.194 -p 7001 -a 123456 # -c,使用集群方式登录

    • 登录集群:

  • 增加设置节点…待补充

三 NFS共享目录
  • 参考文章

  • 简介
    NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。

  • Server端IP:192.168.1.194

  1. 安装nfs和rpcbind

    yum -y install nfs-utils rpcbind

  2. 创建共享目录 mkdir /sharedata,

    chmod -Rf 755 /sharedata && chown -Rf www:www /sharedata

  3. 增加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):同步,同时将数据写入到内存与硬盘中,保证不丢失数据

  4. 配置hosts文件(略)

  5. 启动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

  6. 查看 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=30004

    2.重启nfs和rpcbind:

    service rpcbind restart
    service nfs restart

    6.2防火墙放行端口 111、2049、30001-30004

    • Client端:192.168.1.115,192.168.1.223

  7. 客户端服务器也需要安装nfs 和 rpcbind 服务,参考服务端

  8. 显示NFS服务器共享目录列表

    showmount -e 192.168.1.194

    Export list for 192.168.1.194:
    /sharedata 192.168.1.223,192.168.1.115

  9. 创建挂载目录

    mkdir /sharedata

  10. 挂载服务端的共享目录

    mount -t nfs -o nolock,nfsvers=3,vers=3 192.168.1.194:/sharedata /sharedata

    nolock — 禁用文件锁

    nfsvers=3,vers=3 — 指定使用那个版本的NFS协议

    查看挂载的状态

    mount | grep nfs

  11. 开机启动NFS服务

    systemctl enable nfs

  12. 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 (

    1. ‘DB_DEPLOY_TYPE’ => 1, // 设置分布式数据库支持

    2. ‘DB_RW_SEPARATE’ => true, // 分布式数据库的读写是否分离

    3. ‘DB_TYPE’ => ‘mysqli’, // 数据库类型

    4. ‘DB_HOST’ => ‘192.168.1.194,192.168.1.115,192.168.1.223’, // 数据库服务器地址

    5. ‘DB_NAME’ => ‘kodbox2’, // 数据库名称

    6. ‘DB_USER’ => ‘slave,slave,slave’, // 数据库用户名

    7. ‘DB_PWD’ => ‘kod’, // 数据库密码

    8. ‘DB_PORT’ => ‘3306,3306,3306’, // 数据库端口

    9. ‘DB_PREFIX’ => ‘’, // 数据表前缀

    10. // ‘DB_MASTER_NUM’ => 2
      16.);
      17.// // // redis集群
      18.$config[‘cache’][‘redis’][‘mode’] = ‘cluster’; // slave、sentinel、cluster 第二种(哨兵模式)暂不支持
      19.$config[‘cache’][‘redis’][‘server’] = array(

    11. ‘192.168.1.194:7001’,

    12. ‘192.168.1.194:7002’,

    13. ‘192.168.1.115:7003’,

    14. ‘192.168.1.115:7004’,

    15. ‘192.168.1.223:7005’,

    16. ‘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 —init

    vim /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.{

    1. listen 194;

    2. server_name 192.168.1.194;

    3. index index.php index.html index.htm default.php default.htm;

    4. root /www/wwwroot/proxy2.com;


    5. PHP-INFO-START PHP引用配置,可以注释或修改

    6. include enable-php-00.conf;

    7. PHP-INFO-END


    8. REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效

    9. include /www/server/panel/vhost/rewrite/proxy2.com.conf;

    10. REWRITE-END


    11. location / {

    12. proxy_pass http://kodCommon94;

    13. proxy_set_header Host $host:$server_port;

    14. index index.php index.html index.htm;

    15. proxy_redirect off;

    16. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    17. proxy_set_header X-Real-IP $remote_addr;

    18. proxy_http_version 1.1;

    19. proxy_set_header Connection “”;

    20. add_header backendIP $upstream_addr;

    21. add_header backendCode $upstream_status;

    22. proxy_headers_hash_max_size 51200;

    23. proxy_headers_hash_bucket_size 6400;

    24. 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;}

    25. }

    26. access_log /www/wwwlogs/proxy2.com.log main;

    27. error_log /www/wwwlogs/proxy2.com.error.log info;
      42.}
      43.upstream kodCommon94{

    28. server 192.168.1.194:94 weight=1;

    29. server 192.168.1.115:94 weight=1;

    30. server 192.168.1.223:94 weight=1;
      47.}
      48.upstream kodKeep94{

    31. server 192.168.1.194:94;

    32. server 192.168.1.115:94;

    33. server 192.168.1.223:94;

    34. consistent_hash $kodUser;
      53.}


本文链接:https://www.hqyman.cn/post/3806.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:





休息一下,本站随机推荐观看栏目:


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

您的IP地址是: