日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Keepalived+HAProxy基于读写分离方式实现discuz论坛

發(fā)布時(shí)間:2025/3/19 编程问答 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Keepalived+HAProxy基于读写分离方式实现discuz论坛 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.



一、測(cè)試環(huán)境: centos 6.6;使用8臺(tái)虛擬機(jī)(上圖)

分別對(duì)它們?cè)O(shè)置主機(jī)名:

主機(jī)名ip地址軟件包
node1172.16.16.11keepalived+haproxy
node2172.16.16.12keepalived+haproxy
php1172.16.16.2httpd+php+php-mysql+nfs-utils
php2172.16.16.8httpd+php+php-mysql+nfs-utils
web1172.16.16.3httpd
web2172.16.16.4httpd
mysql172.16.16.5mariadb-5.5.43-linux-x86_64.tar.gz
nfs172.16.16.252nfs-utils

上述服務(wù)器實(shí)現(xiàn)的作用介紹:

①keepalived+haproxy,實(shí)現(xiàn)高可用和haproxy的反向代理功能并實(shí)現(xiàn)動(dòng)靜分離的效果;請(qǐng)求動(dòng)態(tài)的內(nèi)容交給后端的動(dòng)態(tài)服務(wù)器組(php1或php2);靜態(tài)內(nèi)容交給靜態(tài)服務(wù)器組(web1和web2)

②mysql服務(wù)器存儲(chǔ)discuz數(shù)據(jù)庫(kù)

③nfs文件共享服務(wù)器設(shè)置2個(gè)目錄/mydata和/discuz;前者給mysql服務(wù)器用做當(dāng)datadir使用;后者給web和php服務(wù)器使用,共享discuz網(wǎng)頁(yè)文件



二、準(zhǔn)備工作:這里基于ansible的playbook部署

1、ansible使用環(huán)境為centos 7;設(shè)置如下

#?ssh-keygen?-t?rsa?-P?''? #?ssh-copy-id?-i?~/.ssh/id_rsa.pub?node1 #?ssh-copy-id?-i?~/.ssh/id_rsa.pub?node2 #?ssh-copy-id?-i?~/.ssh/id_rsa.pub?web1 #?ssh-copy-id?-i?~/.ssh/id_rsa.pub?web2 #?ssh-copy-id?-i?~/.ssh/id_rsa.pub?php1 #?ssh-copy-id?-i?~/.ssh/id_rsa.pub?php2 #?ssh-copy-id?-i?~/.ssh/id_rsa.pub?mysql #?ssh-copy-id?-i?~/.ssh/id_rsa.pub?nfs


2、ansible設(shè)置及管理節(jié)點(diǎn)探測(cè):

#?vim?/etc/ansible/host [haproxy] 172.16.16.11 172.16.16.12[dynamic_servers] 172.16.16.2 172.16.16.8[static_servers] 172.16.16.3 172.16.16.4[db] 172.16.16.5[nfs] 172.16.16.252#?ansible?all?-m?ping???????? 172.16.16.12?|?success?>>?{"changed":?false,?"ping":?"pong" }172.16.16.3?|?success?>>?{"changed":?false,?"ping":?"pong" }172.16.16.11?|?success?>>?{"changed":?false,?"ping":?"pong" }172.16.16.4?|?success?>>?{"changed":?false,?"ping":?"pong" }172.16.16.5?|?success?>>?{"changed":?false,?"ping":?"pong" }172.16.16.2?|?success?>>?{"changed":?false,?"ping":?"pong" }172.16.16.8?|?success?>>?{"changed":?false,?"ping":?"pong" }172.16.16.252?|?success?>>?{"changed":?false,?"ping":?"pong" }


3、ansible定義roles如下:

[root@localhost?ansible_playbooks]#?tree . |--?haproxy.yml?????????????????//playbook劇本 `--?roles???????????????????????//定義的角色(7個(gè))?????????|--?haproxy?????????????????//node1,node2節(jié)點(diǎn)用到的haproxy|???|--?files|???|--?handlers|???|???`--?main.yml|???|--?tasks|???|???`--?main.yml|???|--?templates|???|???|--?haproxy.cfg.j2|???|???`--?rsyslog.conf|???`--?vars|???????`--?main.yml|--?httpd?????????????????//web1,web2節(jié)點(diǎn)用到的httpd|???|--?files|???|???`--?mountnfs.sh|???|--?handlers|???|--?tasks|???|???`--?main.yml|???`--?templates|???????`--?httpd.conf.j2|--?initialization???????????????//所有節(jié)點(diǎn)用到的系統(tǒng)初始化|???|--?files|???|--?handlers|???|--?tasks|???|???`--?main.yml|???`--?templates|???????|--?hosts|???????|--?resolv.conf|???????`--?selinux.conf|--?keepalived?????????????????//keepalived設(shè)置?|???|--?files|???|???`--?notify.sh|???|--?handlers|???|???`--?main.yml|???|--?tasks|???|???`--?main.yml|???|--?templates|???|???|--?keepalived.conf.backup.j2|???|???`--?keepalived.conf.master.j2|???`--?vars|???????`--?main.yml|--?mysql??????????????????????//mysql數(shù)據(jù)庫(kù)|???|--?files|???|???|--?mariadb-5.5.43-linux-x86_64.tar.gz|???|???|--?mariadb-5.5.43.sh|???|???`--?privilege.sh|???|--?handlers|???|--?tasks|???|???`--?main.yml|???`--?templates|--?nfs????????????????????????????//nfs文件共享|???|--?files|???|???|--?Discuz_X3.1_SC_UTF8.zip|???|???`--?discuz.sh|???|--?handlers|???|--?tasks|???|???`--?main.yml|???`--?templates|???????`--?exports`--?php????????????????????//php1,php2節(jié)點(diǎn)用到的相關(guān)配置|--?files|???|--?install-php.sh|???`--?mountnfs.sh|--?handlers|--?tasks|???`--?main.yml`--?templates`--?httpd.conf.j2


4、介紹上述roles代表的含義,從上至下進(jìn)行介紹;

4.1、haproxy

handlers:main.yml

- name: restart haproxy ? ? ? //重啟haproxy服務(wù)

? service: name=haproxy state=restarted

- name: restart rsyslog ? ? ?//重啟rsyslog服務(wù)

? service: name=rsyslog state=restarted

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

tasks:main.yml- name: install haproxy package ? ? ? ?

? yum: name=haproxy state=present

- name: configuration haproxy?

? template: src=haproxy.cfg.j2 ? dest=/etc/haproxy/haproxy.cfg

? notify:?

? ? - restart haproxy

? tags: cfg

- name: configuration rsyslog for haproxy

? template: src=rsyslog.conf ? dest=/etc/rsyslog.conf

? notify:

? ? - restart rsyslog

- name: start haproxy service

? service: name=haproxy state=started enabled=yes

template

haproxy.cfg.j2: ?//只截取了重要的部分,動(dòng)靜分離,后端服務(wù)器定義

frontend ?http

? ? bind *:80

? ? mode http

? ? log global

? ? option httpclose

? ? option logasap

? ? option dontlognull

? ? acl url_static ? ? ? path_end ? ? ? -i .jpg .gif .png .css .js .html .ico

? ? use_backend static_servers ? ? ? ? ?if url_static

? ? default_backend dynamic_servers


#---------------------------------------------------------------------

# static backend for serving up p_w_picpaths, stylesheets and such

#---------------------------------------------------------------------

backend static_servers

? ? balance ? ?roundrobin

? ? cookie ? WebID ?insert nocache

? ? server ? web1 ` web1_ip `:80 check cookie web1

? ? server ? web2 ` web2_ip `:80 check cookie web2


#---------------------------------------------------------------------

# round robin balancing between the various backends

#---------------------------------------------------------------------

backend dynamic_servers

? ? balance ? ? uri

? ? hash-type consistent

? ? server ?php1 ` php1_ip `:80 check cookie php1

? ? server ?php2 ` php2_ip `:80 check cookie php2


rsyslog.conf


vars:main.yml

web1_ip : 172.16.16.3 ? ? ? ? ? //靜態(tài)web1服務(wù)器ip

web2_ip : 172.16.16.4 ? ? ? ? ?//靜態(tài)web2服務(wù)器ip

php1_ip : 172.16.16.2 ? ? ? ??//動(dòng)態(tài)php1服務(wù)器ip

php2_ip : 172.16.16.8 ? ? ? ?//動(dòng)態(tài)php2服務(wù)器ip


4.2、httpd

files:mountnfs.sh

yum install -y nfs-utils &> /dev/null ? //掛載nfs共享目錄

echo " 172.16.16.252:/discuz ? ? /var/www/html/ ? ? ? ? ?nfs ? ?defaults,_netdev ? ? ? 0 0 " >> /etc/fstab

mount -a

tasks:main.yml

- name: install httpd package

? yum: name=httpd state=present

- name: mount nfs share directory /discuz

? script: mountnfs.sh

- name: set configuration

? template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf

- name: start httpd service

? service: name=httpd state=started

templates:http.conf.j2
LogFormat?%{X-Forwarded-For}i?combined ?//將客戶端ip記入日志


4.3、initialization

tasks:main.yml

- name: set selinux

? shell: sed -i 's@^SELINUX=.*@SELINUX=permissive@' /etc/selinux/config

? shell: setenforce 0

- name: install libselinux-python package

? yum: name=libselinux-python state=present

- name: copy hosts to all node /etc/hosts

? template: src=hosts dest=/etc/hosts

- name: copy resolv.conf to all node /etc/resolv.conf

? template: src=resolv.conf dest=/etc/resolv.conf

- name: install ntpdate package

? yum: name=ntpdate state=present

- name: synctime from ntp.sjtu.edu.cn

? shell: ntpdate ntp.sjtu.edu.cn

- name: set a cron to synctime from ntp.sjtu.edu.cn

? cron: name="cron to synctime from ntp.sjtu.edu.cn" minute="*/5" job="/usr/sbin/ntpdate ntp.sjtu.edu.cn &> /dev/null" state=present

- name: modify selinux configuration

? template: src=selinux.conf dest=/etc/selinux/conf

- name: set selinux permissive

? shell: setenforce 0

templates:3個(gè)文件

(1)hosts

127.0.0.1 ? localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 ? ? ? ? localhost localhost.localdomain localhost6 localhost6.localdomain6

172.16.16.11 ? ?node1

172.16.16.12 ? ?node2

172.16.16.3 ? ? web1

172.16.16.4 ? ? web2

172.16.16.2 ? ? php1

172.16.16.8 ? ? php2

172.16.16.5 ? ? mysql

172.16.16.252 ?nfs


(2)resolv.conf

nameserver 172.16.0.1


(3)selinux.conf

SELINUX=disabled

SELINUXTYPE=targeted



4.4、keepalived

files:notify.sh
通知機(jī)制:當(dāng)主從發(fā)生變化的時(shí)候給管理員發(fā)郵件
handlers:main.yml
- name: restart keepalived

? service: name=keepalived state=restarted

tasks:main.yml
- name: install keepalived package

? yum: name=keepalived state=present

- name: copy notify.sh to node1 and node2

? copy: src=notify.sh dest=/etc/keepalived/notify.sh

- name: configure keepalived on node1-master

? template: src=keepalived.conf.master.j2 dest=/etc/keepalived/keepalived.conf

? when: ansible_hostname == "node1"

? notify:

? ?- restart keepalived

- name: configure keepalived on node2-backup

? template: src=keepalived.conf.backup.j2 dest=/etc/keepalived/keepalived.conf

? when: ansible_hostname == "node2"

? notify:

? ?- restart keepalived

- name: start keepalived service

? service: name=keepalived state=started enabled=yes

templates

keepalived.conf.master.j2

! Configuration File for keepalived


global_defs {

? ?notification_email {

? ? ? ?root@localhost

? ?}

? ?notification_email_from keepalived@localhost

? ?smtp_connect_timeout 3

? ?smtp_server 127.0.0.1

? ?router_id LVS_DEVEL

}


vrrp_script chk_haproxy {

? ? script "killall -0 haproxy"

? ? interval 1

? ? weight 2

}


vrrp_script chk_mantaince_down {

? ?script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"

? ?interval 1

? ?weight 2

}


vrrp_instance VI_1 {

? ? interface eth0

? ? state MASTER ?# BACKUP for slave routers

? ? priority 101 ?# 100 for BACKUP

? ? virtual_router_id 51

? ? garp_master_delay 1


? ? authentication {

? ? ? ? auth_type PASS

? ? ? ? auth_pass password12345

? ? }

? ? track_interface {

? ? ? ?eth0

? ? }

? ? virtual_ipaddress {

? ? ? ? ` vip `/16 dev eth0 label eth0:0

? ? }

? ? track_script {

? ? ? ? chk_haproxy

? ? ? ? chk_mantaince_down

? ? }


? ? notify_master "/etc/keepalived/notify.sh master"

? ? notify_backup "/etc/keepalived/notify.sh backup"

? ? notify_fault "/etc/keepalived/notify.sh fault"

}



keepalived.conf.backup.j2

?state BACKUP ?

?priority 100 ?



vars:main.ymlvip : 172.16.16.50


4.5、mysql

files:3個(gè)文件


(1)mariadb-5.5.43.sh: 編譯安裝配置mariadb的腳本,就不發(fā)了,太多


(2)privilege.sh

#!/bin/bash

#! privilege to dzuser


echo "create database discuz;

grant all on discuz.* to 'dzuser'@'172.16.%.%' identified by 'dzpasswd';

flush privileges;

\q" | mysql

~ ? ? ? ? ? ?


tasks:main.yml

- name: copy mariadb-5.5.43 package

? copy: src=mariadb-5.5.43-linux-x86_64.tar.gz dest=/root/mariadb-5.5.43-linux-x86_64.tar.gz

- name: install mysql and cofiguration

? script: mariadb-5.5.43.sh

- name: start mysqld service

? shell: service mysqld start

- name: privileges to dzuser

? script: privilege.sh

? tags: haha


4.6、nfs

files:discuz.sh

#!/bin/bash

# discuz configuration


unzip -d /discuz /root/Discuz_X3.1_SC_UTF8.zip

chmod -R go+w /discuz/upload/config/

chmod -R go+w /discuz/upload/data/

chmod -R go+w /discuz/upload/uc_*

tasks:main.yml

- name: mkdir share directory to mysql and web

? shell: mkdir -pv /{mydata,discuz}

- name: install nfs package

? yum: name=nfs-utils state=present

- name: useradd mysql?

? user: name=mysql state=present system=yes

- name: useradd apache

? user: name=apache state=present system=yes

- name: copy exports to nfs node

? template: src=exports dest=/etc/exports

- name: set mysql mode(rwx) to /mydata ?

? shell: setfacl -m u:mysql:rwx /mydata

- name: set apache mode(rwx) to /discuz

? shell: setfacl -m u:apache:rwx /discuz

- name: copy Discuz_X3.1_SC_UTF8.zip package

? copy: src=Discuz_X3.1_SC_UTF8.zip dest=/root/Discuz_X3.1_SC_UTF8.zip

- name: install unzip package

? yum: name=unzip state=present?

- name: configuration discuz?

? script: discuz.sh?

- name: start rpcbind service

? service: name=rpcbind state=started

- name: start nfs service

templates:exports
/mydata ? ?172.16.0.0/16(rw,no_root_squash)//編譯安裝mysql需要這樣設(shè)置,安裝完可以改成rw權(quán)限即可

/discuz ? ?172.16.0.0/16(rw)


4.7、php

files:2個(gè)文件

(1)install-php.sh

#!/bin/bash

# install nfs-utils httpd | php | php-mysql

yum install -y nfs-utils httpd php php-mysql openssl-devel &> /dev/null


(2)mountnfs.sh //同httpd使用的腳本


tasks:main.yml
- name: install nfs-utils | httpd | php | php-mysql package

? script: install-php.sh

- name: mount nfs share directory /discuz

? script: mountnfs.sh

- name: set configuration

? template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf

- name: start httpd service

? service: name=httpd state=started

templates:httpd.conf.j2
這個(gè)模板也同httpd使用的!


三、執(zhí)行過(guò)程如下?

[root@localhost?ansible_playbooks]#?ansible-playbook?haproxy.yml?//執(zhí)行ansible劇本?PLAY?[nfs]?********************************************************************?GATHERING?FACTS?***************************************************************? ok:?[172.16.16.252]???????????????TASK:?[initialization?|?set?selinux]?******************************************? changed:?[172.16.16.252]???????????????????????//設(shè)置selinuxTASK:?[initialization?|?install?libselinux-python?package]?********************? changed:?[172.16.16.252]???????????????????????//需要安裝libselinux-pythonTASK:?[initialization?|?copy?hosts?to?all?node?/etc/hosts]?********************? changed:?[172.16.16.252]??????????????????????//復(fù)制主機(jī)名解析文件TASK:?[initialization?|?copy?resolv.conf?to?all?node?/etc/resolv.conf]?********? changed:?[172.16.16.252]????????????????????//復(fù)制域名文件TASK:?[initialization?|?install?ntpdate?package]?******************************? changed:?[172.16.16.252]?????????????????????//安裝ntpdateTASK:?[initialization?|?synctime?from?ntp.sjtu.edu.cn]?************************? changed:?[172.16.16.252]//同步時(shí)間 TASK:?[initialization?|?set?a?cron?to?synctime?from?ntp.sjtu.edu.cn]?**********??????????????????????????????????????????????//設(shè)置計(jì)劃任務(wù) changed:?[172.16.16.252]TASK:?[initialization?|?modify?selinux?configuration]?*************************? changed:?[172.16.16.252]????????????????????????//修改selinuxTASK:?[initialization?|?set?selinux?permissive]?*******************************? changed:?[172.16.16.252]TASK:?[nfs?|?mkdir?share?directory?to?mysql?and?web]?**************************? changed:?[172.16.16.252]??????????????//創(chuàng)建nfs的共享目錄/mydata和/discuz?TASK:?[nfs?|?install?nfs?package]?*********************************************? changed:?[172.16.16.252]????????????????//安裝nfs-utilsTASK:?[nfs?|?useradd?mysql]?***************************************************? changed:?[172.16.16.252]?????????????????//添加mysql用戶TASK:?[nfs?|?useradd?apache]?**************************************************? changed:?[172.16.16.252]????????????????//添加apache用戶TASK:?[nfs?|?copy?exports?to?nfs?node]?****************************************? changed:?[172.16.16.252]????????????????//設(shè)置nfs導(dǎo)出的共享目錄TASK:?[nfs?|?set?mysql?mode(rwx)?to?/mydata]?**********************************? changed:?[172.16.16.252]????????????????//給mysql對(duì)/mydata的rwx權(quán)限TASK:?[nfs?|?set?apache?mode(rwx)?to?/discuz]?*********************************? changed:?[172.16.16.252]????????????????//給apache對(duì)/discuz的rwx權(quán)限TASK:?[nfs?|?copy?Discuz_X3.1_SC_UTF8.zip?package]?****************************? changed:?[172.16.16.252]???????????????//復(fù)制discuz安裝包到nfs服務(wù)器TASK:?[nfs?|?install?unzip?package]?*******************************************? changed:?[172.16.16.252]????????????????//解壓discuzTASK:?[nfs?|?configuration?discuz]?********************************************? changed:?[172.16.16.252]?????????????????//配置discuz網(wǎng)頁(yè)文件(給其對(duì)應(yīng)訪問(wèn)權(quán)限)?TASK:?[nfs?|?start?rpcbind?service]?*******************************************? changed:?[172.16.16.252]?????????????????//啟動(dòng)rpcbind服務(wù)TASK:?[nfs?|?start?nfs?service]?***********************************************? changed:?[172.16.16.252]???????????????//啟動(dòng)nfs服務(wù)PLAY?[db]?*********************************************************************?//安裝及配置mysql GATHERING?FACTS?***************************************************************? ok:?[172.16.16.5]?????????????????TASK:?[initialization?|?set?selinux]?******************************************? changed:?[172.16.16.5]TASK:?[initialization?|?install?libselinux-python?package]?********************? changed:?[172.16.16.5]TASK:?[initialization?|?copy?hosts?to?all?node?/etc/hosts]?********************? changed:?[172.16.16.5]TASK:?[initialization?|?copy?resolv.conf?to?all?node?/etc/resolv.conf]?********? changed:?[172.16.16.5]TASK:?[initialization?|?install?ntpdate?package]?******************************? changed:?[172.16.16.5]TASK:?[initialization?|?synctime?from?ntp.sjtu.edu.cn]?************************? changed:?[172.16.16.5]TASK:?[initialization?|?set?a?cron?to?synctime?from?ntp.sjtu.edu.cn]?**********? changed:?[172.16.16.5]TASK:?[initialization?|?modify?selinux?configuration]?*************************? changed:?[172.16.16.5]TASK:?[initialization?|?set?selinux?permissive]?*******************************? changed:?[172.16.16.5]TASK:?[mysql?|?copy?mariadb-5.5.43?package]?***********************************? changed:?[172.16.16.5]????????????????//復(fù)制mariadb到mysql服務(wù)器TASK:?[mysql?|?install?mysql?and?cofiguration]?********************************? changed:?[172.16.16.5]?????????????????//腳本執(zhí)行mysql安裝,配置TASK:?[mysql?|?start?mysqld?service]?******************************************? changed:?[172.16.16.5]??????????????//啟動(dòng)mysqld服務(wù)TASK:?[mysql?|?privileges?to?dzuser]?******************************************? changed:?[172.16.16.5]??????????????//使用腳本創(chuàng)建discuz數(shù)據(jù)庫(kù),并給dzuser授權(quán)PLAY?[static_servers]?*********************************************************?//靜態(tài)服務(wù)器設(shè)置?web1和web2節(jié)點(diǎn) GATHERING?FACTS?***************************************************************? ok:?[172.16.16.3] ok:?[172.16.16.4]TASK:?[initialization?|?set?selinux]?******************************************? changed:?[172.16.16.3] changed:?[172.16.16.4]TASK:?[initialization?|?install?libselinux-python?package]?********************? changed:?[172.16.16.3] changed:?[172.16.16.4]TASK:?[initialization?|?copy?hosts?to?all?node?/etc/hosts]?********************? changed:?[172.16.16.4] changed:?[172.16.16.3]TASK:?[initialization?|?copy?resolv.conf?to?all?node?/etc/resolv.conf]?********? changed:?[172.16.16.3] changed:?[172.16.16.4]TASK:?[initialization?|?install?ntpdate?package]?******************************? changed:?[172.16.16.3] changed:?[172.16.16.4]TASK:?[initialization?|?synctime?from?ntp.sjtu.edu.cn]?************************? changed:?[172.16.16.4] changed:?[172.16.16.3]TASK:?[initialization?|?set?a?cron?to?synctime?from?ntp.sjtu.edu.cn]?**********? changed:?[172.16.16.3] changed:?[172.16.16.4]TASK:?[initialization?|?modify?selinux?configuration]?*************************? changed:?[172.16.16.3] changed:?[172.16.16.4]TASK:?[initialization?|?set?selinux?permissive]?*******************************? changed:?[172.16.16.4] changed:?[172.16.16.3]TASK:?[httpd?|?install?httpd?package]?*****************************************? changed:?[172.16.16.3]????????????????//安裝httpd軟件包 changed:?[172.16.16.4]?????????TASK:?[httpd?|?mount?nfs?share?directory?/discuz]?*****************************? changed:?[172.16.16.3]?????????????????//掛載nfs服務(wù)器共享的discuz目錄至/var/www/html changed:?[172.16.16.4]TASK:?[httpd?|?set?configuration]?*********************************************? changed:?[172.16.16.4]??????????????//配置httpd.conf changed:?[172.16.16.3]TASK:?[httpd?|?start?httpd?service]?*******************************************? changed:?[172.16.16.3]?????????????????//啟動(dòng)httpd服務(wù) changed:?[172.16.16.4]PLAY?[dynamic_servers]?********************************************************?//設(shè)置動(dòng)態(tài)服務(wù)器php1和php2節(jié)點(diǎn) GATHERING?FACTS?***************************************************************? ok:?[172.16.16.2] ok:?[172.16.16.8]TASK:?[initialization?|?set?selinux]?******************************************? changed:?[172.16.16.2] changed:?[172.16.16.8]TASK:?[initialization?|?install?libselinux-python?package]?********************? changed:?[172.16.16.2] changed:?[172.16.16.8]TASK:?[initialization?|?copy?hosts?to?all?node?/etc/hosts]?********************? changed:?[172.16.16.8] changed:?[172.16.16.2]TASK:?[initialization?|?copy?resolv.conf?to?all?node?/etc/resolv.conf]?********? changed:?[172.16.16.8] changed:?[172.16.16.2]TASK:?[initialization?|?install?ntpdate?package]?******************************? changed:?[172.16.16.2] changed:?[172.16.16.8]TASK:?[initialization?|?synctime?from?ntp.sjtu.edu.cn]?************************? changed:?[172.16.16.2] changed:?[172.16.16.8]TASK:?[initialization?|?set?a?cron?to?synctime?from?ntp.sjtu.edu.cn]?**********? changed:?[172.16.16.8] changed:?[172.16.16.2]TASK:?[initialization?|?modify?selinux?configuration]?*************************? changed:?[172.16.16.8] changed:?[172.16.16.2]TASK:?[initialization?|?set?selinux?permissive]?*******************************? changed:?[172.16.16.8] changed:?[172.16.16.2]TASK:?[php?|?install?nfs-utils?|?httpd?|?php?|?php-mysql?package]?*************? changed:?[172.16.16.8]??????????????//安裝php軟件包(使用的是centos?6系統(tǒng)自帶的) changed:?[172.16.16.2]TASK:?[php?|?mount?nfs?share?directory?/discuz]?*******************************? changed:?[172.16.16.8]?????????????//掛載discuz目錄至/var/www/html? changed:?[172.16.16.2]TASK:?[php?|?set?configuration]?***********************************************? changed:?[172.16.16.8]??????????????//配置httpd.conf,給日志加入客戶端訪問(wèn)的ip地址 changed:?[172.16.16.2]??????????TASK:?[php?|?start?httpd?service]?*********************************************? changed:?[172.16.16.8]?????????????//啟用php功能 changed:?[172.16.16.2]PLAY?[haproxy]?****************************************************************?//安裝設(shè)置keepalived+haproxy(node1和node2) GATHERING?FACTS?***************************************************************? ok:?[172.16.16.12] ok:?[172.16.16.11]TASK:?[initialization?|?set?selinux]?******************************************? changed:?[172.16.16.12] changed:?[172.16.16.11]TASK:?[initialization?|?install?libselinux-python?package]?********************? changed:?[172.16.16.12] changed:?[172.16.16.11]TASK:?[initialization?|?copy?hosts?to?all?node?/etc/hosts]?********************? changed:?[172.16.16.12] changed:?[172.16.16.11]TASK:?[initialization?|?copy?resolv.conf?to?all?node?/etc/resolv.conf]?********? changed:?[172.16.16.11] changed:?[172.16.16.12]TASK:?[initialization?|?install?ntpdate?package]?******************************? ok:?[172.16.16.12] ok:?[172.16.16.11]TASK:?[initialization?|?synctime?from?ntp.sjtu.edu.cn]?************************? changed:?[172.16.16.12] changed:?[172.16.16.11]TASK:?[initialization?|?set?a?cron?to?synctime?from?ntp.sjtu.edu.cn]?**********? changed:?[172.16.16.11] changed:?[172.16.16.12]TASK:?[initialization?|?modify?selinux?configuration]?*************************? changed:?[172.16.16.11] changed:?[172.16.16.12]TASK:?[initialization?|?set?selinux?permissive]?*******************************? changed:?[172.16.16.11] changed:?[172.16.16.12]TASK:?[keepalived?|?install?keepalived?package]?*******************************? changed:?[172.16.16.11]????????????//安裝keepalived changed:?[172.16.16.12]?????????????????TASK:?[keepalived?|?copy?notify.sh?to?node1?and?node2]?************************???????????????????????????????? changed:?[172.16.16.12]???????????????//復(fù)制通知腳本給node1和node2? changed:?[172.16.16.11]TASK:?[keepalived?|?configure?keepalived?on?node1-master]?*********************? skipping:?[172.16.16.12]?????????????//設(shè)置node1為MASTER節(jié)點(diǎn) changed:?[172.16.16.11]TASK:?[keepalived?|?configure?keepalived?on?node2-backup]?*********************? skipping:?[172.16.16.11]???????????//設(shè)置node2為BACKUP節(jié)點(diǎn) changed:?[172.16.16.12]???????TASK:?[keepalived?|?start?keepalived?service]?*********************************? changed:?[172.16.16.12]????????????//啟動(dòng)keepalived服務(wù)??? changed:?[172.16.16.11]TASK:?[haproxy?|?install?haproxy?package]?*************************************? changed:?[172.16.16.12]???????????????//安裝haproxy軟件包 changed:?[172.16.16.11]TASK:?[haproxy?|?configuration?haproxy]?***************************************? changed:?[172.16.16.12]?????????????//配置haproxy,實(shí)現(xiàn)動(dòng)靜分離 changed:?[172.16.16.11]TASK:?[haproxy?|?configuration?rsyslog?for?haproxy]?***************************? changed:?[172.16.16.11]??????????//記錄haproxy的日志 changed:?[172.16.16.12]TASK:?[haproxy?|?start?haproxy?service]?***************************************? changed:?[172.16.16.12]??????????//啟動(dòng)haproxy服務(wù) changed:?[172.16.16.11]NOTIFIED:?[keepalived?|?restart?keepalived]?***********************************? changed:?[172.16.16.12]??????????//配置文件發(fā)生變化,重啟keepalived服務(wù) changed:?[172.16.16.11]NOTIFIED:?[haproxy?|?restart?haproxy]?*****************************************? changed:?[172.16.16.11]???????????//配置文件發(fā)生變化,重啟haproxy服務(wù) changed:?[172.16.16.12]????????NOTIFIED:?[haproxy?|?restart?rsyslog]?*****************************************? changed:?[172.16.16.12]???????//配置文件發(fā)生變化,重啟rsyslog服務(wù) changed:?[172.16.16.11]PLAY?RECAP?********************************************************************? 172.16.16.11???????????????:?ok=21???changed=19???unreachable=0????failed=0??? 172.16.16.12???????????????:?ok=21???changed=19???unreachable=0????failed=0??? 172.16.16.2????????????????:?ok=14???changed=13???unreachable=0????failed=0??? 172.16.16.252??????????????:?ok=22???changed=21???unreachable=0????failed=0??? 172.16.16.3????????????????:?ok=14???changed=13???unreachable=0????failed=0??? 172.16.16.4????????????????:?ok=14???changed=13???unreachable=0????failed=0??? 172.16.16.5????????????????:?ok=14???changed=13???unreachable=0????failed=0??? 172.16.16.8????????????????:?ok=14???changed=13???unreachable=0????failed=0


四、安裝discuz論壇?


安裝完成,使用vip:172.16.16.50測(cè)試正常!!如下圖:



五、額外測(cè)試過(guò)程:

(1)測(cè)試keepalived是否工作正常,在master出現(xiàn)問(wèn)題的時(shí)候,是否可以切換到backup上:?

[root@node1?keepalived]#?touch?down//通過(guò)keepalived配置文件定義腳本測(cè)試vip是否轉(zhuǎn)移到node2 [root@node1?keepalived]#?tail?/var/log/messages????//通過(guò)下面的日志可看出node1成為BACKUP Oct?24?20:08:19?node1?Keepalived_vrrp[2644]:?VRRP_Script(chk_mantaince_down)?failed Oct?24?20:08:21?node1?Keepalived_vrrp[2644]:?VRRP_Instance(VI_1)?Received?higher?prio?advert Oct?24?20:08:21?node1?Keepalived_vrrp[2644]:?VRRP_Instance(VI_1)?Entering?BACKUP?STATE Oct?24?20:08:21?node1?Keepalived_vrrp[2644]:?VRRP_Instance(VI_1)?removing?protocol?VIPs. Oct?24?20:08:21?node1?Keepalived_healthcheckers[2643]:?Netlink?reflector?reports?IP?172.16.16.50?removed[root@node2?~]#?tail?/var/log/messages?????????//通過(guò)下面的日志可看出node2成為MASTER Oct?24?20:08:22?node2?Keepalived_vrrp[2442]:?VRRP_Instance(VI_1)?Transition?to?MASTER?STATE Oct?24?20:08:23?node2?Keepalived_vrrp[2442]:?VRRP_Instance(VI_1)?Entering?MASTER?STATE Oct?24?20:08:23?node2?Keepalived_vrrp[2442]:?VRRP_Instance(VI_1)?setting?protocol?VIPs. Oct?24?20:08:23?node2?Keepalived_healthcheckers[2441]:?Netlink?reflector?reports?IP?172.16.16.50?added Oct?24?20:08:23?node2?Keepalived_vrrp[2442]:?VRRP_Instance(VI_1)?Sending?gratuitous?ARPs?on?eth0?for?172.16.16.50

[root@node1?keepalived]#?tail?/var/log/haproxy.log? Oct?24?20:08:21?node1?Keepalived_healthcheckers[2643]:?Netlink?reflector?reports?IP?172.16.16.50?removed [root@node2?~]#?tail?/var/log/haproxy.log? Oct?24?20:08:23?node2?Keepalived_healthcheckers[2441]:?Netlink?reflector?reports?IP?172.16.16.50?added


這個(gè)時(shí)候訪問(wèn)discuz論壇仍然沒(méi)有問(wèn)題;說(shuō)明keepalived發(fā)揮了作用!



(2)測(cè)試haproxy是否可以實(shí)現(xiàn)讀寫分離?方法:將所有static_servers的httpd服務(wù)停止,測(cè)試只提供php的功能,顯示效果如下圖

[root@web1?~]#?service?httpd?stop?????//停止web1和web2的httpd服務(wù),提供靜態(tài)內(nèi)容顯示 [root@web2?~]#?service?httpd?stop


# 可以看到上面的效果,圖片都已經(jīng)不再顯示,將web2加回來(lái),然后再查看效果,沒(méi)查看http的訪問(wèn)日志

[root@web2?~]#?service?httpd?start???????//啟動(dòng)其中的一臺(tái) [root@web2?~]#?tail?/var/log/httpd/access_log? 172.16.0.3?-?-?[24/Oct/2015:20:46:54?+0800]?"GET?/static/p_w_picpath/common/user_online.gif?HTTP/1.1"?200?868?"http://172.16.16.50/data/cache/style_1_common.css?SFA"?"Mozilla/5.0?(Windows?NT?6.2;?WOW64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/44.0.2403.155?Safari/537.36" 172.16.0.3?-?-?[24/Oct/2015:20:46:54?+0800]?"GET?/static/p_w_picpath/common/arrwd.gif?HTTP/1.1"?200?51?"http://172.16.16.50/data/cache/style_1_common.css?SFA"?"Mozilla/5.0?(Windows?NT?6.2;?WOW64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/44.0.2403.155?Safari/537.36" 172.16.0.3?-?-?[24/Oct/2015:20:46:54?+0800]?"GET?/static/p_w_picpath/common/qmenu.png?HTTP/1.1"?200?225?"http://172.16.16.50/data/cache/style_1_common.css?SFA"?"Mozilla/5.0?(Windows?NT?6.2;?WOW64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/44.0.2403.155?Safari/537.36" 172.16.0.3?-?-?[24/Oct/2015:20:46:54?+0800]?"GET?/static/p_w_picpath/common/nv.png?HTTP/1.1"?200?1939?"http://172.16.16.50/data/cache/style_1_common.css?SFA"?"Mozilla/5.0?(Windows?NT?6.2;?WOW64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/44.0.2403.155?Safari/537.36" 172.16.0.3?-?-?[24/Oct/2015:20:46:54?+0800]?"GET?/static/p_w_picpath/common/nv_a.png?HTTP/1.1"?200?2076?"http://172.16.16.50/data/cache/style_1_common.css?SFA"?"Mozilla/5.0?(Windows?NT?6.2;?WOW64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/44.0.2403.155?Safari/537.36" 172.16.0.3?-?-?[24/Oct/2015:20:46:54?+0800]?"GET?/static/p_w_picpath/common/search.png?HTTP/1.1"?200?1301?"http://172.16.16.50/data/cache/style_1_common.css?SFA"?"Mozilla/5.0?(Windows?NT?6.2;?WOW64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/44.0.2403.155?Safari/537.36" 172.16.0.3?-?-?[24/Oct/2015:20:46:54?+0800]?"GET?/static/p_w_picpath/common/chart.png?HTTP/1.1"?200?990?"http://172.16.16.50/data/cache/style_1_forum_index.css?SFA"?"Mozilla/5.0?(Windows?NT?6.2;?WOW64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/44.0.2403.155?Safari/537.36" 172.16.0.3?-?-?[24/Oct/2015:20:46:54?+0800]?"GET?/static/p_w_picpath/common/pt_item.png?HTTP/1.1"?200?3598?"http://172.16.16.50/data/cache/style_1_common.css?SFA"?"Mozilla/5.0?(Windows?NT?6.2;?WOW64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/44.0.2403.155?Safari/537.36" 172.16.0.3?-?-?[24/Oct/2015:20:46:54?+0800]?"GET?/static/p_w_picpath/common/titlebg.png?HTTP/1.1"?200?315?"http://172.16.16.50/data/cache/style_1_common.css?SFA"?"Mozilla/5.0?(Windows?NT?6.2;?WOW64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/44.0.2403.155?Safari/537.36" 172.16.0.3?-?-?[24/Oct/2015:20:46:55?+0800]?"GET?/static/p_w_picpath/common/scrolltop.png?HTTP/1.1"?200?1383?"http://172.16.16.50/data/cache/style_1_common.css?SFA"?"Mozilla/5.0?(Windows?NT?6.2;?WOW64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/44.0.2403.155?Safari/537.36"

?

至此,終于將所有劇本,腳本,圖片,日志整理完成!


轉(zhuǎn)載于:https://blog.51cto.com/bengbengtu/1705914

總結(jié)

以上是生活随笔為你收集整理的Keepalived+HAProxy基于读写分离方式实现discuz论坛的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。