天天看點

馬哥門徒N57-SRE第二周MyCAT中間件服務實作讀寫分離ansible常用子產品總結ansible-playbook批量安裝httpd,按主機名提供不同的index.html(如node1的index.html歡迎頁面為welcome node1)編譯安裝redis

MyCAT中間件服務實作讀寫分離

第一步:完成Mariadb (Mysql)主從複制

建立主從資料庫

A配置master伺服器

  1. 配置my.cnf設定server-id

[[email protected] ~]#yum install mariadb-server -y

[[email protected]~]#vim /etc/my.cnf

[mysqld]

server-id=8

log-bin

  1. 啟動資料庫

[[email protected] ~]#systemctl start mariadb

     2.建立複制使用者

[[email protected] ~]#mysql

MariaDB [(none)]> grant replication slave on *.* to repluser@'10.0.0.%' identified by 'replpass';

MariaDB [(none)]> show master status;

馬哥門徒N57-SRE第二周MyCAT中間件服務實作讀寫分離ansible常用子產品總結ansible-playbook批量安裝httpd,按主機名提供不同的index.html(如node1的index.html歡迎頁面為welcome node1)編譯安裝redis
馬哥門徒N57-SRE第二周MyCAT中間件服務實作讀寫分離ansible常用子產品總結ansible-playbook批量安裝httpd,按主機名提供不同的index.html(如node1的index.html歡迎頁面為welcome node1)編譯安裝redis

  ---------------------------------------------------------------------------------

B配置slave伺服器

  1. 配置my.cnf設定server-id

[[email protected] ~]#yum install mariadb-server -y

[[email protected] ~]#vim /etc/my.cnf

[mysqld]

server-id=17

   2.修改主節點備份檔案

[[email protected] ~]#mysql

MariaDB [(none)]> show slave status;

馬哥門徒N57-SRE第二周MyCAT中間件服務實作讀寫分離ansible常用子產品總結ansible-playbook批量安裝httpd,按主機名提供不同的index.html(如node1的index.html歡迎頁面為welcome node1)編譯安裝redis

看到資料庫已經複制成功。(注意配置資訊一定要和master伺服器資訊一緻!)

第二步搭建MYCAT伺服器

1、安裝Java Mariadb

[[email protected] ~]# yum -y install jave mariadb

[[email protected] ~]# java -version

[[email protected]~]#wget http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz

[[email protected] ~]# mkdir /apps

[[email protected] ~]# tar xvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz  -C /apps/

馬哥門徒N57-SRE第二周MyCAT中間件服務實作讀寫分離ansible常用子產品總結ansible-playbook批量安裝httpd,按主機名提供不同的index.html(如node1的index.html歡迎頁面為welcome node1)編譯安裝redis

[[email protected] ~]# vim /apps/mycat/conf/server.xml

馬哥門徒N57-SRE第二周MyCAT中間件服務實作讀寫分離ansible常用子產品總結ansible-playbook批量安裝httpd,按主機名提供不同的index.html(如node1的index.html歡迎頁面為welcome node1)編譯安裝redis

第三步安裝client伺服器

[[email protected] ~]# yum -y install mariadb

馬哥門徒N57-SRE第二周MyCAT中間件服務實作讀寫分離ansible常用子產品總結ansible-playbook批量安裝httpd,按主機名提供不同的index.html(如node1的index.html歡迎頁面為welcome node1)編譯安裝redis

第四步将Mycat和後端Mariadb關聯

Mycat伺服器配置

[[email protected] ~]# vim /apps/mycat/conf/schema.xml

馬哥門徒N57-SRE第二周MyCAT中間件服務實作讀寫分離ansible常用子產品總結ansible-playbook批量安裝httpd,按主機名提供不同的index.html(如node1的index.html歡迎頁面為welcome node1)編譯安裝redis

重新開機mycat

[[email protected] ~]# mycat restart

Stopping Mycat-server...

Stopped Mycat-server.

Starting Mycat-server...

主從資料庫建立mycat賬戶授權

馬哥門徒N57-SRE第二周MyCAT中間件服務實作讀寫分離ansible常用子產品總結ansible-playbook批量安裝httpd,按主機名提供不同的index.html(如node1的index.html歡迎頁面為welcome node1)編譯安裝redis

通過通用日志确認實作讀寫分離(general_log)

測試mycat自動排程讀請求至主節點

####################################################################

ansible常用子產品總結

馬哥門徒N57-SRE第二周MyCAT中間件服務實作讀寫分離ansible常用子產品總結ansible-playbook批量安裝httpd,按主機名提供不同的index.html(如node1的index.html歡迎頁面為welcome node1)編譯安裝redis
馬哥門徒N57-SRE第二周MyCAT中間件服務實作讀寫分離ansible常用子產品總結ansible-playbook批量安裝httpd,按主機名提供不同的index.html(如node1的index.html歡迎頁面為welcome node1)編譯安裝redis

2.1Command子產品

功能:在遠端主機執行指令,此為預設子產品,可忽略-m選項

作用:執行系統指令(linux windows),不支援變量,"<",">","|",";","&"等符号

馬哥門徒N57-SRE第二周MyCAT中間件服務實作讀寫分離ansible常用子產品總結ansible-playbook批量安裝httpd,按主機名提供不同的index.html(如node1的index.html歡迎頁面為welcome node1)編譯安裝redis

這個批量處理裝置相同操作很友善!注意顔色!

2.2Shell子產品

shell子產品增強版Command子產品

功能:執行複雜的指令

馬哥門徒N57-SRE第二周MyCAT中間件服務實作讀寫分離ansible常用子產品總結ansible-playbook批量安裝httpd,按主機名提供不同的index.html(如node1的index.html歡迎頁面為welcome node1)編譯安裝redis

2.3 script子產品

功能:作用:将本地腳本複制到遠端主機,并執行。(不需要給腳本添加執行權限)

馬哥門徒N57-SRE第二周MyCAT中間件服務實作讀寫分離ansible常用子產品總結ansible-playbook批量安裝httpd,按主機名提供不同的index.html(如node1的index.html歡迎頁面為welcome node1)編譯安裝redis

2.4copy子產品

拷貝, 修改檔案或目錄, 修改已經存在的目錄的權限

使用content可以直接在遠端建立檔案,同時指定檔案内容

使用backup=yes備份配置檔案,可以實作配置檔案的修改或復原

該子產品可以直接拷貝連結

[[email protected] ~]# ansible-doc copy #檢視copy子產品用法

    src: #源檔案或目錄,要複制到遠端主機的檔案在本地的位址,可以是絕對路徑,也可以是相對路徑。如果路徑是一個目錄,它将遞歸複制。在這種情況下,如果路徑使用"/"來結尾,則隻複制目錄裡的内容,如果沒有使用"/"來結尾,則包含目錄在内的整個内容全部複制,類似于rsync(#)。(src為空目錄是時候是不會拷貝的,一緻顯示綠色)

    content:用于替代"src",可以在指令行直接設定指定檔案的值

    dest: #目标目錄

    owner: foo #屬主

    group: foo #屬組(不能使用gid指定)

    mode: '0644' #權限,數字(3位|4位),字母,UGO   

    backup: yes #當出現同名的檔案,直接覆寫,因為預設是no,指定yes後(檔案内容不同會以目前時間戳備份該檔案)

    force:如果目标主機包含該檔案,但内容不同,如果設定為yes,則強制覆寫,如果為no,則隻有當目标主機的目标位置不存在該檔案時,才複制。預設為yes(force=no和state=backup可以二選一)

remote_src:

yes #受控端自己玩(可以做批量復原)

no #預設

--------------------------------------------------  

#遠端批量拷貝,相當于scp,rsync

目标目錄下檔案存在的話會報錯,被控端主機使用者不存在會報錯(但是它把能做的都做了)

2.5.fetch子產品

與copy相反,copy是把本機檔案發到所有node節點,用fetch可以比如從node節點抓取日志資訊

隻能抓取單個檔案,抓多個需要把那些檔案打包再抓

2.6file子產品

功能:建立檔案或目錄,修改已經存在的目錄的權限,建立軟硬連接配接  

file:

    path: /etc/foo.conf #指定建立的目錄或檔案

    state:

     touch #建立檔案

     directory #建立目錄

     absent #删除目錄或檔案

     link #做軟連結

    owner: foo #屬主

    group: foo #屬組

    mode: '0644' #權限

    recurse #遞歸

1 force:需要在兩種情況下強制建立軟連結,一種是源檔案不存在但之後會建立的情況下;另一種是目标軟連結已存在,需要先取消之前的軟鍊,然後建立新的軟鍊,有兩個選項:yes|no

2 group:定義檔案/目錄的屬組

3 mode:定義檔案/目錄的權限( 1.一次建立多個目錄的時候才會遞歸授權,  2.recurse=yes也會遞歸授權)

4 owner:定義檔案/目錄的屬主

5 path:必選項,定義檔案/目錄的路徑(不存在的話可以直接建立)#

6 recurse:'遞歸'的設定檔案的屬性,隻對'目錄'有效(指定recurce的話,可以修改已經存在的檔案或者目錄的權限,預設關閉)(需要配合mode owner group一起使用)

7 src:要被連結的源檔案的路徑,隻應用于state=link的情況

8 dest:被連結到的路徑,隻應用于state=link的情況

9 state:  

directory:如果目錄不存在,建立目錄

file:隻能修改檔案或目錄的時間 (配合modification_time access_time)

link:建立軟連結

2.7unarchive子產品

功能:解壓縮

1、解壓ansible管理機上的壓縮檔案到遠端主機:

ansible all -m unarchive -a "src=/tmp/install/zabbix-3.0.4.tar.gz dest=/tmp/ mode=0755 copy=yes"

2、解壓遠端主機上的檔案到目錄:

ansible all -m unarchive -a "src=/tmp/install/zabbix-3.0.4.tar.gz dest=/tmp/ mode=0755 copy=no"

copy:預設為yes,當copy=yes,那麼拷貝的檔案是從ansible主機複制到遠端主機上的,如果設定為copy=no,那麼會在遠端主機上尋找src源檔案

src:源路徑,可以是ansible主機上的路徑,也可以是遠端主機上的路徑,如果是遠端主機上的路徑,則需要設定copy=no

dest:遠端主機上的目标路徑

2.8hostname子產品

會修改配置檔案,不是臨時更改

[[email protected] ~]# ansible 10.0.0.8 -m hostname -a 'name=node8.wutongweng.com'

2.9cron子產品

功能:添加定時任務

#使用crontab之前最好同步時間(注意單引号和雙引号的作用)(*有時候需要加'')

[[email protected] ~]# ansible '*' -m cron -a "name=同步時間 minute=*/5 job='/usr/sbin/ntpdate time1.aliyun.com &>/dev/null'"

ansible-doc cron

ansible db -m cron -a 'minute=""  hour="" day="" month="" weekday="" job="" name="(必須填寫)" state='

1、定時設定指定值的寫入即可,沒有設定的要删除

2、name必須寫(建立定時任務或者删除定時任務的 标志,不能修改注釋)(這一點和yum倉庫名一樣)

3、state有兩個狀态:present(添加(預設值))or absent(移除)

#添加定時任務

ansible db -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job" state="present"'

檢視定時任務

ansible db -a "crontab -l"

#修改定時任務

ansible db -m cron -a 'minute="*/5" job="/bin/echo hello" name="test cron job" state="present"'

#移除定時任務(根據name來删除)

ansible db -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job" state="absent"'

ansible all -m cron -a "name=test state=absent"

檢視定時任務

ansible db -a "crontab -l"

# 注釋相應定時任務,使定時任務失效

ansible web_group -m cron -a "name='ansible cron01' minute=0 hour=0 job='/bin/sh /server/scripts/test.sh' disabled=yes"

2.10yum子產品

功能:遠端下載下傳

name #包名,用等于号表示(指定要安裝的軟體包的名稱)

file:// #指定本地安裝路徑,=yum localinstall -y

http:// #指定yum倉庫

state #指定動作,用等于号表示

present #安裝軟體包(預設)(=install)

absent #删除軟體包(=remove)

latest #安裝最新版本的軟體包或,更新

disable_gpg_check #預設值為 no,表示不禁用驗證,設定為 yes 表示禁用驗證,即不驗證包,直接安裝。

enablerepo #臨時啟用源(無論此源是否開啟)

disablerepo #臨時禁用某個源,這樣設定後,在安裝軟體包時則不會從對應的源中選擇安裝包。

download_only=true              #隻下載下傳不安裝 yum install [d]

-------------------------------------------------------------

#下載下傳安裝,使用被控端的源安裝軟體包

[[email protected] ~]# ansible 'web_group' -m yum -a 'name=vsftpd'

[[email protected] ~]# ansible 'web_group' -m yum -a 'name=vsftpd state=present'

#下載下傳安裝,指定源的rpm包,相當于wget+localinstall,可以指定包名和協定

[[email protected] ~]# ansible 'web_group' -m yum -a 'name=https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-agent-5.0.0-1.el7.x86_64.rpm state=present'

#安裝,前提是用戶端指定目錄下有這個rpm包(相當于yum localinstall)

[[email protected] ~]# ansible 'web_group' -m yum -a 'name=/root/zabbix-agent-5.0.0-1.el7.x86_64.rpm state=present'

--------------------------------------------------------------

#解除安裝

[[email protected] ~]# ansible 'web_group' -m yum -a 'name=zabbix-agent-5.0.0-1.el7.x86_64 state=absent'

[[email protected] ~]# ansible 'web_group' -m yum -a 'name=zabbix state=absent'

-----------------------------------------------------------------------

#擴充

[[email protected] ~]# ansible all -m yum -a "name=httpd state=latest disable_gpg_check=yes enablerepo=epel"

#更新所有軟體包,排除httpd

[[email protected] ~]# ansible all -m yum -a "state=latest name='*' exclude='httpd'"

2.11service子產品

遠端啟停,重載服務

service子產品(可以跨平台,跨系統) 與systemd子產品作用類似,使用指令類似

1 arguments:給指令行提供一些選項 #

2 enabled:是否開機啟動 yes|no(預設是no)

3 name:必選項,服務名稱

4 pattern:定義一個模式,如果通過status指令來檢視服務的狀态時,沒有響應,就會通過ps指令在程序中根據該模式進行查找,如果比對到,則認為該服務依然在運作 #

5 runlevel:運作級别 #

6 sleep:如果執行了restarted,在則stop和start之間沉睡幾秒鐘

7 state:對目前服務執行啟動,停止、重新開機、重新加載等操作(started,stopped,restarted,reloaded)

#保持服務啟動并設定為開機自啟

 ansible web_group -m service -a 'enabled=yes name=httpd state=started'

2.12user子產品

使用yml文法修改使用者密碼

多種加密方式擷取加密密碼

功能:管理遠端主機上的使用者,比如建立使用者、修改使用者、删除使用者、為使用者建立密鑰對等操作

user子產品是請求的是useradd, userdel, usermod三個指令,goup子產品請求的是groupadd, groupdel, groupmod 三個指令。

groups: #修改附加組為

     append=no #預設,覆寫(相當于usermod -G)

     append=yes #追加(相當于usermod -aG)

uid: 指定用的uid

group: #指定主組

password: #明文密碼進行哈希後的字元串,你可以在 python 的指令提示符下輸入如下指令,生成明文密碼對應的加密字元串 "import crypt; crypt.crypt('666666')"

update_password:

    always: 隻有當密碼不相同時才會生效,即修改密碼(預設) #

    on_create: 隻為新使用者設定密碼

name: 指定使用者名

system: 是否為系統使用者 yes|no(預設是no)

remove: 當state=absent時,remove=yes則表示連同家目錄,郵件目錄一起删除,等價于userdel -r(預設是no)

state:

    absent #删除使用者

     remove=no #預設,删除使用者時,不會删除使用者的家目錄等資訊

     remove=yes #删除使用者的同時,會删除使用者的家目錄,郵件目錄

    present #建立使用者(預設)

shell: 指定使用者的shell環境(預設是/bin/bash)

expires: 設定使用者的過期時間,值是一個時間戳(轉化指令:date -d 2018-12-31 +%s,指令行設定 expires=)

comment: #建立使用者的時候添加一段注釋

generate_ssh_key: yes #建立公鑰(預設)

ssh_key_bits: 2048 #指定公鑰長度

ssh_key_file: .ssh/id_rsa #建立私鑰(建立使用者的家目錄下)

create_home=false #是否建立家目錄(預設建立true)

------------------------------------------------------------------------

#建立使用者,修改使用者

ansible 'web_group' -m user -a ' '

name=ll

name=hh comment="zhushi" uid=1040 group=adm #該組必須存在

name=hh shell=/bin/bash groups=adm,lp append=yes

name=hh state=absent remove=yes

name=hh expires=1422403387

name=hh generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa

name="testops" password="$6$0lwTSmqKOkL.ktgl$OnBexXC7haBf0FRHVMIZM2edDeFWBbpKJ2r9cxVwNvY.vh3IIUzwFz8n7jFglc0CrtQSY12ziDonVL6e71Og2."

--------------------------------------------------------------

#生成密鑰時,隻會生成公鑰檔案和私鑰檔案,和直接使用ssh-keygen指令效果相同,不會生成authorized_keys檔案。複制id_rsa.pub粘貼為authorized_keys檔案即可使用

name=test generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=~/.ssh/id_rsa

-----------------------------------------------------------------------

#指定password參數時,不能使用後面這一串密碼會被直接傳送到被管理主機的/etc/shadow檔案中,是以需要先将密碼字元串進行加密處理。然後将得到的字元串放到password中即可。

1.加密

[[email protected] ~]# python

>>> import crypt;crypt.crypt('666666')

'$6$ziT/sb5KRtUaxoq7$ulfHVLqVgXfmfFUYY7FppzqBQMUYd.2GLDyQwmKv4dYAd0zpgtt5JDheoO/OvvTvY53x9UShX.PtHykJEvsmG0'

2.建立使用者指定密碼 或 修改使用者密碼

------------------------------------------------------------------

#删除使用者

注意該使用者下不能有任何程序,否則會報錯(但是能删除的都删除了)

ansible 'web_group' -m user -a ' '

name=ll state=absent remove=yes

2.13group子產品

功能:建立使用者組

[[email protected] ~]# ansible-doc group

    name: somegroup #指定組名

    state: present #建立(預設,課省略)

    state: absent #删除

gid #指定建立的組的gid

#遠端建立組

[[email protected] ~]# ansible 'web_group' -m group -a 'name=dd gid=233 state=present'

#遠端删除組

[[email protected] ~]# ansible 'web_group' -m group -a 'name=dd gid=233 state=absent'

參考網頁:https://www.cnblogs.com/syy1757528181/p/13069043.html

#####################################################################

ansible-playbook批量安裝httpd,按主機名提供不同的index.html(如node1的index.html歡迎頁面為welcome node1)

删掉所有websrvs 下安裝的的httpd

馬哥門徒N57-SRE第二周MyCAT中間件服務實作讀寫分離ansible常用子產品總結ansible-playbook批量安裝httpd,按主機名提供不同的index.html(如node1的index.html歡迎頁面為welcome node1)編譯安裝redis

編寫install_httpd.yml

馬哥門徒N57-SRE第二周MyCAT中間件服務實作讀寫分離ansible常用子產品總結ansible-playbook批量安裝httpd,按主機名提供不同的index.html(如node1的index.html歡迎頁面為welcome node1)編譯安裝redis

Ansible Playbook測試并釋出劇本執行安裝

馬哥門徒N57-SRE第二周MyCAT中間件服務實作讀寫分離ansible常用子產品總結ansible-playbook批量安裝httpd,按主機名提供不同的index.html(如node1的index.html歡迎頁面為welcome node1)編譯安裝redis
馬哥門徒N57-SRE第二周MyCAT中間件服務實作讀寫分離ansible常用子產品總結ansible-playbook批量安裝httpd,按主機名提供不同的index.html(如node1的index.html歡迎頁面為welcome node1)編譯安裝redis

測試

(index.html的擷取主機變量好像沒有成功,有空再試試編寫部分)

馬哥門徒N57-SRE第二周MyCAT中間件服務實作讀寫分離ansible常用子產品總結ansible-playbook批量安裝httpd,按主機名提供不同的index.html(如node1的index.html歡迎頁面為welcome node1)編譯安裝redis

###################################################################

編譯安裝redis

[[email protected] ~] wget http://download.redis.io/releases/redis-5.0.9.tar.gz

[[email protected] ~]yum -y install gcc jemalloc-devel

  [[email protected] ~]tar xvf redis-5.0.9.tar.gz

  [[email protected] ~]cd redis-5.0.9/

  [[email protected] redis-5.0.9]make PREFIX=/apps/redis install

  [[email protected] redis-5.0.9]tree /apps/redis/

馬哥門徒N57-SRE第二周MyCAT中間件服務實作讀寫分離ansible常用子產品總結ansible-playbook批量安裝httpd,按主機名提供不同的index.html(如node1的index.html歡迎頁面為welcome node1)編譯安裝redis

  [[email protected] redis-5.0.9]#ln -s /apps/redis/bin/* /usr/bin/

  [[email protected] redis-5.0.9] #mkdir /apps/redis/{etc,log,data,run}

   [[email protected] redis-5.0.9]#useradd -r -s /sbin/nologin redis

   [[email protected] redis-5.0.9]#chown redis.redis /apps/redis -R

修改啟動三個報錯:

[[email protected] redis-5.0.9]# vim /etc/sysctl.conf

[[email protected] redis-5.0.9]# sysctl -p

net.core.somaxconn = 1024

vm.overcommit_memory = 1

[[email protected] redis-5.0.9]# echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.d/rc.local

[[email protected] redis-5.0.9]# chmod +x /etc/rc.d/rc.local

[[email protected] redis-5.0.9]# cp redis.conf /apps/redis/etc/

[[email protected] redis-5.0.9]# chown -R redis.redis /apps/redis/

[[email protected] redis-5.0.9]# vim /apps/redis/etc/redis.conf

[[email protected] redis-5.0.9]# redis-server /apps/redis/etc/redis.conf

[[email protected] redis-5.0.9]# vim /apps/redis/etc/redis.conf

Bind0.0.0.0

daemonize yes

[[email protected] redis-5.0.9]# redis-server /apps/redis/etc/redis.conf

馬哥門徒N57-SRE第二周MyCAT中間件服務實作讀寫分離ansible常用子產品總結ansible-playbook批量安裝httpd,按主機名提供不同的index.html(如node1的index.html歡迎頁面為welcome node1)編譯安裝redis