服务器群集方案文档整合

分别有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做负载均衡,两者可以结合起来用。有待研究