翼度科技»论坛 云主机 LINUX 查看内容

Keepalived+HAProxy基于ACL实现单IP多域名负载功能

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18


  • 编译安装 HAProxy 新版 LTS 版本,编译安装 Keepalived
  • 开启HAProxy多线程,线程数与CPU核心数保持一致,并绑定CPU核心
  • 因业务较多避免配置文件误操作,需要按每业务一个配置文件并统一保存至/etc/haproxy/conf.d目录中
  • 基于ACL实现单IP多域名负载功能,两个域名的业务: www.yanlinux.org 和 www.yanlinux.edu
  • 实现MySQL主从复制
  • 对 www.yanlinux.edu 域名基于HAProxy+Nginx+Tomcat+MySQL,并实现Jpress的JAVA应用
  • 对 www.yanlinux.org 域名基于HAProxy+Nginx+PHP+MySQL+Redis,实现phpMyadmin的PHP应用,并实现Session会话保持统一保存到Redis
1 DNS服务器配置

在10.0.0.7主机上搭建www.yanlinux.org(VIP:10.0.0.100)和www.yanlinux.edu(VIP:10.0.0.200)的DNS解析。
配置的关键:

  • 在主配置文件/etc/named.conf中要将listen-on port 53 { 127.0.0.1; }中的127.0.0.1改为localhost;还需要将allow-query     { localhost; };前面加上//注释掉,或者将其中的localhost改为any,或者在后面加上各个网段信息。
  • 各个域名解析库文件的权限应改为641,属组为named
  1. #利用脚本自动搭建www.yanlinux.org的dns解析配置
  2. [root@dns ~]$ cat install_dns.sh
  3. #!/bin/bash
  4. DOMAIN=yanlinux.org
  5. HOST=www
  6. HOST_IP=10.0.0.100
  7. CPUS=`lscpu |awk '/^CPU\(s\)/{print $2}'`
  8. . /etc/os-release
  9. color () {
  10.     RES_COL=60
  11.     MOVE_TO_COL="echo -en \\033[${RES_COL}G"
  12.     SETCOLOR_SUCCESS="echo -en \\033[1;32m"
  13.     SETCOLOR_FAILURE="echo -en \\033[1;31m"
  14.     SETCOLOR_WARNING="echo -en \\033[1;33m"
  15.     SETCOLOR_NORMAL="echo -en \E[0m"
  16.     echo -n "$1" && $MOVE_TO_COL
  17.     echo -n "["
  18.     if [ $2 = "success" -o $2 = "0" ] ;then
  19.         ${SETCOLOR_SUCCESS}
  20.         echo -n $"  OK  "   
  21.     elif [ $2 = "failure" -o $2 = "1"  ] ;then
  22.         ${SETCOLOR_FAILURE}
  23.         echo -n $"FAILED"
  24.     else
  25.         ${SETCOLOR_WARNING}
  26.         echo -n $"WARNING"
  27.     fi
  28.     ${SETCOLOR_NORMAL}
  29.     echo -n "]"
  30.     echo
  31. }
  32. install_dns () {
  33.     if [ $ID = 'centos' -o $ID = 'rocky' ];then
  34.             yum install -y  bind bind-utils
  35.         elif [ $ID = 'ubuntu' ];then
  36.         color "不支持Ubuntu操作系统,退出!" 1
  37.         exit
  38.             #apt update
  39.             #apt install -y  bind9 bind9-utils
  40.         else
  41.             color "不支持此操作系统,退出!" 1
  42.             exit
  43.         fi
  44.    
  45. }
  46. config_dns () {
  47.     sed -i -e '/listen-on/s/127.0.0.1/localhost/' -e '/allow-query/s/localhost/any/' /etc/named.conf
  48.     cat >>         /etc/named.rfc1912.zones <<EOF
  49. zone "$DOMAIN" IN {
  50.     type master;
  51.     file  "$DOMAIN.zone";
  52. };
  53. EOF
  54.    cat > /var/named/$DOMAIN.zone <<EOF
  55. \$TTL 1D
  56. @        IN SOA        master admin.$DOMAIN (
  57.                                         1        ; serial
  58.                                         1D        ; refresh
  59.                                         1H        ; retry
  60.                                         1W        ; expire
  61.                                         3H )        ; minimum
  62.                 NS         master
  63. master      A    `hostname -I`         
  64. $HOST             A    $HOST_IP
  65. EOF
  66.         #修改权限和属组
  67.    chmod 640 /var/named/$DOMAIN.zone
  68.    chgrp named /var/named/$DOMAIN.zone
  69. }
  70. start_service () {
  71.     systemctl enable --now named
  72.         systemctl is-active named.service
  73.         if [ $? -eq 0 ] ;then
  74.         color "DNS 服务安装成功!" 0  
  75.     else
  76.         color "DNS 服务安装失败!" 1
  77.         exit 1
  78.     fi   
  79. }
  80. install_dns
  81. config_dns
  82. start_service
  83. [root@dns ~]$ sh install_dns.sh
  84. #yanlinux.org.zone区域数据文件信息
  85. [root@dns ~]$ cat /var/named/yanlinux.org.zone
  86. $TTL 1D
  87. @        IN SOA        master admin.yanlinux.org (
  88.                                         1        ; serial
  89.                                         1D        ; refresh
  90.                                         1H        ; retry
  91.                                         1W        ; expire
  92.                                         3H )        ; minimum
  93.                 NS         master
  94. master      A    10.0.0.7         
  95. www             A    10.0.0.100
  96. #然后拷贝yanlinux.org.zone区域子配置文件创建yanlinux.edu.zone区域子配置文件.若是自己重新创建yanlinux.edu.zone子配置文件,创建完以后需要将子配置文件的文件权限改为640以及属组改为named
  97. [root@dns ~]$ cd /var/named
  98. [root@dns named]$ cp -a yanlinux.org.zone yanlinux.edu.zone
  99. #修改yanlinux.edu对应的信息
  100. [root@dns named]$ vi yanlinux.edu.zone
  101. $TTL 1D
  102. @        IN SOA        master admin.yanlinux.edu (
  103.                                         1        ; serial
  104.                                         1D        ; refresh
  105.                                         1H        ; retry
  106.                                         1W        ; expire
  107.                                         3H )        ; minimum
  108.                 NS         master
  109. master      A    10.0.0.7
  110. www             A    10.0.0.200
  111. #两个域名对应的子配置文件已经创建好,然后在/etc/named.rfc1912.zones中添加区域子配置文件的信息
  112. [root@dns ~]$ vi /etc/named.rfc1912.zones
  113. ......
  114. #添加一下信息
  115. zone "yanlinux.org" IN {
  116.     type master;
  117.     file  "yanlinux.org.zone";
  118. };
  119. zone "yanlinux.edu" IN {
  120.     type master;
  121.     file  "yanlinux.edu.zone";
  122. };
  123. #重新加载配置信息
  124. [root@dns ~]$ rndc reload
  125. server reload successful
  126. [root@dns ~]$ dig www.yanlinux.org
  127. ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7 <<>> www.yanlinux.org
  128. ;; global options: +cmd
  129. ;; Got answer:
  130. ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56759
  131. ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
  132. ;; OPT PSEUDOSECTION:
  133. ; EDNS: version: 0, flags:; MBZ: 0x0005, udp: 4096
  134. ;; QUESTION SECTION:
  135. ;www.yanlinux.org.                IN        A
  136. ;; ANSWER SECTION:
  137. www.yanlinux.org.        5        IN        A        10.0.0.100
  138. ;; AUTHORITY SECTION:
  139. yanlinux.org.                5        IN        NS        master.yanlinux.org.
  140. ;; ADDITIONAL SECTION:
  141. master.yanlinux.org.        5        IN        A        10.0.0.7
  142. ;; Query time: 0 msec
  143. ;; SERVER: 10.0.0.2#53(10.0.0.2)
  144. ;; WHEN: Wed Mar 08 21:48:00 CST 2023
  145. ;; MSG SIZE  rcvd: 98
  146. [root@dns ~]$ dig www.yanlinux.edu
  147. ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7 <<>> www.yanlinux.edu
  148. ;; global options: +cmd
  149. ;; Got answer:
  150. ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19598
  151. ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
  152. ;; OPT PSEUDOSECTION:
  153. ; EDNS: version: 0, flags:; MBZ: 0x0005, udp: 4096
  154. ;; QUESTION SECTION:
  155. ;www.yanlinux.edu.                IN        A
  156. ;; ANSWER SECTION:
  157. www.yanlinux.edu.        5        IN        A        10.0.0.200
  158. ;; AUTHORITY SECTION:
  159. yanlinux.edu.                5        IN        NS        master.yanlinux.edu.
  160. ;; ADDITIONAL SECTION:
  161. master.yanlinux.edu.        5        IN        A        10.0.0.7
  162. ;; Query time: 0 msec
  163. ;; SERVER: 10.0.0.2#53(10.0.0.2)
  164. ;; WHEN: Wed Mar 08 21:48:06 CST 2023
  165. ;; MSG SIZE  rcvd: 98
复制代码

  • 部署nfs备份服务器
  1. [root@internet ~]$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
  2. BOOTPROTO="static"
  3. NAME="eth0"
  4. DEVICE="eth0"
  5. IPADDR=10.0.0.17
  6. PREFIX=24
  7. GATEWAY=10.0.0.2
  8. DNS1=10.0.0.7  #改成DNS服务器的IP
  9. #DNS2=114.114.114.114
  10. ONBOOT="yes"
  11. #重启网络服务
  12. [root@internet ~]$ systemctl restart network
  13. [root@internet network-scripts]$ cat /etc/resolv.conf
  14. # Generated by NetworkManager
  15. nameserver 10.0.0.7
  16. #测试解析
  17. [root@internet ~]$ host www.baidu.com
  18. www.baidu.com is an alias for www.a.shifen.com.
  19. www.a.shifen.com has address 36.152.44.95
  20. www.a.shifen.com has address 36.152.44.96
  21. [root@internet ~]$ dig www.yanlinux.org
  22. ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7 <<>> www.yanlinux.org
  23. ;; global options: +cmd
  24. ;; Got answer:
  25. ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19011
  26. ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
  27. ;; OPT PSEUDOSECTION:
  28. ; EDNS: version: 0, flags:; udp: 4096
  29. ;; QUESTION SECTION:
  30. ;www.yanlinux.org.                IN        A
  31. ;; ANSWER SECTION:
  32. www.yanlinux.org.        86400        IN        A        10.0.0.100
  33. ;; AUTHORITY SECTION:
  34. yanlinux.org.                86400        IN        NS        master.yanlinux.org.
  35. ;; ADDITIONAL SECTION:
  36. master.yanlinux.org.        86400        IN        A        10.0.0.7
  37. ;; Query time: 0 msec
  38. ;; SERVER: 10.0.0.7#53(10.0.0.7)
  39. ;; WHEN: Thu Mar 09 10:40:06 CST 2023
  40. ;; MSG SIZE  rcvd: 98
  41. [root@internet ~]$ dig www.yanlinux.edu
  42. ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7 <<>> www.yanlinux.edu
  43. ;; global options: +cmd
  44. ;; Got answer:
  45. ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64928
  46. ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
  47. ;; OPT PSEUDOSECTION:
  48. ; EDNS: version: 0, flags:; udp: 4096
  49. ;; QUESTION SECTION:
  50. ;www.yanlinux.edu.                IN        A
  51. ;; ANSWER SECTION:
  52. www.yanlinux.edu.        86400        IN        A        10.0.0.200
  53. ;; AUTHORITY SECTION:
  54. yanlinux.edu.                86400        IN        NS        master.yanlinux.edu.
  55. ;; ADDITIONAL SECTION:
  56. master.yanlinux.edu.        86400        IN        A        10.0.0.7
  57. ;; Query time: 0 msec
  58. ;; SERVER: 10.0.0.7#53(10.0.0.7)
  59. ;; WHEN: Thu Mar 09 10:40:11 CST 2023
  60. ;; MSG SIZE  rcvd: 98
复制代码

  • 测试是否主备同步数据
  1. [root@NFS ~]$ yum -y install nfs-utils
  2. [root@NFS ~]$ systemctl enable --now nfs-server.service
  3. #创建用于传输的用户
  4. [root@NFS ~]$ groupadd -g 666 www
  5. [root@NFS ~]$ useradd -u 666 www -g 666
  6. #创建NFS共享文件夹
  7. [root@NFS ~]$ mkdir /data/www -p
  8. [root@NFS ~]$ chown -R www. /data/www/
  9. [root@NFS ~]$ mkdir /data/web2
  10. [root@NFS ~]$ chown -R www.www /data/web2/
  11. #添加共享配置
  12. [root@NFS ~]$ vi /etc/exports
  13. /data/www *(rw,all_squash,anonuid=666,anongid=666) #具有读写权限,所有远程用户映射为666对应的用户
  14. /data/web2 *(rw,all_squash,anonuid=666,anongid=666)
  15. #重启
  16. [root@NFS ~]$ systemctl restart nfs-server.service
  17. [root@NFS ~]$ showmount -e 10.0.0.68
  18. Export list for 10.0.0.68:
  19. /data/web2 *
  20. /data/www  *
  21. #下载sersync,实现数据实时备份同步到NFS备份服务器
  22. #下载sersync,解压,设置PATH变量
  23. [root@NFS ~]$ wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz
  24. [root@NFS ~]$ tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz
  25. [root@NFS ~]$ cp -a GNU-Linux-x86/ /usr/local/sersync
  26. [root@NFS ~]$ echo "PATH=/usr/local/sersync:$PATH" > /etc/profile.d/sersync.sh
  27. [root@NFS ~]$ source /etc/profile.d/sersync.sh
  28. #生成验证文件
  29. [root@NFS ~]$ echo lgq123456 > /etc/rsync.pas
  30. [root@NFS ~]$ chmod 600 /etc/rsync.pas
  31. #备份sersync配置文件,修改配置文件
  32. [root@NFS ~]$ cp -a /usr/local/sersync/confxml.xml{,.bak}
  33. ##web1(可道云)共享业务配置
  34. [root@NFS ~]$ vi /usr/local/sersync/confxml.xml
  35. 1 <?xml version="1.0" encoding="ISO-8859-1"?>
  36.   2 <head version="2.5">
  37.   3     <host hostip="localhost" port="8008"></host>
  38.   4     <debug start="false"/>
  39.   5     <fileSystem xfs="false"/>
  40.   6     <filter start="false">
  41.   7     <exclude expression="(.*)\.svn"></exclude>
  42.   8     <exclude expression="(.*)\.gz"></exclude>
  43.   9     <exclude expression="^info/*"></exclude>
  44. 10     <exclude expression="^static/*"></exclude>
  45. 11     </filter>
  46. 12     <inotify>
  47. 13     <delete start="true"/>
  48. 14     <createFolder start="true"/>
  49. 15     <createFile start="false"/>
  50. 16     <closeWrite start="true"/>
  51. 17     <moveFrom start="true"/>
  52. 18     <moveTo start="true"/>
  53. 19     <attrib start="true"/> ##修改此行为true,文件属性变化后也会同步
  54. 20     <modify start="false"/>
  55. 21     </inotify>
  56. 22
  57. 23     <sersync>
  58. 24     <localpath watch="/data/www"> ##修改此行,需要同步的源目录
  59. 25         <remote ip="10.0.0.48" name="backup"/> #修改此行,指定备份服务器地址和rsync daemon的模块名,开启了ssh start,此时name为远程的shell方式运行时的目标目录
  60. 26         
  61. 27         
  62. 28     </localpath>
  63. 29     <rsync>
  64. 30         <commonParams params="-artuz"/>
  65. 31         <auth start="true" users="rsyncuser" passwordfile="/etc/rsync.pas"/> #修改此行为true,指定备份服务器的rsync配置的用户和密码
  66. ......
  67. #以后台方式执行同步
  68. [root@NFS ~]$ sersync2 -dro /usr/local/sersync/confxml.xml
  69. ##web2(jpress)业务共享配置
  70. [root@NFS ~]$ cd /usr/local/sersync/
  71. root@NFS sersync]$ cp confxml.xml jpress.xml
  72. ###相较于web1只需修改下面标记的两处
  73. [root@NFS sersync]$ vi jpress.xml
  74. <?xml version="1.0" encoding="ISO-8859-1"?>
  75.   2 <head version="2.5">
  76.   3     <host hostip="localhost" port="8008"></host>
  77.   4     <debug start="false"/>
  78.   5     <fileSystem xfs="false"/>
  79.   6     <filter start="false">
  80.   7     <exclude expression="(.*)\.svn"></exclude>
  81.   8     <exclude expression="(.*)\.gz"></exclude>
  82.   9     <exclude expression="^info/*"></exclude>
  83. 10     <exclude expression="^static/*"></exclude>
  84. 11     </filter>
  85. 12     <inotify>
  86. 13     <delete start="true"/>
  87. 14     <createFolder start="true"/>
  88. 15     <createFile start="false"/>
  89. 16     <closeWrite start="true"/>
  90. 17     <moveFrom start="true"/>
  91. 18     <moveTo start="true"/>
  92. 19     <attrib start="true"/>
  93. 20     <modify start="false"/>
  94. 21     </inotify>
  95. 22
  96. 23     <sersync>
  97. 24     <localpath watch="/data/web2">  #只需要将web1中的这个共享目录改成web2的
  98. 25         <remote ip="10.0.0.78" name="web2-backup"/> #这个是备份服务器中定义对应web2的rsync daemon的模块名
  99. 26         
  100. 27         
  101. 28     </localpath>
  102. 29     <rsync>
  103. 30         <commonParams params="-artuz"/>
  104. 31         <auth start="true" users="rsyncuser" passwordfile="/etc/rsync.pas"/>
  105. 32         <userDefinedPort start="false" port="874"/>
  106. 33         <timeout start="false" time="100"/>
  107. 34         <ssh start="false"/>
  108. 35     </rsync>
  109. #后台独立运行web2对应服务
  110. [root@NFS sersync]$ sersync2 -dro /usr/local/sersync/jpress.xml
  111. #为了防止服务器重启后手动执行的服务断开,将执行命令写进文件中,随开机启动
  112. [root@NFS ~]$ echo -e "/usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml &> /dev/null\n/usr/local/sersync/sersync2 -dro /usr/local/sersync/jpress.xml &> /dev/null" > /etc/profile.d/sersync2.sh
  113. [root@NFS ~]$ chmod +x /etc/profile.d/sersync2.sh
复制代码
4 在10.0.0.48和10.0.0.58主机上搭建MySQL主从节点


  • 主节点:10.0.0.48
  • 从节点:10.0.0.58

  • 搭建主节点
  1. #在10.0.0.78 NFS备份服务器以独立服务方式运行rsync并实现验证功能
  2. [root@NFS-bak ~]$ yum -y install rsync-daemon
  3. #创建备份目录
  4. [root@NFS-bak ~]$ mkdir /data/backup -p
  5. [root@NFS-bak ~]$ mkdir /data/web2-backup
  6. #修改配置文件,添加以下信息
  7. [root@NFS-bak ~]$ vi /etc/rsyncd.conf
  8. uid = www    #指定以哪个用户来访问共享目录,将之指定为生成的文件所有者,默认是nobody
  9. gid = www
  10. max connections = 0
  11. ignore errors
  12. exclude = lost+found/
  13. log file = /var/log/rsyncd.log
  14. pid file = /var/run/rsyncd.pid
  15. lock file = /var/run/rsyncd.lock
  16. reverse lookup = no
  17. [backup]  #每个模块名对应一个不同的path目录,如果同名后面模块生效
  18. path = /data/backup/
  19. comment = backup dir
  20. read only = no   #默认是yes,即只读
  21. auth users = rsyncuser   #默认anonymous可以访问rsync服务器,主服务器中指定的用户
  22. secrets file = /etc/rsync.pas
  23. [web2-backup]
  24. path = /data/web2-backup/
  25. comment = backup dir
  26. read only = no
  27. auth users = rsyncuser
  28. secrets file = /etc/rsync.pas
  29. #创建验证文件
  30. [root@NFS-bak ~]$ echo "rsyncuser:lgq123456" > /etc/rsync.pas
  31. #创建传输用户
  32. [root@NFS-bak ~]$ chmod 600 /etc/rsync.pas
  33. [root@NFS-bak ~]$ groupadd -g 666 www
  34. [root@NFS-bak ~]$ useradd -u 666 www -g 666
  35. [root@NFS-bak ~]$ chown www.www /data/backup/ -R
  36. [root@NFS-bak ~]$ chown -R www.www /data/web2-backup/
  37. #重载配置
  38. [root@NFS-bak ~]$ rsync --daemon
  39. #放进文件中,随主机开启自启动
  40. [root@NFS-bak ~]$ echo "rsync --daemon" > /etc/profile.d/rsync.sh
  41. [root@NFS-bak ~]$ chmod +x /etc/profile.d/rsync.sh
复制代码

  • 搭建从节点
  1. #在NFS主服务器上共享目录创建一个test.txt文件,查看备份服务器上是否同步
  2. [root@NFS ~]$ cd /data/www/
  3. [root@NFS www]$ touch test.txt
  4. [root@NFS www]$ ll
  5. total 0
  6. -rw-r--r-- 1 root root 0 Mar  9 22:23 test.txt
  7. [root@NFS-bak ~]$ ll /data/backup/
  8. total 0
  9. -rw-r--r-- 1 www www 0 Mar  9 22:23 test.txt
复制代码

  • 测试主从是否同步
  1. #安装mysql
  2. [root@mysql-master ~]$ yum -y install mysql-server
  3. #创建二进制日志存放路径,并在配置文件中指定路径以及日子文件的前缀
  4. [root@mysql-master ~]$ mkdir /data/binlog
  5. [root@mysql-master ~]$ chown mysql. /data/binlog/
  6. #设置配置文件,并启动服务
  7. [root@mysql-master ~]$ cat /etc/my.cnf
  8. [mysqld]
  9. server-id=48
  10. log_bin=/data/binlog/mysql-bin
  11. [root@mysql-master ~]$ systemctl enable --now mysqld
  12. #创建复制用户以及授权
  13. [root@mysql-master ~]$ mysql -uroot -plgq123456 -e "create user 'repluser'@'10.0.0.%' identified by 'lgq123456';"
  14. [root@mysql-master ~]$ mysql -uroot -plgq123456 -e "grant replication slave on *.* to 'repluser'@'10.0.0.%';"
  15. #创建kodbox对应数据库以及账号
  16. [root@mysql-master ~]$ mysql -uroot -plgq123456 -e "create database kodbox;"
  17. [root@mysql-master ~]$ mysql -uroot -plgq123456 -e "create user kodbox@'10.0.0.%' identified by 'lgq123456';"
  18. [root@mysql-master ~]$ mysql -uroot -plgq123456 -e "grant all on kodbox.* to  kodbox@'10.0.0.%';"
  19. #创建web2业务对应的数据库和用户
  20. [root@mysql-master ~]$ mysql -uroot -plgq123456 -e "create database jpress;"
  21. [root@mysql-master ~]$ mysql -uroot -plgq123456 -e "create user jpress@'10.0.0.%' identified by '123456';"
  22. [root@mysql-master ~]$ mysql -uroot -plgq123456 -e "grant all on jpress.* to jpress@'10.0.0.%';"
  23. #进行完全备份
  24. [root@mysql-master ~]$ mysqldump -uroot -plgq123456 -A -F --single-transaction --master-data=1 > full_backup.sql
  25. #拷贝备份数据到从节点
  26. [root@mysql-master ~]$ scp full_backup.sql 10.0.0.58:
复制代码
5 在10.0.0.88主机上部署redis
  1. #安装
  2. [root@mysql-slave ~]$ yum -y install mysql-server
  3. #修改配置文件,并启动
  4. [root@mysql-slave ~]$ vi /etc/my.cnf
  5. #添加下面信息
  6. [mysqld]
  7. server-id=58
  8. read-only
  9. [root@mysql-slave ~]$ systemctl enable --now mysqld
  10. #修改备份文件,在change master to中添加主节点信息
  11. [root@mysql-slave ~]$ vi full_backup.sql
  12. ......
  13. CHANGE MASTER TO
  14.     MASTER_HOST='10.0.0.48',                  #添上主节点ip地址
  15.     MASTER_USER='repluser',                        #添上在主节点创建的账号
  16.     MASTER_PASSWORD='lgq123456',        #添上账号密码
  17.     MASTER_PORT=3306,                                #添上端口号
  18.     MASTER_LOG_FILE='mysql-bin.000003',
  19.     MASTER_LOG_POS=157;
  20. ......
  21. #还原备份
  22. ###暂时关闭二进制日志
  23. [root@mysql-slave ~]$ mysql
  24. mysql> set sql_log_bin=0;
  25. ###还原
  26. mysql> source /root/full_backup.sql;
  27. ##开启主从节点的链接线程
  28. mysql> start slave;
  29. ##查看状态
  30. mysql> show slave status\G
  31. *************************** 1. row ***************************
  32.                Slave_IO_State: Waiting for source to send event
  33.                   Master_Host: 10.0.0.48
  34.                   Master_User: repluser
  35.                   Master_Port: 3306
  36.                 Connect_Retry: 60
  37.               Master_Log_File: mysql-bin.000003
  38.           Read_Master_Log_Pos: 157
  39.                Relay_Log_File: mysql-slave-relay-bin.000002
  40.                 Relay_Log_Pos: 326
  41.         Relay_Master_Log_File: mysql-bin.000003
  42.              Slave_IO_Running: Yes
  43.             Slave_SQL_Running: Yes
  44.               Replicate_Do_DB:
  45.           Replicate_Ignore_DB:
  46.            Replicate_Do_Table:
  47.        Replicate_Ignore_Table:
  48.       Replicate_Wild_Do_Table:
  49.   Replicate_Wild_Ignore_Table:
  50.                    Last_Errno: 0
  51.                    Last_Error:
  52.                  Skip_Counter: 0
  53.           Exec_Master_Log_Pos: 157
  54.               Relay_Log_Space: 542
  55.               Until_Condition: None
  56.                Until_Log_File:
  57.                 Until_Log_Pos: 0
  58.            Master_SSL_Allowed: No
  59.            Master_SSL_CA_File:
  60.            Master_SSL_CA_Path:
  61.               Master_SSL_Cert:
  62.             Master_SSL_Cipher:
  63.                Master_SSL_Key:
  64.         Seconds_Behind_Master: 0
  65. Master_SSL_Verify_Server_Cert: No
  66.                 Last_IO_Errno: 0
  67.                 Last_IO_Error:
  68.                Last_SQL_Errno: 0
  69.                Last_SQL_Error:
  70.   Replicate_Ignore_Server_Ids:
  71.              Master_Server_Id: 48
  72.                   Master_UUID: bdcb41ce-be61-11ed-808a-000c2924e25d
  73.              Master_Info_File: mysql.slave_master_info
  74.                     SQL_Delay: 0
  75.           SQL_Remaining_Delay: NULL
  76.       Slave_SQL_Running_State: Replica has read all relay log; waiting for more updates
  77.            Master_Retry_Count: 86400
  78.                   Master_Bind:
  79.       Last_IO_Error_Timestamp:
  80.      Last_SQL_Error_Timestamp:
  81.                Master_SSL_Crl:
  82.            Master_SSL_Crlpath:
  83.            Retrieved_Gtid_Set:
  84.             Executed_Gtid_Set:
  85.                 Auto_Position: 0
  86.          Replicate_Rewrite_DB:
  87.                  Channel_Name:
  88.            Master_TLS_Version:
  89.        Master_public_key_path:
  90.         Get_master_public_key: 0
  91.             Network_Namespace:
  92. 1 row in set, 1 warning (0.01 sec)
复制代码
6 搭建 www.yanlinux.org web1业务(可道云业务)

6.1 在10.0.0.28上搭建nginx和php-fpm
  1. #在主节点上创建一个测试数据库
  2. mysql> create database t1;
  3. Query OK, 1 row affected (0.00 sec)
  4. mysql> show databases;
  5. +--------------------+
  6. | Database           |
  7. +--------------------+
  8. | information_schema |
  9. | kodbox             |
  10. | mysql              |
  11. | performance_schema |
  12. | sys                |
  13. | t1                 |
  14. +--------------------+
  15. 6 rows in set (0.00 sec)
  16. #在从节点查看是否存在
  17. mysql> show databases;
  18. +--------------------+
  19. | Database           |
  20. +--------------------+
  21. | information_schema |
  22. | kodbox             |
  23. | mysql              |
  24. | performance_schema |
  25. | sys                |
  26. | t1                 |
  27. +--------------------+
  28. 6 rows in set (0.01 sec)
  29. ##说明主从复制已经可以同步了
复制代码
查看状态php状态页,测试服务搭建成功

6.2 部署kodbox
  1. #安装redis
  2. [root@redis ~]$ yum -y install redis
  3. #修改配置文件
  4. [root@redis ~]$ vi /etc/redis.conf
  5. bind 0.0.0.0 #将此行的127.0.0.1改为0.0.0.0,实现远程访问
  6. [root@redis ~]$ systemctl enable --now redis
复制代码




6.3 挂载NFS服务器,实现网站数据远程备份
  1. # 1.利用脚本一键编译安装nginx
  2. [root@web1 ~]$ cat install_nginx.sh
  3. #!/bin/bash
  4. OS_TYPE=`awk -F'[ "]' '/^NAME/{print $2}' /etc/os-release`
  5. OS_VERSION=`awk -F'[".]' '/^VERSION_ID/{print $2}' /etc/os-release`
  6. CPU=`lscpu |awk '/^CPU\(s\)/{print $2}'`
  7. SRC_DIR=/usr/local/src
  8. read -p "$(echo -e '\033[1;32m请输入下载的版本号:\033[0m')" NUM
  9. NGINX_FILE=nginx-${NUM}
  10. NGINX_INSTALL_DIR=/apps/nginx
  11. color () {
  12.     RES_COL=60
  13.     MOVE_TO_COL="echo -en \\033[${RES_COL}G"
  14.     SETCOLOR_SUCCESS="echo -en \\033[1;32m"
  15.     SETCOLOR_FAILURE="echo -en \\033[1;31m"
  16.     SETCOLOR_WARNING="echo -en \\033[1;33m"
  17.     SETCOLOR_NORMAL="echo -en \E[0m"
  18.     echo -n "$1" && $MOVE_TO_COL
  19.     echo -n "["
  20.     if [ $2 = "success" -o $2 = "0" ] ;then
  21.         ${SETCOLOR_SUCCESS}
  22.         echo -n $"  OK  "
  23.     elif [ $2 = "failure" -o $2 = "1"  ] ;then
  24.         ${SETCOLOR_FAILURE}
  25.         echo -n $"FAILED"
  26.     else
  27.         ${SETCOLOR_WARNING}
  28.         echo -n $"WARNING"
  29.     fi
  30.     ${SETCOLOR_NORMAL}
  31.     echo -n "]"
  32.     echo
  33. }
  34. #下载源码
  35. wget_package(){
  36.     [ -e ${NGINX_INSTALL_DIR} ] && { color "nginx 已安装,请卸载后再安装" 1; exit; }
  37.     cd ${SRC_DIR}
  38.     if [ -e ${NGINX_FILE}.tar.gz ];then
  39.         color "源码包已经准备好" 0
  40.     else
  41.         color "开始下载源码包" 0
  42.         wget http://nginx.org/download/${NGINX_FILE}.tar.gz
  43.         [ $? -ne 0 ] && { color "下载 ${NGINX_FILE}.tar.gz文件失败" 1; exit; }
  44.     fi
  45. }
  46. #编译安装
  47. install_nginx(){
  48.     color "开始安装nginx" 0
  49.     if id nginx &> /dev/null;then
  50.         color "nginx用户已经存在" 1
  51.     else
  52.         useradd -s /sbin/nologin -r nginx
  53.         color "nginx用户账号创建完成" 0
  54.     fi
  55.     color "开始安装nginx依赖包" 0
  56.     if [ $OS_TYPE == "Centos" -a ${OS_VERSION} == '7' ];then
  57.         yum -y install make gcc pcre-devel openssl-devel zlib-devel perl-ExtUtils-Embed
  58.     elif [ $OS_TYPE == "Centos" -a ${OS_VERSION} == '8' ];then
  59.         yum -y install make gcc-c++ libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel perl-ExtUtils-Embed
  60.     elif [ $OS_TYPE == "Rocky" ];then
  61.         yum -y install make gcc libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel perl-ExtUtils-Embed
  62.     elif [ $OS_TYPE == "Ubuntu" ];then
  63.         apt update
  64.         apt -y install make gcc libpcre3 libpcre3-dev openssl libssl-dev zlib1g-dev
  65.     else
  66.         color '不支持此系统!'  1
  67.         exit
  68.     fi
  69.     #开始编译安装
  70.     color "开始编译安装nginx" 0
  71.     cd $SRC_DIR
  72.     tar xf ${NGINX_FILE}.tar.gz
  73.     cd ${SRC_DIR}/${NGINX_FILE}
  74.     ./configure --prefix=${NGINX_INSTALL_DIR} --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module
  75.     make -j ${CPU} && make install
  76.     [ $? -eq 0 ] && color "nginx 编译安装成功" 0 ||  { color "nginx 编译安装失败,退出!" 1 ;exit; }
  77.     ln -s ${NGINX_INSTALL_DIR}/sbin/nginx /usr/sbin/ &> /dev/null
  78.     #创建service文件
  79.     cat > /lib/systemd/system/nginx.service <<EOF
  80. [Unit]
  81. Description=The nginx HTTP and reverse proxy server
  82. After=network.target remote-fs.target nss-lookup.target
  83. [Service]
  84. Type=forking
  85. PIDFile=${NGINX_INSTALL_DIR}/logs/nginx.pid
  86. ExecStartPre=/bin/rm -f ${NGINX_INSTALL_DIR}/logs/nginx.pid
  87. ExecStartPre=${NGINX_INSTALL_DIR}/sbin/nginx -t
  88. ExecStart=${NGINX_INSTALL_DIR}/sbin/nginx
  89. ExecReload=/bin/kill -s HUP \$MAINPID
  90. KillSignal=SIGQUIT
  91. TimeoutStopSec=5
  92. KillMode=process
  93. PrivateTmp=true                                                                                       
  94. LimitNOFILE=100000
  95. [Install]
  96. WantedBy=multi-user.target
  97. EOF
  98.     #启动服务
  99.     systemctl enable --now nginx &> /dev/null
  100.     systemctl is-active nginx &> /dev/null ||  { color "nginx 启动失败,退出!" 1 ; exit; }
  101.     color "nginx 安装完成" 0
  102. }
  103. wget_package
  104. install_nginx
  105. ##执行脚本安装nginx
  106. [root@web1 ~]$ sh install_nginx.sh
  107. [root@web1 ~]$ ss -ntl
  108. State      Recv-Q      Send-Q           Local Address:Port           Peer Address:Port     Process     
  109. LISTEN     0           128                    0.0.0.0:80                  0.0.0.0:*
  110. # 2.安装配置php-fpm
  111. [root@web1 ~]$ yum -y install php-fpm
  112. ##安装php-mysql 以及php-redis所依赖的包
  113. [root@web1 ~]$ php-mysqlnd php-json php-cli php-devel
  114. ##下载php-redis
  115. [root@web1 ~]$ wget https://pecl.php.net/get/redis-5.3.7.tgz -P /usr/local/src/
  116. [root@web1 ~]$ cd /usr/local/src/
  117. [root@web1 src]$ tar xf redis-5.3.7.tgz
  118. [root@web1 src]$ cd redis-5.3.7/
  119. [root@web1 redis-5.3.7]$ phpize
  120. Configuring for:
  121. PHP Api Version:         20170718
  122. Zend Module Api No:      20170718
  123. Zend Extension Api No:   320170718
  124. [root@web1 redis-5.3.7]$ ./configure
  125. [root@web1 redis-5.3.7]$ make && make install
  126. ##创建php支持redis扩展的配置文件
  127. [root@web1 redis-5.3.7]$ vi /etc/php.d/31-redis.ini
  128. extension=redis #加入此行
  129. [root@web1 redis-5.3.7]$ cd
  130. #修改php上传限制配置
  131. [root@web1 ~]$ vi /etc/php.ini
  132. post_max_size = 200M                 #修改为200M
  133. upload_max_filesize = 200M         #改为200M,实现大文件上传
  134. #修改配置文件
  135. [root@web1 ~]$ vi /etc/php-fpm.d/www.conf
  136. user = nginx                                         #修改为nginx
  137. group = nginx                                         #修改为nginx
  138. ;listen = /run/php-fpm/www.sock #注释此行
  139. listen = 127.0.0.1:9000                 #添加此行,监控本机的9000端口
  140. pm.status_path = /fpm_status         #取消此行的注释,并改为fpm_status,防止与nginx服务的status冲突
  141. ping.path = /ping                                 #取消此行的注释
  142. ping.response = pong                         #取消此行的注释
  143. ##启动服务
  144. [root@web1 ~]$ systemctl enable --now php-fpm
  145. # 3.配置nginx虚拟主机配置文件
  146. ##为了方便管理不同的业务,nginx支持子配置文件
  147. ##创建子配置文件目录
  148. [root@web1 ~]$ mkdir /apps/nginx/conf/conf.d
  149. [root@web1 ~]$ vi /apps/nginx/conf/nginx.conf
  150.         include /apps/nginx/conf/conf.d/*.conf; #在http语句块最后一行添加上这一行
  151. ##创建业务配置文件
  152. [root@web1 ~]$ cat /apps/nginx/conf/conf.d/www.yanlinux.org.conf
  153. server {
  154.     listen 80;
  155.     server_name www.yanlinux.org;
  156.     client_max_body_size 100M;
  157.     server_tokens off;
  158.     location / {
  159.         root /data/kodbox/;
  160.         index index.php index.html index.htm;
  161.     }
  162.     location ~ \.php$ {
  163.         root           /data/kodbox/;
  164.         fastcgi_pass   127.0.0.1:9000;
  165.         fastcgi_index  index.php;
  166.         fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
  167.         include        fastcgi_params;
  168.         fastcgi_hide_header X-Powered-By;
  169.     }
  170.     location ~ ^/(ping|fpm_status)$ {
  171.         fastcgi_pass   127.0.0.1:9000;
  172.         fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
  173.         include        fastcgi_params;
  174.     }
  175. }
  176. # 4.重启服务
  177. [root@web1 ~]$ systemctl restart nginx.service php-fpm.service
复制代码
往可道云上上传文件MyHotkeyScript.ahk,测试NFS主备服务是否都可以得到数据
  1. ##安装可道云(kodbox)所需的依赖包
  2. [root@web1 ~]$ yum -y install php-mbstring php-xml php-gd
  3. #下载源码包
  4. [root@web1 ~]$ wget https://static.kodcloud.com/update/download/kodbox.1.35.zip
  5. [root@web1 ~]$ unzip kodbox.1.35.zip -d /data/kodbox
  6. [root@web1 ~]$ chown -R nginx.nginx /data/kodbox/
复制代码
7 部署www.yanlinux.edu web2业务(JPress)

7.1 在10.0.0.38主机上搭建tomcat
  1. #安装nfs-utils搭建挂载NFS
  2. [root@web1 ~]$ yum -y install nfs-utils
  3. [root@web1 ~]$ showmount -e 10.0.0.68
  4. Export list for 10.0.0.68:
  5. /data/web2 *
  6. /data/www *
  7. #实现永久挂载,添加以下挂载信息,利用可道云上传的数据都会存放在/data/kodbox/data/files目录下,所以讲这个目录挂载nfs
  8. [root@web1 ~]$ vi /etc/fstab
  9. 10.0.0.68:/data/www     /data/kodbox/data/files nfs     _netdev         0 0
  10. [root@web1 ~]$ mount -a
  11. [root@web1 ~]$ df -h|grep data
  12. 10.0.0.68:/data/www   70G  2.3G   68G   4% /data/kodbox/data/files
复制代码
7.2 部署nginx
  1. #查看web1服务器上是否上传了数据
  2. [root@web1 ~]$ ll /data/kodbox/data/files/202303/09_079920df/
  3. total 4
  4. -rwxrwxrwx 1 666 666 1491 Mar  9 22:51 MyHotkeyScript.ahk
  5. #在NFS主服务器上查看
  6. [root@NFS ~]$ ll /data/www/202303/09_079920df/
  7. total 4
  8. -rwxrwxrwx 1 www www 1491 Mar  9 22:51 MyHotkeyScript.ahk
  9. #在NFS备份服务器上查看
  10. [root@NFS-bak ~]$ ll /data/backup/202303/09_079920df/
  11. total 4
  12. -rwxrwxrwx 1 www www 1491 Mar  9 22:51 MyHotkeyScript.ahk
复制代码
7.3 部署JPress应用
  1. #利用脚本一键安装jdk以及tomcat
  2. [root@web2 ~]$ cat install_tomcat_jdk.sh
  3. #!/bin/bash
  4. DIR=`pwd`
  5. read -p "$(echo -e '\033[1;32m请输入JDK版本号:\033[0m')" JDK_VERSION
  6. read -p "$(echo -e '\033[1;32m请输入Tomcat版本号:\033[0m')" TOMCAT_VERSION
  7. JDK_FILE="jdk-${JDK_VERSION}-linux-x64.tar.gz"
  8. TOMCAT_FILE="apache-tomcat-${TOMCAT_VERSION}.tar.gz"
  9. INSTALL_DIR="/usr/local"
  10. color () {
  11.     RES_COL=60
  12.     MOVE_TO_COL="echo -en \\033[${RES_COL}G"
  13.     SETCOLOR_SUCCESS="echo -en \\033[1;32m"
  14.     SETCOLOR_FAILURE="echo -en \\033[1;31m"
  15.     SETCOLOR_WARNING="echo -en \\033[1;33m"
  16.     SETCOLOR_NORMAL="echo -en \E[0m"
  17.     echo -n "$2" && $MOVE_TO_COL
  18.     echo -n "["
  19.     if [ $1 = "success" -o $1 = "0" ] ;then
  20.         ${SETCOLOR_SUCCESS}
  21.         echo -n $"  OK  "
  22.     elif [ $1 = "failure" -o $1 = "1"  ] ;then
  23.         ${SETCOLOR_FAILURE}
  24.         echo -n $"FAILED"
  25.     else
  26.         ${SETCOLOR_WARNING}
  27.         echo -n $"WARNING"
  28.     fi
  29.     ${SETCOLOR_NORMAL}
  30.     echo -n "]"
  31.     echo
  32. }
  33. install_jdk(){
  34.     if ! [ -f "${DIR}/${JDK_FILE}" ];then
  35.         color 1 "${JDK_FILE}不存在,请去官网下载"
  36.         exit;
  37.     elif [ -f ${INSTALL_DIR}/jdk ];then
  38.         color 1 "JDK已经安装"
  39.         exit;
  40.     else
  41.         [ -d "${INSTALL_DIR}" ] || mkdir -pv ${INSTALL_DIR}
  42.     fi
  43.     tar xf ${DIR}/${JDK_FILE} -C ${INSTALL_DIR}
  44.     cd ${INSTALL_DIR} && ln -s jdk* jdk
  45.     cat > /etc/profile.d/jdk.sh <<EOF
  46. export JAVA_HOME=${INSTALL_DIR}/jdk
  47. #export JRE_HOME=\$JAVA_HOME/jre
  48. #export CLASSPATH=.:\$JAVA_HOME/lib/:\$JRE_HOME/lib/
  49. export PATH=\$PATH:\$JAVA_HOME/bin
  50. EOF
  51.     . /etc/profile.d/jdk.sh
  52.     java -version && color 0 "JDK安装完成" || { color 1 "JDK安装失败"; exit; }
  53. }
  54. install_tomcat(){
  55.     if ! [ -f "${DIR}/${TOMCAT_FILE}" ];then
  56.         color 1 "${TOMCAT_FILE}不存在,请去官网下载"
  57.         exit;
  58.     elif [ -f ${INSTALL_DIR}/tomcat ];then
  59.         color 1 "tomcat已经安装"
  60.         exit;
  61.     else
  62.         [ -d "${INSTALL_DIR}" ] || mkdir -pv ${INSTALL_DIR}
  63.     fi
  64.    
  65.     tar xf ${DIR}/${TOMCAT_FILE} -C ${INSTALL_DIR}
  66.     cd ${INSTALL_DIR} && ln -s apache-tomcat-*/ tomcat
  67.     echo "PATH=${INSTALL_DIR}/tomcat/bin:"'$PATH' > /etc/profile.d/tomcat.sh
  68.     id tomcat &> /dev/null || useradd -r -s /sbin/nologin tomcat
  69.     cat > ${INSTALL_DIR}/tomcat/conf/tomcat.conf <<EOF
  70. JAVA_HOME=${INSTALL_DIR}/jdk
  71. EOF
  72.    
  73.     chown -R tomcat.tomcat ${INSTALL_DIR}/tomcat/
  74.     cat > /lib/systemd/system/tomcat.service <<EOF
  75. [Unit]
  76. Description=Tomcat
  77. #After=syslog.target network.target remote-fs.target nss-lookup.target
  78. After=syslog.target network.target
  79. [Service]
  80. Type=forking
  81. EnvironmentFile=${INSTALL_DIR}/tomcat/conf/tomcat.conf
  82. ExecStart=${INSTALL_DIR}/tomcat/bin/startup.sh
  83. ExecStop=${INSTALL_DIR}/tomcat/bin/shutdown.sh
  84. RestartSec=3
  85. PrivateTmp=true
  86. User=tomcat
  87. Group=tomcat
  88. [Install]
  89. WantedBy=multi-user.target
  90. EOF
  91.     systemctl daemon-reload
  92.     systemctl enable --now tomcat.service &> /dev/null
  93.     systemctl is-active tomcat.service &> /dev/null && color 0 "TOMCAT 安装完成" || { color 1 "TOMCAT 安装失败" ; exit; }
  94. }
  95. install_jdk
  96. install_tomcat
  97. [root@web2 ~]$ sh install_tomcat.sh
  98. 请输入JDK版本号:8u321
  99. 请输入Tomcat版本号:9.0.59
  100. java version "1.8.0_321"
  101. Java(TM) SE Runtime Environment (build 1.8.0_321-b07)
  102. Java HotSpot(TM) 64-Bit Server VM (build 25.321-b07, mixed mode)
  103. JDK安装完成                                                [  OK  ]
  104. TOMCAT 安装完成                                            [  OK  ]
  105. #创建虚拟主机
  106. [root@web2 ~]$ vi /usr/local/tomcat/conf/server.xml
  107.             pattern="%h %l %u %t "%r" %s %b" />
  108.       </Host>
  109.       #在这一行之后添加下面几行信息
  110.       <Host name="www.yanlinux.edu" appBase="/data/jpress/" unpackWARs="true" autoDeploy="true">
  111.         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
  112.                prefix="jpress_access_log" suffix=".txt"                                                
  113.                pattern="%h %l %u %t "%r" %s %b" />
  114.       </Host>
  115.       #以上信息就是虚拟主机的配置信息
  116.     </Engine>
  117.   </Service>
  118. </Server>
  119. #准备虚拟主机的数据目录,tomcat默认会在ROOT目录中找,所以需要将应用数据布置到这里面就可以避免在URL中添加应用目录来访问了。
  120. [root@web2 ~]$ mkdir /data/webapps/ROOT -p
  121. [root@web2 ~]$ chown -R tomcat.tomcat /data/webapps
  122. [root@web2 ~]$ systemctl restart tomcat.service
复制代码
浏览器访问





7.4 挂载NFS服务器
  1. #利用6.1中的安装nginx脚本来安装
  2. [root@web2 ~]$ sh install_nginx.sh
  3. #创建子配置目录
  4. [root@web2 ~]$ mkdir /apps/nginx/conf/conf.d
  5. [root@web2 ~]$ vi /apps/nginx/conf/nginx.conf
  6. #在主配置文件中引入子配置目录
  7. [root@web2 ~]$ tail -n2 /apps/nginx/conf/nginx.conf
  8.     include /apps/nginx/conf/conf.d/*.conf;
  9. }
  10. #创建业务2配置文件
  11. [root@web2 ~]$ cat /apps/nginx/conf/conf.d/www.yanlinux.edu.conf
  12. server {
  13.     listen 80;
  14.     server_name www.yanlinux.edu;
  15.     location / {
  16.         proxy_pass http://127.0.0.1:8080;
  17.         proxy_set_header Host $http_host;
  18.         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  19.     }
  20. }
  21. [root@web2 ~]$ nginx -t
  22. nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok
  23. nginx: configuration file /apps/nginx/conf/nginx.conf test is successful
  24. [root@web2 ~]$ nginx -s reload
复制代码
7.5 利用redis实现session共享
  1. #上官网http://www.jpress.io/下载war包,上传到服务器
  2. [root@web2 ~]$ cp jpress-v4.0.7.war /usr/local/tomcat/webapps/jpress.war
  3. [root@web2 ~]$ cd /usr/local/tomcat/webapps/
  4. #war包传到tomcat目录下就会自动解包,
  5. [root@web2 webapps]$ ls
  6. docs  examples  host-manager  jpress  jpress.war  manager  ROOT
  7. #然后将jpress/目录下的内容拷贝到6.7.1创建tomcat虚拟主机www.yanlinux.edu的数据目录中
  8. [root@web2 ~]$ cp -a /usr/local/tomcat/webapps/jpress/* /data/webapps/ROOT/
  9. #数据库账号已经在6.4中创建直接连接就可以
复制代码
8 KeepAlived+HAProxy服务搭建,实现整体架构

分别在10.0.0.8和10.0.0.18两台rocky主机上编译安装keepalived和HAProxy两个服务,实现高可用。

  • 编译安装keepalived
  1. [root@web2 ~]$ yum -y install nfs-utils
  2. [root@web2 ~]$ showmount -e 10.0.0.68
  3. Export list for 10.0.0.68:
  4. /data/web2 *
  5. /data/www  *
  6. #永久挂载,添加挂载信息
  7. [root@web2 ~]$ vi /etc/fstab
  8. 10.0.0.68:/data/web2    /data/webapps/ROOT/attachment/  nfs _netdev     0 0
  9. [root@web2 ~]$ mount -a
  10. [root@web2 ~]$ df -h |grep data
  11. 10.0.0.68:/data/web2   70G  2.2G   68G   4% /data/webapps/ROOT/attachment
  12. #发布文章,添加一张照片测试
  13. [root@web2 ~]$ ll /data/webapps/ROOT/attachment/20230310/
  14. total 560
  15. -rw-r--r-- 1 666 666 569655 Mar 10 11:10 2974a6d37fb04ebfab8c7816d0a8dadd.png
  16. #NFS服务器上查看
  17. [root@NFS ~]$ ll /data/web2/20230310/
  18. total 560
  19. -rw-r--r-- 1 www www 569655 Mar 10 11:10 2974a6d37fb04ebfab8c7816d0a8dadd.png
  20. #NFS备份服务器查看
  21. [root@NFS-bak ~]$ ll /data/web2-backup/20230310/
  22. total 560
  23. -rw-r--r-- 1 www www 569655 Mar 10 11:10 2974a6d37fb04ebfab8c7816d0a8dadd.png
复制代码

  • 编译安装HAProxy服务
    编译安装HAProxy 2.6 LTS版本,更多源码包下载地址:http://www.haproxy.org/download/
    依赖lua环境,由于CentOS7 之前版本自带的lua版本比较低并不符合HAProxy要求的lua最低版本(5.3)的要求,因此需要编译安装较新版本的lua环境,然后才能编译安装HAProxy。
[code]#ka1节点安装HAProxy# 1.安装依赖环境##centos或rocky[root@ka1 ~]$ yum -y install gcc make gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel libtermcap-devel ncurses-devel libevent-devel readline-devel##ubuntuapt -y install gcc make openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev  libreadline-dev libsystemd-dev# 2.编译安装lua环境##下载源码:参考链接http://www.lua.org/start.html[root@ka1 ~]$ curl -R -O http://www.lua.org/ftp/lua-5.4.4.tar.gz[root@ka1 ~]$ tar xvf lua-5.3.5.tar.gz -C /usr/local/src[root@ka1 ~]$ cd /usr/local/src/lua-5.3.5[root@ka1 lua-5.3.5]$ make all test[root@ka1 lua-5.3.5]$ pwd/usr/local/src/lua-5.3.5[root@ka1 lua-5.3.5]$ ./src/lua -vLua 5.3.5 Copyright (C) 1994-2018 Lua.org, PUC-Rio# 3.编译安装haproxy##下载源码:官网链接:www.haproxy.org[root@ka1 ~]$ https://www.haproxy.org/download/2.6/src/haproxy-2.6.9.tar.gz[root@ka1 ~]$ tar xvf haproxy-2.6.9.tar.gz -C /usr/local/src[root@ka1 ~]$ cd /usr/local/src/haproxy-2.6.9##编译安装[root@ka1 haproxy-2.6.9]$ make ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_CPU_AFFINITY=1 USE_LUA=1 LUA_INC=/usr/local/src/lua-5.3.5/src/ LUA_LIB=/usr/local/src/lua-5.3.5/src/ PREFIX=/apps/haproxy[root@ka1 haproxy-2.6.9]$ make install PREFIX=/apps/haproxy##解决环境变量[root@ka1 haproxy-2.6.9]$ ln -s /apps/haproxy/sbin/haproxy /usr/sbin/##验证haproxy版本[root@ka1 haproxy-2.6.9]$ which haproxy /usr/sbin/haproxy[root@ka1 haproxy-2.6.9]$ haproxy -vHAProxy version 2.6.9-3a3700a 2023/02/14 - https://haproxy.org/Status: long-term supported branch - will stop receiving fixes around Q2 2027.Known bugs: http://www.haproxy.org/bugs/bugs-2.6.9.htmlRunning on: Linux 4.18.0-348.el8.0.2.x86_64 #1 SMP Sun Nov 14 00:51:12 UTC 2021 x86_64# 4.创建HAProxy配置文件[root@ka1 haproxy-2.6.9]$ cd##准备配置文件目录[root@ka1 ~]$ mkdir /etc/haproxy[root@ka1 ~]$ cat > /etc/haproxy/haproxy.cfg

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具