高并发集群架构

第一次架构测试 LVS-DR + NGINX 处理静态

环境准备
前言:使用lvs4层负载作为分发器,分发给后端nginx,由nginx 处理静态页面
# centos 7.6 3台
# 后端nginx 2台 ip 10.3.131.231  10.3.131.230
# lvs分发器 1台  ip DIP 10.3.131.76 VIP 10.3.131.235 
# lvs 版本。1.2.1
# nginx 1.16.0
# 防火墙 selinux 关闭
real server nginx 部署
# 源码安装nginx
1、安装编译环境
[root@nginx ~]# yum -y install gcc gcc-c++
2、安装pcre软件包(使nginx支持http rewrite模块)
[root@nginx ~]# yum install -y pcre pcre-devel
3、安装openssl-devel(使nginx支持ssl)
[root@nginx ~]# yum install -y openssl openssl-devel 
4、安装zlib
[root@nginx ~]# yum install -y zlib zlib-devel
5、创建用户nginx
[root@nginx ~]# useradd nginx 
6、编译安装
[root@nginx ~]# wget http://nginx.org/download/nginx-1.16.0.tar.gz
[root@nginx ~]# tar xzf nginx-1.16.0.tar.gz -C /usr/local/
[root@nginx ~]# cd /usr/local/nginx-1.16.0/
[root@nginx nginx-1.16.0]# ./configure --prefix=/usr/local/nginx --group=nginx --user=nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/tmp/nginx/client_body --http-proxy-temp-path=/tmp/nginx/proxy --http-fastcgi-temp-path=/tmp/nginx/fastcgi --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-pcre --with-http_realip_module --with-stream
[root@nginx nginx-1.16.0]# make && make install
[root@nginx ~]# mkdir /tmp/nginx
[root@nginx ~]# /usr/local/nginx/sbin/nginx # 启动测试
[root@nginx ~]# echo '1' > /usr/local/nginx/html/index.html # 不同页面方便测试
[root@nginx ~]# vim /etc/sysctl.conf
net.ipv4.conf.ens33.arp_ignore = 1
net.ipv4.conf.ens33.arp_announce = 2
[root@nginx ~]# sysctl -p
[root@nginx ~]# ip addr add dev lo 10.3.131.235/32

lvs 部署及DR模式配置
# 临时设置VIP
[root@lvs ~]# ip addr add dev ens33 10.3.131.235/32
# 永久设置VIP
[root@lvs ~]# cd /etc/sysconfig/network-scripts/
[root@lvs ~]# cp ifcfg-eth0 ifcfg-eth0:1
[root@lvs ~]# cat ifcfg-eth0:1  # 注意设备名称和mac地址与ens33一样
TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
NAME="eth0:1"
DEVICE="eth0:1"
ONBOOT="yes"
IPADDR="10.3.131.235"
NETMASK="225.225.225.0"
HWADDR="00:0c:29:af:df:sa"    
[root@lvs ~]# systemctl start ipvsadm
注意:启动如果报错: /bin/bash: /etc/sysconfig/ipvsadm: 没有那个文件或目录 需要手动生成文件
# 定义分发策略
-A:添加VIP 
-t:用的是tcp协议 
-a:添加的是lo的vip地址 
-r:转发到realserverip 
-s:算法 
-L|-l –list #显示内核虚拟服务器表 
--numeric, -n:#以数字形式输出地址和端口号 
-g --gatewaying #指定LVS工作模式为直接路由器模式DR(也是LVS默认的模式) 
-S -save #保存虚拟服务器规则到标准输出,输出为-R 选项可读的格式 
rr:轮循 
如果添加ip错了,删除命令如下: 
# ip addr del 192.168.246.193 dev ens33

[root@lvs ~]# ipvsadm -C #清除内核虚拟服务器表中的所有记录。
[root@lvs ~]# ipvsadm -A -t 10.3.131.235:80 -s rr
[root@lvs ~]# ipvsadm -a -t 10.3.131.235:80 -r 10.3.131.230 -g
[root@lvs ~]# ipvsadm -a -t 10.3.131.235:80 -r 10.3.131.231 -g
[root@lvs ~]# ipvsadm -S > /etc/sysconfig/ipvsadm
[root@lvs ~]# ipvsadm -L -n --stats #显示统计信息 
1. Conns (connections scheduled) 已经转发过的连接数 
2. InPkts (incoming packets) 入包个数 
3. OutPkts (outgoing packets) 出包个数 
4. InBytes (incoming bytes) 入流量(字节) 
5. OutBytes (outgoing bytes) 出流量(字节) 
[root@lvs ~]# ipvsadm -L -n --rate #看速率 
1. CPS (current connection rate) 每秒连接数 
2. InPPS (current in packet rate) 每秒的入包个数 
3. OutPPS (current out packet rate) 每秒的出包个数 
4. InBPS (current in byte rate) 每秒入流量(字节) 
5. OutBPS (current out byte rate) 每秒出流量(字节)
测试
[root@server ~]# curl http://10.3.131.235
230
[root@server ~]# curl http://10.3.131.235
231
[root@server ~]# curl http://10.3.131.235
230
[root@server ~]# curl http://10.3.131.235
231
[root@server ~]# curl http://10.3.131.235

第二次架构测试,java语言处理,tomcat 集群

环境准备
前言:在第一次架构基础上加入对java项目处理,tomcat集群
# tomcat 7.0.94
ip 10.3.131.236
# jdk 7u67
# 项目代码 jspgouv6
# 关闭防火墙 selinux
# mysql 5.7.28 yum安装及编译安装 
ip 10.3.131.239
环境部署
tomcat 部署

[root@tomcat ~]# wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.94/bin/apache- tomcat-7.0.94.tar.gz
# 下载jdk
JDK下载地址: https://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads- javase7-521261.html
# 项目包已提供
[root@tomcat ~]# tar xf apache-tomcat-7.0.94.tar.gz -C /usr/local/    # 解压tomcat 到/usr/local目录下
[root@tomcat ~]# tar xf jdk-7u67-linux-x64.tar.gz -C /usr/local/      # 解压jdk到 /usr/local 目录下
[root@tomcat ~]# cd /usr/local/                                       # 进入 /usr/local 目录
[root@tomcat ~]# mv jdk1.7.0_67/ java								   # 修改目录名称
[root@tomcat ~]# mv apache-tomcat-7.0.94/ tomcat
2.修改环境变量
[root@tomcat ~]# vim /etc/profile.d/jdk.sh
JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH
CATALINA_HOME=/usr/local/tomcat
export CATALINA_HOME

[root@tomcat ~]# source /etc/profile.d/jdk.sh
3.检测
[root@tomcat ~]# java -version
java version "1.7.0_67"
Java(TM) SE Runtime Environment (build 1.7.0_67-b01)
Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)
4.启动Tomcat
[root@tomcat ~]# /usr/local/tomcat/bin/startup.sh
(如何关闭呢:[root@qianfeng ~]# /usr/local/tomcat/bin/shutdown.sh)
5.检查是否启动成功
[root@tomcat ~]# netstat -tnlp | grep java
tcp 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN 6191/java
tcp 0 0 :::8009 :::* LISTEN 6191/java
tcp 0 0 :::8080 :::* LISTEN 6191/java
# 拷贝项目代码
[root@tomcat ~]# rz
[root@tomcat ~]# unzip jspgouV6-ROOT.zip 
[root@tomcat ~]# cp -r ROOT/ /usr/local/tomcat/webapps/
[root@tomcat ~]# yum install -y mysql  # 安装mysql客户端
[root@tomcat ~]# mysql -p'QianFeng@1234' -h 10.3.131.239
MySQL [(none)]> use jspgou
MySQL [jspgou]> source jspgou.sql
[root@tomcat ~]# vim /usr/local/tomcat/webapps/ROOT/WEB-INF/config/jdbc.properties  # 修改下面的配置
jdbc.url=jdbc:mysql://10.3.131.239:3306/jspgou?characterEncoding=UTF-8
jdbc.username=root
jdbc.password=QianFeng@123
mysql部署

主服务器yum安装

清理安装环境:
# yum erase mariadb mariadb-server mariadb-libs mariadb-devel -y
# userdel -r mysql
# rm -rf /etc/my*
# rm -rf /var/lib/mysql
[root@mysql1 ~]# wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
[root@mysql1 ~]# yum -y localinstall mysql80-community-release-el7-3.noarch.rpm 
[root@mysql1 ~]# vim /etc/yum.repos.d/mysql-community.repo 
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

[mysql80-community]
name=MySQL 8.0 Community Server
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/7/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

[root@mysql1 ~]# yum -y install mysql-community-server
[root@mysql1 ~]# systemctl start mysqld
[root@mysql1 ~]# grep passw /var/log/mysqld.log 
2019-12-20T04:55:41.379206Z 1 [Note] A temporary password is generated for root@localhost: 6wis,KB.yhLk
[root@mysql1 ~]# mysqladmin  -p'6wis,KB.yhLk' password 'QianFeng@123'
[root@mysql1 ~]# mysql -p'QianFeng@123'
mysql> create database jspgou default charset=utf8;
Query OK, 1 row affected (0.00 sec)

mysql> grant all on *.* to 'root'@'%' identified by 'QianFeng@1234';
Query OK, 0 rows affected, 1 warning (0.05 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.02 sec)

nginx 代理后端tomcat
# 将老的架构中的nginxupstream指向后端tomcat
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
upstream testweb {
        server 10.3.131.236:8080 weight=1 max_fails=1 fail_timeout=2s;
}
    server {
        listen       80;
        server_name  localhost;
    location / {
       proxy_pass http://testweb;
       proxy_set_header Host $host:$server_port;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HwTXyMA4-1577026511139)(C:\Users\newrain\AppData\Roaming\Typora\typora-user-images\1576822364949.png)]

第三次架构测试,tomcat集群

环境准备
tomcat 集群两台,每台4实例
ip ip 10.3.131.236 10.3.131.237
端口采用 8081、8082、8083、8084
主机名 tomcat  tomcat2
环境部署
# 部署多实例
[root@tomcat ~]# cd /usr/local/
[root@tomcat local]# ls
bin  etc  games  include  java  lib  lib64  libexec  sbin  share  src  tomcat
[root@tomcat local]# cp -r tomcat tomcat1
[root@tomcat local]# cp -r tomcat tomcat2
[root@tomcat local]# cp -r tomcat tomcat3
[root@tomcat local]# ls
bin  etc  games  include  java  lib  lib64  libexec  sbin  share  src  tomcat  tomcat1  tomcat2  tomcat3
# 编写修改脚本并执行,此脚本用于生成启动管理脚本
[root@tomcat local]# vim mod-tomcat.sh
sed -i 's#8005#8011#;s#8080#8081#;s#8009#8019#' /usr/local/tomcat/conf/server.xml
sed -i 's#8005#8012#;s#8080#8082#;s#8009#8029#' /usr/local/tomcat1/conf/server.xml
sed -i 's#8005#8013#;s#8080#8083#;s#8009#8039#' /usr/local/tomcat2/conf/server.xml
sed -i 's#8005#8014#;s#8080#8084#;s#8009#8049#' /usr/local/tomcat3/conf/server.xml
cat >/usr/local/tomcat/bin/start.sh <<'EOF'
#!/bin/bash
#tomcat
export CATALINA_BASE="/usr/local/tomcat"
case "$1" in
start)
    $CATALINA_BASE/bin/startup.sh
    ;;
stop)
    $CATALINA_BASE/bin/shutdown.sh
esac
EOF
cat >/usr/local/tomcat1/bin/start.sh <<'EOF'
#!/bin/bash
#tomcat1
export CATALINA_BASE="/usr/local/tomcat1"
case "$1" in
start)
    $CATALINA_BASE/bin/startup.sh
    ;;
stop)
    $CATALINA_BASE/bin/shutdown.sh
esac
EOF
cat >/usr/local/tomcat2/bin/start.sh <<'EOF'
#!/bin/bash
#tomcat2
export CATALINA_BASE="/usr/local/tomcat2"
case "$1" in
start)
    $CATALINA_BASE/bin/startup.sh
    ;;
stop)
    $CATALINA_BASE/bin/shutdown.sh
esac
EOF
cat >/usr/local/tomcat3/bin/start.sh <<'EOF'
#!/bin/bash
#tomcat3
export CATALINA_BASE="/usr/local/tomcat3"
case "$1" in
start)
    $CATALINA_BASE/bin/startup.sh
    ;;
stop)
    $CATALINA_BASE/bin/shutdown.sh
esac
EOF
chmod 777 /usr/local/{tomcat,tomcat1,tomcat2,tomcat3}/bin/start.sh

# 第二个脚本,此脚本用于启动或关闭tomcat
[root@tomcat local]# vim re-tomcat.sh
/usr/local/tomcat/bin/start.sh $1
/usr/local/tomcat1/bin/start.sh $1
/usr/local/tomcat2/bin/start.sh $1
/usr/local/tomcat3/bin/start.sh $1
# 查看端口
[root@tomcat local]# ss -tnlp
State       Recv-Q Send-Q          Local Address:Port                         Peer Address:Port              
users:(("master",pid=1403,fd=13))LISTEN      0      100                      :::8080 
users:(("java",pid=3708,fd=43))LISTEN      0      100                        :::8049   
users:(("java",pid=4849,fd=44))LISTEN      0      100                        :::8081
users:(("java",pid=4819,fd=43))LISTEN      0      100                        :::8082   
users:(("java",pid=4828,fd=43))LISTEN      0      100                        :::8083
users:(("java",pid=4839,fd=43))LISTEN      0      100                        :::8019
users:(("java",pid=4819,fd=44))LISTEN      0      100                        :::8084   
users:(("master",pid=1403,fd=14))LISTEN      0      100                      :::8029 
users:(("java",pid=4828,fd=44))LISTEN      0      1            ::ffff:127.0.0.1:8005   
users:(("java",pid=3708,fd=49))LISTEN      0      100                        :::8039   
users:(("java",pid=4839,fd=44))LISTEN      0      100                        :::8009

# tomcat2 部署
[root@tomcat2 ~]# cd /usr/local/
[root@tomcat2 local]# scp -r 10.3.131.236:/usr/local/{tomcat1,tomcat2,tomcat3,tomcat,java,re-tomcat.sh} ./
[root@tomcat2 local]# vim /etc/profile.d/jdk.sh
JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH
CATALINA_HOME=/usr/local/tomcat
export CATALINA_HOME

# tomcat && tomcat 1 
[root@tomcat1 local]# sh /usr/local/re-tomcat.sh start
[root@tomcat2 local]# sh /usr/local/re-tomcat.sh start

测试访问(8个端口全部访问)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EAtrdsHP-1577026511140)(C:\Users\newrain\AppData\Roaming\Typora\typora-user-images\1576825666399.png)]

nginx反向代理,代理tomcat集群
# 两台nginx上修改配置
upstream testweb {
        server 10.3.131.236:8081 weight=1 max_fails=1 fail_timeout=2s;
        server 10.3.131.236:8082 weight=1 max_fails=1 fail_timeout=2s;
        server 10.3.131.236:8083 weight=1 max_fails=1 fail_timeout=2s;
        server 10.3.131.236:8084 weight=1 max_fails=1 fail_timeout=2s;
        server 10.3.131.237:8081 weight=1 max_fails=1 fail_timeout=2s;
        server 10.3.131.237:8082 weight=1 max_fails=1 fail_timeout=2s;
        server 10.3.131.237:8083 weight=1 max_fails=1 fail_timeout=2s;
        server 10.3.131.237:8084 weight=1 max_fails=1 fail_timeout=2s;
}  

第四次架构测试,mysql一主两从,增加读写分离

环境准备
centos 7.6 1台 部署单机两实例
前端mysql做读写分离
主库ip 10.3.131.239:3306
从库ip 10.3.131.238:3306,3307

环境部署

从库采用编译安装

清理安装环境:
# yum erase mariadb mariadb-server mariadb-libs mariadb-devel -y
# userdel -r mysql
# rm -rf /etc/my*
# rm -rf /var/lib/mysql
[root@mysql2 ~]# groupadd mysql
[root@mysql2 ~]# useradd -r -g mysql -M -s /bin/false mysql
[root@mysql2 ~]# yum -y install ncurses ncurses-devel openssl-devel bison gcc gcc-c++ make cmake  # mysql 编译安装依赖 
https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.12.tar.gz
[root@mysql2 ~]# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.28.tar.gz
[root@mysql2 ~]# tar xf mysql-boost-5.7.28.tar.gz
[root@mysql2 ~]# cd mysql-5.7.28/
[root@mysql2 ~]# mkdir /data  # 数据目录
[root@mysql2 ~]# cmake . \
-DWITH_BOOST=boost \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DSYSCONFDIR=/etc \
-DMYSQL_DATADIR=/data \
-DINSTALL_MANDIR=/usr/share/man \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1

[root@mysql2 ~]# make && make install
[root@mysql2 ~]# cd /usr/local/mysql
[root@mysql2 mysql]# chown -R mysql.mysql .
# 第一个实例配置
[root@mysql2 mysql]# ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data
[root@mysql2 mysql]#  bin/mysql_ssl_rsa_setup --datadir=/data
[root@mysql2 mysql]# vim /etc/my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/data
[root@mysql2 mysql]# bin/mysqld_safe --user=mysql &
[root@mysql2 mysql]# cat /etc/profile.d/mysql.sh
PATH=$PATH:/usr/local/mysql/bin 
[root@mysql2 mysql]# source ~/.bash_profile
[root@mysql2 mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@mysql2 mysql]# chkconfig --add mysqld
[root@mysql2 mysql]# chkconfig mysqld on
[root@mysql2 mysql]# service mysqld start
[root@mysql2 mysql]# mysqladmin -p'vuXciQ9d9n<;' password 'QianFeng@123'


# 第二个实例配置
[root@mysql2 ~]# cat /etc/my.cnf 
[mysqld]
basedir=/usr/local/mysql
datadir=/data
port=3306
socket=/tmp/mysql.sock
symbolic-links=0
user=mysql

[root@mysql2 ~]# cat /etc/my2.cnf 
[mysqld]
basedir=/usr/local/mysql
datadir=/data2
port=3307
socket=/tmp/mysql2.sock
symbolic-links=0
user=mysql

[root@mysql2 mysql]# mkdir /data2
# 初始化实例2
[root@mysql2 mysql]# mysqld --defaults-file=/etc/my2.cnf --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data2

# 编写脚本管理数据库
[root@mysql2 ~]# cat /usr/bin/mod-mysql 
#!/usr/bin/bash
# mysql2
if [[ $# -ne 1 ]];then
	echo "错误的参数个数"
	exit 1
fi
case $1 in
imysql2)
mysql -uroot -p'QianFeng!123' -P 3307 -S /tmp/mysql2.sock
;;
# mysql1
imysql1)
mysql -uroot -p'QianFeng@123'
;;
# 启动
smysql2)
nohup /usr/local/mysql/bin/mysqld --defaults-file=/etc/my2.cnf --datadir=/data2/ --user=mysql &
;;
smysql1)
service mysqld start
;;
tmysql1)
service mysqld stop
;;
tmysql2)
mysqladmin -S /tmp/mysql2.sock -P 3307 -p'QianFeng!123' shutdown
;;
esac

# 修改密码
[root@mysql2 ~]# mysqladmin -uroot -p'sNW7Tlr??c%-' password 'QianFeng!123' -P 3307 -S /tmp/mysql2.sock

主从同步
# 主库
[root@mysql1 ~]# mkdir -pv /data/binlog
[root@mysql1 ~]# chown -R mysql /data/binlog
[root@mysql1 ~]# cat /etc/my.cnf
server-id=1
log_bin=/data/binlog/mysql-bin.log   #(注意mysql需要有该目录写权限, chown mysql binlog/)
expire_logs_days=3
max_binlog_size=100M 
binlog_format=row  #(指定binlog格式  有row mixed等3种格式) 
max_allowed_packet=32M

[root@mysql1 ~]# systemctl restart mysqld
[root@mysql1 ~]# mysql -pQianFeng@123
mysql> grant replication slave,replication client on *.* to 'slave'@'%' identified by 'QianFeng@@123';
# 记录偏移量
mysql> show master status\G
*************************** 1. row ***************************
             File: mysql-bin.000001
         Position: 458
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)
mysql> set global event_scheduler=off;
mysql> FLUSH TABLES WITH READ LOCK;
(注意:在退出MySQL终端的时候都会隐式的执行unlock tables。也就是如果要让表锁定生效就必须一直保持对话。锁表之前确认mysql只剩下自己的操作)
# 另开一个终端,不要关闭已经上锁的mysql终端
[root@mysql1 ~]# mysqldump -R -E --default-character-set=utf8 -uroot -p'QianFeng@123' jspgou > data.sql
[root@mysql1 ~]# scp data.sql 10.3.131.238:/root/data.sql

# 两台从库
[root@mysql2 ~]# mkdir /{data,data2}/binlog
[root@mysql2 ~]# chown mysql /{data,data2}/binlog
# 修改配置文件
[root@mysql2 ~]# vim /etc/my.cnf
event_scheduler=0  #关闭event归档,0为关闭
#slave
server-id=2
#replicate-rewrite-db=dbname1->dbname1  同步单个库使用
#replicate-do-db=dbname1                同步单个库使用
log_bin=/data/binlog/mysql-bin.log
relay_log=/data/binlog/mysql-relay-bin.log
expire_logs_days=3
max_binlog_size=100M
binlog_format=row 
slave-net-timeout=60 
max_allowed_packet=32M
log_bin_trust_function_creators=1

[root@mysql2 ~]# vim /etc/my2.cnf
event_scheduler=0  #关闭event归档,0为关闭
#slave
server-id=3
#replicate-rewrite-db=dbname1->dbname1  同步单个库使用
#replicate-do-db=dbname1                同步单个库使用
log_bin=/data2/binlog/mysql-bin.log
relay_log=/data2/binlog/mysql-relay-bin.log
expire_logs_days=3
max_binlog_size=100M
binlog_format=row 
slave-net-timeout=60 
max_allowed_packet=32M
log_bin_trust_function_creators=1

[root@mysql2 ~]# mod-mysql tmysql1
[root@mysql2 ~]# mod-mysql tmysql2
[root@mysql2 ~]# mod-mysql smysql1
[root@mysql2 ~]# mod-mysql smysql2
[root@mysql2 ~]# mod-mysql imysql1
mysql> create database jspgou default charset=utf8;
mysql> use jspgou
mysql> source /root/data.sql
mysql> edit
change master to 
master_host='10.3.131.239',
master_user='slave',
master_password='QianFeng@@123',
master_log_file='mysql-bin.000001',
master_log_pos=458;
[root@mysql2 ~]# mod-mysql imysql2
mysql> create database jspgou default charset=utf8;
mysql> use jspgou
mysql> source /root/data.sql
mysql> edit
change master to 
master_host='10.3.131.239',
master_user='slave',
master_password='QianFeng@@123',
master_log_file='mysql-bin.000001',
master_log_pos=458;
# 检查两台同步情况
mysql> start slave;
mysql> show slave status\G

        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

读写分离

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ao8VvmxI-1577026511141)(C:\Users\newrain\AppData\Roaming\Typora\typora-user-images\1576831880149.png)]

mycat ip 10.3.131.244
# 环境部署
将jdk上传到服务器中,
[root@mycat ~]# tar xf jdk-7u67-linux-x64.tar.gz -C /usr/local/
[root@mycat ~]# cd /usr/local/
[root@mycat local]# mv jdk1.7.0_67 java 
设置环境变量
[root@mycat local]# vim /etc/profile.d/java.sh  #添加如下内容,
JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
[root@mycat local]# source /etc/profile.d/java.sh
下载
[root@mycat ~]# wget http://dl.mycat.io/1.6.5/Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
解压
[root@mycat ~]# tar xf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz -C /usr/local/
#检测java
[root@mycat ~]# java -version
java version "1.7.0_67"
Java(TM) SE Runtime Environment (build 1.7.0_67-b01)
Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)
# 修改tomcat 配置文件
[root@mycat ~]# cat /usr/local/mycat/conf/server.xml 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
	<user name="root" defaultAccount="true">
		<property name="password">QianFeng@1234</property>
		<property name="schemas">jspgou</property>
	</user>
</mycat:server>

[root@mycat ~]# cat /usr/local/mycat/conf/schema.xml 
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

	<schema name="jspgou" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
	</schema>
	<dataNode name="dn1" dataHost="localhost1" database="jspgou" />
	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<!-- can have multi write hosts -->
		<writeHost host="hostM1" url="10.3.131.239:3306" user="mycat"
				   password="QianFeng@123">
			<!-- can have multi read hosts -->
			<readHost host="hostS2" url="10.3.131.238:3306" user="mycat" password="QianFeng@123" />
			<readHost host="hostS3" url="10.3.131.238:3307" user="mycat" password="QianFeng@123" />
		</writeHost>
	</dataHost>
</mycat:schema>

# 启动mycat
[root@mycat ~]# /usr/local/mycat/bin/mycat 
[root@mycat ~]# jps
1796 WrapperSimpleApp
1996 Jps

[root@mycat conf]# mysql -uroot -p'QianFeng@1234' -h 10.3.131.244 -P 8066
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.29-mycat-1.6.5-release-20180122220033 MyCat Server (OpenCloundDB)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> show databases;
+----------+
| DATABASE |
+----------+
| jspgou   |
+----------+
1 row in set (0.01 sec)

MySQL [(none)]> use jspgou
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MySQL [jspgou]> show tables;
。。。。
104 rows in set (0.01 sec)

# 完成

# 修改tomcat 的数据库配置
# 两台tomcat 都执行
[root@tomcat local]# sed -i 's#10.3.131.239#10.3.131.244#' tomcat/webapps/ROOT/WEB-INF/config/jdbc.properties 
[root@tomcat local]# sed -i 's#10.3.131.239#10.3.131.244#' tomcat1/webapps/ROOT/WEB-INF/config/jdbc.properties 
[root@tomcat local]# sed -i 's#10.3.131.239#10.3.131.244#' tomcat2/webapps/ROOT/WEB-INF/config/jdbc.properties 
[root@tomcat local]# sed -i 's#10.3.131.239#10.3.131.244#' tomcat3/webapps/ROOT/WEB-INF/config/jdbc.properties

重启tomcat  
[root@tomcat local]# sh /usr/local/re-tomcat.sh stop
[root@tomcat local]# sh /usr/local/re-tomcat.sh start

总结

集群介绍

					
			nginx---tomcat 4实例             mysql 从
前端 lvs ---                 ---mycat--- mysql 主
			nginx---tomcat 4实例             mysql 从

# 账号密码信息
lvs dip  10.3.131.76  vip 10.3.131.235
nginx 1   ip 10.3.131.231
nginx 2   ip 10.3.131.230
mysql 主  ip 10.3.131.239 用户 slave QianFeng@@123(主从) 用户root QianFeng@123 用户 mycat QianFeng@123
mysql 从  ip 10.3.131.238 用户m1上 root QianFeng@123 m2上 root QianFeng!123 mycat QianFeng@123(相同)
mycat     ip 10.3.131.244 用户 root  QianFeng@1234
tomcat 1  ip 10.3.131.236 端口 8081/8082/8083/8084
tomcat 2  ip 10.3.131.237 端口 8081/8082/8083/8084
## ssh登录账号root  密码为1
# 控制方式
lvs systemctl start ipvsadm
nginx /usr/local/nginx/sbin/nginx 
tomcat /usr/local/re-tomcat.sh start|stop
mycat  /usr/local/mycat/bin/mycat  start|stop
mysql主 systemctl start mysqld
mysql从 mod-mysql imysql1|imysql2# 进入mysql客户端
        mod-mysql smysql1|smysql2 # 启动mysql
        mod-mysql tmysql1|tmysql2 # 停止myqsl   1和2是两个实例 mod-mysql是启动脚本
       数据目录 /data  /data2  配置文件  /etc/my.cnf  /etc/my2.cnf
       
# 测试页面
http://10.3.131.235/jeeadmin/jspgou/index.do#/login
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值