简单的负载均衡站点配置

资料从网上收集的,但是有实测。给新手用的,老手可以参考并完善一下。

一、 实现目标:负载均衡,数据热备

二、 网络top图

clip_image002

Server1 192.168.94.236

Server2 192.168.94.237

Server3 192.168.94.238

三、 Server2 Server3基本安装 (Server1 不需要安装LNMP包)

1、 操作系统安装 CentOS 5.5 32位操作系统。

2、 磁盘分区 /boot 100M /swat 4G /home 20G /usr/local 60G /web

3、 安装后注意事项

A、建立一个普通权限的用户
因为root用户对系统具有全权的操作权限,为了避免一些失误的操作,在一般情况下,以一般用户登录系统,必要的时候需要root操作权限时,再通过“su -”命令来登录为root用户进行操作。

useradd anniuser
passwd anniuser
usermod -G wheel anniuser

修改pam配置,使非wheel组用户不能使用su命令登录为root:

vi /etc/pam.d/su
找到

#auth required /lib/security/$ISA/pam_wheel.so use_uid
将行首的 # 去掉。

然后

vi /etc/login.defs
在文件末尾加上

SU_WHEEL_ONLY yes

B、root邮件的转送

Vi /etc/aliases

C、停止不必要的服务

[root@ ~]# /etc/rc.d/init.d/cups stop ← 停止打印服务
Stopping cups: [ OK ] ← 停止服务成功,出现“OK”
[root@ ~]# chkconfig cups off ← 禁止打印服务自动启动
[root@ ~]# chkconfig --list cups ← 确认打印服务自启动设置状态
cups 0:off 1:off 2:off 3:off 4:off 5:off 6:off ← 0-6都为off的状态就OK(当前打印服务自启动被禁止中)

除了以下服务以外,其他服务默认的都可以采用刚才的方法关闭,根据需要自己选择:

atd
crond
irqbalance
lvm2-monitor
microcode_ctl
network
sendmail
sshd
syslog

D、关闭SELinux

vi /etc/selinux/config
将其中的

SELINUX=enforcing
改为

SELINUX=disabled

E、安装sudo工具

yum install sudo -y
安装好了以后,修改sudo的配置

vi /etc/sudousers

# %wheel ALL=(ALL) NOPASSWORD:ALL
去掉前面的 # , 然后保存文件。
这样修改了以后,只有所有属于wheel组的用户能执行sudo命令,并且执行sudo命令时只需要输入自己的密码即可。

F、修改SSH配置

vi /etc/ssh/sshd_config
Port 22 #修改默认端口

#ServerKeyBits 768改为ServerKeyBits 1024#增加ServerKey的强度找到
#PermitRootLogin Yes改为PermitRootLogin no #不允许root用户直接登录

#PermitEmptyPasswords no #禁止空密码登录 去掉前面的 #

全部修改完了以后,重启服务器

G、定义yum非官方库(使用网易163的yum库更新)

先关闭fastestmirror

“vi /etc/yum/pluginconf.d/fastestmirror.conf”     and set “enable=0″

cd /etc/yum.repos.d/
wget http://mirrors.163.com/.help/CentOS-Base-163.repo
yum makecache  //生成缓存
yum –y update

H、定时校对时间

crontab –e

00 00 * * * ntpdate 210.72.154.44 #每日24点校准时间,频率自己设置

4、 LNMP安装

安装步骤:

1、下载LNMP一键安装包:

wget -c http://soft.vpser.net/lnmp/lnmp0.5.tar.gz,如果使用完整版

wget -c http://soft.vpser.net/lnmp/lnmp0.5-full.tar.gz,执行上述命令后LNMP一键安装包就会被下载到服务器上。
2、解压LNMP一键安装包:

· 执行tar zxvf lnmp0.5.tar.gz 或者tar zxvf lnmp0.5-full.tar.gz 就会将LNMP一键安装包解压缩。
3、安装步骤

· 下载版执行命令 cd lnmp0.5/ ,完整版执行命令:cd lnmp0.5-full/

· 然后再执行./centos.sh ,输入要绑定的域名,回车,再输入要设置的MySQL root的密码,再次回车确认。程序会自动安装编译Nginx、PHP、MySQL、phpMyAdmin、Zend这几个软件。

phpinfo : http://前面输入的域名或IP/phpinfo.php
phpMyAdmin : http://前面输入的域名或IP/phpmyadmin/
探针 : http://前面输入的域名或IP/p.php
MySQL root密码:如果不输入直接回车为root,否则为你输入的密码。
LNMP相关目录:
mysql : /usr/local/mysql
php : /usr/local/php
nginx : /usr/local/nginx
网站目录: /home/wwwroot

基本安装至此完成

五、配置

文件实时同步配置说明

文件实时同步软件:sersync

实现过程:

在server3上配置rsync服务器(serync客户端) /etc/rsyncd.conf

uid = root

use chroot = no

max connections = 20

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

[web_tongbu] #模块名称

path = /home/wwwroot/anni/ #同步目录

ignore errors

read only = no #

hosts allow = 192.168.94.237/24

hosts deny = 0.0.0.0/32

auth users = root

secrets file = /etc/rsyncd.pas

#exclude = xxx/ yyy/ #把xxx和yyy目录排除在外

[nginx_tongbu]

path = /usr/local/nginx/conf/

ignore errors

read only = no

hosts allow = 192.168.94.237/24

hosts deny = 0.0.0.0/32

auth users = root

secrets file = /etc/rsyncd.pas

#exclude = xxx/ yyy/ #把xxx和yyy目录排除在外

Pass文件配置 /etc/rsyncd.pas (名字随便) 格式 : 用户名:密码 比如 root:12345

并将rsyncd.pas权限设置为600

chmod 600 /etc/rsyncd.pas

开启rsync

rsync –daemon

加入开机启动

echo "rsync --daemon" >> /etc/rc.d/rc.local

配置sersync服务端(rsync客户端)

rsync pass 文件配置 /etc/rsyncd.pas 格式:密码 比如: 12345 (这里的密码对应rsync服务器配置的用户密码)并将rsyncd.pas权限设置为600

chmod 600 /etc/rsyncd.pas

sersync 安装配置(安装于server2)

新版本下载地址http://code.google.com/p/sersync/downloads/list

解压sersync后生成GNU-Linux-x86文件夹,以当前最新2.5版本为例:

tar zxf sersync2.5_32bit_binary_stable_final.tar.gz

mv GNU-Linux-x86 sersync

cd sersync

vi confxml.xml

修改如下两部分:

<sersync>

<localpath watch="/home/tongbu">

<remote ip="192.168.94.238" name="web_tongbu"/>

</localpath>

表明要将主服务器上本地的/home/tongbu 路径下的文件,同步到远程服务器 192.168.94.238 上的web_tongbu 模块。

<rsync>

<commonParams params="-artuz"/>

<auth start="true" users="root" passwordfile="/etc/rsyncd.pas"/>

<userDefinedPort start="false" port="874"/><!-- port=874 -->

<timeout start="false" time="100"/><!-- timeout=100 -->

<ssh start="false"/>

表示使用rsync密码认证方式

启动sersync

. /sersync2 -r -d /usr/local/sersync/confxml.xml

加入开机自启动

echo "/usr/local/sersync/sersync2 -r -d -o /usr/local/sersync/confxml.xml" &gt;&gt; /etc/rc.d/rc.local

这里参数-o表示指定配置文件为/usr/local/sersync/confxml.xml

实时同步配置完成

Mysql 主主复制配置

主主配置过程

1、创建同步用户:

Server 2:

grant replication slave,file on *.* to 'replication'@'192.168.94.238' identified by '123456';

flush privileges;

Server 3:

grant replication slave,file on *.* to 'replication'@'192.168.94.237' identified by '123456';

flush privileges;

2、修改mysql配置文件 /etc/my.cnf

Server 2:

log-bin=mysql-bin

server-id = 1

binlog-do-db=test

binlog-ignore-db=mysql

replicate-do-db=test

replicate-ignore-db=mysql

log-slave-updates

slave-skip-errors=all

sync_binlog=1

auto_increment_increment=2

auto_increment_offset=1

Server 3:

log-bin=mysql-bin

server-id = 2

binlog-do-db=test

binlog-ignore-db=mysql

replicate-do-db=test

replicate-ignore-db=mysql

log-slave-updates

slave-skip-errors=all

sync_binlog=1

auto_increment_increment=2

auto_increment_offset=2

3、重启mysql服务后,进入mysql命令行,执行操作如下:

Server A:

mysql&gt; flush tables with read lock;

mysql&gt; show master status\G

************************** 1. row ***************************

File: mysql-bin.000028

Position: 866

Binlog_Do_DB: test

Binlog_Ignore_DB: mysql

1 row in set (0.00 sec)

mysql&gt; unlock tables;

mysql&gt; stop slave;

mysql&gt; change master to master_host='192.168.94.238',master_user='replication',master_password='123456',master_log_file='mysql-bin.000014', master_log_pos=704;

mysql&gt; start slave;

Server B:

mysql&gt; flush tables with read lock;

mysql&gt; show master status\G

*************************** 1. row ***************************

File: mysql-bin.000014

Position: 704

Binlog_Do_DB: test

Binlog_Ignore_DB: mysql

1 row in set (0.00 sec)

mysql&gt; unlock tables;

mysql&gt; stop slave;

mysql&gt;change master to master_host='192.168.94.237',master_user='replication',master_password='123456',master_log_file='mysql-bin.000028', master_log_pos=866;

mysql&gt; start slave;

4、查看各服务器的状态:

mysql&gt; show slave status\G;

出现:Slave_IO_Running: Yes

Slave_SQL_Running: Yes

则状态正常,直接测试数据能否同步就OK了!

mysql-mmm高可用配置(及mysql自动切换)

MMM简介:

MMM即Master-Master Replication Manager for MySQL(mysql主主复制管理器)关于mysql主主复制配置的监控、故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写入),这个套件也能对居于标准的主从配置的任意数量的从服务器进行读负载均衡,所以你可以用它来在一组居于复制的服务器启动虚拟ip,除此之外,它还有实现数据备份、节点之间重新同步功能的脚本。

MySQL本身没有提供replication failover的解决方案,通过MMM方案能实现服务器的故障转移,从而实现mysql的高可用。

MMM项目来自 Google:http://code.google.com/p/mysql-master-master

官方网站为:http://mysql-mmm.org

Mmm主要功能由下面三个脚本提供

mmm_mond 负责所有的监控工作的监控守护进程,决定节点的移除等等

mmm_agentd 运行在mysql服务器上的代理守护进程,通过简单远程服务集提供给监控节点

mmm_control 通过命令行管理mmm_mond进程

mysql-mmm架构的搭建

1、 安装环境:

系统环境:CentOS 5.5(32bit)

Server1 ip: 192.168.94.236 virtual write ip: 192.168.1.113

Server2 ip: 192.168.94.237 virtual read ip:192.168.1.111

Server3 ip: 192.168.94.238 virtual read ip:192.168.1.112

2、 mysql-mmm架构配置简介:

在server2、server3上安装mysql,并配置为master-master架构(即上面的主主复制)

在server1、server2,server3上安装mmm,并配置:mmm_common.conf、mmm_agent.conf以及mmm_mon.conf文件

3、 Mysql-mmm实战

前提:server2和server3上已经配置好mysql主主同步

安装mysql-mmm

CentOS软件仓库默认是不含这些软件的,必须要有epel这个包的支持。故我们必须先安装epel:

wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm

rpm -Uvh epel-release-5-4.noarch.rpm

yum -y install mysql-mmm*

配置mmm代理和监控账号的权限

在server2和server3上分别执行:

GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'192.168.94.%' IDENTIFIED BY 'monitor_password';

GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agent'@'192.168.94.%' IDENTIFIED BY 'agent_password';

flush privileges;

配置mysql-mmm

所有的配置选项都集合在了一个叫/etc/mysql-mmm/mmm_common.conf的单独文件中,系统中所有主机的该文件内容都是一样的, 配置完后不要忘记了拷贝这个文件到所有的主机(包括监控主机)!,内容如下:

active_master_role writer

<host default>

cluster_interface eth0

pid_path /var/run/mysql-mmm/mmm_agentd.pid

bin_path /usr/libexec/mysql-mmm/

#同步的帐号(这些要和前面设置的保持一致!)

replication_user replication

replication_password 123456 #同步的密码

agent_user mmm_agent #mmm-agent用户名

agent_password agent_password #mmm-agent用户密码

</host>

<host db1>

ip 192.168.94.237 #db1的ip

mode master

peer db2

</host>

<host db2>

ip 192.168.94.238 #db2的ip

mode master

peer db1

</host>

<role writer>

hosts db1, db2

ips 192.168.1.113 #设置写入的虚拟IP

mode exclusive

</role>

<role reader>

hosts db1, db2

ips 192.168.1.111, 192.168.1.112 #设置读取的虚拟IP

mode balanced

</role>

在数据库主机上我们需要编辑/etc/mysql-mmm/mmm_agent.conf文件,根据其他主机的不同更改db1的值(db2就将db1更改成db2):

include mmm_common.conf

this db1

在监控主机server 1上我们需要编辑/etc/mysql-mmm/mmm_mon.conf文件:

include mmm_common.conf

<monitor>

ip 127.0.0.1

pid_path /var/run/mysql-mmm/mmm_mond.pid

bin_path /usr/libexec/mysql-mmm

status_path /var/lib/mysql-mmm/mmm_mond.status

ping_ips 192.168.94.237,192.168.94.238 #监控服务器ip

auto_set_online 60

# The kill_host_bin does not exist by default, though the monitor will

# throw a warning about it missing. See the section 5.10 "Kill Host

# Functionality" in the PDF documentation.

#

# kill_host_bin /usr/libexec/mysql-mmm/monitor/kill_host

#

</monitor>

<host default>

monitor_user mmm_monitor #mmm_monitor用户名

monitor_password monitor_password #mmm_monitor密码

</host>

debug 0

启动MMM

启动代理:

(在数据库服务器上server2、3)编辑/etc/default/mysql-mmm-agent来开启:

ENABLED=1

然后启动它:

/etc/init.d/mysql-mmm-agent start

启动监控(在监控机server 1上):

/etc/init.d/mysql-mmm-monitor start

利用mmm_control监控mysql服务器状态:

[root@server1 mysql-mmm]# mmm_control show

db1(192.168.94.237) master/ONLINE. Roles: reader(192.168.1.112), writer(192.168.1.113)

db2(192.168.94.238) master/ONLINE. Roles: reader(192.168.1.111)

测试看两个mysql服务器能否实现故障自动切换

停掉作为写的db1上的mysql,查看写的服务器会不会自动转移到db2上去

停掉几秒钟后用mmm_control show查看:

[root@server1 mysql-mmm]# mmm_control show

db1(192.168.94.237) master/HARD_OFFLINE. Roles:

db2(192.168.94.238) master/ONLINE. Roles: reader(192.168.1.111), reader(192.168.1.112), writer(192.168.1.113)

我们可以看到已经把db2当作主写服务器

再来看看db1恢复后会是什么情况:

[root@server1 mysql-mmm]# mmm_control show

db1(192.168.94.237) master/ONLINE. Roles: reader(192.168.1.111)

db2(192.168.94.238) master/ONLINE. Roles: reader(192.168.1.112), writer(192.168.1.113)

我们可以看到当db1恢复后就充当slave的角色了!只有当db2挂了以后db1又会担当起主服务器的写入功能

HAProxy 安装部署(Server 1上)

1、 haproxy的编译安装

获取haproxy的源代码

官方地址:http://haproxy.1wt.eu/

目前最新的版本:http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.9.tar.gz

命令:

wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.9.tar.gz考虑到版本的更新,具体的安装属性可能会稍有改变,建议在安装前可以大致浏览下haproxy目录下的README和Makefile两个文件。

编译haproxy

进入解压后的haproxy的目录,用下列命令进行编译:

make TARGET=linux26 CPU=generic

安装

make install PREFIX=/usr/local/haproxy

2、配置文件 /usr/local/haproxy/haproxy.cfg

global

maxconn 5120

chroot /usr/local/haproxy

uid 99

gid 99

daemon

quiet

nbproc 2

pidfile /usr/local/haproxy/haproxy.pid

defaults

log global

mode http

option httplog

option dontlognull

log 127.0.0.1 local3

retries 3

option redispatch

maxconn 2000

contimeout 5000

clitimeout 50000

srvtimeout 50000

listen webinfo :1080

mode http

balance roundrobin

option httpclose

option forwardfor

server phpinfo1 192.168.94.237:80 check weight 1 minconn 1 maxconn 3 check inter 40000

server phpinfo2 192.168.94.238:80 check weight 1 minconn 1 maxconn 3 check inter 40000

listen webmb :80

mode http

balance roundrobin

option httpclose

option forwardfor

cookie DYNSRV insert indirect nocache

server web237 192.168.94.237:80 check cookie first inter 1000

server web238 192.168.94.238:80 check cookie first inter 1000

listen stats :888

mode http

transparent

stats uri / haproxy-stats

stats realm Haproxy \ statistic

stats auth davexi:111111 #状态页面用户名密码

监测页面 192.168.94.236:888

启动haproxy

/usr/local/haproxy/sbin/haproxy –f /usr/local/haproxy/haproxy.cfg

加入开机启动

echo “/usr/local/haproxy/sbin/haproxy –f /usr/local/haproxy/haproxy.cfg” &gt;&gt; /etc/rc.d/rc.local

到这里就基本完工了,自己查看一下成果吧,你的网站访问地址为 192.168.94.236

各服务器端口开放说明

以下端口Server 1 与Server 2 ftp端口通过防火墙映射至外网,并ssh 与ftp端口仅公司内部访问

Server 1

9527 ssh

80 web

Server 2

22 ssh

32 ftp

80 web

3306 mysql

874

Server 3

22 ssh

80 web

3306 mysql

874 rsync

请珍惜一下俺的小小的劳动成果,如有完善请直接上传,并通知我删除原文件。