tomcat+mysql服务器部署及主备数据同步总结
环境:
主服务器Main_Server(Linux系统)
备服务器Backup_Server(Linux系统)
网管PC (可通过ssh, telenet登录服务器)
部署步骤:
(注意:1~4步骤在2台服务器上均操作一遍)
工作中用到的,自己实际操作过,总结出来交流顺便给自己存档吧~
-----------------------------------------------------------------------------------
1. 安装Linux操作系统(光盘安装)
注意事项:
a) /opt单独建一个分区,数据库以及数据分区outbox放在这个专门的分区上。注意:/opt分区容量再扩大些。
b) 另行用命令行,把光盘Packages目录下的rpm包全打上2遍。执行命令rpm –ivh -–nodeps –-force /media/Packages/*.rpm
c) /var和/tmp分区是数据频繁变化的,/var有系统日志等,/tmp有临时文件和碎片。/home要尽可能大,/usr目录下安装大部分软件。
2. 安装JDK和tomcat
a) 解压tomcat和JDK安装包
tar -zxvf apache-tomcat-7.0.53.tar.gz
tar -zxvf jdk-8u5-linux-x64.gz
b) 配置环境变量:
vi .bash_profile //编辑.bash_profile;
在文件末尾添加:
export JAVA_HOME=/home/software/jdk1.8.0_05
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export TOMCAT_HOME=/home/software/apache-tomcat-7.0.53
export CATALINA_HOME=/home/software/apache-tomcat-7.0.53
保存并退出.bash_profile
:wq
生效.bash_profile
source .bash_profile
c) 检测是否安装成功
查看java版本:java –version
d) 启动tomcat服务器
Cd到tomcat文件夹下的bin启动和关闭tomcat:
./shutdown.sh
./startup.sh
3. 安装Mysql
1) 在mysql-cluster-gpl-7.3.5-linux-glibc2.5-x86_64.tar.gz安装包所在目录,解压软件包:
tar -zvxf mysql-cluster-gpl-7.3.5-linux-glibc2.5-x86_64.tar.gz
2) 将解压的mysql文件夹,移到/usr/local/目录下:
mv mysql-cluster-gpl-7.3.5-linux-glibc2.5-x86_64/usr/local/mysql
3) 将mysql配置文件拷贝到/etc/目录下,并改名my.cnf:
cp /usr/local/mysql/support-files/my-default.cnf/etc/my.cnf
4) 添加mysql用户及用户组,用来运行mysql数据库
groupadd mysql
useradd -g mysql mysql
5) 修改mysql目录权限
//设定root能访问/usr/local/mysql
chown –r root/usr/local/mysql
//设定mysql组能访问/usr/local/mysql
chgrp -r mysql /usr/local/mysql
// 设定mysql用户能够访问/var/lib/mysql
chown -R mysql /usr/local/mysql/data
6) 生成mysql系统数据库,安装在/usr/local/mysql目录下:
cd /usr/local/mysql
./scripts/mysql_install_db --user=mysql&
7) 以mysql用户启动mysql服务
/usr/local/mysql/bin/mysqld_safe -user=mysql&
8) 修改mysql的root密码,密码假定为:123456
/usr/local/mysql/bin/mysqladmin -u root password 123456
9) 进入MYSQL安装路径下的bin目录,以root用户登录mysql:
cd/usr/local/mysql/bin
./mysql -u root -p
10) 开启 mysql 本地和远程访问
grant all on *.* to root@192.168.10.133(本机IP地址);
grant all privileges on *.* to root@"%" identified by "123456";
flush privileges;
11) 设置MySQL服务及命令
cp /usr/local/mysql/bin/* /usr/bin
12) 设置mysql启动命令,打开/usr/local/mysql/support-files/mysql.server文件,将以下内容:$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path"
改为:
$bindir/mysqld_safe --datadir="$datadir" --user=root --pid-file="$mysqld_pid_file_path"
拷贝到/etc/init.d目录,并赋可执行权限
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql
13) 以root用户调用以下命令启动mysql服务
service mysql start
14) 设置mysql自启动
在文件/etc/rc.d/rc.local中添加
service mysql start
chkconfig --add mysql
chkconfig --level 345 mysql on
15) 重启电脑查看MySQL是否自动启动并初始化:
登录MySQL
cd /usr/local/mysql/bin
./mysql -uroot -p
4. 将项目部署到服务器上
将war包上传到tomcat的webapps目录下
重新启动Tomcat服务器
以下解决主备数据库数据库,数据分区自动及手动同步
5. 手动同步主备服务器数据分区
假设main_server中,tomcat存放用户数据的文件目录为/home/outbox, 整个程序通过这个outbox文件夹及mysql数据库进行数据的存储和处理。main_server可以通过NFS方式共享outbox文件夹给backup_server.同时backup_server将main_server共享的outbox文件夹mount至/home/outbox 命令为mount –t nfs 192.168.235.129:/home/outbox /home。
NFS共享文件夹方法:
执行如下命令编辑文件/etc/exports:
# vi /etc/exports
在该文件里添加如下内容:
/home/outbox 192.168.*.*(rw,sync,no_root_squash)
然后保存退出。(ip地址填写main_server的ip)
括号内的参数意义描述如下:rw:读/写权限,只读权限的参数为ro;sync:数据同步写入内存和硬盘,也可以使用async,此时数据会先暂存于内存中,而不立即写入硬盘。no_root_squash:NFS 服务器共享目录用户的属性,如果用户是 root,那么对于这个共享目录来说就具有 root 的权限。
接着执行如下命令,启动端口映射:
# /etc/rc.d/init.d/portmap start
最后执行如下命令启动NFS 服务,此时NFS 会激活守护进程,然后就开始监听 Client 端的请求:
# /etc/rc.d/init.d/nfs start
用户也可以重新启动Linux 服务器,自动启动NFS 服务。
关闭防火墙
6. 改进方案:自动应急,有故障后按顺序使用下一个数据库连接
在2台服务器/etc/hosts中登记(ip地址自行更改)
192.168.*.* dbsvr
192.168.*.* dbsvr2
Tomcat META_INF中配置文件context.xml中填写2个数据库连接〈context〉</context>节点写两个,在程序中初始化的时候通过代码判断,两个节点的name不能相同,优先使用第1个,有故障后再按顺序使用下一个数据库连接。
具体实现:
/webapps/projectname/META-INF/Context.xml
<Resource
name="jdbc/mysql" type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
maxActive="100" maxIdle="30" maxWait="5000"
username="root" password="123456"
url="jdbc:mysql://dbsvr:3306/filesystem?useUnicode=true&characterEncoding=UTF-8"/>
<Resource
name="jdbc/mysql2" type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
maxActive="100" maxIdle="30" maxWait="5000"
username="root" password="123456"
url="jdbc:mysql://dbsvr2:3306/filesystem?useUnicode=true&characterEncoding=UTF-8"/>
webapps/filesys/WEB-INF/web.xml
<resource-ref>
<res-ref-name>jdbc/mysql</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<resource-ref>
<res-ref-name>jdbc/mysql2</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
projectname\src\...\dao\BaseDAO.java
public Connection getConnection() {
Context jndiCntx=null;
DataSource dataSource=null;
try {
jndiCntx = new InitialContext();
dataSource = (DataSource) jndiCntx
.lookup("java:comp/env/jdbc/mysql");
conn = dataSource.getConnection();
return conn;
} catch (Exception e) {
e.printStackTrace();
}
try {
jndiCntx = new InitialContext();
dataSource = (DataSource) jndiCntx
.lookup("java:comp/env/jdbc/mysql2");
conn = dataSource.getConnection();
return conn;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
编程规范
任何一次数据库操作失败后,再偿试一次。前一次失败可触发closeconnection(),使得conn=NULL。再偿试一次就可以切换至备用数据库。
7. Backup_server手动同步main_server数据库信息
步骤:手工操作。
在备机上mysqldump –h192.168.*.* –uroot –p123456 databasename > all.sql
同时,在备机上mysql –uroot –p123456 databasename <all.sql
8. 改进方案:主备数据库自动同步模式
配置主机
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to root@'192.168.*.%' IDENTIFIED BY '123456';
[mysqld]
log_bin=mysql-bin
server-id=1
mysql> show master status; 确认状态
#service mysql restart
配置备机
[mysqld]
log_bin = mysql-bin
server-id=2
relay_log = mysql-relay-bin
log_slave_updates = 1
replicate-ignore-db=mysql,information_schema,performance_schema,test
replicate-do-db=filesystem
#service mysql restart
mysql> CHANGE MASTER TO MASTER_HOST='192.168.*.*',MASTER_USER='root',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=0;
mysql> start slave;
mysql> show slave status\G;
文件同步:
NFS进行文件同步:
主机:/opt/outbox 192.168.*.*(rw,sync,no_root_squash)
备机:/opt/outbox2 192.168.*.*(rw,sync,no_root_squash)
查看共享命令:exportfs –av
主备文件分区复制通过rsync实现:
1. 安装rsync
2. rsyncd.conf是rsync主要配置文件,创建并编辑它。
每天0点1分进行文件转储,到移动硬盘。
通过shell脚本定期检查db slave和服务器健康信息。
主服务器Main_Server(Linux系统)
备服务器Backup_Server(Linux系统)
网管PC (可通过ssh, telenet登录服务器)
部署步骤:
(注意:1~4步骤在2台服务器上均操作一遍)
工作中用到的,自己实际操作过,总结出来交流顺便给自己存档吧~
-----------------------------------------------------------------------------------
1. 安装Linux操作系统(光盘安装)
注意事项:
a) /opt单独建一个分区,数据库以及数据分区outbox放在这个专门的分区上。注意:/opt分区容量再扩大些。
b) 另行用命令行,把光盘Packages目录下的rpm包全打上2遍。执行命令rpm –ivh -–nodeps –-force /media/Packages/*.rpm
c) /var和/tmp分区是数据频繁变化的,/var有系统日志等,/tmp有临时文件和碎片。/home要尽可能大,/usr目录下安装大部分软件。
2. 安装JDK和tomcat
a) 解压tomcat和JDK安装包
tar -zxvf apache-tomcat-7.0.53.tar.gz
tar -zxvf jdk-8u5-linux-x64.gz
b) 配置环境变量:
vi .bash_profile //编辑.bash_profile;
在文件末尾添加:
export JAVA_HOME=/home/software/jdk1.8.0_05
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export TOMCAT_HOME=/home/software/apache-tomcat-7.0.53
export CATALINA_HOME=/home/software/apache-tomcat-7.0.53
保存并退出.bash_profile
:wq
生效.bash_profile
source .bash_profile
c) 检测是否安装成功
查看java版本:java –version
d) 启动tomcat服务器
Cd到tomcat文件夹下的bin启动和关闭tomcat:
./shutdown.sh
./startup.sh
3. 安装Mysql
1) 在mysql-cluster-gpl-7.3.5-linux-glibc2.5-x86_64.tar.gz安装包所在目录,解压软件包:
tar -zvxf mysql-cluster-gpl-7.3.5-linux-glibc2.5-x86_64.tar.gz
2) 将解压的mysql文件夹,移到/usr/local/目录下:
mv mysql-cluster-gpl-7.3.5-linux-glibc2.5-x86_64/usr/local/mysql
3) 将mysql配置文件拷贝到/etc/目录下,并改名my.cnf:
cp /usr/local/mysql/support-files/my-default.cnf/etc/my.cnf
4) 添加mysql用户及用户组,用来运行mysql数据库
groupadd mysql
useradd -g mysql mysql
5) 修改mysql目录权限
//设定root能访问/usr/local/mysql
chown –r root/usr/local/mysql
//设定mysql组能访问/usr/local/mysql
chgrp -r mysql /usr/local/mysql
// 设定mysql用户能够访问/var/lib/mysql
chown -R mysql /usr/local/mysql/data
6) 生成mysql系统数据库,安装在/usr/local/mysql目录下:
cd /usr/local/mysql
./scripts/mysql_install_db --user=mysql&
7) 以mysql用户启动mysql服务
/usr/local/mysql/bin/mysqld_safe -user=mysql&
8) 修改mysql的root密码,密码假定为:123456
/usr/local/mysql/bin/mysqladmin -u root password 123456
9) 进入MYSQL安装路径下的bin目录,以root用户登录mysql:
cd/usr/local/mysql/bin
./mysql -u root -p
10) 开启 mysql 本地和远程访问
grant all on *.* to root@192.168.10.133(本机IP地址);
grant all privileges on *.* to root@"%" identified by "123456";
flush privileges;
11) 设置MySQL服务及命令
cp /usr/local/mysql/bin/* /usr/bin
12) 设置mysql启动命令,打开/usr/local/mysql/support-files/mysql.server文件,将以下内容:$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path"
改为:
$bindir/mysqld_safe --datadir="$datadir" --user=root --pid-file="$mysqld_pid_file_path"
拷贝到/etc/init.d目录,并赋可执行权限
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql
13) 以root用户调用以下命令启动mysql服务
service mysql start
14) 设置mysql自启动
在文件/etc/rc.d/rc.local中添加
service mysql start
chkconfig --add mysql
chkconfig --level 345 mysql on
15) 重启电脑查看MySQL是否自动启动并初始化:
登录MySQL
cd /usr/local/mysql/bin
./mysql -uroot -p
4. 将项目部署到服务器上
将war包上传到tomcat的webapps目录下
重新启动Tomcat服务器
以下解决主备数据库数据库,数据分区自动及手动同步
5. 手动同步主备服务器数据分区
假设main_server中,tomcat存放用户数据的文件目录为/home/outbox, 整个程序通过这个outbox文件夹及mysql数据库进行数据的存储和处理。main_server可以通过NFS方式共享outbox文件夹给backup_server.同时backup_server将main_server共享的outbox文件夹mount至/home/outbox 命令为mount –t nfs 192.168.235.129:/home/outbox /home。
NFS共享文件夹方法:
执行如下命令编辑文件/etc/exports:
# vi /etc/exports
在该文件里添加如下内容:
/home/outbox 192.168.*.*(rw,sync,no_root_squash)
然后保存退出。(ip地址填写main_server的ip)
括号内的参数意义描述如下:rw:读/写权限,只读权限的参数为ro;sync:数据同步写入内存和硬盘,也可以使用async,此时数据会先暂存于内存中,而不立即写入硬盘。no_root_squash:NFS 服务器共享目录用户的属性,如果用户是 root,那么对于这个共享目录来说就具有 root 的权限。
接着执行如下命令,启动端口映射:
# /etc/rc.d/init.d/portmap start
最后执行如下命令启动NFS 服务,此时NFS 会激活守护进程,然后就开始监听 Client 端的请求:
# /etc/rc.d/init.d/nfs start
用户也可以重新启动Linux 服务器,自动启动NFS 服务。
关闭防火墙
6. 改进方案:自动应急,有故障后按顺序使用下一个数据库连接
在2台服务器/etc/hosts中登记(ip地址自行更改)
192.168.*.* dbsvr
192.168.*.* dbsvr2
Tomcat META_INF中配置文件context.xml中填写2个数据库连接〈context〉</context>节点写两个,在程序中初始化的时候通过代码判断,两个节点的name不能相同,优先使用第1个,有故障后再按顺序使用下一个数据库连接。
具体实现:
/webapps/projectname/META-INF/Context.xml
<Resource
name="jdbc/mysql" type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
maxActive="100" maxIdle="30" maxWait="5000"
username="root" password="123456"
url="jdbc:mysql://dbsvr:3306/filesystem?useUnicode=true&characterEncoding=UTF-8"/>
<Resource
name="jdbc/mysql2" type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
maxActive="100" maxIdle="30" maxWait="5000"
username="root" password="123456"
url="jdbc:mysql://dbsvr2:3306/filesystem?useUnicode=true&characterEncoding=UTF-8"/>
webapps/filesys/WEB-INF/web.xml
<resource-ref>
<res-ref-name>jdbc/mysql</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<resource-ref>
<res-ref-name>jdbc/mysql2</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
projectname\src\...\dao\BaseDAO.java
public Connection getConnection() {
Context jndiCntx=null;
DataSource dataSource=null;
try {
jndiCntx = new InitialContext();
dataSource = (DataSource) jndiCntx
.lookup("java:comp/env/jdbc/mysql");
conn = dataSource.getConnection();
return conn;
} catch (Exception e) {
e.printStackTrace();
}
try {
jndiCntx = new InitialContext();
dataSource = (DataSource) jndiCntx
.lookup("java:comp/env/jdbc/mysql2");
conn = dataSource.getConnection();
return conn;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
编程规范
任何一次数据库操作失败后,再偿试一次。前一次失败可触发closeconnection(),使得conn=NULL。再偿试一次就可以切换至备用数据库。
7. Backup_server手动同步main_server数据库信息
步骤:手工操作。
在备机上mysqldump –h192.168.*.* –uroot –p123456 databasename > all.sql
同时,在备机上mysql –uroot –p123456 databasename <all.sql
8. 改进方案:主备数据库自动同步模式
配置主机
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to root@'192.168.*.%' IDENTIFIED BY '123456';
[mysqld]
log_bin=mysql-bin
server-id=1
mysql> show master status; 确认状态
#service mysql restart
配置备机
[mysqld]
log_bin = mysql-bin
server-id=2
relay_log = mysql-relay-bin
log_slave_updates = 1
replicate-ignore-db=mysql,information_schema,performance_schema,test
replicate-do-db=filesystem
#service mysql restart
mysql> CHANGE MASTER TO MASTER_HOST='192.168.*.*',MASTER_USER='root',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=0;
mysql> start slave;
mysql> show slave status\G;
文件同步:
NFS进行文件同步:
主机:/opt/outbox 192.168.*.*(rw,sync,no_root_squash)
备机:/opt/outbox2 192.168.*.*(rw,sync,no_root_squash)
查看共享命令:exportfs –av
主备文件分区复制通过rsync实现:
1. 安装rsync
2. rsyncd.conf是rsync主要配置文件,创建并编辑它。
每天0点1分进行文件转储,到移动硬盘。
通过shell脚本定期检查db slave和服务器健康信息。