实验准备 9台centos7机器
下面2台机器实现inotify+rsyncd实时同步 php下的wordpress和discuz
rsyncd是服务器端拷贝客户端的文件
192.168.38.107 nfs服务器 rsyncd客户端 inotify实时监控
192.168.38.112 rsyncd服务器 同步192.168.38.107的数据
192.168.38.107 nfs服务器部署
yum install nfs-utils -y 下载nfs服务的包
mkdir -pv /data/php/ 建立要共享的目录 然后把下载的wordpress和discuz包放到这个目录下 方便将来LAP机器共享
把wordpress和discuz解压
cp -a wordpress /data/php 复制wordpress到php目录下
cp -a upload /data/php 复制discuz里面的upload到php目录下
vim /etc/exports 修改nfs配置
/data/php/ 192.168.38.111(rw,no_root_squash)
/data/php/ 192.168.38.88(rw,no_root_squash)
共享/data/php目录 允许192.168.38.111(LAP服务器)和192.168.38.88读写 不切换身份 如果客户端已root身份登录 那么他的权限等同于服务器的root
/data/php 192.168.38.111(rw,no_root_squash)
systemctl start nfs 启动nfs服务
192.168.38.112 rsyncd服务器端部署
配置 rsync 服务器端的配置文件
vi /etc/rsyncd.conf
uid = root 以root身份运行rsyncd服务
gid = root
use chroot = no 不切根
max connections = 0 最大连接数不控制
ignore errors 忽略错误
exclude = lost+found/
log file = /var/log/rsyncd.log 指定rsync同步日志文件
pid file = /var/run/rsyncd.pid 指定rsync同步的pid文件
lock file = /var/run/rsyncd.lock
reverse lookup = no 不启用反向dns解析
hosts allow = 192.168.38.0/24 允许机器的网段
[backup]
path = /backup/ 拷贝到的目录
comment = backup
read only = no 不是只读 可写
auth users = rsyncuser 允许同步的用户 和后面的要对应
secrets file = /etc/rsync.pass 允许的用户和密码的存放路径 和后面设置的文件要对应
服务器端生成验证文件
echo "rsyncuser:magedu" > /etc/rsync.pass
chmod 600 /etc/rsync.pass 为了安全设置600权限 其他人就看不到用户密码了
服务器端准备目录
mkdir /backup
systemctl start rsyncd
192.168.38.107 rsyncd客户端部署 inotify实时监控/data/php/目录
yum install inotify-tools -y 下载inotify的包
客户端配置rsyncd服务授权账号密码文件
echo "magedu" > /etc/rsync.pass 和服务器的用户和密码要对应
chmod 600 /etc/rsync.pass
客户端创建inotify_rsync.sh脚本实现实时同步 使用inotify实时监测 一旦文件有改变就同步 死循环 具体参考以下脚本 注意SRC的同步的目录后面加/ 表示拷贝的是目录下的文件 而不是包含/data本身 DESC后面加::是表示的独立服务 不加2个冒号就是ssh连接的 必须加2个冒号 backup是之前/etc/rsyncd.conf配置文件里面【backup】的 表示的是他指定的文件路径
#!/bin/bash
SRC='/data/php/' 监控的文件目录
DEST='rsyncuser@rsync服务器IP::backup' 拷贝到服务器配置文件[backup]指定的目录下
inotifywait -mrq --timefmt '%Y-%m-%d %H:%M' --format '%T %w %f' -e create,delete,moved_to,close_write,attrib ${SRC} |while read DATE TIME DIR FILE;do
FILEPATH=${DIR}${FILE}
rsync -az --delete --password-file=/etc/rsync.pass $SRC $DEST && echo "At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >> /var/log/changelist.log
done
给脚本加上执行权限 后面直接运行脚本就可以实时监控了 一旦有变化就实时同步
vim /etc/sysctl.conf
sysctl -p 使其配置生效
watch -n 0.5 1s -l /back 不断的盯着/back目录 间隔0.5秒
脚本长期运行可以放到后台 可以用到screen 或 nohup 即使窗口关闭也不会停
nohup ./backup.sh &> /dev/null & 后台执行
下面3台机器实现mysql一主两从 半同步
192.168.38.200 mysql主
yum install mariadb-server -y
主服务器上配置 设置服务唯一的id号 开启二进制日志
vim /etc/my.cnf
[mysqld]
server-id=8
log_bin
systemctl start mariadb
Mysql>grant replication slave on *.* to repluser@'192.168.38.%' identified by 'centos';
设置复制同步的管理账号
设置半同步
在主上安装和开启半同步插件
安装半同步主的插件
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
开启半同步主的插件
Mysql>SET GLOBAL rpl_semi_sync_master_enabled=1;
单位是毫秒,表示如果主库等待从库回复消息的时间超过该值,就自动切换为异步复制模式
Mysql>SET GLOBAL rpl_semi_sync_master_timeout = 1000;
查看状态 有没有开启成功
Mysql>SHOW GLOBAL VARIABLES LIKE '%semi%';
192.168.38.108 mysql从
yum install mariadb-server -y
主服务器上配置 设置服务唯一的id号 只读
[mysqld]
server-id=9
read_only
systemctl start mariadb
Mysql>help change master to 查看模板 改成自己需要同步的主机
Mysql>CHANGE MASTER TO
MASTER_HOST='192.168.38.200',
MASTER_USER='repluser',
MASTER_PASSWORD='centos',
MASTER_PORT=3306,
MASTER_LOG_FILE='mariadb-bin.000001',
MASTER_LOG_POS=400;
Mysql>show slave status\G;
Mysql>start slave;
192.168.38.110 mysql从 同时实现半同步
yum install mariadb-server -y
主服务器上配置 设置服务唯一的id号 只读
[mysqld]
server-id=10
read_only
systemctl start mariadb
Mysql>help change master to 查看模板 改成自己需要同步的主机
Mysql>CHANGE MASTER TO
MASTER_HOST='192.168.38.200',
MASTER_USER='repluser',
MASTER_PASSWORD='centos',
MASTER_PORT=3306,
MASTER_LOG_FILE='mariadb-bin.000001',
MASTER_LOG_POS=400;
Mysql>show slave status\G;
Mysql>start slave;
在从上安装和开启半同步插件
安装半同步从的插件
Mysql>INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
开启半同步从的插件
Mysql>SET GLOBAL rpl_semi_sync_slave_enabled=1;
检查是否安装成功
Mysql>show variables like '%semi%';
重新启动slave
Mysql>stop slave;
Mysql>start slave;
下面2台机器实现LAP服务器 http网站挂载的是nfs服务器上的wordpress和discuz文件
2台机器部署都一样 为了实现负载均衡
192.168.38.111部署
清华yum安装php7.3 httpd
yum install httpd -y
yum install nfs-utils -y
把nfs服务器上的/data/php下的wordpress和discuz挂载到本机的http网页下
chown -R apache.apache wordpress/ 更改wordpress所属用户和所属组为apache
cp wordpress/wp-config-sample.php wordpress/wp-config.php 拷贝配置文件并且改名
vim wp-config.php 更改配置文件 和数据库建立的数据一一对应
192.168.38.200 的mysql主上部署管理wordpress的账号
新建wpdb库和wpuser用户
mysql> create database wordpress;
mysql> grant all on wordpress.* to wordpress@'192.168.38.%' identified by "centos";
mysql> flush privileges; 刷新
192.168.38.111上部署PHP-FPM7.3(此版本比仓库epel的版本新,加速效果更好)
yum install https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-7.rpm
在清华epel源上下载epel仓库
ls /etc/yum.repos.d/ 查看发现多了很多epel源
vim /etc/yum.repos.d/remi-php73.repo 启用remi-php73.repo源
[remi-php73]
enabled=1 0改为1 启用这个yum源
yum install httpd php73-php-fpm php73-php-mysqlnd php73-php-opcache -y
此时可以安装php7.3相关包了
vim /etc/httpd/conf.d/test.conf 配置httpd文件 使其收到.php后缀就转给php-fpm相关包处理 写上下面代码
DirectoryIndex index.php
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1
systemctl restart httpd php73-php-fpm
vim test.php 可以在网页上查看opcache模块有没有启用成功
电脑上访问httpd服务http://192.168.38.111/wordpress 安装
搭建discuz
mv upload discuz 改名 方便区别访问
chown -R apache.apache discuz
192.168.38.200 的mysql主上部署管理discuz的账号
mysql > create database ultrax;
mysql > grant all on ultrax.* to discuz@'192.168.38.%' identified by 'centos';
window浏览器访问http://192.168.38.111/discuz安装
如果提示差xml就得在对应的php服务器上安装对应的php-xml包 然后重启php-fpm服务
yum install php73-php-xmlrpc -y
systemctl restart php73-php-fpm
192.168.38.88部署 和 192.168.38.111 部署一样 账号共用mysql的管理账号
mount -o rw 192.168.38.107:/data/php /var/www/html/
vim /etc/yum.repos.d/remi-php73.repo 启用remi-php73.repo源
[remi-php73]
enabled=1 0改为1 启用这个yum源
yum install httpd php73-php-fpm php73-php-mysqlnd php73-php-opcache
php73-php-xmlrpc -y
此时可以安装php7.3相关包了
vim /etc/httpd/conf.d/test.conf 配置httpd文件 使其收到.php后缀就转给php-fpm相关包处理 写上下面代码
DirectoryIndex index.php
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1
systemctl restart httpd php73-php-fpm
192.168.38.240部署powerdns服务
yum install -y pdns pdns-backend-mysql
yum install mariadb-server -y
systemctl start mariadb
Mysql>CREATE DATABASE powerdns;
Mysql>GRANT ALL ON powerdns.* TO 'powerdns'@'localhost' IDENTIFIED BY 'magedu';
Mysql>use powerdns;
创建powerdns数据库中的表,参看下面文档实现
https://doc.powerdns.com/md/authoritative/backend-generic-mysql/
打开上面网页 复制Default Schema 下面的代码 在mysql中运行 然后就创建出所需要的表了
配置PowerDNS使用mariadb作为后台数据存储
vim /etc/pdns/pdns.conf,查找到包含launch= 的行,修改并添加下面的内容
launch=gmysql
gmysql-host=localhost
gmysql-port=3306
gmysql-dbname=powerdns
gmysql-user=powerdns
gmysql-password=magedu
systemctl start pdns
安装httpd和php相关包
yum -y install httpd php php-devel php-gd php-mcrypt php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mhash gettext
systemctl start httpd
systemctl enable httpd
下载poweradmin程序,并解压缩到相应目录
wget http://downloads.sourceforge.net/project/poweradmin/poweradmin-2.1.7.tgz
tar xvf poweradmin-2.1.7.tgz -C /var/www/html
cd /var/www/html
mv poweradmin-2.1.7 poweradmin
访问下面地址,启动PowerAdmin的网页安装向导:
http://powerdns服务器IP/poweradmin/install/
按照下面页面说明,在数据库中创建用户并授权
mysql>
GRANT SELECT, INSERT, UPDATE, DELETE
ON powerdns.*
TO ‘admin’@‘localhost’
IDENTIFIED BY ‘centos’;
按下面页面说明,创建config.in.php文件内容
vim /var/www/html/poweradmin/inc/config.inc.php 将方框的代码复制到文件中
安装完毕后,删除install目录
rm -rf /var/www/html/poweradmin/install/
不删除登录不上
http://192.168.38.240/poweradmin/ 登录 用户名admin 密码magedu 这个在第3步设置
登进去设置dns解析
192.168.38.222 客户端部署 指定dns解析服务器为poweradmin的主机ip
vim /etc/resolv.conf
2台LAP服务器 rm -rf /etc/httpd/conf.d/test.conf 同时修改主配置文件
vim /etc/httpd/conf/httpd.conf 最下面添加以下代码
addType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
ProxyRequests Off
<virtualhost *:80>
servername wordpress.net
documentroot /var/www/html/wordpress
<directory /var/www/html/wordpress>
require all granted
</directory>
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/wordpress/$1
CustomLog "logs/access_wordpress_log" common
</virtualhost>
<virtualhost *:80>
servername discuz.net
documentroot /var/www/html/discuz
<directory /var/www/html/discuz>
require all granted
</directory>
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/discuz/$1
CustomLog "logs/access_discuz_log" common
</virtualhost>
192.168.38.222用客户端linux的桌面浏览器测试discuz.net wordpress.net