DR模型原理:

客户端请求负载均衡器,负载均衡器根据调度算法,从后端realserver集群中选择一台机器,然后更改请求报文MAC地址,将目的MAC地址改为后端服务器的MAC地址,源MAC改为自己的MAC地址。后端服务器收到请求报文,然后处理,最后直接响应给客户端。

注意问题:

1.director和realserver都是同一个网段。2.director和realserver都配置VIP地址。3.director和realserver都配置route add VIP路由4.director的vip配置在eth0:0上5.realserver的vip配置在lo:0上。6.realserver禁止响应arp数据包。

一:架构图

 

二:Realserver安装软件

192.168.1.119192.168.1.121

1)nginx-1.6.1.tar.gz安装

2)php-5.5.4.tar.gz安装

A:安装依赖包

cd /home/mcc/toolsyum -y install libmcrypt-devel mhash-devel libxslt-devel  \libjpeg  libjpeg-devel  libpng  libpng-devel  \freetype  freetype-devel  libxml2  libxml2-devel  \zlib  zlib-devel  glibc glibc-devel glib2 glib2-devel bzip2 \bzip2-devel ncurses ncurses-devel curl curl-devel  \ e2fsprogs  e2fsprogs-devel  krb5  krb5-devel  libidn \libidn-devel  openssl  openssl-devel  bzip2-devel  libcurl-devel

B:安装第三方依赖包

wget http://www.atomicorp.com/installers/atomicsh ./atomicyum  install  php-mcrypt  libmcrypt  libmcrypt-devel   -y

C:编译安装

./configure \        --prefix=/app/php  \        --with-config-file-path=/app/php/etc \        --enable-sockets \        --with-openssl \        --with-mhash   \        --with-mysql \        --with-mysqli \        --with-iconv-dir \        --with-freetype-dir \        --with-jpeg-dir \        --with-png-dir \        --with-zlib \        --with-curl \        --with-libxml-dir=/usr \        --enable-xml \        --with-xmlrpc \        --with-bz2 \        --enable-fpm  \        --enable-zip \        --enable-soap \        --enable-sysvsem \        --enable-inline-optimization \        --with-gd \        --with-gettext \        --with-mcrypt \        --disable-rpath \        --enable-mbstring \        --enable-ftp  \        --enable-bcmath \        --enable-shmop \        --enable-pcntl \        --enable-gd-native-ttf \        --without-pear make   &&  make   install
cp  sapi/fpm/init.d.php-fpm   /etc/rc.d/init.d/php-fpmchmod +x /etc/rc.d/init.d/php-fpmchkconfig --add php-fpmchkconfig php-fpm oncp  /app/php/etc/php-fpm.conf.default   /app/php/etc/php-fpm.conf

D:配置php-fpm.conf

pm.max_children = 150pm.start_servers = 8pm.min_spare_servers = 5pm.max_spare_servers = 10

E:启动php-fpm

service  php-fpm  start

F:配置nginx,整合php环境

两台机器nginx配置相同

worker_processes 1;worker_rlimit_nofile 655360;events {        use  epoll;        worker_connections 1024;}http{    include       mime.types;    default_type  application/octet-stream;    sendfile          on;    tcp_nopush        on;    tcp_nodelay       on;    server_tokens     off;       keepalive_timeout 65;server {        listen        80;        server_name   localhost;        location /  {                root  html;                index index.html  index.htm index.php;        }        location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|ico|txt|js|css)$ {            root      html;            expires   3d;        }        location ~ \.php$ {                root   html;                fastcgi_pass   127.0.0.1:9000;                fastcgi_index  index.php;                fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;                include        fastcgi_params;        }        error_page 500  502  503  504  /50x.html;        location = /50.html {            root   html;        }}}

F:代码上线,先上一台机器,安装完成后在把安装完成的discuz包拷贝到另外一台机器上。

192.168.1.121cd  /app/nginx/htmlrz

安装时:不要用VIP访问。用192.168.1.121访问。

三:配置Realserver的LVS功能

启动脚本:

#!/bin/bash## chkconfig: - 90 10# description: LVS DR RealServer. /etc/rc.d/init.d/functionsVIP=192.168.1.200case $1 instart)         /sbin/ifconfig lo down        /sbin/ifconfig lo up        /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP up        /sbin/route add -host $VIP dev lo:0        echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore        echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore        echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce        echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce        sysctl  -p 2>&1 >/dev/null        echo "RealServer Start OK!";;stop)        /sbin/ifconfig lo:0 down        /sbin/route del $VIP 2>&1 >/dev/null        echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore        echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore        echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce        echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce        sysctl  -p 2>&1 >/dev/null        echo "RealServer Stop OK!";;*)        printf "Usage: $0 {start|stop}\n"        exit 1esac

2) 拷贝realserver脚本到/etc/init.d/

cp  realserver  /etc/ini.d/

3)使用

server realserver stop  server realserver start

4)开启启动

chkconfig –add    realserverchkconfig    realserver  on

启动问题:

[root@localhost mcc]# ./realserver  starterror: "net.bridge.bridge-nf-call-ip6tables" is an unknown keyerror: "net.bridge.bridge-nf-call-iptables" is an unknown keyerror: "net.bridge.bridge-nf-call-arptables" is an unknown key解决:modprobe bridgelsmod | grep  bridge

四:Director安装软件

192.168.1.116192.168.1.117

安装ipvsadm-1.24.tar.gz

mkdir   /home/mcc/toolswget -c http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gzln -s /usr/src/kernels/2.6.* /usr/src/linuxtar xf ipvsadm-1.24.tar.gzcd ipvsadm-1.24makemake  install

安装keepalived-1.2.12.tar.gz

配置文件:

192.168.1.116  master192.168.1.117  bakcup
主配置文件:! Configuration File for keepalivedglobal_defs {   notification_email {    yujianglei@singulax.com   }   notification_email_from 15614119390@163.com   smtp_server smtp.163.com   smtp_connect_timeout 30   router_id LVS}vrrp_instance VI_1 {    state MASTER    interface eth0    virtual_router_id 10    priority 100    advert_int 1    authentication {        auth_type PASS        auth_pass jidian123    }    virtual_ipaddress {        192.168.1.200    }}virtual_server 192.168.1.200 80 {    delay_loop 6    lb_algo rr    lb_kind DR    nat_mask 255.255.255.0    persistence_timeout 50    protocol TCP    real_server 192.168.1.121 80 {        weight 1        TCP_CHECK {            connect_timeout  10            nb_get_retry 3            delay_before_retry 3            connect_port 80        }    }    real_server 192.168.1.119 80 {        weight 1        TCP_CHECK {            connect_timeout 10            nb_get_retry 3            delay_before_retry 3            connect_port 80        }    }}
从配置文件:! Configuration File for keepalivedglobal_defs {   notification_email {    yujianglei@singulax.com   }   notification_email_from 15614119390@163.com   smtp_server smtp.163.com   smtp_connect_timeout 30   router_id LVS}vrrp_instance VI_1 {    state BACKUP    interface eth0    virtual_router_id 10    priority 99    advert_int 1    authentication {        auth_type PASS        auth_pass jidian123    }    virtual_ipaddress {        192.168.1.200    }}virtual_server 192.168.1.200 80 {    delay_loop 6    lb_algo rr    lb_kind DR    nat_mask 255.255.255.0    persistence_timeout 50    protocol TCP    real_server 192.168.1.121 80 {        weight 1        TCP_CHECK {            connect_timeout 10            nb_get_retry 3            delay_before_retry 3            connect_port 80        }    }    real_server 192.168.1.119 80 {        weight 1        TCP_CHECK {            connect_timeout 10            nb_get_retry 3            delay_before_retry 3            connect_port 80        }    }}

五:配置Director的LVS功能

启动脚本:

#!/bin/bash#VIP=192.168.1.200RIP1=192.168.1.119RIP2=192.168.1.121PORT=80case $1 instart)        /sbin/ifconfig eth0:0 $VIP broadcast $VIP  netmask 255.255.255.255 up        /sbin/route  add -host $VIP dev eth0:0        echo "1"  >/proc/sys/net/ipv4/ip_forward        /sbin/iptables  -F        /sbin/ipvsadm   -C        /sbin/ipvsadm   -A -t $VIP:$PORT -s rr        /sbin/ipvsadm   -a -t $VIP:$PORT -r $RIP1 -g        /sbin/ipvsadm   -a -t $VIP:$PORT -r $RIP2 -g        touch  /var/lock/subsys/director.lock        echo "Director Start OK!";;stop)        /sbin/ifconfig eth0:0 down        /sbin/ipvsadm -C        echo "0"  >/proc/sys/net/ipv4/ip_forward        rm  -fr  /var/lock/subsys/director.lock        echo "Director Stop OK!";;status)        if [ -e /var/lock/subsys/director.lock ];then                echo "Director is Running!"        else                echo "Director is Down!"        fi;;*)        printf "Usage: $0 {start|stop}\n"        exit 1esac


一:安装MySQL需要依赖的包

yum install ncurses-devel -y

二:建立数据库启动账号

[root@localhost ~]# cat /etc/passwd | grep  mysql[root@localhost ~]# groupadd mysql[root@localhost ~]# useradd -s /sbin/nologin -g mysql -M mysql

三:获取MySQL软件

     

dev.mysql.com获取mysql-5.5.45.tar.gz、cmake-2.8.8.tar.gz

四:上传MySQL软件到服务器

1.建立软件包目录 

mkdir  -p /home/mcc/toolscd /home/mcc/toolsrz

五:创建MySQL实例的数据文件目录和日志目录

mkdir -p /mydata55/datamkdir -p /mydata55/{bin_log,error_log,relay_log}tree /mydata55

六:创建MySQL实例的安装文件目录

mkdir /app55/mysql-5.5.45 -pv

七:安装MySQL软件

1.解压安装cmake-2.8.8.tar.gz软件包

tar xf cmake-2.8.8.tar.gzcd cmake-2.8.8./configuregmakegmake install

 

2.解压编译安装mysql-5.5.45.tar.gz软件包

tar xf mysql-5.5.45.tar.gzcd mysql-5.5.45cmake . -DCMAKE_INSTALL_PREFIX=/app55/mysql-5.5.45  \-DMYSQL_DATADIR=/mydata55/data  \-DMYSQL_UNIX_ADDR=/mydata55/mysql.sock  \-DDEFAULT_CHARSET=utf8  \-DDEFAULT_COLLATION=utf8_general_ci  -DEXTRA_CHARSETS=all  \-DENABLED_LOCAL_INFILE=ON  \-DWITH_INNOBASE_STORAGE_ENGINE=1  \-DWITH_FEDERATED_STORAGE_ENGINE=1  \-DWITH_BLACKHOLE_STORAGE_ENGINE=1  \-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1  \-DWITHOUT_PARTITION_STORAGE_ENGINE=1  \-DWITH_FAST_MUTEXES=1  \-DENABLED_LOCAL_INFILE=1 \-DWITH_READLINE=1 \-DWITH_EMBEDDED_SERVER=1 \-DWITH_DEBUG=0make &&  make  install

2.生成不带版本号的软连接/app/mysql,即mysql安装路径

cd /app55ln -s  mysql-5.5.45  mysql

八:准备配置文件

[root@localhost app55]# cp /app55/mysql/support-files/my-small.cnf /etc/my.cnfcp: overwrite `/etc/my.cnf'? y
vi  /etc/my.cnf
[client]port = 3306socket = /mydata55/mysql.sockdefault-character-set=utf8[mysql]#No-auto-rehashdefault-character-set=utf8[mysqld]user = mysqlport = 3306socket = /mydata55/mysql.sockcharacter-set-server=utf8basedir = /app55/mysqldatadir = /mydata55/dataopen_files_limit = 1024back_log = 600max_connections = 800max_connect_errors = 3000table_cache = 614external-locking = FALSEmax_allowed_packet = 8Msort_buffer_size = 1Mjoin_buffer_size = 1Mthread_cache_size = 100thread_concurrency = 2query_cache_size = 2Mquery_cache_limit = 1Mquery_cache_min_res_unit = 2kdefault-storage-engine=InnoDB#default_table_type = InnoDBthread_stack = 192ktransaction_isolation = READ-COMMITTEDtmp_table_size = 2Mmax_heap_table_size = 2Mlong_query_time = 1#log_long_formatlog-error = /mydata55/error_log/3306.errpid-file = /mydata55/3306.pid#二进制日志log-bin = /mydata55/bin_log/mysql-binlog-bin-index = /mydata55/bin_log/mysql-bin.indexbinlog_format = mixedrelay-log = /mydata55/relay_log/relay-binrelay-log-info-file = /mydata55/ relay_log /relay-log.infobinlog_cache_size = 1Mmax_binlog_cache_size = 1Mmax_binlog_size = 2Mexpire_logs_days = 10#MyISAM引擎key_buffer_size = 16Mread_buffer_size = 1M#read_md_buffer_size = 1Mbulk_insert_buffer_size = 1Mmyisam_sort_buffer_size = 1Mmyisam_max_sort_file_size = 10G#myisam_max_extra_sort_file_size = 10Gmyisam_repair_threads = 1myisam_recoverlower_case_table_names = 1skip-name-resolveslave-skip-errors = 1032,1062replicate-ignore-db = mysqlserver-id = 1#InnoDB引擎innodb_additional_mem_pool_size = 4Minnodb_buffer_pool_size = 32Minnodb_data_file_path = ibdata1:128M:autoextendinnodb_file_io_threads = 4innodb_thread_concurrency = 8innodb_flush_log_at_trx_commit = 2innodb_log_buffer_size = 2Minnodb_log_file_size = 4Minnodb_log_files_in_group = 3innodb_max_dirty_pages_pct = 90innodb_lock_wait_timeout = 120innodb_file_per_table = 1[mysqldump]quickmax_allowed_packet = 2Mdefault-character-set=utf8[mysqld_safe]log-error = /mydata55/error_log/3306.errpid-file = /mydata55/3306.piddefault-character-set=utf8

九:配置环境变量

vi /etc/profileexport PATH=/app55/mysql/bin:$PATHsource  /etc/profile

提示:

在配置环境变量时,一定要将安装路径配置在PATH前面,否则系统中万一存在rpm安装的mysql。那么系统就会去寻找/usr/local/bin/下关于mysql的有关命令。

十:更改权限

chown  -R  mysql.mysql   /mydata55chmod  -R  1777 /tmp

十一:初始化数据库

cd  /app55/mysql/scripts./mysql_install_db --basedir=/app55/mysql --datadir=/mydata55/data  --user=mysql

十二:数据库启动脚本

cd /app55/mysql/support-filescp mysql.server /etc/init.d/mysqld

十三:授权,加密,优化

/etc/init.d/mysqld startmysql -uroot -p -e "grant all privileges on *.* to admin@'localhost' identified by 'jidian123' with grant option"mysql -uroot -p -e "grant all privileges on *.* to admin@'%' identified by 'jidian123' with grant option"mysql -uroot -p -e "flush  privileges;"mysql -uroot -p -e "drop database test;"mysql -uroot -p -e "delete from mysql.user where User='root'"mysql -uadmin -p'jidian123' -e "delete from mysql.user where User=''"mysql -uadmin -p'jidian123' -e "flush  privileges;"

十三:报错解决

1、启动报错日志:

150819  3:12:24 [ERROR] Plugin 'InnoDB' init function returned error.150819  3:12:24 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.150819  3:12:24 [ERROR] Unknown/unsupported storage engine: InnoDB150819  3:12:24 [ERROR] Aborting

解决方案:

移除数据目录下的ib_logfile0  ib_logfile1mv  /mydata55/data/ib_logfile*   /home

重新启动:

/etc/init.d/mysqld  start

2、导入报错日志

ERROR 1665 (HY000): Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging.

【报错原因】

innodb的事务隔离级别是read commited或者read uncommited模式时,binlog不可以使用statement模式。

解决:

set global binlog_format=mixed