CRM系统环境搭建部署(nginx、jdk、tomcat、keepalived、mysql、zabbix)
crm.XXX.com ? ?#CRM系统使用的域名,已注册并做好DNS解析
两台应用服务器(主、备):172.16.38.172、172.16.38.173
两台数据库服务器(主、备):172.16.38.174、172.16.38.175
操作系统:CentOS 7.9
各服务器准备工作:
关闭selinux 、firewalld、设置好hostname
服务器时间同步
yum -y install ntp ntpdate
ntpdate asia.pool.ntp.org ?#设置系统时间与网络时间同步
hwclock --systohc ? ?#将系统时间写入硬件时间,这里是为了防止系统重启后时间被还原,因此需要写到硬件设备中去
CRM系统要求:
nginx 日志分割
tomcat 日志分割
zabbix监控
mysql本地备份和远程备份的脚本配置,任务计划设置
一、CRM系统应用服务器配置
172.16.38.172 ?应用服务器(主)
172.16.38.173 ?应用服务器(备)
应用服务器使用域名访问数据库:crm.mysql.com,所以两台应用服务器需要设置hosts解析:
vim /etc/hosts
172.16.38.174 crm.mysql.com
172.16.38.175 crm.mysql.com
安装nginx、jdk、tomcat、keepalived
(一)、编译安装nginx服务
1、创建www用户和组
groupadd www
useradd www -g www?
passwd www www ? #设置www用户密码为www
mkdir /home/www
chown www.www /home/www
chmod 700 /home/www
2、更新源和环境所需插件安装
yum update ? ? ? ? ? ? ? ?#更新yum源
yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel ? ? ?#先安装nginx依赖包
3、下载nginx-1.18.0.tar.gz 存放在/data/software 目录下
cd /data/software
wget -c http://nginx.org/download/nginx-1.18.0.tar.gz ? ? ? ?#从nginx官网下载nginx-1.18.0.tar.gz
tar -xf nginx-1.18.0.tar.gz -C /data/server/ ? ? ? ? ? ? ? ? ? ? ? ? ?#解压nginx到/data/server/
cd /data/server/nginx-1.18.0
4、编译安装nginx,指定执行的用户主和用户组(使用前面创建的www用户和组)
./configure --prefix=/data/server/nginx ?--with-http_ssl_module ? --user=www --group=www
make
make install
cd /data/server/nginx ? ?#查看nginx目录下的文件情况
/data/server/nginx/sbin/nginx -? ? ? ? ? ? ?#查看nginx相关参数
/data/server/nginx/sbin/nginx -v ? ? ? ? ? ?#查看nginx的版本
/data/server/nginx/sbin/nginx -t ? ? ? ? ? ?#检查配置文件语法是否正确
/data/server/nginx/sbin/nginx ? ? ? ? ? ? ? ?# 启动nginx服务
/data/server/nginx/sbin/nginx -s stop ? ?#停止nginx服务
netstat -nltp ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#查看端口
ps -ef |grep nginx ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #查看nginx进程
pgrep nginx | xargs kill -9 ? ##如何用一条Linux命令干掉所有nginx进程,通过 pgrep 指令,根据名字找出所有包含该名字的进程号
设置nginx自启
在rc.local中添加启动代码
vim /etc/rc.local
# 在文件末尾添加一句 /data/server/nginx/sbin/nginx
# 重新赋予权限
chmod 755 /etc/rc.local
重启nginx服务
/data/server/nginx/sbin/nginx -s reload
在浏览器中输入nginx 服务器IP地址,查看nginx的默认页面
5、配置负载均衡
172.16.38.172、172.16.38.173 设置免密登录
在172上执行:
ssh-keygen ? ? # 一路回车
ssh-copy-id 172.16.38.173 ? #输入173的密码
在173上执行:
ssh-keygen ? ? # 一路回车
ssh-copy-id 172.16.38.172 ? ?#输入172的密码
在172上执行:
vim nginx.conf ? ? ? ? ? ?#修改部分内容
vim /data/server/nginx/conf/nginx.conf
user www www;
worker_processes ?auto;
#error_log ?logs/error.log;
#error_log ?logs/error.log ?notice;
#error_log ?logs/error.log ?info;
#pid ? ? ? ?logs/nginx.pid;
events {
? ? worker_connections ?10240;
}
http {
? ? include ? ? ? mime.types;
? ? default_type ?application/octet-stream;
? ? gzip on;
? ? gzip_comp_level 6;
? ? gzip_proxied any;
? ? gzip_buffers 4 8k;
? ? gzip_min_length 1024;
? ? gzip_types text/plain text/xml text/css application/x-javascript text/javascript image/jpeg;
? ? proxy_buffer_size 64k;
? ? proxy_buffers ? 32 32k;
? ? proxy_ignore_client_abort on;
? ? client_header_buffer_size 4k;
? ? #open_file_cache max=10240 inactive=20s;
? ? #open_file_cache_valid 30s;
? ? #open_file_cache_min_uses 1;
? ? #add_header Cache-Control max-age=604800;
# ? ?log_format ?main ?'$http_x_forwarded_for - $remote_user [$time_local] "$request" '
#
# ? ? ? ? ? ? ? ? ? ? ?'$status $body_bytes_sent "$http_referer" '
# ? ? ? ? ? ? ? ? ? ? ?'"$http_user_agent" "$http_x_forwarded_for"';
? log_format main '$remote_addr - $remote_user [$time_local] '
? ? ? ? ? ? ? ? ? ? ? ? ?'fwf[$http_x_forwarded_for] tip[$http_true_client_ip] '
? ? ? ? ? ? ? ? ? ? ? ? ?'$upstream_addr $upstream_response_time $request_time '
? ? ? ? ? ? ? ? ? ? ? ? ?'$http_host $request '
? ? ? ? ? ? ? ? ? ? ? ? ?'"$status" $body_bytes_sent "$http_referer" '
? ? ? ? ? ? ? ? ? ? ? ? ?'"$http_accept_language" "$http_user_agent" ';
# ? ?access_log logs/access.log ?main;
# ? ?error_log ? logs/error.log;
? ? sendfile ? ? ? ?on;
? ? #tcp_nopush ? ? on;
? ? #keepalive_timeout ?0;
? ? keepalive_timeout ?65;
? ? server_tokens off;
? ? client_max_body_size 5m;
? ?include vhost/*.conf;
?upstream api{
? ? ? ? server ?172.16.38.172:8080;
? ? ? ? server ?172.16.38.173:8080;
? ? }
? ? upstream oa{
? ? ? ?server ?172.16.38.172:8081;
? ? ? ?server ?172.16.38.173:8081;
? ? }
}
保存退出
scp /data/server/nginx/conf/nginx.conf root@172.16.38.173:/data/server/nginx/conf/ ? ? #将172上的/data/server/nginx/conf/nginx.conf拷贝到173上
mkdir -p /data/server/nginx/conf/ssl ? ? ? ? ?#若CRM系统要使用SSL证书,则需要创建ssl证书目录,并把制作好的XXX.crt、XXX.key这两个SSL证书上传到/data/server/nginx/conf/ssl目录下
mkdir -p /data/server/nginx/conf/vhost? ? ? #创建vhost目录
vim /data/server/nginx/conf/vhost/crm.conf? ? ?#编辑crm 虚拟机的配置文件
server {
? listen ? ? ? ? ?80;
? server_name ? ?localhost crm.XXX.com;
? ? ? ? rewrite ^(.*)$ ?https://crm.XXX.com$1 permanent;
? ? }
server {
? ? listen ? ? ? 443 ssl;
? ? server_name ?localhost crm.XXX.com;
? ? access_log ?logs/crm.access.log main;
? ? error_log ?logs/crm.error.log;
? #ssl on;
? ?ssl_certificate ? ? ?/data/server/nginx/conf/ssl/XXX.crt;
? ?ssl_certificate_key ?/data/server/nginx/conf/ssl/XXX.key;
? ?ssl_session_cache ? ?shared:SSL:1m;
? ?ssl_session_timeout ?5m;
? ?ssl_ciphers ?HIGH:!aNULL:!MD5;
? ?ssl_prefer_server_ciphers ?on;
? ?client_max_body_size 50m; ? # 设置客户端请求体大小限制
? # location /{
? # ? ?root /data/htdoc/www;
? # ? ?index index.html index.htm;
? # ? ?try_files $uri $uri/ /index.html;
? # ? ?add_header X-Frame-Options SAMEORIGIN;
? # ? ? ?}
? ? location ^~ /api/auth/cas-app/login {
? ? rewrite ^/api/auth/cas-app/login(.*)$ /auth/cas-app/login$1 last;
? ? ? ? }
? ? location ^~ /api/humanResources/StaffManagementMobile/getCurrentUser {
? ? ? ? rewrite ^(.*)$ ?/humanResources/StaffManagementMobile/getCurrentUser last;
? ? ? ? }
? ? location ^~ /api/crm/appVersion/getAppNewVersion {
? ? ? ? rewrite ^(.*)$ ?/crm/appVersion/getAppNewVersion last;
? ? ? ?}
? location ? /{
? ? ? ? proxy_pass http://oa;
? ? ? ? proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
? ? ? ? proxy_set_header Host $http_host;
? ? ? ? proxy_set_header X-Forwarded-Proto https;
? ? ? ? #proxy_set_header X-Forwarded-For $remote_addr;
? ? ? ? proxy_redirect off;
? ? ? ? proxy_connect_timeout ? ? ?240;
? ? ? ? proxy_send_timeout ? ? ? ? 240;
? ? ? ? proxy_read_timeout ? ? ? ? 240;
? ? ? ? # note, there is not SSL here! plain HTTP is used
? ? ? ? }
# ? location ^~ /api {
# ? ? ? proxy_pass http://api;
# ? ? ? ?proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# ? ? ? ?proxy_set_header Host $http_host;
# ? ? ? ?proxy_set_header X-Forwarded-Proto https;
# ? ? ? #proxy_set_header X-Forwarded-For $remote_addr;
# ? ? ? ?proxy_redirect off;
# ? ? ? ?proxy_connect_timeout ? ? ?240;
# ? ? ? ?proxy_send_timeout ? ? ? ? 240;
# ? ? ? ?proxy_read_timeout ? ? ? ? 240;
# ? ? ? ?# note, there is not SSL here! plain HTTP is used
#
# ? ? ? }
# ? ? ? ?location ~ \.(jpg|png|js|css|gif|ico)$ {
# ? ? ? ? ? ? ?root /opt/tomcat/web/online;
# ? ? ? ? ? ? ?expires 12h;
# ? ? ? ? ? ? ?}
? ? ? ? error_page ?403 ?404 ? ? ? /404.html;
? ? ? ? error_page 500 502 503 504 /50x.html;
}
重启nginx
/data/server/nginx/sbin/nginx -s reload
在173服务器创建
将172上的nginx.conf 拷贝到173服务器的/data/server/nginx/sbin/nginx/conf目录下
scp -r /data/server/nginx/conf/ssl root@172.16.38.173:/data/server/nginx/conf/ ? ? ? ?#在172上将ssl目录拷贝到173上
scp -r /data/server/nginx/conf/vhost root@172.16.38.173:/data/server/nginx/conf/ ? #将vhost目录拷贝到173上
173上重启nginx
/data/server/nginx/sbin/nginx -s reload
验证nginx默认页面是否可以正常打开
6、nginx 日志分割
mkdir -p /data/server/nginx/logs ? #根据脚本提示,创建logs目录
mkdir -p /data/sh ? ? ? ? ? ? ? ? ? ? ? ? #创建脚本存放目录
chown -R www. /data/sh ? ? ? ? ? ? #修改sh目录属主权限
vim /data/sh/nginx-cutlog.sh ? ? ?#编辑nginx 日志分割脚本
#!/bin/bash
d=`date -d '1 day ago' +%Y%m%d`
d15=`date -d'15 day ago' +%Y%m%d`
logs_path="/data/server/nginx/logs" ? ? ? ? ? ?#要切割的日志路径
mv ${logs_path}/crm.access.log ${logs_path}/crm.access_${d}.log
kill -USR1 $(cat /data/server/nginx/logs/nginx.pid)
rm -rf ${logs_path}/crm.access_${d15}.log
保存退出
chmod +x /data/sh/nginx-cutlog.sh ? ?#授权执行权限
scp /data/sh/nginx-cutlog.sh root@172.16.38.173:/data/sh/ ? ?#将nginx-cutlog.sh拷贝到173的/data/sh/目录下
chmod +x /data/sh/nginx-cutlog.sh ? ?#在172、173赋予执行权限
在172.16.38.172、172.16.38.173服务器上添加任务计划:
crontab -e
5 0 * * * /bin/sh /data/sh/cut_log/nginx-cutlog.sh
0 5 * * * /usr/sbin/ntpdate asia.pool.ntp.org;hwclock -w
(二)、安装jdk
安装路径:
/data/server/jdk1.8.0_231
创建数据、日志路径
tar xf jdk-8u231-linux-x64.tar.gz -C /data/server ? #将安装包上传到/data/server,然后解压jdk二进制压缩包
配置环境变量
vim /etc/profile
export JAVA_HOME=/data/server/jdk1.8.0_231
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
source /etc/profile ?#使配置生效
java -version ? ?#查看java版本
javac
(三)、安装部署tomcat服务
tomcat 目录结构:
bin:服务启动,关闭等可以执行文件.
conf: ? ? ? ? 配置文件目录,server.xml是tomcat主配置文件,web.xml为webapps提供默认的配置。
lib: ? ? ? ? ? ?库目录.
logs: ? ? ? ? 日志目录.
webapps: ? 应用程序部署目录.
work: ? ? ? jsp编译后的结果文件.
tomcat核心组件:
server:即tomcat进程实例,多个server,就是启动多个tomcat实例。
service:service服务用于关联connector与engine,connector可以使用不同的协议绑定不同的端口,进而处理不同的客户端连接请求。
engine:引擎可以定义多个虚拟主机,并对请求头进行分析,将请求发给对应的虚拟主机。
host:定义虚拟主机,以及资源路径context.
1、解压apache-tomcat-9.0.36.tar.gz压缩包
安装路径:/data/server/tomcat9
将apache-tomcat-9.0.36.tar.gz上传到 /data/server目录下
tar -xf apache-tomcat-9.0.36.tar.gz -C /data/server/ ? #将apache-tomcat-9.0.36.tar.gz 解压到/data/server/目录下
cd /data/server/
mv apache-tomcat-9.0.36 tomcat9 ? ?#将解压出来的apache-tomcat-9.0.36 重命名为tomcat9
chown -R www. /data/server/tomcat9 ?#将tomcat目录修改为www的属主权限
2、配置环境变量
vim /etc/profile
CATALINA_BASE=/data/server/tomcat9
PATH=$CATALINA_BASE/bin:$PATH
export PATH CATALINA_BASE
source /etc/profile ? #使配置生效
catalina.sh version ? #进到相应的目录下执行该命令,查看tomcat版本
catalina.sh start ? ?#进到相应的目录下执行该命令,前台启动tomcat服务
nohup ./startup.sh & ?#后台运行tomcat服务
3、设置tomcat服务开机启动
cd /usr/lib/systemd/system ? #进入system目录
vim tomcat.service ? ? ?#创建tomcat.service 文件
[Unit]
Description=Tomcat9
After=syslog.target network.target remote-fs.target nss-lookup.target
? ?
[Service]
Type=forking
Environment='JAVA_HOME=/data/server/jdk1.8.0_231'
Environment='CATALINA_PID=/data/server/tomcat9/bin/tomcat.pid'
Environment='CATALINA_HOME=/data/server/tomcat9/'
Environment='CATALINA_BASE=/data/server/tomcat9/'
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
?
WorkingDirectory=/data/server/tomcat9/
?
ExecStart=/data/server/tomcat9/bin/startup.sh
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
? ?
[Install]
WantedBy=multi-user.target
保存退出
systemctl enable tomcat.service ? #先执行此命令设置为tomcat开机启动,再执行后续以下命令
随后可以使用以下命令操作tomcat服务:
systemctl start tomcat.service ? ?# 启动tomcat
systemctl stop tomcat.service ? ?# 关闭tomcat ??
systemctl restart tomcat.service ? ?# 重启tomcat?
mkdir -p /data/crm/log ? ? ? ? ? ? ? ? #创建CRM系统日志存放路径(在/data/web/oa/WEB-INF/classes/properties/config.properties此文件里配置,也是开发部署的发布目录)
chown -R www.www /data/crm ? ?#修改crm目录属主权限
?
vim /data/server/tomcat9/conf/server.xml ? ?#在server.xml文件,根据nginx.conf 中upstream oa的端口信息将端口8080改为8081:
<Connector port="8081" protocol="HTTP/1.1"
? ? ? ? ? ? ? ?connectionTimeout="20000"
? ? ? ? ? ? ? ?redirectPort="8443" />
再增加“/data/web/oa/”发布路径:
? ? <Context path="" docBase="/data/web/oa/" debug="0" reloadable="true" />
? ? ? ? <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
4、tomcat 日志分割设置
分别用www用户登录172.16.38.172、172.16.38.173应用服务器上操作
/data/sh 目录下文件的属组均是www
vim /data/sh/tomcat9-cutlog.sh ? #编辑tomcat 日志分割脚本,保留60天的日志文件
#!/bin/bash
#cd ?`dirname $0`
#d=`date +%Y%m%d`
d=`date -d '1 day ago' +%Y%m%d`
d60=`date -d'60 day ago' +%Y%m%d`
cd ?/data/server/tomcat9/logs/
cp catalina.out catalina.out.${d}
echo "" > catalina.out
rm -rf catalina.out.${d60}
#chown www.www *
保存退出
chmod +x /data/sh/tomcat9-cutlog.sh
crontabl -e ? #添加到任务计划中
20 0 * * * /bin/sh /data/sh/tomcat9-cutlog.sh ? #每天20点执行
另外在Tomcat的logs目录,每天都会产生很多日志文件,我们也可以定期手工或使用定时任务来删除60天前的日志文件,这里使用手工的方式进行演示,
cd /data/server/tomcat9/logs ? ? ? ? ? ?#进入data/server/tomcat9/logs目录
find -mtime +60 -exec rm -f {} \; ? ? ?#删除60天前的日志
find -mtime +7 -exec rm -f {} \; ? ? ? ?#删除7天前的日志
(四)、安装配置keepalived(可以等到应用都调试完成,没有问题了再部署keepalived服务)
根据自己的网络情况规划好VIP地址,这里设置keepalived的VIP 为172.16.38.201,然后在防火墙上映射公网IP(目的NAT)124.XXX.154.XXX的80和443端口,在防火墙策略里添加允许124.XXX.154.XXX的80、433端口出去,在阿里云上将crm.XXX.com 解析124.XXX.154.XXX
yum install keepalived -y ? ? ?#172.16.38.172、172.16.38.173两台服务器均需安装keepalived
cd /etc/keepalived/
cp keepalived.conf keepalived.conf_bak
vim keepalived.conf ? ?#配置MASTER的编辑内容如下:
global_defs {
? ?notification_email {
? ? ?admin@centos.bz
? ?}
? ?notification_email_from keepalived@domain.com
? ?smtp_server 127.0.0.1
? ?smtp_connect_timeout 30
? ?router_id LVS_DEVEL
}
vrrp_script chk_http_port {
? ? ? ? ? ? ? ? script "/etc/keepalived/keepalived_check.sh"
? ? ? ? ? ? ? ? interval 2
? ? ? ? ? ? ? ? weight 2
}
vrrp_instance VI_1 {
? ? state MASTER ? ? ? ?############ 辅机为 BACKUP
? ? interface em1 ? ? ? ?######根据服务器网卡名称设置
? ? virtual_router_id 50 ####MASTER和BACKUP设置同一个virtual_router_id
? ? mcast_src_ip 172.16.38.172 ?###设置MASTER的IP地址
? ? priority 102 ? ? ? ? ? ? ? ? ?########### 权值要比BACKUP 高
? ? advert_int 1
? ? authentication {
? ? ? ? auth_type PASS
? ? ? ? auth_pass 1111
? ? }
track_script {
? ? ? ? chk_http_port ### 执行监控的服务
? ? ? ? }
? ? virtual_ipaddress {
? ? ? ?172.16.38.201
? ? }
}
scp /etc/keepalived/keepalived.conf root@172.16.38.173:/etc/keepalived/ ? ? ?#修改完后拷贝到BACKUP,然后编辑内容做相应的修改即可
编辑检测脚本
vim /etc/keepalived/keepalived_check.sh
内容如下:
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
? ? ? ? ? ? ? ? /data/server/nginx/sbin/nginx
? ? ? ? ? ? ? ? sleep 3
? ? ? ? ? ? ? ? if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
? ? ? ? ? ? ? ? ? ? ? ?killall keepalived
? ? ? ? ? ? ? ? fi
fi
保存退出
chmod +x /etc/keepalived/keepalived_check.sh ? ?#授权
scp /etc/keepalived/keepalived_check.sh root@172.16.38.173:/etc/keepalived/ ? ?#拷贝到172.16.38.173服务器的相应目录下
chmod +x /etc/keepalived/keepalived_check.sh ? #再进行授权
yum install psmisc -y ? ? ? ? ? #脚本中用到killall 命令,需要安装pamisc
systemctl start keepalived ? # 启动keepalived 服务
systemctl enable keepalived ? #设置开机启动keepalived服务
ip a # 查看虚拟IP172.16.38.201是否在MASTER 服务器上
[root@localhost keepalived]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
? ? 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: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
? ? link/ether 34:73:5a:9e:de:84 brd ff:ff:ff:ff:ff:ff
? ? inet 172.16.38.172/24 brd 172.16.38.255 scope global noprefixroute em1
? ? ? ?valid_lft forever preferred_lft forever
? ? inet 172.16.38.201/32 scope global em1
? ? ? ?valid_lft forever preferred_lft forever
? ? inet6 fe80::e3a4:2c6d:b1ca:96f/64 scope link noprefixroute
? ? ? ?valid_lft forever preferred_lft forever
3: em2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
? ? link/ether 34:73:5a:9e:de:85 brd ff:ff:ff:ff:ff:ff
4: em3: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
? ? link/ether 34:73:5a:9e:de:86 brd ff:ff:ff:ff:ff:ff
5: em4: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
? ? link/ether 34:73:5a:9e:de:87 brd ff:ff:ff:ff:ff:ff
虚拟IP172.16.38.201,对外解析124.XXX.154.XXX
在我们的电脑上绑定host,进行测试
172.16.38.201 crm.XXX.com
在浏览器中访问VIP 地址172.16.38.201,均能直接跳转到tomcat默认页面,等待研发提供程序代码部署即可,正式访问CRM 系统页面
二、CRM系统数据库服务器配置
(一)、安装mysql数据库
172.16.38.174 ?数据库服务器(主)
172.16.38.175 ?数据库服务器(备)
分别在174、175服务器上执行
创建/data/software目录
mkdir -p /data/software
cd /data/software
下载mysql-5.7.28二进制安装包
wget -c https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
也可从别的服务器上找个mysql-5.7.28.tar.gz
yum install libaio -y
redhat系列需要卸载自带的mariadb
[root@localhost server]# rpm -qa | grep mariadb
mariadb-libs-5.5.68-1.el7.x86_64
[root@localhost server]# ?rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
创建一个mysql用户和组 ? (根据实际情况看,是否需要允许mysql用户可以登录)
groupadd mysql ? ? #添加mysql组
useradd -r -g mysql -s /bin/false mysql ? ? ? #添加mysql用户设置其不允许登录
解压文件
#解压下载的二进制包到需要安装mysql的目录
mkdir -p /data/server
tar -zxvf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz ?-C /data/server
开始安装
以下目录(path)为/data/server
1、创建一个mysql的软链接
cd /data/server?
ln -s mysql-5.7.28-linux-glibc2.12-x86_64 mysql
2、添加mysql环境变量
vim /etc/profile
#添加下面一行
export PATH=$PATH:/data/server/mysql/bin
source /etc/profile ? ? #使环境变量生效
3、创建数据目录
cd /data/server/mysql
mkdir data
chown mysql.mysql data
chmod 750 data
mkdir -p /data/server/mysql/logs
touch /data/server/mysql/logs/error.log
chown -R mysql.mysql /data/server/mysql/logs
4、初始化mysql
cd /data/server/mysql
bin/mysqld --initialize ?--user=mysql ?--basedir=/data/server/mysql ?--datadir=/data/server/mysql/data
#完成之后会有一个临时密码
Gqd:!@1kiCO*UA
5、配置ssl
#bin/mysql_ssl_rsa_setup
bin/mysql_ssl_rsa_setup --datadir=/data/server/mysql/data
6、编辑配置文件(主、备库my.cnf文件做相应的配置log-bin、server-id)
主库:
log-bin = master-bin
server-id=1
备库:
server-id=2
vim /etc/my.cnf ?#以下是主库的my.cnf文件配置信息
[client]
port = 3306
socket = /data/server/mysql/data/mysql.sock
#net_buffer_length = 300000
#max_allowed_packet = 1G
default-character-set=utf8
[mysqld]
#skip-grant-tables?
port = 3306
socket = /data/server/mysql/data/mysql.sock
basedir = /data/server/mysql
datadir = /data/server/mysql/data
pid-file = /data/server/mysql/data/mysql.pid
user = mysql
bind-address = 0.0.0.0
log_error = /data/server/mysql/logs/error.log
relay-log=relay-log
relay-log-index=relay-log.index
log-bin = master-bin
server-id=1
innodb_file_per_table=ON
skip_name_resolve=ON
interactive_timeout = 12000
wait_timeout = 12000
net_buffer_length = 300000
max_allowed_packet = 1G
innodb_buffer_pool_size = 6G
innodb_log_buffer_size = 1G
innodb_log_file_size = 2G
innodb_write_io_threads = 16
innodb_flush_log_at_trx_commit = 0
max_connections = 5120
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000
max_heap_table_size = 67108864
character-set-server=utf8
lower_case_table_names = 1
#sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ANSI_QUOTES
sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ANSI_QUOTES
[mysqld_safe]
port = 3306
socket = /data/server/mysql/data/mysql.sock
basedir = /data/server/mysql
datadir = /data/server/mysql/data
pid-file = /data/server/mysql/data/mysql.pid
user = mysql
bind-address = 0.0.0.0
log_error = /data/server/mysql/logs/error.log
relay-log=relay-log
relay-log-index=relay-log.index
log-bin = master-bin
server-id=1
#innodb_file_per_table=ON
skip_name_resolve=ON
interactive_timeout = 12000
wait_timeout = 12000
net_buffer_length = 300000
max_allowed_packet = 1G
innodb_buffer_pool_size = 6G
innodb_log_buffer_size = 1G
innodb_log_file_size = 2G
innodb_write_io_threads = 16
innodb_flush_log_at_trx_commit = 0
max_connections = 5120
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000
max_heap_table_size = 67108864
default-character-set=utf8
7、启动mysql
bin/mysqld_safe --user=mysql &
8、复制mysql启动脚本
cp support-files/mysql.server /etc/init.d/mysqld ? #将服务文件拷贝到init.d下,并重命名为mysql
#之后可以使用 /etc/init.d/mysqld start|stop|restart 来启动、关闭、重启mysql
/etc/init.d/mysqld start ? ? #启动
service mysql status ? ? #查看mysql状态
/etc/init.d/mysqld status ?#查看mysql状态
9、设置开机自启动mysql服务
chmod +x /etc/init.d/mysqld ?#赋予可执行权限
chkconfig --add mysqld ? ? #添加服务
chkconfig --list ? ? #显示服务列表,如果看到mysql的服务,并且3,4,5都是on的话则成功,
chkconfig --level 345 mysqld on ? ?#如果是off,则键入此命令
reboot ? ?#重启电脑
netstat -na | grep 3306 ? ?#验证电脑重启后mysql服务是否启动
ps -ef | grep mysql ? ?# 查看mysql服务进程
service mysql status ? ? #查看mysql状态
/etc/init.d/mysqld status ?#查看mysql状态
10、登录mysql并修改临时密码
mysql -u root -p ? #输入刚才的临时密码Gqd:!@1kiCO*UA
> set password for root@localhost = password('174p5ffdr7s.Z'); ? ? #在172.16.38.174服务器上修改主数据库root新密码
> set password for root@localhost = password('174p5ffdr7s.Z'); ? ? #在172.16.38.175服务器上修改172.16.38.175备库的root新密码
11、配置数据库主从
(1)部署master主库服务器:
登录mysql,接下来进行验证二进制功能开启是否成功
mysql -u root -p?
方法1、查看主库状态
show master status;
方法2、查询主库日志文件
show master logs;
方法3、查询二进制变量
show variables like '%log_bin';
授权,指定哪些机器(网段)可以连接这台主库服务器,建立复制所要使用的用户
useradd repl -g repl
passwd repl ? #设置repl的用户密码,输入123456
grant replication slave on *.* to 'repl'@'172.16.38.%' identified by '123456';
grant replication slave on *.* to 'repl'@'172.20.%' identified by '123456';
mysql> flush privileges; ? # 刷新权限生效
mysql> show master status; ? ? #查看File、Position 信息,一会用到
?File ? ? ? ? ? ? ?| Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000004 | ? ? ?154?
查看数据库用户、主机访问权限
use mysql;
select Host,User from user;
select host,user,authentication_string from user;
(2)部署slave从库服务器:
可以将主库的my.cnf文件拷贝过来,去掉log-bin = master-bin,server-id=1 更改为server-id=2
修改my.cnf文件后,重启mysql 服务
/etc/init.d/mysqld restart
登录mysql,连接主库:
change master to master_host='172.16.38.174',master_user='repl',master_password='123456',master_log_file='master-bin.000004',master_log_pos=154;
mysql> start slave; ? ?#启动slave从库?
mysql> show slave status\G ? ? #查看主从连接状态
当Slave_IO_Running和Slave_SQL_Running都为YES的时候就表示主从同步设置成功了。
查看主、备库数据库数量及名称是否一致
mysql> show databases;
主库上查看二进制日志文件
mysql> show binlog events in 'master-bin.000004';
12、在172.16.38.174主库上创建数据库用户
在master主库上创建数据库用户:
创建mysql用户crm,并授权crm远程和数据库的访问权限:
mysql -u root -p?
CREATE USER 'crm'@'localhost' ?IDENTIFIED BY '149fdjsqqdYeph'; ? ?#创建crm用户,授权本地登录?
grant all privileges on zl9_crm.* to 'crm'@'172.16.38.%' identified by '174OnSdfevhYeph'; ? ? ?#授权crm用户访问zl9_crm 数据库权限
grant all privileges on zl9_crm.* to 'crm'@'172.20.%' identified by '174OnSdfevhYeph'; ? ? ? ? ?#授权crm用户访问zl9_crm 数据库权限
flush privileges;
quit
配置数据库root用户远程访问权限:
grant all privileges on *.* to 'root'@'172.16.38.%' identified by '174p5ffdr7s.Z';
grant all privileges on *.* to 'root'@'172.20.%' identified by '174p5ffdr7s.Z';
flush privileges;
###如果要删除MySQL用户账号crm
mysql> DROP USER IF EXISTS 'crm'@'localhost';
###撤销已经赋予给 MySQL 用户权限的权限。
revoke 跟 grant 的语法差不多,只需要把关键字 “to” 换成 “from” 即可:
grant ?all on *.* to ? dba@localhost; ? #授权dba用户本地访问所有数据库的权限
revoke all on *.* from dba@localhost; ? #撤销dba用户本地访问所有数据库的权限
revoke all on zl9_crm.* from 'crm'@'%'; ? #撤销mysql用户crm的访问zl9_crm数据库的权限
revoke all on *.* from 'crm'@'%'; ?#撤销mysql用户crm的所有访问权限
mysql> REVOKE ALL PRIVILEGES ON zl9_crm.* TO 'crm'@'localhost'; ? ? #撤销crm用户访问zl9_crm数据库的权限
mysql> SHOW GRANTS FOR 'crm'@'localhost'; ? ? ? #显示MySQL用户权限
查看数据库用户、主机访问权限
use mysql;
select Host,User from user;
select host,user,authentication_string from user;
13、创建数据库
在master主库上创建CRM系统的数据库(zl9_crm):
创建一个zl9_crm数据库:
mysql> create database zl9_crm; ? ? ?# 创建数据库
mysql> use zl9_crm; ? ? ? ? ? ? ? ? ? ? ? ? # 使用已创建的数据库?
mysql> set names utf8; ? ? ? ? ? ? ? ? ? # 设置编码
在slave从库上查看,数据库数量及名称是否与master主库一致
mysql> show databases;
问题排查例子(Slave_SQL_Running: No):
因在master 上删除了jfedu数据库(drop database jfedu;),在slave上show slave status\G 查看slave的状态时发现Slave_SQL_Running: No,
处理方法:
1、在master服务器上设置set sql_log_bin=0; 然后删除要删除的数据库,再设置set sql_log_bin=1; 刷新生效 flush privileges;?
2、查看master 的pos点,show master status;
3、这时需要在slave上执行stop slave,根据master 的pos点信息,快速重新连接主库change master to
change master to master_host='172.20.26.37',master_user='tongbu',master_password='123456',master_log_file='master-bin.000001',master_log_pos=2760;
4、成功运行change master to后,执行start slave;,再执行show slave status\G 查看slave的状态,
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
5、再在master创建新的数据库,就能同步到slave 上了。
###如果有老系统的数据库需要导入的话,可以先在老系统中将数据库备份导出,再导到新数据库中
###数据库备份mysqldump命令
mysqldump --skip-opt ?-q -uroot -p --databases zl8 | gzip > zl8.sql.gz ? ? #将数据库zl8导出到名为zl8.sql.gz的压缩包,拷贝到新服务器中
###在新服务器中进行数据库导入
gunzip -c zl8.sql.gz >zl8.sql ? ? #对zl8.sql.gz、进行解压
导入数据库:
mysql -uroot -p zl9_crm < ?/data/zl8.sql ? ? #将zl8.sql数据库导入到zl9_crm 数据库中
或者通过数据库连接工具Navicat Premium 15进行备份和还原
###mysql 主从数据库重启顺序:
停数据库 ?先备后主?
启数据库 ?先主后备
(二)、数据库备份设置
将数据库备份文件存放在172.20.26.193备份服务器上
1、创建数据库备份文件存放目录,编辑备份脚本内容
在172.16.38.175从库服务器上
mkdir -p /data/database_bak ?#在CRM的从库服务器上创建database_bak数据库本地备份目录
cd /data/sh ? #进入sh目录,根据CRM系统的数据库zl9_crm,修改备份脚本名称及内容
vim zl9_crm_backup.sh ? ###修改root数据库密码、数据库名称zl9_crm以及远程备份路径:
#!/bin/bash
?user="root"
?password="175VDFEWddQiTakYWGeQRSJ"
?host="localhost"
?db_name="zl9_crm"
?backup_path="/data/database_bak/zl9_crm"
?date=$(date +"%Y%m%d%H")
# Dump数据库到SQL文件
##因为有一个大写表dict_appType 所以加了 -f;数据库配置文件改了后 再改回来去掉 -f
/data/server/mysql/bin/mysqldump -f --user=$user --password=$password --host=$host $db_name > $backup_path/$db_name-$date.sql
gzip $backup_path/$db_name-$date.sql
##传到远端备份服务器
scp $backup_path/$db_name-$date.sql.gz root@172.20.26.193:/data/data_bak/crm_databak/zl9_crm
# 删除30天之前的就备份文件
find $backup_path/* -mtime +30 -exec rm {} \;
保存退出
2、在172.16.38.175、172.20.26.193上创建相应的备份存放目录,并将172.16.38.175与172.20.26.193两台服务器配置好免密
在172.16.38.175服务器上
mkdir -p /data/database_bak/zl9_crm
在172.20.26.193服务器上
mkdir -p /data/data_bak/crm_databak/zl9_crm
配置172.16.38.175与172.20.26.193两台服务器之间的免密访问
在172.16.38.175从库上
ssh-keygen -t rsa?
chmod 700 ~/.ssh/
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
cd ~/.ssh/
chmod 600 ?authorized_keys
在172.20.26.193备份服务器上
vim authorized_keys ? ?#打开authorized_keys,把内容追加到172.20.26.193上的authorized_keys 文件下面,做好备注
systemctl restart sshd ?或者 ?service sshd restart ? ? #重启175、193各台的sshd 服务
scp -r /data/sh root@172.20.26.193:/data/share ? #测试把一个文件从172.16.38.175 scp拷贝到172.20.26.193服务器,不提示输入密码即可
3、添加任务计划
在172.16.38.175服务器上------CRM系统上线后开启任务计划
crontab -e
0 1 * * * /bin/sh /data/sh/zl9_crm_backup.sh ?>/dev/null
0 5 * * * /usr/sbin/ntpdate asia.pool.ntp.org;hwclock --systohc
三、安装zabbix3.4客户端(172.20.26.136为zabbix监控系统服务器端)
我们要将172.16.38.172-175这4台服务器添加到我们的zabbix监控系统里,所以需要这四台服务器依次安装配置zabbix客户端。
rpm -ivh http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm ? #下载zabbix3.4源
报错警告(也可以不处理此警告,直接yum install ):
警告:/var/tmp/rpm-tmp.f38CWl: 头V4 RSA/SHA512 Signature, 密钥 ID a14fe591: NOKEY
?#这是由于yum安装了旧版本的GPG keys造成的,执行如下:
rpm --import /etc/pki/rpm-gpg/RPM* ?
rpm -qa | grep zabbix ? ?#查询已安装的rpm源
zabbix-release-3.4-2.el7.noarch
yum install -y zabbix-agent ? #安装zabbix客户端
#修改/etc/zabbix/zabbix_agentd.conf
#Server=127.0.0.1
Server=172.20.26.136
#ServerActive=127.0.0.1
ServerActive=172.20.26.136 ? ? ? ? ? //server端ip
HostName=CRM_NEW_APP1 ? ? ? ? ? ? ? ? ? ?//主机名唯一的
HostMetadataItem=system.uname ? ? ? ? ?//设置默认模板,server端
systemctl start zabbix-agent ? #启动agent服务
systemctl enable zabbix-agent ?#开机启动agent服务
4台服务器依次添加主机到zabbix服务器中
zabbix 服务器web管理界面,添加主机,群组添加到“Linux servers”,模板选择“Template Dell Raid Card”和“Template OS Linux”,等待zabbix变绿色即可。