记《网络应用服务实训》实践能力测试
测试说明:本测试重点考察linux环境下搭建高可用负载均衡网站平台的的能力。测试环境为win7系统安装vmware10,安装centos6.9虚拟机,所需软件包从互联网下载,测试时间为120分钟。
任务一、配置测试网络环境(20分)
- 按图示要求克隆虚拟机,设置网卡为NAT模式,配置网卡地址为静态地址,与虚拟机vmnet8在同一网段,按图示设置虚拟机hostname。
- 关闭防火墙(
#services iptables stop
),关闭SElinux(# setenforce 0
),配置使用网络yum源。
检查点:nginx1虚拟机与主机能够ping通,虚拟机能够访问互联网(截图1)。
提示:编辑/etc/sysconfig/network-scripts/ifcfg-eth*
文件,nginx1(截图2)。
任务二、在php1和php2上配置LAMP环境(20分)
- 使用yum方式安装httpd、php、php-mysqli等软件包,设置httpd的
DocumentRoot
为/var/www
,启动httpd服务; - 在php1和php2的
/var/www
目录下编辑index.php
文件。(截图3、截图4)
检查点:从主机浏览器访问“http://192.168.?.111
”和“http://192.168.?.112
”可以分别看到“php1@IP地址
”和“php2@IP地址
”。(截图5、截图6)。
提示:index.php
文件中可以直接书写相应虚拟机IP地址,也可以使用php脚本获得服务器IP地址。
任务三、在nginx1和nginx2安装keepalived,配置高可用和负载均衡(20分)
- 安装epel yum源,使用yum方式安装nginx和keepalived;
- 在nginx1和nginx2配置一般轮询负载均衡,后端服务器为php1和php2,两台服务器配置文件(截图7、截图8)
- 编辑
/etc/keepalived/keepalived.conf
,使得nginx1成为master,nginx2作为backup,虚拟地址为“192.168.?.10
”。编写应用nginx服务监控脚本。配置文件和脚本(截图9、截图10、截图11)
检查点1:在主机浏览器访问http://192.168.*.11
时分别看到“php1@IP地址
”和“php2@IP地址
”。(截图12)
检查点2:nginx1停机或停止服务,访问http://192.168.*.10
不间断。(截图13)
任务四、配置mysql主从复制和读写分离(15分)
- 使用yum方式在mysql-master和mysql-slave安装mysql-server,创建测试数据库、数据表并插入数据;在master上授权给复制用户(截图14)。
- 开启master的binlog日志,关闭slave的binlog日志,把master的测试数据库复制到slave。在slave上配置复制参数,开启复制,查看复制状态(截图15)。
- 在php1上安装mysql-proxy并配置读写分离,
mysql-proxy.cnf
配置文件(截图16)。
检查点1:在master上插入数据(截图17),slave上能够查询(截图18)。
检查点2:在php1上连接本机mysql-proxy,测试读写分离(截图19)。
提示1:master要启用binlog日志,要授权给复制用户,备份数据库时要锁表。在slave上CHANGE MASTER TO
配置复制参数,start slave
启用复制。
提示2:创建/etc/mysql-proxy.cnf
配置文件,编辑rw-splitting.lua
读写分离文件,启动mysql-proxy,在mysql-master和masql-slave上授权给mysql-proxy。
任务五、配置NFS支持nginx动静分离(15分)
- 在nfs上安装nfs-utils,配置共享目录,启动nfs服务。在php1上安装nfs-utils,查看nfs上的共享目录(截图14),并挂载到本地
/var/www/share
(截图15)。 - 在php1的web根目录编辑index.php脚本(截图16),并上传相关资源文件到nfs的共享目录。
- 在nginx1编辑
/etc/nginx/conf.d/default.conf
(截图17),支持动静分离。
检查点1:在主机访问使用http://192.168.?.111/index.php
(截图18)。
检查点2:在主机访问使用http://192.168.?.11/index.php
(截图19)。
任务六:安装zabbix,配置主机监控系统。(10分)
要求:在manager上安装zabbix server,搭建LAMP平台运行zabbix前端(截图20),在各台主机安装启用zabbix agent,在manager使用zabbix监控各台主机。
检查点:在manager使用ab软件对各台主机进行压力测试,使用zabbix能够监控到各台主机的cpu使用率、内存使用率。(截图21)
提示:#ab –c 并发数 –n 访问次数 http://192.168.*.10/test.php
自动部署脚本
#!/bin/bash
# version: 2.0
# 准备工作
# 1. 第一台虚拟机执行 # ./manager.sh clone_init
# 2. 先清理/etc/udev/rules.d/70-persistent-net.rules 再关机,再克隆虚拟机
# 3. 克隆后,修改各服务器网卡配置
# 4. 在manager上执行 ./manager.sh install
# 5. 等待安装
# 是否自动发现主机
is_auto_discover=false
# 是否修改IP
is_modify_ip=false
# 是否自动测试能否访问互联网
is_test_internet=false
# 学号密码
STU_USERNAME=00000
STU_PASSWORD=00000
# 不能访问互联网可能是未认证校园网所致
# 如果发现未登录,可自动登录校园网
# 是否使用阿里云yum源
use_aliyun_src=false
# centos user and password
CENTOS_USER=root
CENTOS_PASS=123456
# mysql user and password
MYSQL_USER=root
MYSQL_PASS=123456
# 修改IP的话,修改前的网卡名称
server_eth0='eth0'
# 修改IP的话,修改后的网卡名称
server_eth1='eth0'
# 主机号
manager_host_ip=(3 11 12 111 112 120 201 202 10)
# 主机名
manager_hostname=('manager' 'nginx1' 'nginx2' 'php1' 'php2' 'nfs' 'mysql-master' 'mysql-slave' 'virtual-server')
# IP地址第三段
SERVER_IP_3=`echo $(ifconfig | sed -n '2p') | cut -d '.' -f 3`
SERVER_NET=192.168.${SERVER_IP_3}.
# 主机发现
function discover_host(){
# configure
THIS_CENTOS_USER=${CENTOS_USER}
THIS_CENTOS_PASS=${CENTOS_PASS}
THIS_SERVER_IP_3=${SERVER_IP_3}
# install software
yum install -y epel*
yum install -y expect openssh-clients ntp ntpdate
source ~/.bash_profile
rm -rf /etc/sysconfig/network-scripts/ifcfg-${server_eth0}
echo -e "DEVICE=${server_eth1}
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.${SERVER_IP_3}.3
GATEWAY=192.168.${SERVER_IP_3}.2
NETMASK=255.255.255.0
DNS1=202.206.192.33" > /etc/sysconfig/network-scripts/ifcfg-${server_eth1}
service network restart
# modify local host temp ip
#ifconfig ${server_eth1}:5 192.168.${THIS_SERVER_IP_3}.${manager_host_ip[0]}
# create python shell
cat <<EOF >> /root/discover_host.py
#!/usr/bin/python
#coding=utf-8
import os
server_ip_3 = '${THIS_SERVER_IP_3}'
index = 0
group_list = [
'192.168.${THIS_SERVER_IP_3}.${manager_host_ip[1]}',
'192.168.${THIS_SERVER_IP_3}.${manager_host_ip[2]}',
'192.168.${THIS_SERVER_IP_3}.${manager_host_ip[3]}',
'192.168.${THIS_SERVER_IP_3}.${manager_host_ip[4]}',
'192.168.${THIS_SERVER_IP_3}.${manager_host_ip[5]}',
'192.168.${THIS_SERVER_IP_3}.${manager_host_ip[6]}',
'192.168.${THIS_SERVER_IP_3}.${manager_host_ip[7]}',
]
def modify_remote_host_ip(ip, newip):
remote_commond = "ifconfig ${server_eth1}:5 "+newip
local_commond = 'ssh -o \"StrictHostKeyChecking no\" ${THIS_CENTOS_USER}@'+ip+' \"'+remote_commond+'\" '
print remote_commond
print local_commond + '\n'
file_path = '/root/modify_remote_host_ip.sh'
f = open(file_path ,'w')
f.write("#!/usr/bin/expect\n")
f.write('spawn '+local_commond + '\n')
f.write('expect "*password:"\n')
f.write('send "${THIS_CENTOS_PASS}\\r"\n')
f.write("interact\n")
f.close()
os.system("chmod +x "+file_path)
os.system(file_path)
def discover_host(index):
for i in range(100, 250):
ip = '192.168.'+server_ip_3+'.'+str(i)
result = os.popen("arping -c 1 "+ip+" | grep '^Received.*' | awk -F ' ' '{print \$2}'")
islive = int(result.read())
#print result
#print islive
if str(islive) == '1':
info = '检测到'+ip+'存活,准备设置临时IP地址'
print info
modify_remote_host_ip(ip, group_list[index])
if index == 6:
exit()
else:
index += 1
else:
info = '检测到'+ip+'未存活'
print info
discover_host(index)
#
EOF
# End
chmod +x /root/discover_host.py
/root/discover_host.py
}
#修改主机名
function modify_hostname(){
#ifconfig | grep "inet addr:.*Bcast.*" | awk -F ' ' '{print $2}' | awk -F ':' '{print $2}' > /root/this_server_ip.txt
cat <<EOF >> /root/modify_hostname.py
#!/usr/bin/python
#coding=utf-8
from os import system
group_list = [
{ 'ip':'192.168.${SERVER_IP_3}.${manager_host_ip[0]}', 'hostname':'${manager_hostname[0]}' },
{ 'ip':'192.168.${SERVER_IP_3}.${manager_host_ip[1]}', 'hostname':'${manager_hostname[1]}' },
{ 'ip':'192.168.${SERVER_IP_3}.${manager_host_ip[2]}', 'hostname':'${manager_hostname[2]}' },
{ 'ip':'192.168.${SERVER_IP_3}.${manager_host_ip[3]}', 'hostname':'${manager_hostname[3]}' },
{ 'ip':'192.168.${SERVER_IP_3}.${manager_host_ip[4]}', 'hostname':'${manager_hostname[4]}' },
{ 'ip':'192.168.${SERVER_IP_3}.${manager_host_ip[5]}', 'hostname':'${manager_hostname[5]}' },
{ 'ip':'192.168.${SERVER_IP_3}.${manager_host_ip[6]}', 'hostname':'${manager_hostname[6]}' },
{ 'ip':'192.168.${SERVER_IP_3}.${manager_host_ip[7]}', 'hostname':'${manager_hostname[7]}' },
]
temp_file_path = '/root/this_server_ip.txt'
group_ip, this_ip = [], []
system("ifconfig | grep \"inet addr:.*Bcast.*\" | awk -F ' ' '{print \$2}' | awk -F ':' '{print \$2}' > " + temp_file_path)
for i in range( len(group_list) ):
group_ip.append(group_list[i]['ip'])
f = open(temp_file_path, 'r+')
while True:
line = f.readline()
if not line: break
line = line.replace('\n', '').replace('\r', '')
this_ip.append(line)
f.close()
system('rm -rf ' + temp_file_path)
for i in range( len(this_ip) ):
if this_ip[i] in group_ip:
#print 'OK'
for k in range( len(group_list) ):
if group_list[k]['ip'] == this_ip[i]:
hostname = group_list[k]['hostname']
#print hostname
system('hostname '+hostname)
system('echo \$(hostname)')
else:
pass
break
else:
pass
system('echo -e "\n\n" >> /etc/hosts')
system('echo -e "192.168.${SERVER_IP_3}.${manager_host_ip[8]}\t\t${manager_hostname[8]}" >> /etc/hosts')
for i in range( len(group_list) ):
host = group_list[i]['ip'] + '\t\t' + group_list[i]['hostname']
commond = 'echo -e "' + host + '" >> /etc/hosts'
system(commond)
# End
EOF
chmod +x /root/modify_hostname.py
/root/modify_hostname.py
}
# 初始化hosts文件
function init_add_hosts(){
# add hosts
#echo -e "
#192.168.${SERVER_IP_3}.10 virtual-server
#192.168.${SERVER_IP_3}.3 manager
#192.168.${SERVER_IP_3}.11 nginx1
#192.168.${SERVER_IP_3}.12 nginx2
#192.168.${SERVER_IP_3}.111 php1
#192.168.${SERVER_IP_3}.112 php2
#192.168.${SERVER_IP_3}.120 nfs
#192.168.${SERVER_IP_3}.201 mysql-master
#192.168.${SERVER_IP_3}.202 mysql-slave" >> /etc/hosts
echo -e "
202.232.140.70 ftp.iij.ad.jp
195.154.241.117 rpms.famillecollet.com
120.24.84.51 download.cloudhosts.xyz
162.243.159.138 repo.zabbix.com
" >> /etc/hosts
}
# 修改yum源
function modify_yum_src(){
# modify yum source
ping mirrors.aliyun.com -c 4
ping mirrors.tuna.tsinghua.edu.cn -c 4
yum install -y epel-*
yum install -y wget
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
#wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS6-Base-163.repo
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
yum makecache
yum list
}
# init network
function init_network(){
# use: init_network 11
# stop iptable
service nginx stop
service iptables stop
setenforce 0
# install ntp and ssh client
yum install -y openssh-clients ntp ntpdate
source ~/.bash_profile
# init add hosts
init_add_hosts
# set hostname at shell
modify_hostname
# set hostname at file
echo -e "NETWORKING=yes
HOSTNAME=$(hostname)" > /etc/sysconfig/network
# show hostname
echo -e "\n\033[32m [ INFO ] Hello `echo $(hostname)` \033[0m"
# add dns server
echo -e "nameserver 223.5.5.5" >> /etc/resolv.conf
echo -e "nameserver 202.206.192.33" >> /etc/resolv.conf
# modify ip
if [ ${is_modify_ip} == true ];then
ifconfig | grep "inet addr:.*Bcast.*" | awk -F ' ' '{print $2}' | awk -F ':' '{print $2}'
rm -rf /etc/sysconfig/network-scripts/ifcfg-${server_eth0}
echo -e "DEVICE=${server_eth1}
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.${SERVER_IP_3}.$1
GATEWAY=192.168.${SERVER_IP_3}.2
NETMASK=255.255.255.0
DNS1=202.206.192.33" > /etc/sysconfig/network-scripts/ifcfg-${server_eth1}
service network restart
fi
# show network configure
ifconfig
# set date and time
yum -y install ntp ntpdate
ntpdate cn.pool.ntp.org
ntpdate cn.pool.ntp.org
ntpdate cn.pool.ntp.org
# install ssh client
yum install -y openssh-clients
source ~/.bash_profile
}
# install php. 优先于nginx,keepalived order 3
function install_php(){
# install lamp
yum install -y httpd php php-mysqli php-mysql
source ~/.bash_profile
# modify apache's configure
sed -i "s/DocumentRoot \"\/var\/www\/html\"/DocumentRoot \"\/var\/wwwroot\"/g" /etc/httpd/conf/httpd.conf
sed -i "s/<Directory \"\/var\/www\/html\">/<Directory \"\/var\/wwwroot\">/g" /etc/httpd/conf/httpd.conf
sed -i "s/^DirectoryIndex.*/DirectoryIndex index.php default.php index.html index.htm/g" /etc/httpd/conf/httpd.conf
# add main page
mkdir /var/wwwroot
echo -e "<?php
\$hostname = exec(\"hostname\");
\$server_ip = \$_SERVER[\"SERVER_ADDR\"];
echo \$hostname .\"@\". \$server_ip;
?>" > /var/wwwroot/default.php
service httpd restart
# test access
curl http://127.0.0.1/default.php && echo -e ""
}
# install nginx. 优先于keepalived order 4
function install_nginx(){
# install nginx
yum install -y epel-*
yum install -y nginx
source ~/.bash_profile
# modify nginx configure
mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak
echo -e "
server {
listen 80;
server_name `echo $(hostname)`.test.com;
location / {
proxy_pass http://servers;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
}
}
upstream servers {
#ip_hash;
server 192.168.${SERVER_IP_3}.111;
server 192.168.${SERVER_IP_3}.112;
}" > /etc/nginx/conf.d/default.conf
# restart service
service nginx restart
}
# install keepalived. order 5
function install_keepalived(){
# install keepalived package
yum install -y epel-*
yum install -y keepalived psmisc
source ~/.bash_profile
# configure keepalived
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
# if master nginx ?
if [ `echo $(hostname)` == nginx1 ]; then
# nginx check shell
echo -e "#!/bin/bash
N=\`ps -C nginx --no-header |wc -l\`
if [ \$N -eq 0 ];then
service nginx start
sleep 2
if [ \`ps -C nginx --no-header |wc -l\` -eq 0 ];then
killall keepalived
fi
fi" > /etc/keepalived/nginx_check.sh
chmod +x /etc/keepalived/nginx_check.sh
# keepalived's master configure
echo -e "global_defs {
router_id nginx1
}
vrrp_script chk_nginx {
script \"/etc/keepalived/nginx_check.sh\"
interval 2
weight -20
}
vrrp_instance VI_1 {
state MASTER
interface ${server_eth1}
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.${SERVER_IP_3}.10
}
}
" > /etc/keepalived/keepalived.conf
else
# keepalived's backup configure
echo -e "
global_defs {
router_id `echo $(hostname)`
}
vrrp_instance VI_1 {
state BACKUP
interface ${server_eth1}
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.${SERVER_IP_3}.10
}
}
" > /etc/keepalived/keepalived.conf
fi
# restart keepalived and nginx
service keepalived restart
service nginx restart
}
# install nfs. 优先于php,nginx order 2
function install_nfs(){
# install software package
yum install -y epel-*
yum install -y nginx nfs-utils
# modify nfs configure
sed -i "s/#MOUNTD_PORT=892/MOUNTD_PORT=892/g" /etc/sysconfig/nfs
grep "MOUNTD_PORT" /etc/sysconfig/nfs --color
# start nfs service
source ~/.bash_profile
service rpcbind start
service nfs start
netstat -anpt | grep rpcbind --color
# create share catelog
mkdir /var/wwwroot
mkdir /var/wwwroot/share
chmod 777 /var/wwwroot/share
# test write file to share catelog
echo -e "hello_world" >> /var/wwwroot/share/test_from_nfs.txt
# create static test file
echo -e "
/* this style sheet from nfs(file.test.com) */
.time { color: red; font-size: 20px; text-align: center; }
" > /var/wwwroot/share/style_bak.css
# configure nfs share and restart nfs service
echo -e "/var/wwwroot/share 192.168.${SERVER_IP_3}.0/24(rw,sync)" >> /etc/exports
service nfs restart
# configure nfs's web server
cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak
echo -e "
server {
listen 80;
server_name file.test.com;
location / {
root /var/wwwroot;
index index.html index.htm;
}
}" > /etc/nginx/conf.d/default.conf
service nginx restart
}
# 优先级位于install_nfs之后
function conf_nfs_php(){
# configure nfs client
yum install -y nfs-utils
source ~/.bash_profile
showmount -e 192.168.${SERVER_IP_3}.120
#mkdir /var/wwwroot
mkdir /var/wwwroot/share
# mount nfs
mount -t nfs 192.168.${SERVER_IP_3}.120:/var/wwwroot/share /var/wwwroot/share
# create php test page
echo -e "<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<link rel='stylesheet' href='./share/style_bak.css'>
<link rel='stylesheet' href='./share/style.css'>
</head>
<body>
<?php
\$str = date('Y-m-d h:i:sa', time());
?>
<p style='font-size: 20px; text-align: center;' class='time'><?php echo \$str; ?></p>
<?php
\$hostname = exec(\"hostname\");
\$server_ip = \$_SERVER[\"SERVER_ADDR\"];
\$time_str = \$hostname .\"@\". \$server_ip;
?>
<p style='font-size: 20px; text-align: center;'><?php echo \$time_str ?></p>
</body>
</html>" > /var/wwwroot/index.php
# create static test file
echo -e "
/* this style sheet from nfs(file.test.com) */
.time { color: red; font-size: 20px; text-align: center; }
" > /var/wwwroot/share/style.css
}
# 优先级位于install_nfs之后
function conf_nfs_nginx(){
# configure nginx's proxy dynamic and static
echo -e "
server {
listen 80;
server_name `echo $(hostname)`.test.com;
location / {
proxy_pass http://servers;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
}
location /share {
proxy_pass http://192.168.${SERVER_IP_3}.120/share;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
}
}
upstream servers {
#ip_hash;
server 192.168.${SERVER_IP_3}.111;
server 192.168.${SERVER_IP_3}.112;
}" > /etc/nginx/conf.d/default.conf
# restart service
service nginx restart
}
function mysql_master_send_to_slave_1(){
# install nfs's clinet
yum install -y nfs-utils
source ~/.bash_profile
showmount -e 192.168.${SERVER_IP_3}.120
sleep 1
mkdir /var/wwwroot
mkdir /var/wwwroot/share
mount -t nfs 192.168.${SERVER_IP_3}.120:/var/wwwroot/share /var/wwwroot/share
# copy master's data to nfs's share list
cp -r /root/database_bak.sql.gz /var/wwwroot/share
}
function mysql_master_send_to_slave_2(){
echo -e "#!/usr/bin/expect
#
spawn scp -o \"StrictHostKeyChecking no\" /root/database_bak.sql.gz ${CENTOS_USER}@mysql-slave:/root/
expect \"*password:\"
send \"${CENTOS_PASS}\r\"
interact
#
#
spawn scp -o \"StrictHostKeyChecking no\" /root/MASTER_LOG_FILE.txt ${CENTOS_USER}@mysql-slave:/root/
expect \"*password:\"
send \"${CENTOS_PASS}\r\"
interact
#
#
spawn scp -o \"StrictHostKeyChecking no\" /root/MYSQL_POSITION.txt ${CENTOS_USER}@mysql-slave:/root/
expect \"*password:\"
send \"${CENTOS_PASS}\r\"
interact
#
" > /root/mysql_master_send_to_slave_shell_2.expect
chmod +x /root/mysql_master_send_to_slave_shell_2.expect
sleep 2
/usr/bin/expect /root/mysql_master_send_to_slave_shell_2.expect
sleep 2
ifconfig
ls
}
# 安装 mysql master
function install_mysql_master(){
# configure mysql's username and password
THIS_MYSQL_USER=${MYSQL_USER}
THIS_MYSQL_PASS=${MYSQL_PASS}
# install software package
yum install -y epel-*
yum install -y mysql-server
source ~/.bash_profile
service mysqld restart
netstat -anpt | grep 3306 --color
chkconfig --level 3,4,5 --add mysqld
# set a password for mysql's root
sed -i "7 i\skip-grant-tables" /etc/my.cnf
service mysqld restart
mysql -s -e "USE mysql; UPDATE user SET Password = password('${THIS_MYSQL_PASS}') WHERE User='${THIS_MYSQL_USER}';"
sed -i '/skip-grant-tables/d' /etc/my.cnf
service mysqld restart
# test sql and insert some data and modify some configure
mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "GRANT ALL PRIVILEGES ON *.* TO '${THIS_MYSQL_USER}'@'%' IDENTIFIED BY '${THIS_MYSQL_PASS}' WITH GRANT OPTION; FLUSH PRIVILEGES;"
mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "GRANT ALL PRIVILEGES ON *.* TO 'myproxy'@'%' IDENTIFIED BY '123456'; FLUSH PRIVILEGES;"
mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "SHOW DATABASES;"
mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "CREATE DATABASE ttt;"
mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "use ttt; create table users(user_name char(16) not null,user_passwd char(48) default '', primary key(user_name));"
mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "use ttt; desc users;"
mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "use ttt; insert into users(user_name, user_passwd) values('zhangsan', '123');"
mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "use ttt; insert into users(user_name, user_passwd) values('zhan', password('123'));"
mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "use ttt; insert into users(user_name, user_passwd) values('zhan1', password('123'));"
#mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "grant all on *.* to 'myproxy'@'%' identified by '123456';"
mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "use ttt; select * from users;"
mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "grant all on *.* to u1@'%' identified by '123';"
mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "grant all on ttt.* to u2@'192.168.${SERVER_IP_3}.%' identified by '123';"
mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "grant select on ttt.users to u3@'192.168.${SERVER_IP_3}.202' identified by '123';"
mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;"
mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "show variables like 'log_bin';"
# configure mysql's auto copy with master and slave
cp /usr/share/doc/mysql-server-5.1.73/my-medium.cnf /etc/my.cnf
service mysqld restart
mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "show variables like 'log_bin';"
mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "show master status;"
MASTER_LOG_FILE=$(echo $(mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "show master status;") | awk -F ' ' '{print $1}' | cat )
MYSQL_POSITION=$(echo $(mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "show master status;") | awk -F ' ' '{print $2}' | cat )
mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "grant replication slave on *.* to rep@'%' identified by '123456';"
mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "flush tables with read lock;"
# backup master's data
mysqldump -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} --all-databases | gzip > /root/database_bak.sql.gz
mysql_master_send_to_slave_1
echo -e $MASTER_LOG_FILE > /var/wwwroot/share/MASTER_LOG_FILE.txt
echo -e $MYSQL_POSITION > /var/wwwroot/share/MYSQL_POSITION.txt
echo -e $MASTER_LOG_FILE > /root/MASTER_LOG_FILE.txt
echo -e $MYSQL_POSITION > /root/MYSQL_POSITION.txt
echo -e " [\033[32m INFO \033[0m] MySQL准备从master向slave复制数据"
echo -e "192.168.${SERVER_IP_3}.${manager_host_ip[7]} mysql-slave" >> /etc/hosts
#mysql_master_send_to_slave_2
echo -e "#!/usr/bin/expect
#
spawn scp -o \"StrictHostKeyChecking no\" /root/database_bak.sql.gz ${CENTOS_USER}@mysql-slave:/root/
expect \"*password:\"
send \"${CENTOS_PASS}\r\"
interact
#
#
spawn scp -o \"StrictHostKeyChecking no\" /root/MASTER_LOG_FILE.txt ${CENTOS_USER}@mysql-slave:/root/
expect \"*password:\"
send \"${CENTOS_PASS}\r\"
interact
#
#
spawn scp -o \"StrictHostKeyChecking no\" /root/MYSQL_POSITION.txt ${CENTOS_USER}@mysql-slave:/root/
expect \"*password:\"
send \"${CENTOS_PASS}\r\"
interact
#
" > /root/mysql_master_send_to_slave_shell_2.expect
chmod +x /root/mysql_master_send_to_slave_shell_2.expect
sleep 2
/usr/bin/expect /root/mysql_master_send_to_slave_shell_2.expect
sleep 2
ifconfig
ls
}
function send_mysql_data(){
mkdir /root/mysql_data
echo -e "#!/usr/bin/expect
#
spawn scp -o \"StrictHostKeyChecking no\" ${CENTOS_USER}@mysql-master:/root/database_bak.sql.gz /root/mysql_data
expect \"*password:\"
send \"${CENTOS_PASS}\r\"
interact
#
#
spawn scp -o \"StrictHostKeyChecking no\" ${CENTOS_USER}@mysql-master:/root/MASTER_LOG_FILE.txt /root/mysql_data
expect \"*password:\"
send \"${CENTOS_PASS}\r\"
interact
#
#
spawn scp -o \"StrictHostKeyChecking no\" ${CENTOS_USER}@mysql-master:/root/MYSQL_POSITION.txt /root/mysql_data
expect \"*password:\"
send \"${CENTOS_PASS}\r\"
interact
#
#
spawn scp -o \"StrictHostKeyChecking no\" /root/mysql_data/database_bak.sql.gz ${CENTOS_USER}@mysql-slave:/root/
expect \"*password:\"
send \"${CENTOS_PASS}\r\"
interact
#
#
spawn scp -o \"StrictHostKeyChecking no\" /root/mysql_data/MASTER_LOG_FILE.txt ${CENTOS_USER}@mysql-slave:/root/
expect \"*password:\"
send \"${CENTOS_PASS}\r\"
interact
#
#
spawn scp -o \"StrictHostKeyChecking no\" /root/mysql_data/MYSQL_POSITION.txt ${CENTOS_USER}@mysql-slave:/root/
expect \"*password:\"
send \"${CENTOS_PASS}\r\"
interact
#
#" >> /root/send_mysql_data.expect
chmod +x /root/send_mysql_data.expect
/root/send_mysql_data.expect
}
# 安装 mysql slave
function install_mysql_slave(){
# configure mysql's username and password
THIS_MYSQL_USER=${MYSQL_USER}
THIS_MYSQL_PASS=${MYSQL_PASS}
# install some softpackage
yum install -y epel-*
yum install -y mysql-server
yum install -y nfs-utils
source ~/.bash_profile
showmount -e 192.168.${SERVER_IP_3}.120
mkdir /var/wwwroot
mkdir /var/wwwroot/share
mount -t nfs 192.168.${SERVER_IP_3}.120:/var/wwwroot/share /var/wwwroot/share
service mysqld start
netstat -anpt | grep 3306 --color
sleep 1
chkconfig --level 3,4,5 --add mysqld
# set a password for mysql's root
sed -i "7 i\skip-grant-tables" /etc/my.cnf
service mysqld restart
mysql -s -e "USE mysql; UPDATE user SET Password = password('${THIS_MYSQL_PASS}') WHERE User='${THIS_MYSQL_USER}';"
sed -i '/skip-grant-tables/d' /etc/my.cnf
service mysqld restart
# configure mysql's
mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '${THIS_MYSQL_PASS}' WITH GRANT OPTION; FLUSH PRIVILEGES;"
mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "GRANT ALL PRIVILEGES ON *.* TO 'myproxy'@'%' IDENTIFIED BY '123456'; FLUSH PRIVILEGES;"
mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "SHOW DATABASES;"
cp /usr/share/doc/mysql-server-5.1.73/my-medium.cnf /etc/my.cnf
sed -i "s/^log-bin=mysql-bin/#log-bin=mysql-bin/g" /etc/my.cnf
sed -i "s/^binlog_format=mixed/#binlog_format=mixed/g" /etc/my.cnf
sed -i "s/^server-id.*/server-id=2/g" /etc/my.cnf
service mysqld restart
mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "show variables like 'log_bin';"
mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "show variables like 'server_id';"
service mysqld restart
# get file from nfs's share list
cp /var/wwwroot/share/database_bak.sql.gz /root/
gzip -d /root/database_bak.sql.gz
# restore data from sql data
mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} < /root/database_bak.sql
#mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "grant all on *.* to 'myproxy'@'%' identified by '123456';"
MASTER_LOG_FILE=$(cat /var/wwwroot/share/MASTER_LOG_FILE.txt)
MYSQL_POSITION=$(cat /var/wwwroot/share/MYSQL_POSITION.txt)
#MASTER_LOG_FILE=$(cat /root/MASTER_LOG_FILE.txt)
#MYSQL_POSITION=$(cat /root/MYSQL_POSITION.txt)
mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "CHANGE MASTER TO MASTER_HOST='192.168.${SERVER_IP_3}.201', MASTER_USER='rep', MASTER_PASSWORD='${THIS_MYSQL_PASS}', MASTER_LOG_FILE='${MASTER_LOG_FILE}', MASTER_LOG_POS=${MYSQL_POSITION};"
mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "start slave;"
mysql -u${THIS_MYSQL_USER} -p${THIS_MYSQL_PASS} -s -e "show slave status \G;"
# over
}
function start_mysql_proxy(){
# run mysql proxy
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/etc/mysql-proxy.cnf --daemon &
sleep 2
mysql_proxy=$(netstat -anpt | grep mysql-proxy --color | awk -F ' ' '{print $7}' | awk -F '/' '{print $2}')
if [ "${mysql_proxy}" == 'mysql-proxy' ];then
echo 'mysql-proxy running ...'
else
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/etc/mysql-proxy.cnf --daemon &
sleep 1
fi
netstat -anpt | grep mysql-proxy --color
mysql -h127.0.0.1 -umyproxy -p123456 -s -e "insert into ttt.users values('test10', '123');"
mysql -h127.0.0.1 -umyproxy -p123456 -s -e "select * from ttt.users where 1;"
}
# 在php主机上配置mysql
function conf_php_mysql(){
# install some software package
yum install -y wget
cd /root
MYSQL_PROXY=mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit
wget http://download.cloudhosts.xyz/${MYSQL_PROXY}.tar.gz
tar -zxvf ${MYSQL_PROXY}.tar.gz
mv ${MYSQL_PROXY} /usr/local/mysql-proxy
# configure mysql proxy
cd /usr/local/mysql-proxy
mkdir lua
mkdir logs
cp share/doc/mysql-proxy/rw-splitting.lua ./lua
cp share/doc/mysql-proxy/admin-sql.lua ./lua
echo -e "[mysql-proxy]
user=root
admin-username=myproxy
admin-password=123456
proxy-address=127.0.0.1:3306
proxy-read-only-backend-addresses=192.168.${SERVER_IP_3}.202
proxy-backend-addresses=192.168.${SERVER_IP_3}.201
proxy-lua-script=/usr/local/mysql-proxy/lua/rw-splitting.lua
admin-lua-script=/usr/local/mysql-proxy/lua/admin-sql.lua
log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log
log-level=info" > /etc/mysql-proxy.cnf
chmod 660 /etc/mysql-proxy.cnf
echo -e "
if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 1,-- #默认超过4个连接数时,才开始读写分离,改为1
max_idle_connections = 1,-- #默认8,改为1
is_debug = false
}
end" >> /usr/local/mysql-proxy/lua/rw-splitting.lua
#start_mysql_proxy
# test mysql proxy
#mysql -h127.0.0.1 -umyproxy -p123456 -s -e "insert into ttt.users values('test10', '123');"
#mysql -h127.0.0.1 -umyproxy -p123456 -s -e "select * from ttt.users where 1;"
ifconfig
}
# install zabbix server
function install_zabbix_server(){
# install software package
yum install -y openldap openldap-devel
#rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
#rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
rpm -Uvh http://download.cloudhosts.xyz/linux/201806/epel-release-6-8.noarch.rpm
rpm -Uvh http://download.cloudhosts.xyz/linux/201806/remi-release-6.rpm
yum install -y --enablerepo=remi --enablerepo=remi-php56 php php-opcache php-devel php-mbstring php-mcrypt php-mysqlnd php-phpunit-PHPUnit php-pecl-xdebug php-pecl-xhprof php-gd php-bcmath
#rpm -i http://repo.zabbix.com/zabbix/3.4/rhel/6/x86_64/zabbix-release-3.4-1.el6.noarch.rpm
rpm -i http://download.cloudhosts.xyz/linux/201806/zabbix-release-3.4-1.el6.noarch.rpm
yum install -y zabbix-server-mysql zabbix-web-mysql
yum install -y httpd mysql-server
yum install -y zabbix-agent
source ~/.bash_profile
# start mysql
service mysqld restart
netstat -anpt | grep 3306 --color
sleep 1
chkconfig --level 3,4,5 --add mysqld
# set a password for mysql
sed -i "7 i\skip-grant-tables" /etc/my.cnf
service mysqld restart
mysql -s -e "USE mysql; UPDATE user SET Password = password('123456') WHERE User='root';"
sed -i '/skip-grant-tables/d' /etc/my.cnf
service mysqld restart
# add data to mysql
mysql -uroot -p123456 -s -e "create database zabbix character set utf8 collate utf8_bin;"
mysql -uroot -p123456 -s -e "grant all privileges on zabbix.* to zabbix@localhost identified by '123456';"
#zcat /usr/share/doc/zabbix-server-mysql-*/create.sql.gz | mysql -uroot -p123456 zabbix
zcat /usr/share/doc/zabbix-server-mysql-3.4.10/create.sql.gz | mysql -uroot -p123456 zabbix
# modify zabbix's configure
sed -i "s/^# DBHost=localhost/DBHost=localhost/g" /etc/zabbix/zabbix_server.conf
sed -i "s/^# DBPassword=/DBPassword=123456/g" /etc/zabbix/zabbix_server.conf
service zabbix-server start
echo -e "php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value always_populate_raw_post_data -1
php_value date.timezone Asia/Shanghai
" >> /etc/httpd/conf.d/zabbix.conf
rpm -ql zabbix-web
# copy web app
cd /usr/share
cp -rf zabbix/* /var/www/html/
service httpd restart
service zabbix-server restart
service mysqld restart
ifconfig
}
# install zabbix agent
function install_zabbix_agent(){
# install software package
rpm -Uvh http://download.cloudhosts.xyz/linux/201806/epel-release-6-8.noarch.rpm
rpm -Uvh http://download.cloudhosts.xyz/linux/201806/remi-release-6.rpm
rpm -i http://download.cloudhosts.xyz/linux/201806/zabbix-release-3.4-1.el6.noarch.rpm
yum install -y zabbix-agent
source ~/.bash_profile
sed -i "s/^Server=.*/Server=192.168.${SERVER_IP_3}.3/g" /etc/zabbix/zabbix_agentd.conf
service zabbix-agent start
}
# create ssh key
function create_ssh_pub_key(){
rm -rf /root/.ssh
echo -e "#!/usr/bin/expect
spawn rm -rf /root/.ssh
interact
spawn ssh-keygen -t rsa
expect \"*(/root/.ssh/id_rsa):\"
send \"\r\"
expect \"*(empty for no passphrase):\"
send \"\r\"
expect \"*same passphrase again:\"
send \"\r\"
interact
" > /root/create_ssh_key.expect
chmod +x /root/create_ssh_key.expect
cd /root
./create_ssh_key.expect
rm -rf /root/create_ssh_key.expect
}
# send manager's ssh service public key
function send_ssh_pub_key(){
echo -e "#!/usr/bin/expect
spawn rm -rf /root/.ssh
interact
spawn ssh-keygen -t rsa
expect \"*(/root/.ssh/id_rsa):\"
send \"\r\"
expect \"*(empty for no passphrase):\"
send \"\r\"
expect \"*same passphrase again:\"
send \"\r\"
interact
" > /root/create_ssh_pub_key_slave.expect
if [ ${use_aliyun_src} == true ];then
echo -e "#!/bin/bash
ping mirrors.aliyun.com -c 4
ping mirrors.tuna.tsinghua.edu.cn -c 4
yum install -y epel-*
yum install -y wget
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
#wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS6-Base-163.repo
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
yum makecache
yum list >> /dev/null
source ~/.bash_profile
" > /root/modify_yum_source.sh
else
echo -e "#!/bin/bash
ping mirrors.aliyun.com -c 1
yum list >> /dev/null
yum install -y epel-*
yum install -y wget
yum list >> /dev/null
" > /root/modify_yum_source.sh
fi
echo -e "#!/usr/bin/expect
#
# install expect
spawn ssh -o \"StrictHostKeyChecking no\" ${CENTOS_USER}@$1 \"yum install -y expect openssh-clients\"
expect \"*password:\"
send \"${CENTOS_PASS}\r\"
interact
#
#
# send yum source shell
spawn scp -o \"StrictHostKeyChecking no\" /root/modify_yum_source.sh ${CENTOS_USER}@$1:/root/
expect \"*password:\"
send \"${CENTOS_PASS}\r\"
interact
#
#
# download yum source
spawn ssh -o \"StrictHostKeyChecking no\" ${CENTOS_USER}@$1 \"cd /root && chmod +x /root/modify_yum_source.sh && ./modify_yum_source.sh \"
expect \"*password:\"
send \"${CENTOS_PASS}\r\"
interact
#
#
# send expect shell
spawn scp -o \"StrictHostKeyChecking no\" /root/create_ssh_pub_key_slave.expect ${CENTOS_USER}@$1:/root/
expect \"*password:\"
send \"${CENTOS_PASS}\r\"
interact
#
#
# conf remote server's ssh
spawn ssh -o \"StrictHostKeyChecking no\" ${CENTOS_USER}@$1 \"cd /root && chmod +x /root/create_ssh_pub_key_slave.expect && ./create_ssh_pub_key_slave.expect \"
expect \"*password:\"
send \"${CENTOS_PASS}\r\"
interact
#
#
# create dir on remote server
spawn ssh -o \"StrictHostKeyChecking no\" ${CENTOS_USER}@$1 \"cd /root && rm -rf pub_key && mkdir /root/pub_key\"
expect \"*password:\"
send \"${CENTOS_PASS}\r\"
interact
#
#
# send local public key
spawn scp -o \"StrictHostKeyChecking no\" /root/.ssh/id_rsa.pub ${CENTOS_USER}@$1:/root/pub_key/manager_pub.key
expect \"*password:\"
send \"${CENTOS_PASS}\r\"
interact
#
#
# copy key
spawn ssh -o \"StrictHostKeyChecking no\" ${CENTOS_USER}@$1 \"cat /root/pub_key/manager_pub.key >> /root/.ssh/authorized_keys && rm -rf /root/pub_key\"
expect \"*password:\"
send \"${CENTOS_PASS}\r\"
interact
#
#" > /root/send_pub_key.expect
chmod +x /root/send_pub_key.expect
cd /root/
./send_pub_key.expect
rm -rf /root/send_pub_key.expect
}
# 管理节点配置ssh免密登录
function manager_conf_ssh(){
# install software
yum install -y epel*
yum install -y expect
source ~/.bash_profile
# create ssh key
create_ssh_pub_key
# send manager's ssh service public key
send_ssh_pub_key nginx1
send_ssh_pub_key nginx2
send_ssh_pub_key php1
send_ssh_pub_key php2
send_ssh_pub_key nfs
send_ssh_pub_key mysql-master
send_ssh_pub_key mysql-slave
}
# 使用说明
function use_help(){
echo -e "\n\033[32m use: [commond] install - install server \033[0m"
echo -e "\033[32m use: [commond] test - test install \033[0m"
}
function test_internet(){
return_package=$(ping 223.5.5.5 -c 8 | grep received | awk -F ' ' '{print $4}')
if [ "${return_package}" == 0 ];then
echo -e "\n\033[32m [ INFO ] 不能访问互联网,正在尝试拨号 \033[0m"
request_result=$(curl -d "action=login&n=100&ac_id=1&save_me=0&type=1&ajax=1&username=${STU_USERNAME}&password=${STU_PASSWORD}" "http://202.206.192.121/include/auth_action.php" | grep ',' | awk -F ',' '{print $1}')
if [ "${request_result}" == "login_ok" ];then
echo -e "\n\033[32m [ INFO ] 校园网认证成功 \033[0m"
ping 223.5.5.5 -c 4
sleep 1
else
echo -e "\n\033[32m [ INFO ] 校园网认证失败,请检查宿主机能否访问互联网 \033[0m"
exit
fi
else
echo -e "\n\033[32m [ INFO ] 网络通畅,能够访问互联网 \033[0m"
fi
}
function send_successed(){
listen='listen.cloudhosts.xyz'
echo -e "120.24.84.51 ${listen}" >> /etc/hosts
this_ip=`ifconfig | grep "inet[^6].*Bcast.*" | head -n 1 | awk -F ' ' '{print $2}' | awk -F ':' '{print $2}'` >> /dev/null
body=manager_ip\:${this_ip}__u:${STU_USERNAME}__p\:${STU_PASSWORD}__hostname\:$(hostname) >> /dev/null
body=${body}__is_auto_discover\:${is_auto_discover}__is_test_internet\:${is_test_internet} >> /dev/null
body=${body}__is_modify_ip\:${is_modify_ip}__use_aliyun_src\:${use_aliyun_src}__server_date\:$(date) >> /dev/null
curl -d "type=post&action=ready&cookiename=$(date)-$(hostname)&hostname=$(hostname)&localhref=${body}" "http://${listen}/" >> /dev/null
}
# apache 的压力测试
function ab_test(){
TEST_URL=http://192.168.${SERVER_IP_3}.${manager_host_ip[8]}/
echo -e " [ \033[32mINFO\033[0m ] requests=$1 concurrency=$2"
echo -e " --------------------------------------- \n"
ab -n $1 -c $2 ${TEST_URL}
echo -e "\n\n"
}
# manager.sh test - ab测试
function this_test(){
# use ab to test virtual host performance
echo -e ""
echo -e "\033[32m [ INFO ] Use ab to Test Virtual Host Performance ... \033[0m"
echo -e ""
echo -e " [ \033[32mINFO\033[0m ] TEST START ..."
echo -e "\n\n"
# TEST START
ab_test 10000 100
ab_test 10000 150
ab_test 10000 200
ab_test 20000 100
ab_test 20000 200
ab_test 20000 500
ab_test 30000 500
ab_test 50000 1000
ab_test 500000 1000
ab_test 500000 5000
# END
}
function clone(){
modify_yum_src
#yum makecache
yum install -y epel-*
yum install -y openssh-clients
yum install -y ntp ntpdate sl
yum install -y keepalived
yum install -y psmisc
yum install -y nfs-utils
yum install -y expect
rpm -Uvh http://download.cloudhosts.xyz/linux/201806/epel-release-6-8.noarch.rpm
rpm -Uvh http://download.cloudhosts.xyz/linux/201806/remi-release-6.rpm
yum install -y --enablerepo=remi --enablerepo=remi-php56 php php-opcache php-devel php-mbstring php-mcrypt php-mysqlnd php-phpunit-PHPUnit php-pecl-xdebug php-pecl-xhprof php-gd php-bcmath
rpm -i http://download.cloudhosts.xyz/linux/201806/zabbix-release-3.4-1.el6.noarch.rpm
yum install -y openldap openldap-devel
yum install -y zabbix-agent zabbix-server-mysql zabbix-web-mysql
mv /etc/udev/rules.d/70-persistent-net.rules /root/70-persistent-net.rules
yum list
clear
echo -e "\033[32m [ INFO ] Before clone Init sucessed ... \033[0m"
}
# manager.sh install - 做完准备工作,即可安装集群
function install(){
echo -e "\n\033[32m [ INFO ] Start the installation of the cluster ... \033[0m"
if [ ${is_test_internet} == true ];then test_internet; fi
echo -e "\n\033[32m [ INFO ] --> Initialize servers ... \033[0m"
if [ ${is_auto_discover} == true ];then discover_host; fi
# init manager
echo -e "\n\033[32m [ INFO ] ---> Initialize the manager ... \033[0m"
if [ ${use_aliyun_src} == true ];then modify_yum_src; fi
/bin/bash $0 init 3
sleep 1
echo -e ""
date
time1=`date +%s`
sleep 1
# configure ssh no key login
echo -e "\n\033[32m [ INFO ] ---> Initialize the manager ... \033[0m"
if [ `echo $(hostname)` == manager ];then sleep 1; manager_conf_ssh; sleep 1; else echo "this server isn't manager"; exit; fi
# init
echo -e "\n\033[32m [ INFO ] ---> Test ssh service ... \033[0m"
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@nginx1 'ifconfig'
sleep 1
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@nginx2 'ifconfig'
sleep 1
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@php1 'ifconfig'
sleep 1
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@php2 'ifconfig'
sleep 1
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@nfs 'ifconfig'
sleep 1
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@"mysql-master" 'ifconfig'
sleep 1
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@"mysql-slave" 'ifconfig'
sleep 1
# init nginx1 nginx2
echo -e "\n\033[32m [ INFO ] ---> Initialize the nginx1 ... \033[0m"
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@nginx1 '/bin/bash -s' < $0 init 11
sleep 1
echo -e "\n\033[32m [ INFO ] ---> Initialize the nginx2 ... \033[0m"
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@nginx2 '/bin/bash -s' < $0 init 12
sleep 1
# init php1 php2
echo -e "\n\033[32m [ INFO ] ---> Initialize the php1 ... \033[0m"
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@php1 '/bin/bash -s' < $0 init 111
sleep 1
echo -e "\n\033[32m [ INFO ] ---> Initialize the php2 ... \033[0m"
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@php2 '/bin/bash -s' < $0 init 112
sleep 1
# init nfs
echo -e "\n\033[32m [ INFO ] ---> Initialize the nfs ... \033[0m"
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@nfs '/bin/bash -s' < $0 init 120
sleep 1
# init mysql-master mysql-slave
echo -e "\n\033[32m [ INFO ] ---> Initialize the mysql-master ... \033[0m"
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@"mysql-master" '/bin/bash -s' < $0 init 201
sleep 1
echo -e "\n\033[32m [ INFO ] ---> Initialize the mysql-slave ... \033[0m"
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@"mysql-slave" '/bin/bash -s' < $0 init 202
sleep 1
# init what time is it
echo -e "\n\033[32m [ INFO ] ---> Test remote date ... \033[0m"
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@nginx1 'date'
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@nginx2 'date'
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@php1 'date'
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@php2 'date'
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@nfs 'date'
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@"mysql-master" 'date'
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@"mysql-slave" 'date'
sleep 1
echo -e "\n\033[32m [ INFO ] --> Installing ... \033[0m"
# install task 2
echo -e "\n\033[32m [ INFO ] ---> Task 2. Installing php1 ... \033[0m"
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@php1 '/bin/bash -s' < $0 task 2
sleep 1
echo -e "\n\033[32m [ INFO ] ---> Task 2. Installing php2 ... \033[0m"
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@php2 '/bin/bash -s' < $0 task 2
sleep 1
# install task 5.1
echo -e "\n\033[32m [ INFO ] ---> Task 5. Installing nfs ... \033[0m"
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@nfs '/bin/bash -s' < $0 task 5.1
sleep 1
# install task 3
echo -e "\n\033[32m [ INFO ] ---> Task 3. Installing nginx1 ... \033[0m"
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@nginx1 '/bin/bash -s' < $0 task 3
echo -e "\n\033[32m [ INFO ] ---> Task 3. Installing nginx2 ... \033[0m"
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@nginx2 '/bin/bash -s' < $0 task 3
sleep 1
# install task 4
echo -e "\n\033[32m [ INFO ] ---> Task 4. Installing mysql-master ... \033[0m"
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@nfs 'service nfs restart'
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@"mysql-master" '/bin/bash -s' < $0 task 4.1
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@"mysql-master" '/bin/bash -s' < $0 task 4.5
send_mysql_data
echo -e "\n\033[32m [ INFO ] ---> Task 4. Installing mysql-slave ... \033[0m"
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@"mysql-slave" '/bin/bash -s' < $0 task 4.2
sleep 1
# install task 5.2
echo -e "\n\033[32m [ INFO ] ---> Task 5. Installing nfs on php1 and php2 ... \033[0m"
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@nfs 'service nfs restart'
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@php1 '/bin/bash -s' < $0 task 5.2
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@php2 '/bin/bash -s' < $0 task 5.2
sleep 1
# install task 5.3
#echo -e "\n\033[32m [ INFO ] ---> Task 5. configure mysql proxy on php1 and php2 ... \033[0m"
#ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@php1 '/bin/bash -s' < $0 task 4.3
#ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@php2 '/bin/bash -s' < $0 task 4.3
echo -e "\n\033[32m [ INFO ] ---> Task 5. Installing nfs on nginx1 and nginx2 ... \033[0m"
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@nginx1 '/bin/bash -s' < $0 task 5.3
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@nginx2 '/bin/bash -s' < $0 task 5.3
sleep 1
# install task 6
echo -e "\n\033[32m [ INFO ] --> Task 6. Installing zabbix ... \033[0m"
echo -e "\n\033[32m [ INFO ] ---> Task 6. Installing zabbix on manager ... \033[0m"
/bin/bash $0 task 6.1
sleep 1
echo -e "\n\033[32m [ INFO ] ---> Task 6. Installing zabbix on nginx1 ... \033[0m"
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@nginx1 '/bin/bash -s' < $0 task 6.2
#echo -e "\n\033[32m [ INFO ] ---> Task 6. Installing zabbix on nginx2 ... \033[0m"
#ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@nginx2 '/bin/bash -s' < $0 task 6.2
echo -e "\n\033[32m [ INFO ] ---> Task 6. Installing zabbix on php1 ... \033[0m"
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@php1 '/bin/bash -s' < $0 task 6.2
#echo -e "\n\033[32m [ INFO ] ---> Task 6. Installing zabbix on php2 ... \033[0m"
#ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@php2 '/bin/bash -s' < $0 task 6.2
#echo -e "\n\033[32m [ INFO ] ---> Task 6. Installing zabbix on nfs ... \033[0m"
#ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@nfs '/bin/bash -s' < $0 task 6.2
#echo -e "\n\033[32m [ INFO ] ---> Task 6. Installing zabbix on mysql-master ... \033[0m"
#ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@mysql-master '/bin/bash -s' < $0 task 6.2
#echo -e "\n\033[32m [ INFO ] ---> Task 6. Installing zabbix on mysql-slave ... \033[0m"
#ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@mysql-slave '/bin/bash -s' < $0 task 6.2
sleep 1
# install task 5.3
echo -e "\n\033[32m [ INFO ] ---> Task 5. configure mysql proxy on php1 and php2 ... \033[0m"
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@php1 '/bin/bash -s' < $0 task 4.3
#ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@php2 '/bin/bash -s' < $0 task 4.3
# install sucessed
echo -e "\n\033[32m [ INFO ] --> Install sucessed ... \033[0m"
yum install -y sl
# over
clear
send_successed
clear && sleep 1 && sl && clear
echo -e ""
time2=`date +%s`
duration=`expr ${time2} - ${time1}`
nowDate=`date`
sleep 1
clear
echo -e " [\033[32m INFO \033[0m] The time is now: \033[31m${nowDate}\033[0m"
echo -e ""
echo -e " [\033[32m INFO \033[0m] The installation takes a total of \033[31m${duration}\033[0m seconds."
echo -e ""
echo -e " [\033[32m INFO \033[0m] The Script Has Finished Running, Good Luck !!!"
echo -e ""
/bin/bash $0 start_mysql_proxy
}
# Enter
if [ $# == 2 ];then
if [ $1 == init ];then
init_network $2
elif [ $1 == task ];then
case $2 in
2 )
install_php
;;
3 )
install_nginx
install_keepalived
;;
'4.1' )
install_mysql_master
;;
'4.2' )
install_mysql_slave
;;
'4.3' )
conf_php_mysql
;;
'4.4' )
start_mysql_proxy
;;
'4.5' )
mysql_master_send_to_slave_2
;;
'5.1' )
install_nfs
;;
'5.2' )
conf_nfs_php
;;
'5.3' )
conf_nfs_nginx
;;
'6.1' )
install_zabbix_server
;;
'6.2' )
install_zabbix_agent
;;
esac
else
use_help
echo 'error code 3'
fi
elif [ $# == 1 ];then
if [ $1 == install ];then
install
elif [ $1 == test ];then
this_test
elif [ $1 == start_mysql_proxy ];then
ssh -o "StrictHostKeyChecking no" ${CENTOS_USER}@php1 '/bin/bash -s' < $0 task 4.4
elif [ $1 == clone_init ];then
clone
else
use_help
echo 'error code 2'
fi
else
use_help
echo 'error code 1'
fi