实验部署..


实验思路

使用ansible搭建两台LNMP,使用iSCSI服务给两个LNMP创建远程的共享存储空间,之后两台LNMP做rsync+inotifiy远程同步,两个LNMP使用keepalived负载均衡,为了防止负载的单点故障加两个keepalived(主从),反向代理使用varnish代理,透明代理使用squid代理。

                                           
主机IP:

redis:192.168.1.4
客户端:192.168.2.10
透明代理:192.168.1.1、192.168.2.1
反向代理:192.168.1.10
ansible:192.168.1.100
ISCSI:192.168.1.200
lnmp1:192.168.1.2 漂移IP:192.168.1.250
lnmp2:192.168.1.3 漂移IP:192.168.1.250
负载1:192.168.1.21
负载2:192.168.1.22

使用ansible安装lnmp

搭建ansible

创建目录,将所需软件包拖入创号的文件中

[root@localhost ~]# mkdir /root/app
# 转换格式
[root@localhost ~]# createrepo /root/app

在这里插入图片描述
建立yum源,

[root@localhost ~]# rm -rf /etc/yum.repos.d/*
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]#  vim ansible.repo
[root@localhost yum.repos.d]# cat ansible.repo
[ansible]
name=ansible
baseurl=file:///root/app
enable=1
gpgcheck=0
[root@localhost yum.repos.d]# yum -y install ansible

在安装好ansible之后,我们使用ssh建立连接,做免密登录

# 生成密钥,回车即可
[root@localhost yum.repos.d]# ssh-keygen

密钥在/root/.ssh/目录下

[root@localhost yum.repos.d]# cd /root/.ssh/
[root@localhost .ssh]# ls
# _rsa为私钥,_rsa.pub为公钥
id_rsa  id_rsa.pub

将公钥传递给指定PC

[root@localhost .ssh]# ssh-copy-id root@192.168.1.2

客户端接收到公钥

[root@localhost ~]# cd /root/.ssh/
[root@localhost .ssh]# ls
authorized_keys

服务器登录客户端,便不需要密码就可登录

# 登录进去后,不执行操作要退出
[root@localhost .ssh]# ssh root@192.168.1.2
Last login: Tue Jul  7 06:19:56 2020
[root@localhost ~]# exit
登出
Connection to 192.168.1.2 closed.

添加主机清单

[root@localhost .ssh]# cd /etc/ansible/
[root@localhost ansible]# vim hosts 

编辑文件

# 在文件最后一行添加内容,这里写入了两个清单,可以写入IP,也可以写入域名
[oneserver]
192.168.1.2
192.168.1.3
192.168.1.4
给客户端搭建Nginx
[root@localhost ~]# yum -y install tree
# 创建nginx安装角色的使用目录
[root@localhost ~]# cd /etc/ansible/roles/
[root@localhost roles]# mkdir nginx
[root@localhost roles]# cd nginx/
[root@localhost nginx]# mkdir files
[root@localhost nginx]# mkdir vars
[root@localhost nginx]# mkdir tasks
[root@localhost nginx]# mkdir templates
[root@localhost nginx]# mkdir handlers
# 复制所需要的普通文件
[root@localhost nginx]# cd files/
[root@localhost files]# cp /root/nginx-1.6.2.tar.gz ./
[root@localhost files]# cp /root/index.html ./
[root@localhost files]# tree
.
├── index.html
└── nginx-1.6.2.tar.gz
# 写入触发器
[root@localhost files]# cd ..
[root@localhost nginx]# cd handlers/
[root@localhost handlers]# vim main.yaml
---
    - name: restart service
      shell: killall -9 nginx && nginx
# 编辑配置文件     
[root@localhost handlers]# cd ../templates/
[root@localhost templates]# cp /usr/local/nginx/conf/nginx.conf ./nginx.conf.j2
[root@localhost templates]# ls
nginx.conf.j2
[root@localhost templates]# vim nginx.conf.j2 
# 修改以下内容,根据所需,自行设置
user  nginx;
worker_processes  1;

#error_log  logs/error.log;
error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

pid        logs/nginx.pid;
[root@localhost vars]# cd ../tasks/
[root@localhost tasks]# vim main.yaml
---
    - name: yum install package
      yum: name=pcre-devel,gcc*,zlib,zlib-devel,openssl-devel state=installed
    - name: copy package
      copy: src=nginx-1.6.2.tar.gz dest=/usr/src/nginx-1.6.2.tar.gz
    - name: tar package
      shell: cd /usr/src && tar -zxf nginx-1.6.2.tar.gz
    - name: add user
      user: name=nginx shell=/sbin/nologin
    - name: set package
      shell: cd /usr/src/nginx-1.6.2 && ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_spdy_module --with-http_stub_status_module --with-pcre && make && make install
    - name: link
      file: src=/usr/local/nginx/sbin/nginx state=link path=/usr/local/sbin/nginx
    - name: copy index.html
      copy: src=index.html dest=/usr/local/nginx/html/index.html
    - name: copy conf
      template: src=nginx.conf.j2 dest=/usr/local/nginx/conf/nginx.conf
      notify: restart service
    - name: start service
      shell: nginx
[root@localhost tasks]# cd ..
[root@localhost nginx]# tree
.
├── files
│?? ├── index.html
│?? └── nginx-1.6.0.tar.gz
├── handlers
│?? └── main.yaml
├── tasks
│?? └── main.yaml
├── templates
│?? └── nginx.conf.j2
└── vars
[root@localhost nginx]# cd ../..
[root@localhost ansible]# vim site.yaml  
# 文件中填入下面内容
---
    - hosts: oneserver
      remote_user: root

      roles:
        - nginx
# 安装     
[root@localhost ansible]# ansible-playbook site.yaml
PLAY [oneserver] ***************************************************************

TASK [Gathering Facts] *********************************************************
ok: [192.168.1.2]
ok: [192.168.1.3]
ok: [192.168.1.4]

TASK [nginx : yum install package] *********************************************
changed: [192.168.1.2]
changed: [192.168.1.3]
changed: [192.168.1.4]

......

PLAY RECAP *********************************************************************
192.168.1.2                : ok=11   changed=10   unreachable=0    failed=0   
192.168.1.3               : ok=11   changed=10   unreachable=0    failed=0   
192.168.1.4                : ok=11   changed=10   unreachable=0    failed=0   
安装MySQL
[root@localhost ansible]# mkdir roles/mysql
[root@localhost ~]# cd /etc/ansible/roles/mysql/
# 创建角色所需目录
[root@localhost mysql]# mkdir files
[root@localhost mysql]# mkdir vars
[root@localhost mysql]# mkdir tasks
[root@localhost mysql]# mkdir templates
[root@localhost mysql]# mkdir handlers
[root@localhost mysql]# cd files/
[root@localhost files]# cp /root/mysql-5.5.22.tar.gz ./
[root@localhost files]# cd ../tasks/
# 这里要用到一个小命令"ignore_errors"异常处理,报错时可以不中断
[root@localhost tasks]# vim main.yaml
---
    - name: yum install package
      yum: name=gcc*,ncurses-devel,bison,cmake state=installed
    - name: copy package
      copy: src=mysql-5.5.22.tar.gz dest=/usr/src/mysql-5.5.22.tar.gz
    - name: tar package
      shell: cd /usr/src && tar -zxf mysql-5.5.22.tar.gz
    - name: set package
      shell: cd /usr/src/mysql-5.5.22 && cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc/ -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all && make && make install
    - name: link
      shell: ln -s /usr/local/mysql/bin/* /usr/local/bin
      ignore_errors : yes
    - name: user
      user: name=mysql shell=/sbin/nologin
    - name: chown
      file: path=/usr/local/mysql  owner=mysqlr group=mysql
      shell: chown -R mysql:mysql /usr/local/mysql
    - name: rm
      shell: rm -rf /etc/my.cnf
    - name: copy
      shell: cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf
    - name: a
      shell: cd /usr/local/mysql/ && scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
    - name: cd
      shell: cd /usr/local/mysql
    - name: echo
      shell: echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profilea
    - name: start
      shell: source /etc/profile
    - name: copy
      shell: cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
    - name: chmod
      shell: chmod +x /etc/rc.d/init.d/mysqld
    - name: chkconfig
      shell: chkconfig --add mysqld
    - name: restart services
      shell: systemctl restart mysqld
[root@localhost mysql]# cd ../..
[root@localhost ansible]# vim site.yaml
# 修改为执行角色为mysql
[root@localhost ansible]# ansible-playbook site.yaml
PLAY [oneserver] ***************************************************************

TASK [Gathering Facts] *********************************************************
ok: [192.168.1.2]
ok: [192.168.1.3]
ok: [192.168.1.4]

TASK [mysql : yum install package] *********************************************
changed: [192.168.1.2]
changed: [192.168.1.3]
changed: [192.168.1.4]

......

PLAY RECAP *********************************************************************
192.168.1.2                : ok=11   changed=10   unreachable=0    failed=0   
192.168.1.3               : ok=11   changed=10   unreachable=0    failed=0   
192.168.1.4                : ok=11   changed=10   unreachable=0    failed=0   
安装PHP
[root@localhost ~]# cd /etc/ansible/roles/
[root@localhost roles]# mkdir php
[root@localhost roles]# cd nginx/
[root@localhost php]# mkdir files
[root@localhost php]# mkdir vars
[root@localhost php]# mkdir tasks
[root@localhost php]# mkdir templates
[root@localhost php]# mkdir handlers
[root@localhost php]# cd files/
[root@localhost files]# cp /root/php-5.3.25.tar.gz ./
[root@localhost files]# cd ../tasks/
[root@localhost tasks]# vim main.yaml
  - name: copy
      copy: src=php-5.3.28.tar.gz dest=/usr/src/php-5.3.28.tar.gz
    - name: tar package
      shell: cd /usr/src && tar -zxf php-5.3.28.tar.gz
    - name: set package
      shell: cd /usr/src/php-5.3.28 && ./configure --prefix=/usr/local/php --with-gd --with-zlib --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-config-file-path=/usr/local/php --enable-fpm --enable-mbstring --with-jpeg-dir=/usr/lib && make && make install
    - name: kaobei
      shell: cp /usr/src/php-5.3.28/php.ini-development /usr/local/php/php.ini
    - name: kb
      template: src=php.ini.j2 dest=/usr/local/php/php.ini
    - name: kb
      shell: cp /usr/src/php-5.3.28/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
    - name: gaiming
      shell: cd /usr/local/php/etc/ && cp php-fpm.conf.default php-fpm.conf
    - name: geiquanxian
      shell: chmod +x /etc/init.d/php-fpm
    - name: q
      shell: chkconfig --add php-fpm
    - naem: kb
      template: src=php-fpm.conf.j2 dest=/usr/local/php/etc/php-fpm.conf
    - name: start service
      shell: systemctl restart php-fpm
[root@localhost php]# cd ../..
[root@localhost ansible]# vim site.yaml
# 修改为执行角色为php
[root@localhost ansible]# ansible-playbook site.yaml
PLAY [oneserver] ***************************************************************

TASK [Gathering Facts] *********************************************************
ok: [192.168.1.2]
ok: [192.168.1.3]
ok: [192.168.1.4]

TASK [php : yum install package] *********************************************
changed: [192.168.1.2]
changed: [192.168.1.3]
changed: [192.168.1.4]

......

PLAY RECAP *********************************************************************
192.168.1.2                : ok=11   changed=10   unreachable=0    failed=0   
192.168.1.3               : ok=11   changed=10   unreachable=0    failed=0   
192.168.1.4                : ok=11   changed=10   unreachable=0    failed=0     

使用iSCSI服务

lnmp安装完成后,安装iSCSI,设置两个lnmp的共享存储空间

制作LVS的共享
服务器上创建逻辑卷
[root@localhost ~]# systemctl enable target
[root@localhost ~]# systemctl start target
[root@localhost ~]# fdisk /dev/sdb
   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   83  Linux
/dev/sdb2        20973568    41943039    10484736   83  Linux

[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdb2
[root@localhost ~]# vgcreate vg /dev/sdb1 /dev/sdb2
[root@localhost ~]# lvcreate -L 1G -n lv /dev/vg
创建共享
# 进入交互界面
[root@localhost ~]#  targetcli
# 创建块设备
/> backstores/block/ create lvm /dev/mapper/vg-lv 
# 创建名称
/> iscsi/ create iqn.2020-07.com.server.www:lvm
# 创建访问时允许访问的名称
/> iscsi/iqn.2020-07.com.server.www:lvm/tpg1/acls create iqn.2020-07.com.client.www:client1
/> iscsi/iqn.2020-07.com.server.www:lvm/tpg1/acls create iqn.2020-07.com.client.www:client2
# 与块设备建立连接
/> iscsi/iqn.2020-07.com.server.www:lvm/tpg1/luns create /backstores/block/lvm 
# 删除原有指定的端口
/> iscsi/iqn.2020-07.com.server.www:lvm//tpg1/portals/ delete 0.0.0.0 3260
# 建立新的监听端口
/> iscsi/iqn.2020-07.com.server.www:lvm/tpg1/portals create 192.168.1.200 3260
/> saveconfig
# ls查看时,会看到刚刚的配置信息
  /> ls
o- / ..................................................................... [...]
  o- backstores .......................................................... [...]
  | o- block .............................................. [Storage Objects: 1]
  | | o- lvm ................. [/dev/mapper/vg-lv (1.0GiB) write-thru activated]
  | |   o- alua ............................................... [ALUA Groups: 1]
  | |     o- default_tg_pt_gp ................... [ALUA state: Active/optimized]
  | o- fileio ............................................. [Storage Objects: 0]
  | o- pscsi .............................................. [Storage Objects: 0]
  | o- ramdisk ............................................ [Storage Objects: 0]
  o- iscsi ........................................................ [Targets: 1]
  | o- iqn.2020-07.com.server.www:lvm ................................ [TPGs: 1]
  |   o- tpg1 ........................................... [no-gen-acls, no-auth]
  |     o- acls ...................................................... [ACLs: 2]
  |     | o- iqn.2020-07.com.client.www:client1 ............... [Mapped LUNs: 1]
  |     | | o- mapped_lun0 ............................... [lun0 block/lvm (rw)]
  |     | o- iqn.2020-07.com.client.www:client2 ............... [Mapped LUNs: 1]
  |     |   o- mapped_lun0 ............................... [lun0 block/lvm (rw)]
  |     o- luns ...................................................... [LUNs: 1]
  |     | o- lun0 ........... [block/lvm (/dev/mapper/vg-lv) (default_tg_pt_gp)]
  |     o- portals ................................................ [Portals: 1]
  |       o- 192.168.1.200:3260 ........................................... [OK]
  o- loopback ..................................................... [Targets: 0]
两台LNMP连接ISCSI

LNMP-1:

# 配置内容
[root@localhost ~]# vim /etc/iscsi/initiatorname.iscsi 
# 加入修改以下内容
InitiatorName=iqn.2020-07.com.client.www:client1
[root@localhost ~]# systemctl start iscsid 
[root@localhost ~]# systemctl enable iscsid 
# 查找存储对外提供的逻辑卷
[root@localhost ~]# iscsiadm -m discovery -p 192.168.1.200:3260 -t sendtargets
192.168.1.200:3260,1 iqn.2020-07.com.client.www:lvm
# 映射逻辑卷到Linux系统中
[root@localhost ~]# iscsiadm -m node -T iqn.2020-07.com.server.www:lvm -l
Logging in to [iface: default, target: iqn.2020-07.com.server.www:lvm, portal: 192.168.1.200,3260] (multiple)
Login to [iface: default, target: iqn.2020-07.com.server.www:lvm, portal: 192.168.1.200,3260] successful.
# 使用fdisk查看
[root@localhost ~]# fdisk -l
# 主机上多了一块sdb硬盘
磁盘 /dev/sdb:1073 MB, 1073741824 字节,2097152 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 4194304 字节

LNMP-2:
操作与1的相同,只有一步不同,其余的操作相同

[root@localhost ~]# vim /etc/iscsi/initiatorname.iscsi 
# 加入修改以下内容
InitiatorName=iqn.2020-07.com.client.www:client2

当在两个LNMP上添加好空间后,可以将

对远程硬盘的使用
挂载共享磁盘
[root@localhost ~]# mkfs.xfs /dev/sdb
meta-data=/dev/sdb               isize=512    agcount=4, agsize=327680 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=1310720, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@localhost ~]# mkdir /kkk
# 永久挂载
[root@localhost ~]# vim /etc/fstab 
# 最后一行加入内容
/dev/sdb        /kkk     xfs     defaults,_netdev 0 0
[root@localhost ~]# mount -a
[root@localhost dev]# df -Th /kkk/
文件系统       类型  容量  已用  可用 已用% 挂载点
/dev/sdb       xfs  1014M   33M  982M    4% /kkk
更改站点根目录,创建共享文件

两台主机操作一样

[root@localhost kkk]# vim /usr/local/nginx/conf/nginx.conf
# 找到并更改以下内容
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
            root           /kkk;
            fastcgi_pass   192.168.1.2:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi.conf;
        }

LNMP-1

# 在LNMP-1中创建共享php页面文件
[root@localhost kkk]# ls
index.php
[root@localhost kkk]# cat /kkk/index.php
<?php
        echo "success connect";
?>

LNMP-2

# LNMP-2重新挂载,会得到LNMP-1的php页面文件
[root@localhost ~]# umount /kkk/
[root@localhost ~]# mount -a
[root@localhost ~]# cat /kkk/index.php 
<?php
        echo "success connect";
?>

两台LNMP搭建rsync+inotify

# LNMP-1主机对LNMP-2主机做免密登录
[root@localhost ~]#  ssh-keygen
[root@localhost ~]#  ssh-copy-id root@192.168.1.3
# LNMP-2主机对LNMP-1主机做免密登录
[root@localhost ~]#  ssh-keygen
[root@localhost ~]#  ssh-copy-id root@192.168.1.2

两台LNMP安装都执行以下过程

[root@localhost ~]# tar -zxf inotify-tools-3.14.tar\(1\)\(1\).gz -C /usr/src
[root@localhost ~]# cd /usr/src/inotify-tools-3.14/
[root@localhost inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify && make && make install
[root@localhost inotify-tools-3.14]# ln -s /usr/local/inotify/bin/* /usr/local/bin/

LNMP-1

[root@localhost ~]# mkdir /ftp
# 修改
[root@localhost ~]# vim /etc/rsyncd.conf
port = 873   
address = 192.168.1.2  
uid = root   
gid = root   
use chroot = no    
max connections = 0  
pid file = /var/run/rsyncd.pid   
exclude = lost+found/   
transfer logging = yes   
log file = /var/lib/rsyncd.log    
timeout = 900   
ignore nonreadable = yes  
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2     

[ftp]     
        path = /ftp  
        comment = ftp  
        read only = no   
[root@localhost ~]# systemctl restart rsyncd
[root@localhost ~]# netstat -anput | grep 873
tcp        0      0 192.168.1.2:873        0.0.0.0:*               LISTEN      92644/rsync

```bash
[root@localhost ~]# vim rsync.sh
#!/bin/bash     
/usr/local/bin/inotifywait -mrq --format %w%f -e create,delete,close_write /ftp | while read file    
do
if [ -f $file ];then
    rsync -a --delete $file root@192.168.1.3:/ftp1
else
    rsync -a --delete /ftp/ root@192.168.1.3:/ftp1
fi
done
[root@localhost /]# chmod +x rsync.sh 
[root@localhost /]# ./rsync.sh &
[1] 92944

LNMP-2

[root@localhost ~]# mkdir /ftp1
# 修改
[root@localhost ~]# vim /etc/rsyncd.conf
port = 873   
address = 192.168.1.3 
uid = root   
gid = root   
use chroot = no    
max connections = 0  
pid file = /var/run/rsyncd.pid   
exclude = lost+found/   
transfer logging = yes   
log file = /var/lib/rsyncd.log    
timeout = 900   
ignore nonreadable = yes  
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2     

[ftp]     
        path = /ftp1  
        comment = ftp1  
        read only = no   
[root@localhost ~]# systemctl restart rsyncd
[root@localhost ~]# netstat -anput | grep 873
tcp        0      0 192.168.1.3:873        0.0.0.0:*               LISTEN      89486/rsync

```bash
[root@localhost ~]# vim rsync.sh
#!/bin/bash     
/usr/local/bin/inotifywait -mrq --format %w%f -e create,delete,close_write /ftp1 | while read file    
do
if [ -f $file ];then
    rsync -a --delete $file root@192.168.1.2:/ftp
else
    rsync -a --delete /ftp1/ root@192.168.1.2:/ftp
fi
done
[root@localhost /]# chmod +x rsync.sh 
[root@localhost /]# ./rsync.sh &
[1] 89780

验证:

# LNMP-1
[root@localhost ~]# cd /ftp/
[root@localhost ftp]# touch w
# LNMP-2
[root@localhost ftp1]# ls
w

keepalived。

两台服务器写入虚拟IP
两台LNMP执行以下操作

[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.1.250
NETMASK=255.255.255.255
NAME=lo
[root@localhost network-scripts]# systemctl restart network
# 使用路由转发
[root@localhost network-scripts]# vim /etc/sysctl.conf 
[root@localhost network-scripts]# sysctl -p
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 2
[root@localhost network-scripts]# route add -host 192.168.1.250 dev lo:0
# 加载模块
[root@localhost ~]# modprobe ip_vs
[root@localhost ~]# yum -y install ipvsadm
[root@localhost ~]# yum -y install popt-devel kernel-devel openssl-devel
[root@localhost ~]# tar -zxf keepalived-1.2.13.tar.gz -C /usr/src/
[root@localhost ~]# cd /usr/src/keepalived-1.2.13/
[root@localhost keepalived-1.2.13]# ./configure --prefix=/ --with-kernel-dir=/usr/src/kernel && make && make install
[root@localhost keepalived-1.2.13]# echo $?
0
# 文件备份
[root@localhost keepalived-1.2.13]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.bak
[root@localhost keepalived-1.-2.13]# vim /etc/keepalived/keepalived.conf 
vrrp_instance VI_1 {  
    state MASTER    
    interface ens33  
    virtual_router_id 51  
    priority 100    
    advert_int 1     
    authentication {    
        auth_type PASS   
        auth_pass 1111   
    }
    virtual_ipaddress { 
        192.168.1.250
    }
}
# 删除源文件之下的所有内容,然后重新加入新的配置
virtual_server 192.168.1.250 80 {
    delay_loop 6  
    lb_algo rr     
    lb_kind DR    
    nat_mask 255.255.255.0   
    persistence_timeout 0    
    protocol TCP    
    
    real_server 192.168.1.2 80 {    
        weight 1   
        connect_port 80    
        connect_timeout 3      
        nb_get_retry 3   
        delay_before_retry 3    
    }
    real_server 192.168.1.3 80 {
        weight 1
        connect_port 80
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
    }
}
[root@localhost keepalived-1.2.13]# scp /etc/keepalived/keepalived.conf  root@192.168.1.22:/etc/keepalived/keepalived.conf 

第二台keepalived


[root@localhost keepalived-1.2.13]# vim /etc/keepalived/keepalived.conf 
    state BACKUP  
    interface ens32    
    priority 90    
[root@localhost keepalived-1.2.13]# service keepalived start
Reloading systemd:                                         [  OK  ]
Starting keepalived (via systemctl):                       [  OK  ]
[root@localhost keepalived-1.2.13]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.250:80 rr
  -> 192.168.1.2:80               Route   1      0          0         
  -> 192.168.1.3:80               Route   1      0          0         


[root@localhost keepalived-1.2.13]# ip ad
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:37:0a:4e brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.22/24 brd 192.168.1.255 scope global ens33

客户端验证:

[root@localhost ~]# curl 192.168.1.250
kkkkk
[root@localhost ~]# curl 192.168.1.250
aaaaaaaxczxc

把keepalived1上面的网卡down掉    漂移ip就会在从上面
[root@localhost keepalived-1.2.13]# ifconfig ens33 down

透明代理

# 在ens33文件中写入IP
IPADDR0=192.168.1.1
NETMASK0=255.255.255.0
IPADDR1=192.168.2.1
NETMASK1=255.255.255.0
[root@localhost ~]# systemctl restart network

安装squid

[root@localhost ~]# yum -y install gcc*
[root@localhost ~]# tar -zxf squid-3.4.6.tar.gz -C /usr/src/
cd[root@localhost ~]# cd /usr/src/squid-3.4.6/
[root@localhost squid-3.4.6]# ./configure --prefix=/usr/local/squid --sysconfdir=/etc/ --enable-arp-acl --enable-linux-netfilter --enable-linux-tproxy --enable-async-io=100 --enable-err-language="Simplicy-Chinese" --enable-underscore --enable-poll --enable-gnuregex
[root@localhost squid-3.4.6]# make && make install
[root@localhost squid-3.4.6]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/
[root@localhost squid-3.4.6]# ln -s /usr/local/squid/bin/* /usr/local/bin/
[root@localhost squid-3.4.6]# useradd -M -s /sbin/nologin squid   
[root@localhost squid-3.4.6]# chown -R squid:squid /usr/local/squid/var/    
[root@localhost squid-3.4.6]# chmod -R 757 /usr/local/squid/var/    
[root@localhost squid-3.4.6]# vim /etc/sysctl.conf     
net.ipv4.ip_forward = 1
[root@localhost squid-3.4.6]# sysctl -p
net.ipv4.ip_forward = 1
[root@localhost squid-3.4.6]# vim /etc/squid.conf
# 修改以下内容
http_access allow all
http_port 192.168.2.1:3128 transparent    
[root@localhost squid-3.4.6]# vim /etc/squid.conf
[root@localhost squid-3.4.6]# squid -z 
[root@localhost squid-3.4.6]# squid  
[root@localhost squid-3.4.6]# netstat -anput | grep squid
tcp        0      0 192.168.2.1:3128        0.0.0.0:*               LISTEN      49828/(squid-1)     
udp        0      0 0.0.0.0:43059           0.0.0.0:*                           49828/(squid-1)     
udp6       0      0 :::39695                :::*                                49828/(squid-1) 
# 端口转发
[root@localhost squid-3.4.6]# iptables -t nat -A PREROUTING -p tcp --dport 80 -s 192.168.2.0/24 -i ens33 -j REDIRECT --to 3128

反向代理

安装

[root@localhost ~]# yum -y install automake autoconf libtool  pkgconfig graphviz ncurses-devel pcre-devel
# 将依赖包拖入虚拟机,然后执行以下命令,安装依赖包
[root@localhost ~]# rpm -ivh jemalloc-devel-5.2.0-1.1.x86_64.rpm --nodeps
[root@localhost ~]# rpm -ivh libedit-devel-3.0-12.20121213cvs.el7.x86_64.rpm --nodeps
[root@localhost ~]# rpm -ivh python-docutils-0.11-0.3.20130715svn7687.el7.noarch.rpm --nodeps
[root@localhost ~]# rpm -ivh python-Sphinx-1.6.5-3.10.1.noarch.rpm --nodeps
[root@localhost ~]# rpm -ivh libedit-3.0-12.20121213cvs.el7.x86_64.rpm --nodeps
[root@localhost ~]# tar -zxf varnish-4.1.11.tgz -C /usr/src/
[root@localhost ~]# cd /usr/src/varnish-4.1.11/
[root@localhost varnish-4.1.11]# ./configure --prefix=/usr/local/varnish && make && make install
[root@localhost varnish-4.1.11]# ln -s /usr/local/varnish/sbin/* /usr/local/sbin/
[root@localhost varnish-4.1.11]# ln -s /usr/local/varnish/bin/* /usr/local/bin/
[root@localhost varnish-4.1.11]# cp /usr/local/varnish/share/doc/varnish/example.vcl /usr/local/varnish/default.vcl

配置反向代理

probe health {
	.url = "/";     
	.timeout = 3s;     
	.interval = 1s;     
	.window = 5;     
	.threshold = 3;     
} 
backend web {        
	.host = "192.168.1.250";       
	.port = "80";     
	.probe =  health;     
} 
sub vcl_recv {    
	set req.backend_hint = web;     
	if(req.http.X-Forwarded-For){      
	set req.http.X-Forwarded-For=req.http.X-Forwarded-For + "," + client.ip;
 }    
	else{
		set req.http.X-Forwarded-For=client.ip;    
}
		
		if(req.method != "GET" && 
		   req.method != "PUT" &&
		   req.method != "POST" &&
		   req.method != "DELETE" &&
		   req.method != "HEAD" 
		   ){
			return(pipe);    
	    }
		if(req.url ~ "\.(html|htm|png|jpg$)"){   
		   return(hash);    
}
		if(req.url ~ "\.php$"){   
		   return(pass);   
}
 		   return(hash);   
}
sub vcl_hash{      
	hash_data(req.url);    
		if(req.http.host){     
			hash_data(req.http.host);      
		} 
		else{    
			hash_data(server.ip);      
 		}
}
sub vcl_pipe{     
	return(pipe);   
}
sub vcl_pass{   
	return(fetch);   
 }
sub vcl_hit{   
	return(deliver);    
}  
sub vcl_miss{    
	return(fetch);    
 }
sub vcl_backend_response{   
	if(bereq.url ~ "\.php$"){   
		set beresp.uncacheable = true;    
			return(deliver);     
   }
	if(bereq.url ~ "\.html$"){     
		set beresp.ttl = 300s;    
    }
			return(deliver);   
} 
sub vcl_deliver{ 
	if(obj.hits >0){    
		set resp.http.X-cache = "hit~~~~";    
   }
    else{
		set resp.http.X-cache = "miss~~~~";   
}   
	return(deliver);   
}    

配置完成后,先使用该主机访问虚拟IP
访问之前,先修改nginx的index.html文件

[root@localhost varnish-4.1.11]# curl 192.168.1.250
aaaaaaaxczxc
[root@localhost varnish-4.1.11]# curl 192.168.1.250
kkkkk

访问成功后,使用客户端访问

[root@zjx-client ~]# curl 192.168.1.10
kkkkk
# 中间访问的时候又缓存,需要等短时间在访问即可
[root@zjx-client ~]# curl 192.168.1.10
aaaaaaaxczxc

创建redis集群

拖入指定包
在这里插入图片描述

安装

[root@localhost ~]# tar -zxf redis-4.0.6.tar.gz -C /usr/src/
[root@localhost ~]# mv /usr/src/redis-4.0.6/ /usr/local/redis
[root@localhost ~]# cd /usr/local/redis/
[root@localhost redis]# make && make install
[root@localhost redis]# vim redis.conf 
bind 192.168.2.20   
daemonize yes       
# 启动
[root@localhost redis]# redis-server /usr/local/redis/redis.conf 
# 这样子就成功了
[root@localhost redis]# redis-cli -h 192.168.1.2 -p 6379
192.168.1.2:6379> 

给php打redis让其能够连接redis

[root@localhost ~]# unzip phpredis-master.zip 
[root@localhost ~]# ln -s /usr/local/php/bin/* /usr/local/bin/
[root@localhost ~]# ln -s /usr/local/php/sbin/* /usr/local/sbin/
[root@localhost ~]# yum  -y install autoconf
[root@localhost ~]# cd phpredis-master/
[root@localhost phpredis-master]# phpize
[root@localhost phpredis-master]# ./configure --with-php-config=/usr/local/php/bin/php-config && make && make install
[root@localhost phpredis-master]# cd  /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/
[root@localhost no-debug-non-zts-20090626]# ls
mysqli.so  redis.so
# 安装并编译完成后
[root@localhost no-debug-non-zts-20090626]# vim /usr/local/php/php.ini 
# PHP5.3.28这个版本的大约在986行
extension = redis.so
# 重启服务
[root@localhost no-debug-non-zts-20090626]# systemctl restart php-fpm
# 进去访问后,需要找到redis的模块,这样就可以了
[root@localhost no-debug-non-zts-20090626]# firefox 192.168.2.20/index.php
给mysql中创建数据
[root@localhost ~]# mysql -uroot -p
mysql> create database abc;
mysql> use abc
mysql> create table test(id int,name varchar(10));
mysql> insert into test values(1,"one"),(2,"two"),(3,"three"),(4,"four"),(5,"five");
mysql> select * from test;
mysql> grant all on abc.test to "root"@"192.168.1.2" identified by "123.com";
mysql> flush privileges;
网页:
# 我这里的访问路径在www下
[root@localhost ~]# cd /www
[root@localhost www]# vim index.php 
<?php
$redis=new Redis;
$redis->connect("192.168.1.2",6379) or die ("could not connect");
$query="select * from abc.test limit 5";
for ($key=1;$key<=5;$key++) {
        if (!$redis->get($key)) {
                $conn=mysql_connect("192.168.1.2","root","123.com");
                $result=mysql_query($query);
                while ($row=mysql_fetch_assoc($result)) {
                        $redis->set($row["id"],$row["name"]);
                }
                break;
        }
        else {
                $name="redis";
                $data[$key]=$redis->get($key);
        }
}
echo $name;
echo "<br>";
for ($key=1;$key<=5;$key++) {
        echo "id is $key";
        echo "<br>";
        echo "name is $data[$key]";
        echo "<br>";
}
?>

如果出现其他页面,刷新以下就好,如果是报错,根据报错信息查看在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值