lnmp论坛文档
LNMP演示
1、服务器准备
准备web01、web02、check三台虚拟机,可以通过对母机的克隆获得
IP地址设置,建议设置和宿主机同一网段,这样我们可以在宿主机的浏览器上打开我们的服务,比较方便
虚拟机主机名 | IP地址 | 操作系统 |
---|---|---|
web01 | 172.16.0.10 | centOS7 |
web02 | 172.16.0.11 | centOS7 |
check | 172.16.0.12 | centOS7 |
web01和web02的环境相似,web02由web01克隆产生,因此我们对web02和check先不做处理
配置web01的初始化环境,第一步,配置网卡
# vim /etc/sysconfig/network-scripts
先将web01网卡设置为静态,UUID更改后三位,保持与另外两台虚拟机不一样,尤其不要和web02的UUID重复。然后在配置文件末尾加上以下
IP地址:IPADDR=172.16.0.10
子网掩码:NETMASK=255.255.255.0
网关地址:GATEWAY=172.16.0.1
DNS地址:DNS1=172.16.0.1
把网络适配器改为桥接模式
# systemctl restart network
# ping -c 3 www.baidu.com
可以ping通表示已经与宿主机联通并可以共享宿主机的wifi上外网了
第二步,配置yum源,yum源用得不多,一般也不用yum对软件进行安装,因此设置默认谷歌源即可
# cd /etc/yum.repos.d/
# vim rhel7.repo
加入以下内容
[rhel7]
name=rhel7
baseurl=file:///media/cdrom
enabled=1
gpgcheck=0
# mkdir -p /media/cdrom
# mount /dev/cdrom /media/cdrom
# vim /etc/fstab
在最后一行加入以下内容
/dev/cdrom /media/cdrom iso9660 defaults 0 0
第三步,因此是测试环境,并非实际生产环境,我们关闭防火墙、SELinux和Networkmanger
# systemctl stop firewalld
# systemctl disable firewalld
# setenforce 0
# vim /etc/selinux/config
将CSELINUX的参数改为disabled
# systemctl stop NetworkManger
# systemctl disable NetworkManger
第四步,进行时间同步,这一步对check上配置的监控系统很重要,这里建议把web01、web02、check全部进行时间戳的同步
# mount /dev/sr0 /mnt
# yum install ntpdate
# ntpdate cn.ntp.org.cn
最后我们设置一下主机名,并且在hosts文件中对应一下
# hostnamectl set-hostname web01
# vim /etc/hosts
在文件最后加入以下内容,注意最好与原来的内容格式对应一下,这样可读性比较高
172.16.0.10 web01
到此为止,web01服务器已经准备完毕
2、LNMP在web01构建
###(1)配置LNMP环境
LNMP顾名思义就说linux+nginx+mysql+php-fpm,nginx是一个轻量级的服务器,功能强大,可以实现反向代理、动静分离、七层负载均衡等操作,解析项目静态部分效率高,并且服务器稳定性好,可以实现热部署,缺点是无法解析项目动态部分,这时就需要php-fpm来解析项目的动态部分。nginx将动态部分转发给php-fpm,共同来对项目进行运行部署。mysql是一个免费的关系型数据库管理系统,功能强大,用户基数大
实际工作中,web服务器和mysql服务器一般不会放在同一个物理机上
lnmp架构需要c语言、c++语言、Perl语言的编译器以及编译支持函数库,因此我们先把这些依赖包全部安装
# yum install -y apr* autoconf automake bison bzip2 bzip2* compat* cpp curl curl-devel fontconfig fontconfig-devel freetype freetype* freetype-devel gcc gcc-c++ gd gettext gettext-devel glibc kernel kernel-headers keyutils keyutils-libs-devel krb5-devel libcom_err-devel libpng libpng-devel libjpeg* libsepol-devel libselinux-devel libstdc++-devel libtool* libgomp libxml2 libxml2-devel libXpm* libtiff libtiff* make mpfr ncurses* ntp openssl openssl-devel patch pcre-devel perl php-common php-gd policycoreutils telnet t1lib t1lib* nasm nasm* wget zlib-devel
构建LNMP的需要大量tar包,这里我们用《Linux就该这么学》中与书配套的站点服务器资源,此处表示感谢
# cd /usr/local/src
# wget https://www.linuxprobe.com/Software/cmake-2.8.11.2.tar.gz
# wget https://www.linuxprobe.com/Software/Discuz_X3.2_SC_GBK.zip
# wget https://www.linuxprobe.com/Software/freetype-2.5.3.tar.gz
# wget https://www.linuxprobe.com/Software/jpegsrc.v9a.tar.gz
# wget https://www.linuxprobe.com/Software/libgd-2.1.0.tar.gz
# wget https://www.linuxprobe.com/Software/libmcrypt-2.5.8.tar.gz
# wget https://www.linuxprobe.com/Software/libpng-1.6.12.tar.gz
# wget https://www.linuxprobe.com/Software/libvpx-v1.3.0.tar.bz2
# wget https://www.linuxprobe.com/Software/mysql-5.6.19.tar.gz
# wget https://www.linuxprobe.com/Software/nginx-1.6.0.tar.gz
# wget https://www.linuxprobe.com/Software/openssl-1.0.1h.tar.gz
# wget https://www.linuxprobe.com/Software/php-5.5.14.tar.gz
# wget https://www.linuxprobe.com/Software/pcre-8.35.tar.gz
# wget https://www.linuxprobe.com/Software/t1lib-5.1.2.tar.gz
# wget https://www.linuxprobe.com/Software/tiff-4.0.3.tar.gz
# wget https://www.linuxprobe.com/Software/yasm-1.2.0.tar.gz
# wget https://www.linuxprobe.com/Software/zlib-1.2.8.tar.gz
CMkae是常用的编译工具,先对其进行解压、编译、安装
# tar xzvf cmake-2.8.11.2.tar.gz
# cd cmake-2.8.11.2/
# ./configure
# make && make install
到此LNMP初始环境构建完成,下面安装mysql、nginx、php,mysql和nginx的安装顺序可以调换,但是php一定要在nginx之后安装,因为需要和nginx进行关联,mysql作为独立的软件运行
###(2)配置mysql
在实际工作中,mysql的安装一般采用源码包的安装或GLIBC的方式安装,这里用源码包进行安装与配置,源码包的优点是可定制性比较高,缺点是安装与升级比较麻烦
先设置一个用于维护mysql的用户,方便权限管理
# useradd mysql -s /sbin/nologin
创建一个用于保存数据库程序程序和文件的目录
# mkdir -p /usr/local/mysql/var
# chown -Rf mysql:mysql /usr/local/mysql
安装mysql
# tar xzvf mysql-5.6.19.tar.gz
# cd mysql-5.6.19/
# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/var -DSYSCONFDIR=/etc
# make && make install
删除/etc的默认配置文件,并且运行mysql中的mysql_install_db脚本,指定mysql服务程序的保存目录、文件保存目录
# rm -rf /etc/my.cnf
# cd /usr/local/mysql
# ./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var
把配置文件链接到/etc中
# ln -s my.cnf /etc/my.cnf
# cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
# chmod 755 /etc/rc.d/init.d/mysqld
打开复制的脚本文件,46、47行更改mysql文件路径
39 #
40 # If you want to affect other MySQL variables, you should make your changes
41 # in the /etc/my.cnf, ~/.my.cnf or other MySQL configuration files.
42
43 # If you change base dir, you must also change datadir. These may get
44 # overwritten by settings in the MySQL configuration files.
45
46 basedir=/usr/local/mysql
47 datadir=/usr/local/mysql/var
48
启动mysql服务,并设置为开机自启
# service mysqld start
# chkconfig mysqld on
配置环境变量
# vim /etc/profile
64
65 for i in /etc/profile.d/*.sh ; do
66 if [ -r "$i" ]; then
67 if [ "${-#*i}" != "$-" ]; then
68 . "$i"
69 else
70 . "$i" >/dev/null
71 fi
72 fi
73 done
74 export PATH=$PATH:/usr/local/mysql/bin
75 unset i
76 unset -f pathmunge
对mysql需要的依赖文件链接过来
# mkdir /var/lib/mysql
# ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql
# ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock
# ln -s /usr/local/mysql/include/mysql /usr/include/mysql
设置mysql的安全策略
# mysql_secure_installation
设置密码以及其他安全策略后,可以通过mysql -u root -p通过密码登录
(3)配置nginx
配置nginx前解决一下依赖关系
# cd /usr/local/src
# tar xzvf pcre-8.35.tar.gz
# cd pcre-8.35
# ./configure --prefix=/usr/local/pcre
# make && make install
# cd /usr/local/src
# tar xzvf openssl-1.0.1h.tar.gz
# cd openssl-1.0.1h
# ./config --prefix=/usr/local/openssl
# make && make install
# vim /etc/profile
64
65 for i in /etc/profile.d/*.sh ; do
66 if [ -r "$i" ]; then
67 if [ "${-#*i}" != "$-" ]; then
68 . "$i"
69 else
70 . "$i" >/dev/null
71 fi
72 fi
73 done
74 export PATH=$PATH:/usr/local/mysql/bin:/usr/local/openssl/bin
75 unset i
76 unset -f pathmunge
# source /etc/profile
# cd /usr/local/src
# tar xzvf zlib-1.2.8.tar.gz
# cd zlib-1.2.8
# ./configure --prefix=/usr/local/zlib
# make && make install
依赖环境解决好了,首先创建一个用于执行nginx的账户
# cd ..
# useradd www -s /sbin/nologin
编译、安装nginx
# tar xzvf nginx-1.6.0.tar.gz
# cd nginx-1.6.0/
# ./configure --prefix=/usr/local/nginx --without-http_memcached_module --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-openssl=/usr/local/src/openssl-1.0.1h --with-zlib=/usr/local/src/zlib-1.2.8 --with-pcre=/usr/local/src/pcre-8.35
# make && make install
手动编写启动脚本文件
# vim /etc/rc.d/init.d/nginx
#!/bin/bash
# nginx - this script starts and stops the nginx daemon
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /etc/nginx/nginx.conf
# config: /usr/local/nginx/conf/nginx.conf
# pidfile: /usr/local/nginx/logs/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
lockfile=/var/lock/subsys/nginx
make_dirs() {
# make required directories
user=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
if [ -z "`grep $user /etc/passwd`" ]; then
useradd -M -s /bin/nologin $user
fi
options=`$nginx -V 2>&1 | grep 'configure arguments:'`
for opt in $options; do
if [ `echo $opt | grep '.*-temp-path'` ]; then
value=`echo $opt | cut -d "=" -f 2`
if [ ! -d "$value" ]; then
# echo "creating" $value
mkdir -p $value && chown -R $user $value
fi
fi
done
}
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
make_dirs
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
#configtest || return $?
stop
sleep 1
start
}
reload() {
#configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac
设置脚本权限,开启nginx服务并且设置nginx为开机自启
# chmod 755 /etc/rc.d/init.d/nginx
# /etc/rc.d/init.d/nginx restart
# chkconfig nginx on
在浏览器输入http://172.16.0.10如果看到nginx欢迎页面表示安装成功,默认请求80端口,因为我们不需要添加端口号也可以访问到
(4)配置php服务
安装配置php服务前先解决众多依赖包
# tar zxvf yasm-1.2.0.tar.gz
# cd yasm-1.2.0
# ./configure
# make && make install
# cd ..
# tar zxvf libmcrypt-2.5.8.tar.gz
# cd libmcrypt-2.5.8
# ./configure
# make && make install
# cd ..
# tar xjvf libvpx-v1.3.0.tar.bz2
# cd libvpx-v1.3.0
# ./configure --prefix=/usr/local/libvpx --enable-shared --enable-vp9
# make && make install
# cd ..
# tar zxvf tiff-4.0.3.tar.gz
# cd tiff-4.0.3
# ./configure --prefix=/usr/local/tiff --enable-shared
# make && make install
# cd ..
# tar zxvf libpng-1.6.12.tar.gz
# cd libpng-1.6.12
# ./configure --prefix=/usr/local/libpng --enable-shared
# make && make install
# cd ..
# tar zxvf freetype-2.5.3.tar.gz
# cd freetype-2.5.3
# ./configure --prefix=/usr/local/freetype --enable-shared
# make && make install
# cd ..
# tar zxvf jpegsrc.v9a.tar.gz
# cd jpeg-9a
# ./configure --prefix=/usr/local/jpeg --enable-shared
# make && make install
# cd ..
# tar zxvf libgd-2.1.0.tar.gz
# cd libgd-2.1.0
# ./configure --prefix=/usr/local/libgd --enable-shared --with-jpeg=/usr/local/jpeg --with-png=/usr/local/libpng --with-freetype=/usr/local/freetype --with-fontconfig=/usr/local/freetype --with-xpm=/usr/ --with-tiff=/usr/local/tiff --with-vpx=/usr/local/libvpx
# make && make install
# cd ..
# tar zxvf t1lib-5.1.2.tar.gz
# cd t1lib-5.1.2
# ./configure --prefix=/usr/local/t1lib --enable-shared
# make && make install
# ln -s /usr/lib64/libltdl.so /usr/lib/libltdl.so
# cp -frp /usr/lib64/libXpm.so* /usr/lib/
开始安装php服务,同时需要配置依赖包的安装目录路径等功能
# cd ..
# tar -zvxf php-5.5.14.tar.gz
# cd php-5.5.14
# export LD_LIBRARY_PATH=/usr/local/libgd/lib
# ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-mysql-sock=/tmp/mysql.sock --with-pdo-mysql=/usr/local/mysql --with-gd --with-png-dir=/usr/local/libpng --with-jpeg-dir=/usr/local/jpeg --with-freetype-dir=/usr/local/freetype --with-xpm-dir=/usr/ --with-vpx-dir=/usr/local/libvpx/ --with-zlib-dir=/usr/local/zlib --with-t1lib=/usr/local/t1lib --with-iconv --enable-libxml --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-opcache --enable-mbregex --enable-fpm --enable-mbstring --enable-ftp --enable-gd-native-ttf --with-openssl --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --enable-session --with-mcrypt --with-curl --enable-ctype
# make && make install
更改php服务程序目录中配置文件的位置
# ln -s /usr/local/php/etc/php.ini /etc/php.ini
# cp php.ini-production /usr/local/php/etc/php.ini
# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
# ln -s /usr/local/php/etc/php-fpm.conf /etc/php-fpm.conf
打开php-fpm配置文件,更改所属用户和所属组的名称以及pid文件保存目录
# vim /usr/local/php/etc/php-fpm.conf
1 ;;;;;;;;;;;;;;;;;;;;;
2 ; FPM Configuration ;
3 ;;;;;;;;;;;;;;;;;;;;;
4
5 ; All relative paths in this configuration file are relative to PHP's instal l
6 ; prefix (/usr/local/php). This prefix can be dynamically changed by using t he
7 ; '-p' argument from the command line.
8
9 ; Include one or more files. If glob(3) exists, it is used to include a bunc h of
10 ; files from a glob(3) pattern. This directive can be used everywhere in the
11 ; file.
12 ; Relative path can also be used. They will be prefixed by:
13 ; - the global prefix if it's been set (-p argument)
14 ; - /usr/local/php otherwise
15 ;include=etc/fpm.d/*.conf
16
17 ;;;;;;;;;;;;;;;;;;
18 ; Global Options ;
19 ;;;;;;;;;;;;;;;;;;
20
21 [global]
22 ; Pid file
23 ; Note: the default prefix is /usr/local/php/var
24 ; Default Value: none
25 pid = run/php-fpm.pid
26
………………省略部分输出信息………………
145 ; Unix user/group of processes
146 ; Note: The user is mandatory. If the group is not set, the default user's g roup
147 ; will be used.
148 user = www
149 group = www
150
设置脚本权限,并设置php-fpm开机自启
# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
# chmod 755 /etc/rc.d/init.d/php-fpm
# chkconfig php-fpm on
在php服务程序的配置参数中关闭部分高危险功能
# vim /usr/local/php/etc/php.ini
300
301 ; This directive allows you to disable certain functions for security reasons.
302 ; It receives a comma-delimited list of function names. This directive is
303 ; *NOT* affected by whether Safe Mode is turned On or Off.
304 ; http://php.net/disable-functions
305 disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restor e,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,g etservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,po six_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix_getppid,posix_getpwnam,posix_ getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_ setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname
在nginx配置文件第2行中写入所属用户和所属组,第45行写入网站首页名称,65到71行的备注井号删掉启动参数,修改69行的脚本名称路径参数,设置完成后重启nginx和php-fpm
# vim /usr/local/nginx/conf/nginx.conf
1
2 user www www;
3 worker_processes 1;
4
5 #error_log logs/error.log;
6 #error_log logs/error.log notice;
7 #error_log logs/error.log info;
8
9 #pid logs/nginx.pid;
10
11
………………省略部分输出信息………………
40
41 #access_log logs/host.access.log main;
42
43 location / {
44 root html;
45 index index.html index.htm index.php;
46 }
47
………………省略部分输出信息………………
62
63 #pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
64
65 location ~ \.php$ {
66 root html;
67 fastcgi_pass 127.0.0.1:9000;
68 fastcgi_index index.php;
69 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
70 include fastcgi_params;
71 }
72
# systemctl restart nginx
# systemctl restart php-fpm
###(5)搭建论坛系统
首先对项目包进行解压,然后把nginx服务程序网站根目录清空,把nginx服务程序的网站根目录所有者和所属组修改为本地www用户,并设置755权限
# cd /usr/local/src/
# unzip Discuz_X3.2_SC_GBK.zip
# rm -rf /usr/local/nginx/html/{index.html,50x.html}*
# mv upload/* /usr/local/nginx/html/
# chown -Rf www:www /usr/local/nginx/html
# chmod -Rf 755 /usr/local/nginx/html
在浏览器输入http://172.16.0.10/install/即可开始安装,其中需要填写mysql数据库密码以及论坛管理员信息,安装完成后就可以开始通过ip地址访问我们的项目
3、nginx的双机热备
(1)keepalived软件配置
实际生产中,会出现web服务器宕机的情况,这时需要web服务器双机热备实现一个高可用的功能,可以通过keepalived软件实现,先克隆产生web02,web01和web02分别在keepalived配置文件中更改主从关系以及VIP(虚拟IP),在任一一台服务器宕机(keepalived默认检测keepalived是否启动以及网络情况),VIP会进行漂移,总的来说,谁有虚拟IP,谁就说master
首先需要更改一下克隆的web02初始化设置
更改IP地址
# vim /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=172.16.0.11
UUID更改后三位
更改主机名
# hostnamectl set-hostname web02
web01、web02同时在/etc/hosts中设置将主机名和ip地址进行对应
web01、web02同时进行keepalived软件的安装
# mount /dev/sr0 /mnt
# yum install keepalived
了解一下keepalived软件的相关文件
文件作用 | 文件路径 |
---|---|
配置文件 | /etc/keepalived/keepalived.conf |
日志文件 | /var/log/messages |
web01、web02同时删除keepalived配置文件35行以后的内容,并且设置主要配置信息
web01:
state MASTER
interface ens33
virtual_route_id 51
priority 100
virtual_ipaddress {
172.16.0.20
}
web02:
state BACKUP
interface ens33
virtual_route_id 51
priority 90
virtual_ipaddress {
172.16.0.20
}
角色设置一个是MASTER,其他是BACKUP,虚拟路径id是一样的,优先值一大一小,虚拟ip要和两个虚拟机同一网段
重启keepalived
# systemctl start keepalived
# systemctl status keepalived
将虚拟ip解析到宿主机
在windows宿主机打开C:/Windows/System32/drivers/etc/hosts
172.16.0.20 www.hantao.com
1.3版本以后的keepalived需要在配置文件中将vrrp_strict注释掉,否则无法ping通虚拟ip,全部设置完成后,重启keepalived软件
# systemctl restart keepalived
上面已经提到,keepalived只会检测网络情况以及keepalived软件的启停,nginx服务宕掉,也应该进行VIP漂移,编写脚本实现对nginx的检测
# mkdir /scripts
# vim /scripts/nginx.sh
#!/bin/bash
nginx_status= `ps -C nginx --no-header |wc -l`
if [ $nginx_status -eq 0 ]; then
systemctl stop keepalived
fi
# chmod +x /scripts/nginx.sh
在web01、web02同时配置nginx.sh脚本
vrrp_instance VI_1 {
...
track_scrip {
check_nginx
}
}
设置完毕,重启keepalived软件
# systemctl restart keepalived
# systemctl status keepalived
(2)设置非抢占模式
实际生产环境中,VIP漂移会导致服务器的卡顿,对用户产生不好的影响,因此我们可以设置非抢占模式(在web01复活之后不会把web02的VIP抢占过来,尽可能减少抢占次数)
web01、web02:
vrrp_instance VI_1 {
...
state BACKUP
...
vritual_router_id 51
...
nopreempt
...
priority 100
}
非抢占模式下,所有结点都是backup,没有master
重启keepalived软件
# systemctl restart keepalived
##(3)、组播改单播
为了兼容云平台,可以将组播改为单播(组播模式下所有的信息向组播地址发送,产生了大量无用信息,会产生干扰和冲突,某些特定环境如云服务器禁止了组播方式,为了兼容性我们将组播改为单播)
web01:
vrrp_instance VI_1 {
...
unicast_src_ip 172.16.0.10
unicast_peer {
172.16.0.11
}
...
}
web02:
vrrp_instance VI_1 {
...
unicast_src_ip 172.16.0.11
unicast_peer {
172.16.0.10
}
...
}
组播改单播后,效率提高了,并且不会产生额外的干扰,可以兼容云服务器
重启keepalived
# systemctl restart keepalived
4、mysql主主复制
一次主从复制中,在master结点开启二进制日志,在slave结点开启中继日志,master的数据会同步到slave结点,可以进行mysql数据库高可用的部署,也可用于数据库管理员将生产环境下的数据复制到测试环境进行测试与分析,主从复制的一个重要前提就是数据同步,可以的话将web01和web02的数据库进行同步初始化
在web01和web02创建同步账户
web01:
grant replication slave on *.* to 'root'@'172.16.0.11' identified by '123456';
flush privileges;
web02:
grant replication slave on *.* to 'root'@'172.16.0.10' identified by '123456';
flush privileges;
更改my.cnf配置文件
web01:
[mysqld]
log-slave-updates
sync_binlog=1
auto_increment_offset=1
auto_increment_increment=2
replicate-do-db=ultrax
replicate-ignore-db = mysql,information_schema
web02:
binlog-do-db=ultrax
binlog-ignore-db=mysql
log-slave-updates
sync_binlog=1
auto_increment_offset=2
auto_increment_increment=2
配置完成后重启mysql服务器
在web01、web02进行同步状态
show master status \G
change master to ...
互相更新对方的参数
start slave;
show slave status\G
看到Slave_IO_Running和Slave_SQL_Running都为yes表示同步成功,注意UUID一样、网络不连通、参数写错等情况均不能成功
5、Prometheus监控
(1)Prometheus监控
Prometheus基于时间序列数据,因此一定要同步时间戳,不然监控数据不准确,Prometheus软件本身图标并不优秀,因此我们将Prometheus作为数据源,用grafana做图像处理,用睿象云做告警处理
首先对check服务器进行初始化配置,解压软件
# tar xf prometheus-prometheus-2.16.0.linux-amd64.tar.gz -C /usr/local
# mv /usr/local/prometheus-2.16.0.linux-amd64/ /usr/local/prometheus
后台运行启动Prometheus软件
# cd /usr/local/prometheus
# ./prometheus --config.file="/usr/local/prometheus/prometheus.yml" &
测试9090端口,判断是否真正启动
# ss -naltp |grep 9090
在浏览器通过http://172.16.0.12:9090访问Prometheus主页,http://172.16.0.12:9090/metrics可以查看监控数据
(2)Prometheus监控linux主机
下载安装node_exporter组件,监控哪个主机就再哪个主机安装该组件
# tar xf node_exporter-1.0.1.linux-amd64.tar.gz -C /usr/local
# mv /usr/local/node_exporter-1.0.1.linux-amd64/ /usr/local/node_exporter
后台一直运行node_exporter
# nohup /usr/local/node_exporter/node_exporter &
查看9100端口
# ss -naltp |grep 9100
回到Prometheus主机添加node结点信息
# vim /usr/local/prometheus/prometheus.yml
- job_name: 'agent1'
static_config:
- targets: ['172.16.0.10:9100']
更改完配置重启服务
# pkill prometheus
# lsof -i:9090
# /usr/local/prometheus/prometheus --config.file="/usrl/local/prometheus/prometheus.yml" &
# lsof -i:9090
添加更改,回到Prometheus查看是否多了数据源,监控什么就下载什么组件
(3)grafana可视化图像工具
在check主机中下载安装grafana
# rpm -ivh /root/Desktop/grafana-7.1.5-1.x86_64.rpm
# systemctl start grafana-server
# systemctl enable grafana-server
# lsof -i:3000
通过http://172.16.0.12:3000访问grafana主页,默认账户密码都是admin,第一次登录更改密码,也可以更改配置文件实现免密登录
设置数据源、添加图像,这里监控web01的cpu使用情况
(4)睿象云实现告警
实现告警前检查一遍所有主机时间同步,在granfana中创建Notification channel,选择Webhook,配置Webhook信息,将配置的Webhook Notification Channel添加到grafana Alert,默认通过电子邮件告警