服务器群集方案文档整合
分别有3台服务器:192.168.1.104为主服务器,192.168.1.102为备份服务器,另添加一台内网服务器,定时拉取线上服务器上的数据,避免灾难性数据毁灭。
主服务器:
开启 MySQL 服务并新建一个测试数据库
abc:
mysql> create database abc;
Query OK, 1 row affected (0.31 sec)
##创建一个用来同步的用户,指定只能在
192.168.1.102 登录
mysql> grant replication slave on *.*
to 'tongbu'@'192.168.1.102'
identified by 'passwd';
修改配置文件:
root@camlit ~: vi /etc/my.cnf
备注:在修改配置文件之前做好该文件
份工作。
[mysqld]
datadir=/usr/local/mysql/var
socket=/tmp/mysql.sock
user=mysql
old_passwords=passwd
##增加下面内容
server_id=1###1 表示 master, 2表示
slave binlog-do-db=abc ###需要同步
数据库,如果有多个数据库,每个数据库一
binlog-ignore-db=mysql###不需要同步
数据库 log-bin=mysql-bin
[mysqld_safe] ############可不用
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
重启服务:
root@camlit ~:/etc/init.d/mysqld
restart
最后
验证:
mysql> use abc;
mysql> create table test1 (IP
VARCHAR(20),USER VARCHAR(100), MAIL
VARCHAR(100));
然后在从服务器看能否已更新。
mysql> use abc;
mysql> show tables;
+---------------+
| Tables_in_abc |
+---------------+
| test1 |
+---------------+
从服务器:
2.2.2 Slave 端设置
和 master 端一样创建一个相同的数据库:
abc
修改配置文件:
root@test2 ~: vi /etc/my.cnf
[mysqld]
datadir=/usr/local/mysql/var
socket=/tmp/mysql.sock
user=mysql
old_passwords=passwd
###增加下面内容
server_id=2 log-bin=mysql-bin
master-host=192.168.1.104 master-
user=tongbu master-password=passwd
master-port=3306 master-connect-
retry=10 ###连接次数 replicate-do-
db=abc ###接受的数据库名 replicate
ignore-db=mysql ###不要接受的数据库
[mysqld_safe] ####可不用
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
重启服务:servie mysqld restart
回到主服务器:
mysql > show masterstatus;
+------------------+----------+--------------+------------------+
| File |Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000088 | 385 | abc | mysql |
+------------------+----------+--------------+------------------+
回到从服务器:
mysql>stop slave;
mysql>change master to master_log_file='mysql-bin.000088',master_log_pos=385;
mysql>slave start;
mysql>show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
数据库和物理文件程序等在本地上备份:
[root@fuyi02 shell]# cat fuyidatabak.sh
#!/bin/bash
DAY=`date +%Y%m%d`
SIZE=`du -sh /data/mysql/3306/data/fuyidata`
MYSQLDUMP="/usr/local/webserver/mysql/bin/mysqldump"
MYSQLPASSWORD=`cat /data/save/mysql_root`
echo "Date: $DAY" >> /tmp/dbinfo.txt
echo "Date Size: $SIZE" >> /tmp/dbinfo.txt
$MYSQLDUMP -uroot -p$MYSQLPASSWORD fuyidata >/data/dbbak/fuyidata.sql
tar zcvf /data/dbbak/fuyidata-${DAY}.tar.gz/data/dbbak/fuyidata.sql /tmp/dbinfo.txt
rm -rf /tmp/dbinfo.txt
rm -rf /data/dbbak/fuyidata.sql
[root@fuyi02 shell]# cat www_efuyibak.sh
#!/bin/bash
DAY=`date +%Y%m%d`
cd /data/fuyicar/web/
SIZE=`du -sh app admin lib src`
echo "Date: $DAY" >> /tmp/dbinfo.txt
echo "Date Size: $Size" >> /tmp/dbinfo.txt
tar zcvf /data/www_bak/fuyicarweb_bak-${DAY}.tar.gz/data/fuyicar/web/app /data/fuyicar/web/admin /data/fuyicar/web/src/data/fuyicar/web/lib
rm -rf /tmp/dbinfo.txt
[root@fuyi02 shell]# cat www_cncarbak.sh
#!/bin/bash
DAY=`date +%Y%m%d`
cd /data/mfcmall/web/
SIZE=`du -sh cncar`
echo "Date: $DAY" >> /tmp/dbinfo.txt
echo "Date Size: $Size" >> /tmp/dbinfo.txt
tar zcvf /data/www_bak/cncarweb_bak-${DAY}.tar.gz/data/mfcmall/web/cncar
rm -rf /tmp/dbinfo.txt
[root@fuyi02 shell]# cat fmcmallbak.sh
#!/bin/bash
DAY=`date +%Y%m%d`
SIZE=`du -sh /data/mysql/3306/data/fmcmall`
MYSQLDUMP="/usr/local/webserver/mysql/bin/mysqldump"
MYSQLPASSWORD=`cat /data/save/mysql_root`
echo "Date: $DAY" >> /tmp/dbinfo.txt
echo "Date Size: $SIZE" >> /tmp/dbinfo.txt
$MYSQLDUMP -uroot -p$MYSQLPASSWORD fmcmall >/data/dbbak/fmcmall.sql
tar zcvf /data/dbbak/fmcmall-${DAY}.tar.gz /data/dbbak/fmcmall.sql/tmp/dbinfo.txt
rm -rf /tmp/dbinfo.txt
rm -rf /data/dbbak/fuyidata.sql
RSYNC数据同步:
安装 rsyncd (安装过程忽略)
1. yum install –y xinetd
2. vi /etc/xinetd.d/rsync
disable=no
vi /etc/rsyncd.conf (需要手动添加这个配置文件)
在服务器上装好并加上相应的配置文件(客户端102不用配置文件,安装rsync即可)
192.168.1.104 服务器上的配置
use chroot = no
uid = root
gid = root
max connections = 4
log file = /var/log/rsyncd.log
hosts allow = 192.168.1.102 # 为了安全性,只允许102客户端进行访问
pid file = /var/run/rsyncd.pid
secrets file = /etc/rsyncd.passwd
[www]
path = /www
read only = no
auth users = root
[web]
path = /home/efuyi/app/
comment = inburst.org web server
auth users = root (为了安全起见,不要使用root,用系统真实用户即可)
/usr/local/rsync/bin/rsync –daemon 启动rsync服务器 (并在/etc/rc.local添加此命令以开机启动服务)
在rsync客户端上:
用RSYNC 拉取服务器文件的脚本(用此方法,定时将数据库和物理文件程序拉取到内网服务器,同时备份到备份服务器192.168.1.102):
#!/bin/bash
/usr/local/rsync/bin/rsync -avz --progress --delete root@192.168.1.104::web /data/web/rsync_from_192.168.1.104_webbak/--password-file=/etc/rsync.pwd
注意:密码/etc/rsync.pwd与服务器的secrets file = /etc/rsyncd.passwd 一致
当服务器数据受损时:我们可以从客户端向服务器递增式地推送完整数据。
/usr/local/rsync/bin/rsync -avz --progress /data/web/rsync_from_192.168.1.104_webbak/root@192.168.1.104::web --password-file=/etc/rsync.pwd
RSYNC自动化任务:
可以在客户端添加计划任务脚本:
Vi /home/shell/fuyiweb_bak.sh
#!/bin/bash
DATE=`date + %w `
Eg: * */1 * * * /home/shell/fuyiweb_bak.sh (脚本添加以上内容)
/usr/local/rsync/bin/rsync -avz --progress --delete root@192.168.1.104::web /data/web/rsync_from_192.168.1.104_webbak/--password-file=/etc/rsync.pwd
注意:服务器上/etc/rsyncd.passwd 文件的权限一定要设置成 600
Crontab –e
*/2 * * * * /bin/sh /usr/local/bin/fuyiweb_bak.sh
负载均衡软件安装:
1, 系统环境:
Haproxy:192.168.1.103
WEB1:192.168.1.102
WEB2:192.168.1.104
2, Haproxy安装:
[root@localhost ~]# cd /usr/local/src/
[root@localhost src]#wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.8.tar.gz
[root@localhost src]# tar zxf haproxy-1.4.8.tar.gz
[root@localhost src]# cd haproxy-1.4.8
[root@localhost haproxy-1.4.8]# uname –a
[root@localhost haproxy-1.4.8]# make TARGET=linux26 PREFIX=/usr/local/haproxy
[root@localhost haproxy-1.4.8]# make install PREFIX=/usr/local/haproxy
3, 修改Haproxy配置:
[root@localhost haproxy-1.4.8]# vi/usr/local/haproxy/haproxy.cfg
global
log 127.0.0.1 local0 ###全局日志
maxconn 4096 ###最大连接数
chroot /usr/local/haproxy
uid 501 ###用户ID
gid 501 ###组ID
daemon ###后台运行
nbproc 1 ###创建进程数
pidfile /usr/local/haproxy/haproxy.pid ###pid文件
defaults
log 127.0.0.1 local3
mode http ###支持的模式
option httplog ###日志格式
option httpclose ###请求完成后关闭http通道
option dontlognull
option forwardfor ###apache日志转发
option redispatch
retries 2 ###重连次数
maxconn 2000
balance source ###算法类型
stats uri /haproxy-stats ###状态统计页面
#stats auth admin:admin ###状态统计页面用户名密码,可选
contimeout 5000 ###连接超时
clitimeout 50000 ###客户端超时
srvtimeout 50000 ###服务器超时
listen proxy 192.168.1.102:8080 ###访问地址及端口
option httpchk HEAD /index.html HTTP/1.0 ###健康检查页面
server web1 192.168.1.102:80 cookie app1inst1 check inter 2000 rise 2 fall
5
server web2 192.168.1.104:80 cookie app1inst2 check inter 2000 rise 2 fall
5
4, 启动Haproxy:
[root@localhost haproxy-1.4.8]# cd/usr/local/haproxy/
[root@localhost haproxy]# /usr/local/haproxy/sbin/haproxy -f/usr/local/haproxy/haproxy.cfg
5, web1和web2上分别启动http服务并修改首页文件:
[root@localhost haproxy]# /etc/init.d/httpd start
[root@localhost haproxy]# vi /var/www/html/index.html
192.168.179.128 web1 ###128上内容
192.168.179.129 web2 ###129上内容
6, 查看状态页面:
http://192.168.179.128:8080/haproxy-stats
注1:
haproxy重启命令:
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg -st
`cat /usr/local/haproxy/haproxy.pid`
haproxy停止:
killall haproxy
注2:
由于本实验Haproxy与WEB1在同一台服务器上,所以需要注意端口不要冲突。
附Haproxy算法:
一、roundrobin,表示简单的轮询;
二、static-rr,表示根据权重;
三、leastconn,表示最少连接者先处理;
四、source,表示根据请求源IP;
五、uri,表示根据请求的URI;
六、url_param,表示根据请求的URl参数’balance url_param’ requires an URL parameter name
七、hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
八、rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。
之前用过nginx做负载均衡,两者可以结合起来用。有待研究