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:
connectionTimeout=”20000″
redirectPort=”8443″ />
再增加“/data/web/oa/”发布路径:
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: 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: mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 34:63: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: mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether 34:73:5b:9e:de:35 brd ff:ff:ff:ff:ff:ff
4: em3: mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether 34:73:5b:9e:de:35brd ff:ff:ff:ff:ff:ff
5: em4: mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether 34:73:5b:9e:de:35brd 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_re服务器托管网solve=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 statusG #查看主从连接状态
当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 statusG 查看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 statusG 查看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
或者通过数据库连接工具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客户端(1服务器托管网72.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变绿色即可。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
前言 协程是Koltin语言最重要的特性之一,也是最难理解的特性。网上关于kotlin协程的描述也是五花八门,有人说它是轻量级线程,有人说它是无阻塞式挂起,有人说它是一个异步框架等等,众说纷芸。甚至还有人出了书籍专门介绍kotlin协程。 笔者刚开始接触这个概…